First half of fix
Still doesn't work correctly for multiple merges
This commit is contained in:
parent
fd17f77cc9
commit
c49ef36964
|
@ -915,8 +915,11 @@ namespace ts {
|
||||||
}
|
}
|
||||||
if ((source.flags | target.flags) & SymbolFlags.JSContainer) {
|
if ((source.flags | target.flags) & SymbolFlags.JSContainer) {
|
||||||
const sourceInitializer = getJSInitializerSymbol(source);
|
const sourceInitializer = getJSInitializerSymbol(source);
|
||||||
const targetInitializer = getJSInitializerSymbol(target);
|
let targetInitializer = getJSInitializerSymbol(target);
|
||||||
if (sourceInitializer !== source || targetInitializer !== target) {
|
if (sourceInitializer !== source || targetInitializer !== target) {
|
||||||
|
if (!(targetInitializer.flags & SymbolFlags.Transient)) {
|
||||||
|
targetInitializer = cloneSymbol(targetInitializer);
|
||||||
|
}
|
||||||
mergeSymbol(targetInitializer, sourceInitializer);
|
mergeSymbol(targetInitializer, sourceInitializer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19452,7 +19455,7 @@ namespace ts {
|
||||||
}
|
}
|
||||||
|
|
||||||
const links = getNodeLinks(node);
|
const links = getNodeLinks(node);
|
||||||
const type = getTypeOfSymbol(node.symbol);
|
const type = getTypeOfSymbol(getMergedSymbol(node.symbol));
|
||||||
if (isTypeAny(type)) {
|
if (isTypeAny(type)) {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
=== tests/cases/conformance/salsa/def.js ===
|
=== tests/cases/conformance/salsa/def.js ===
|
||||||
var Outer = {};
|
var Outer = {};
|
||||||
>Outer : typeof Outer
|
>Outer : { [x: string]: any; Inner(): void; }
|
||||||
>{} : typeof Outer
|
>{} : { [x: string]: any; Inner(): void; }
|
||||||
|
|
||||||
=== tests/cases/conformance/salsa/work.js ===
|
=== tests/cases/conformance/salsa/work.js ===
|
||||||
Outer.Inner = function () {}
|
Outer.Inner = function () {}
|
||||||
>Outer.Inner = function () {} : () => void
|
>Outer.Inner = function () {} : () => void
|
||||||
>Outer.Inner : () => void
|
>Outer.Inner : () => void
|
||||||
>Outer : typeof Outer
|
>Outer : { [x: string]: any; Inner(): void; }
|
||||||
>Inner : () => void
|
>Inner : () => void
|
||||||
>function () {} : () => void
|
>function () {} : () => void
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Outer.Inner.prototype = {
|
||||||
>Outer.Inner.prototype = { x: 1, m() { }} : { [x: string]: any; x: number; m(): void; }
|
>Outer.Inner.prototype = { x: 1, m() { }} : { [x: string]: any; x: number; m(): void; }
|
||||||
>Outer.Inner.prototype : any
|
>Outer.Inner.prototype : any
|
||||||
>Outer.Inner : () => void
|
>Outer.Inner : () => void
|
||||||
>Outer : typeof Outer
|
>Outer : { [x: string]: any; Inner(): void; }
|
||||||
>Inner : () => void
|
>Inner : () => void
|
||||||
>prototype : any
|
>prototype : any
|
||||||
>{ x: 1, m() { }} : { [x: string]: any; x: number; m(): void; }
|
>{ x: 1, m() { }} : { [x: string]: any; x: number; m(): void; }
|
||||||
|
@ -48,7 +48,7 @@ var inno = new Outer.Inner()
|
||||||
>inno : { [x: string]: any; x: number; m(): void; }
|
>inno : { [x: string]: any; x: number; m(): void; }
|
||||||
>new Outer.Inner() : { [x: string]: any; x: number; m(): void; }
|
>new Outer.Inner() : { [x: string]: any; x: number; m(): void; }
|
||||||
>Outer.Inner : () => void
|
>Outer.Inner : () => void
|
||||||
>Outer : typeof Outer
|
>Outer : { [x: string]: any; Inner(): void; }
|
||||||
>Inner : () => void
|
>Inner : () => void
|
||||||
|
|
||||||
inno.x
|
inno.x
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
=== tests/cases/conformance/salsa/def.js ===
|
=== tests/cases/conformance/salsa/def.js ===
|
||||||
var Outer = {};
|
var Outer = {};
|
||||||
>Outer : typeof Outer
|
>Outer : { [x: string]: any; Inner: typeof Inner; }
|
||||||
>{} : typeof Outer
|
>{} : { [x: string]: any; Inner: typeof Inner; }
|
||||||
|
|
||||||
=== tests/cases/conformance/salsa/a.js ===
|
=== tests/cases/conformance/salsa/a.js ===
|
||||||
Outer.Inner = class {
|
Outer.Inner = class {
|
||||||
>Outer.Inner = class { constructor() { /** @type {number} */ this.y = 12 }} : typeof Inner
|
>Outer.Inner = class { constructor() { /** @type {number} */ this.y = 12 }} : typeof Inner
|
||||||
>Outer.Inner : typeof Inner
|
>Outer.Inner : typeof Inner
|
||||||
>Outer : typeof Outer
|
>Outer : { [x: string]: any; Inner: typeof Inner; }
|
||||||
>Inner : typeof Inner
|
>Inner : typeof Inner
|
||||||
>class { constructor() { /** @type {number} */ this.y = 12 }} : typeof Inner
|
>class { constructor() { /** @type {number} */ this.y = 12 }} : typeof Inner
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ var inner = new Outer.Inner()
|
||||||
>inner : Inner
|
>inner : Inner
|
||||||
>new Outer.Inner() : Inner
|
>new Outer.Inner() : Inner
|
||||||
>Outer.Inner : typeof Inner
|
>Outer.Inner : typeof Inner
|
||||||
>Outer : typeof Outer
|
>Outer : { [x: string]: any; Inner: typeof Inner; }
|
||||||
>Inner : typeof Inner
|
>Inner : typeof Inner
|
||||||
|
|
||||||
inner.y
|
inner.y
|
||||||
|
@ -57,7 +57,7 @@ var z = new Outer.Inner()
|
||||||
>z : Inner
|
>z : Inner
|
||||||
>new Outer.Inner() : Inner
|
>new Outer.Inner() : Inner
|
||||||
>Outer.Inner : typeof Inner
|
>Outer.Inner : typeof Inner
|
||||||
>Outer : typeof Outer
|
>Outer : { [x: string]: any; Inner: typeof Inner; }
|
||||||
>Inner : typeof Inner
|
>Inner : typeof Inner
|
||||||
|
|
||||||
z.y
|
z.y
|
||||||
|
|
Loading…
Reference in a new issue