Skip to content

Commit fecbae5

Browse files
authored
Fixed a regression in serializing setters with non-function declarations in JS files (#55492)
1 parent f07077c commit fecbae5

File tree

5 files changed

+521
-2
lines changed

5 files changed

+521
-2
lines changed

src/compiler/checker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9803,8 +9803,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
98039803
}
98049804
});
98059805

9806-
Debug.assert(setter && isFunctionLikeDeclaration(setter));
9807-
const paramSymbol: Symbol | undefined = getSignatureFromDeclaration(setter).parameters[0];
9806+
Debug.assert(!!setter);
9807+
const paramSymbol = isFunctionLikeDeclaration(setter) ? getSignatureFromDeclaration(setter).parameters[0] : undefined;
98089808

98099809
result.push(setTextRange(
98109810
factory.createSetAccessorDeclaration(

tests/baselines/reference/jsDeclarationsGetterSetter.js

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,63 @@ export class H {}
6161
Object.defineProperty(H.prototype, "x", {
6262
set() {}
6363
});
64+
65+
66+
export class I {}
67+
Object.defineProperty(I.prototype, "x", {
68+
/**
69+
* @param {number} v
70+
*/
71+
set: (v) => {}
72+
});
73+
74+
/**
75+
* @param {number} v
76+
*/
77+
const jSetter = (v) => {}
78+
export class J {}
79+
Object.defineProperty(J.prototype, "x", {
80+
set: jSetter
81+
});
82+
83+
/**
84+
* @param {number} v
85+
*/
86+
const kSetter1 = (v) => {}
87+
/**
88+
* @param {number} v
89+
*/
90+
const kSetter2 = (v) => {}
91+
export class K {}
92+
Object.defineProperty(K.prototype, "x", {
93+
set: Math.random() ? kSetter1 : kSetter2
94+
});
95+
96+
/**
97+
* @param {number} v
98+
*/
99+
const lSetter1 = (v) => {}
100+
/**
101+
* @param {string} v
102+
*/
103+
const lSetter2 = (v) => {}
104+
export class L {}
105+
Object.defineProperty(L.prototype, "x", {
106+
set: Math.random() ? lSetter1 : lSetter2
107+
});
108+
109+
/**
110+
* @param {number | boolean} v
111+
*/
112+
const mSetter1 = (v) => {}
113+
/**
114+
* @param {string | boolean} v
115+
*/
116+
const mSetter2 = (v) => {}
117+
export class M {}
118+
Object.defineProperty(M.prototype, "x", {
119+
set: Math.random() ? mSetter1 : mSetter2
120+
});
64121

65122

66123
//// [index.js]
@@ -122,6 +179,62 @@ export class H {
122179
Object.defineProperty(H.prototype, "x", {
123180
set() { }
124181
});
182+
export class I {
183+
}
184+
Object.defineProperty(I.prototype, "x", {
185+
/**
186+
* @param {number} v
187+
*/
188+
set: (v) => { }
189+
});
190+
/**
191+
* @param {number} v
192+
*/
193+
const jSetter = (v) => { };
194+
export class J {
195+
}
196+
Object.defineProperty(J.prototype, "x", {
197+
set: jSetter
198+
});
199+
/**
200+
* @param {number} v
201+
*/
202+
const kSetter1 = (v) => { };
203+
/**
204+
* @param {number} v
205+
*/
206+
const kSetter2 = (v) => { };
207+
export class K {
208+
}
209+
Object.defineProperty(K.prototype, "x", {
210+
set: Math.random() ? kSetter1 : kSetter2
211+
});
212+
/**
213+
* @param {number} v
214+
*/
215+
const lSetter1 = (v) => { };
216+
/**
217+
* @param {string} v
218+
*/
219+
const lSetter2 = (v) => { };
220+
export class L {
221+
}
222+
Object.defineProperty(L.prototype, "x", {
223+
set: Math.random() ? lSetter1 : lSetter2
224+
});
225+
/**
226+
* @param {number | boolean} v
227+
*/
228+
const mSetter1 = (v) => { };
229+
/**
230+
* @param {string | boolean} v
231+
*/
232+
const mSetter2 = (v) => { };
233+
export class M {
234+
}
235+
Object.defineProperty(M.prototype, "x", {
236+
set: Math.random() ? mSetter1 : mSetter2
237+
});
125238

126239

127240
//// [index.d.ts]
@@ -154,3 +267,18 @@ export class G {
154267
export class H {
155268
set x(value: any);
156269
}
270+
export class I {
271+
set x(value: number);
272+
}
273+
export class J {
274+
set x(value: number);
275+
}
276+
export class K {
277+
set x(value: number);
278+
}
279+
export class L {
280+
set x(value: any);
281+
}
282+
export class M {
283+
set x(value: any);
284+
}

tests/baselines/reference/jsDeclarationsGetterSetter.symbols

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,158 @@ Object.defineProperty(H.prototype, "x", {
141141

142142
});
143143

144+
145+
export class I {}
146+
>I : Symbol(I, Decl(index.js, 59, 3))
147+
148+
Object.defineProperty(I.prototype, "x", {
149+
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
150+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
151+
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
152+
>I.prototype : Symbol(I.prototype)
153+
>I : Symbol(I, Decl(index.js, 59, 3))
154+
>prototype : Symbol(I.prototype)
155+
>"x" : Symbol(I.x, Decl(index.js, 62, 17))
156+
157+
/**
158+
* @param {number} v
159+
*/
160+
set: (v) => {}
161+
>set : Symbol(set, Decl(index.js, 63, 41))
162+
>v : Symbol(v, Decl(index.js, 67, 10))
163+
164+
});
165+
166+
/**
167+
* @param {number} v
168+
*/
169+
const jSetter = (v) => {}
170+
>jSetter : Symbol(jSetter, Decl(index.js, 73, 5))
171+
>v : Symbol(v, Decl(index.js, 73, 17))
172+
173+
export class J {}
174+
>J : Symbol(J, Decl(index.js, 73, 25))
175+
176+
Object.defineProperty(J.prototype, "x", {
177+
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
178+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
179+
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
180+
>J.prototype : Symbol(J.prototype)
181+
>J : Symbol(J, Decl(index.js, 73, 25))
182+
>prototype : Symbol(J.prototype)
183+
>"x" : Symbol(J.x, Decl(index.js, 74, 17))
184+
185+
set: jSetter
186+
>set : Symbol(set, Decl(index.js, 75, 41))
187+
>jSetter : Symbol(jSetter, Decl(index.js, 73, 5))
188+
189+
});
190+
191+
/**
192+
* @param {number} v
193+
*/
194+
const kSetter1 = (v) => {}
195+
>kSetter1 : Symbol(kSetter1, Decl(index.js, 82, 5))
196+
>v : Symbol(v, Decl(index.js, 82, 18))
197+
198+
/**
199+
* @param {number} v
200+
*/
201+
const kSetter2 = (v) => {}
202+
>kSetter2 : Symbol(kSetter2, Decl(index.js, 86, 5))
203+
>v : Symbol(v, Decl(index.js, 86, 18))
204+
205+
export class K {}
206+
>K : Symbol(K, Decl(index.js, 86, 26))
207+
208+
Object.defineProperty(K.prototype, "x", {
209+
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
210+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
211+
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
212+
>K.prototype : Symbol(K.prototype)
213+
>K : Symbol(K, Decl(index.js, 86, 26))
214+
>prototype : Symbol(K.prototype)
215+
>"x" : Symbol(K.x, Decl(index.js, 87, 17))
216+
217+
set: Math.random() ? kSetter1 : kSetter2
218+
>set : Symbol(set, Decl(index.js, 88, 41))
219+
>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
220+
>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
221+
>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
222+
>kSetter1 : Symbol(kSetter1, Decl(index.js, 82, 5))
223+
>kSetter2 : Symbol(kSetter2, Decl(index.js, 86, 5))
224+
225+
});
226+
227+
/**
228+
* @param {number} v
229+
*/
230+
const lSetter1 = (v) => {}
231+
>lSetter1 : Symbol(lSetter1, Decl(index.js, 95, 5))
232+
>v : Symbol(v, Decl(index.js, 95, 18))
233+
234+
/**
235+
* @param {string} v
236+
*/
237+
const lSetter2 = (v) => {}
238+
>lSetter2 : Symbol(lSetter2, Decl(index.js, 99, 5))
239+
>v : Symbol(v, Decl(index.js, 99, 18))
240+
241+
export class L {}
242+
>L : Symbol(L, Decl(index.js, 99, 26))
243+
244+
Object.defineProperty(L.prototype, "x", {
245+
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
246+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
247+
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
248+
>L.prototype : Symbol(L.prototype)
249+
>L : Symbol(L, Decl(index.js, 99, 26))
250+
>prototype : Symbol(L.prototype)
251+
>"x" : Symbol(L.x, Decl(index.js, 100, 17))
252+
253+
set: Math.random() ? lSetter1 : lSetter2
254+
>set : Symbol(set, Decl(index.js, 101, 41))
255+
>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
256+
>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
257+
>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
258+
>lSetter1 : Symbol(lSetter1, Decl(index.js, 95, 5))
259+
>lSetter2 : Symbol(lSetter2, Decl(index.js, 99, 5))
260+
261+
});
262+
263+
/**
264+
* @param {number | boolean} v
265+
*/
266+
const mSetter1 = (v) => {}
267+
>mSetter1 : Symbol(mSetter1, Decl(index.js, 108, 5))
268+
>v : Symbol(v, Decl(index.js, 108, 18))
269+
270+
/**
271+
* @param {string | boolean} v
272+
*/
273+
const mSetter2 = (v) => {}
274+
>mSetter2 : Symbol(mSetter2, Decl(index.js, 112, 5))
275+
>v : Symbol(v, Decl(index.js, 112, 18))
276+
277+
export class M {}
278+
>M : Symbol(M, Decl(index.js, 112, 26))
279+
280+
Object.defineProperty(M.prototype, "x", {
281+
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
282+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
283+
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
284+
>M.prototype : Symbol(M.prototype)
285+
>M : Symbol(M, Decl(index.js, 112, 26))
286+
>prototype : Symbol(M.prototype)
287+
>"x" : Symbol(M.x, Decl(index.js, 113, 17))
288+
289+
set: Math.random() ? mSetter1 : mSetter2
290+
>set : Symbol(set, Decl(index.js, 114, 41))
291+
>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
292+
>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
293+
>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
294+
>mSetter1 : Symbol(mSetter1, Decl(index.js, 108, 5))
295+
>mSetter2 : Symbol(mSetter2, Decl(index.js, 112, 5))
296+
297+
});
298+

0 commit comments

Comments
 (0)