mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-03-03 17:53:56 -06:00
Fixed a regression in serializing setters with non-function declarations in JS files (#55492)
This commit is contained in:
parent
f07077c7ff
commit
fecbae5d2e
@ -9803,8 +9803,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
}
|
||||
});
|
||||
|
||||
Debug.assert(setter && isFunctionLikeDeclaration(setter));
|
||||
const paramSymbol: Symbol | undefined = getSignatureFromDeclaration(setter).parameters[0];
|
||||
Debug.assert(!!setter);
|
||||
const paramSymbol = isFunctionLikeDeclaration(setter) ? getSignatureFromDeclaration(setter).parameters[0] : undefined;
|
||||
|
||||
result.push(setTextRange(
|
||||
factory.createSetAccessorDeclaration(
|
||||
|
||||
@ -61,6 +61,63 @@ export class H {}
|
||||
Object.defineProperty(H.prototype, "x", {
|
||||
set() {}
|
||||
});
|
||||
|
||||
|
||||
export class I {}
|
||||
Object.defineProperty(I.prototype, "x", {
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
set: (v) => {}
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const jSetter = (v) => {}
|
||||
export class J {}
|
||||
Object.defineProperty(J.prototype, "x", {
|
||||
set: jSetter
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter1 = (v) => {}
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter2 = (v) => {}
|
||||
export class K {}
|
||||
Object.defineProperty(K.prototype, "x", {
|
||||
set: Math.random() ? kSetter1 : kSetter2
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const lSetter1 = (v) => {}
|
||||
/**
|
||||
* @param {string} v
|
||||
*/
|
||||
const lSetter2 = (v) => {}
|
||||
export class L {}
|
||||
Object.defineProperty(L.prototype, "x", {
|
||||
set: Math.random() ? lSetter1 : lSetter2
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number | boolean} v
|
||||
*/
|
||||
const mSetter1 = (v) => {}
|
||||
/**
|
||||
* @param {string | boolean} v
|
||||
*/
|
||||
const mSetter2 = (v) => {}
|
||||
export class M {}
|
||||
Object.defineProperty(M.prototype, "x", {
|
||||
set: Math.random() ? mSetter1 : mSetter2
|
||||
});
|
||||
|
||||
|
||||
//// [index.js]
|
||||
@ -122,6 +179,62 @@ export class H {
|
||||
Object.defineProperty(H.prototype, "x", {
|
||||
set() { }
|
||||
});
|
||||
export class I {
|
||||
}
|
||||
Object.defineProperty(I.prototype, "x", {
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
set: (v) => { }
|
||||
});
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const jSetter = (v) => { };
|
||||
export class J {
|
||||
}
|
||||
Object.defineProperty(J.prototype, "x", {
|
||||
set: jSetter
|
||||
});
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter1 = (v) => { };
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter2 = (v) => { };
|
||||
export class K {
|
||||
}
|
||||
Object.defineProperty(K.prototype, "x", {
|
||||
set: Math.random() ? kSetter1 : kSetter2
|
||||
});
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const lSetter1 = (v) => { };
|
||||
/**
|
||||
* @param {string} v
|
||||
*/
|
||||
const lSetter2 = (v) => { };
|
||||
export class L {
|
||||
}
|
||||
Object.defineProperty(L.prototype, "x", {
|
||||
set: Math.random() ? lSetter1 : lSetter2
|
||||
});
|
||||
/**
|
||||
* @param {number | boolean} v
|
||||
*/
|
||||
const mSetter1 = (v) => { };
|
||||
/**
|
||||
* @param {string | boolean} v
|
||||
*/
|
||||
const mSetter2 = (v) => { };
|
||||
export class M {
|
||||
}
|
||||
Object.defineProperty(M.prototype, "x", {
|
||||
set: Math.random() ? mSetter1 : mSetter2
|
||||
});
|
||||
|
||||
|
||||
//// [index.d.ts]
|
||||
@ -154,3 +267,18 @@ export class G {
|
||||
export class H {
|
||||
set x(value: any);
|
||||
}
|
||||
export class I {
|
||||
set x(value: number);
|
||||
}
|
||||
export class J {
|
||||
set x(value: number);
|
||||
}
|
||||
export class K {
|
||||
set x(value: number);
|
||||
}
|
||||
export class L {
|
||||
set x(value: any);
|
||||
}
|
||||
export class M {
|
||||
set x(value: any);
|
||||
}
|
||||
|
||||
@ -141,3 +141,158 @@ Object.defineProperty(H.prototype, "x", {
|
||||
|
||||
});
|
||||
|
||||
|
||||
export class I {}
|
||||
>I : Symbol(I, Decl(index.js, 59, 3))
|
||||
|
||||
Object.defineProperty(I.prototype, "x", {
|
||||
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>I.prototype : Symbol(I.prototype)
|
||||
>I : Symbol(I, Decl(index.js, 59, 3))
|
||||
>prototype : Symbol(I.prototype)
|
||||
>"x" : Symbol(I.x, Decl(index.js, 62, 17))
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
set: (v) => {}
|
||||
>set : Symbol(set, Decl(index.js, 63, 41))
|
||||
>v : Symbol(v, Decl(index.js, 67, 10))
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const jSetter = (v) => {}
|
||||
>jSetter : Symbol(jSetter, Decl(index.js, 73, 5))
|
||||
>v : Symbol(v, Decl(index.js, 73, 17))
|
||||
|
||||
export class J {}
|
||||
>J : Symbol(J, Decl(index.js, 73, 25))
|
||||
|
||||
Object.defineProperty(J.prototype, "x", {
|
||||
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>J.prototype : Symbol(J.prototype)
|
||||
>J : Symbol(J, Decl(index.js, 73, 25))
|
||||
>prototype : Symbol(J.prototype)
|
||||
>"x" : Symbol(J.x, Decl(index.js, 74, 17))
|
||||
|
||||
set: jSetter
|
||||
>set : Symbol(set, Decl(index.js, 75, 41))
|
||||
>jSetter : Symbol(jSetter, Decl(index.js, 73, 5))
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter1 = (v) => {}
|
||||
>kSetter1 : Symbol(kSetter1, Decl(index.js, 82, 5))
|
||||
>v : Symbol(v, Decl(index.js, 82, 18))
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter2 = (v) => {}
|
||||
>kSetter2 : Symbol(kSetter2, Decl(index.js, 86, 5))
|
||||
>v : Symbol(v, Decl(index.js, 86, 18))
|
||||
|
||||
export class K {}
|
||||
>K : Symbol(K, Decl(index.js, 86, 26))
|
||||
|
||||
Object.defineProperty(K.prototype, "x", {
|
||||
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>K.prototype : Symbol(K.prototype)
|
||||
>K : Symbol(K, Decl(index.js, 86, 26))
|
||||
>prototype : Symbol(K.prototype)
|
||||
>"x" : Symbol(K.x, Decl(index.js, 87, 17))
|
||||
|
||||
set: Math.random() ? kSetter1 : kSetter2
|
||||
>set : Symbol(set, Decl(index.js, 88, 41))
|
||||
>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
|
||||
>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, --, --))
|
||||
>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
|
||||
>kSetter1 : Symbol(kSetter1, Decl(index.js, 82, 5))
|
||||
>kSetter2 : Symbol(kSetter2, Decl(index.js, 86, 5))
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const lSetter1 = (v) => {}
|
||||
>lSetter1 : Symbol(lSetter1, Decl(index.js, 95, 5))
|
||||
>v : Symbol(v, Decl(index.js, 95, 18))
|
||||
|
||||
/**
|
||||
* @param {string} v
|
||||
*/
|
||||
const lSetter2 = (v) => {}
|
||||
>lSetter2 : Symbol(lSetter2, Decl(index.js, 99, 5))
|
||||
>v : Symbol(v, Decl(index.js, 99, 18))
|
||||
|
||||
export class L {}
|
||||
>L : Symbol(L, Decl(index.js, 99, 26))
|
||||
|
||||
Object.defineProperty(L.prototype, "x", {
|
||||
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>L.prototype : Symbol(L.prototype)
|
||||
>L : Symbol(L, Decl(index.js, 99, 26))
|
||||
>prototype : Symbol(L.prototype)
|
||||
>"x" : Symbol(L.x, Decl(index.js, 100, 17))
|
||||
|
||||
set: Math.random() ? lSetter1 : lSetter2
|
||||
>set : Symbol(set, Decl(index.js, 101, 41))
|
||||
>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
|
||||
>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, --, --))
|
||||
>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
|
||||
>lSetter1 : Symbol(lSetter1, Decl(index.js, 95, 5))
|
||||
>lSetter2 : Symbol(lSetter2, Decl(index.js, 99, 5))
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number | boolean} v
|
||||
*/
|
||||
const mSetter1 = (v) => {}
|
||||
>mSetter1 : Symbol(mSetter1, Decl(index.js, 108, 5))
|
||||
>v : Symbol(v, Decl(index.js, 108, 18))
|
||||
|
||||
/**
|
||||
* @param {string | boolean} v
|
||||
*/
|
||||
const mSetter2 = (v) => {}
|
||||
>mSetter2 : Symbol(mSetter2, Decl(index.js, 112, 5))
|
||||
>v : Symbol(v, Decl(index.js, 112, 18))
|
||||
|
||||
export class M {}
|
||||
>M : Symbol(M, Decl(index.js, 112, 26))
|
||||
|
||||
Object.defineProperty(M.prototype, "x", {
|
||||
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
|
||||
>M.prototype : Symbol(M.prototype)
|
||||
>M : Symbol(M, Decl(index.js, 112, 26))
|
||||
>prototype : Symbol(M.prototype)
|
||||
>"x" : Symbol(M.x, Decl(index.js, 113, 17))
|
||||
|
||||
set: Math.random() ? mSetter1 : mSetter2
|
||||
>set : Symbol(set, Decl(index.js, 114, 41))
|
||||
>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
|
||||
>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, --, --))
|
||||
>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
|
||||
>mSetter1 : Symbol(mSetter1, Decl(index.js, 108, 5))
|
||||
>mSetter2 : Symbol(mSetter2, Decl(index.js, 112, 5))
|
||||
|
||||
});
|
||||
|
||||
|
||||
@ -156,3 +156,182 @@ Object.defineProperty(H.prototype, "x", {
|
||||
|
||||
});
|
||||
|
||||
|
||||
export class I {}
|
||||
>I : I
|
||||
|
||||
Object.defineProperty(I.prototype, "x", {
|
||||
>Object.defineProperty(I.prototype, "x", { /** * @param {number} v */ set: (v) => {}}) : I
|
||||
>Object.defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>Object : ObjectConstructor
|
||||
>defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>I.prototype : I
|
||||
>I : typeof I
|
||||
>prototype : I
|
||||
>"x" : "x"
|
||||
>{ /** * @param {number} v */ set: (v) => {}} : { set: (v: number) => void; }
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
set: (v) => {}
|
||||
>set : (v: number) => void
|
||||
>(v) => {} : (v: number) => void
|
||||
>v : number
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const jSetter = (v) => {}
|
||||
>jSetter : (v: number) => void
|
||||
>(v) => {} : (v: number) => void
|
||||
>v : number
|
||||
|
||||
export class J {}
|
||||
>J : J
|
||||
|
||||
Object.defineProperty(J.prototype, "x", {
|
||||
>Object.defineProperty(J.prototype, "x", { set: jSetter}) : J
|
||||
>Object.defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>Object : ObjectConstructor
|
||||
>defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>J.prototype : J
|
||||
>J : typeof J
|
||||
>prototype : J
|
||||
>"x" : "x"
|
||||
>{ set: jSetter} : { set: (v: number) => void; }
|
||||
|
||||
set: jSetter
|
||||
>set : (v: number) => void
|
||||
>jSetter : (v: number) => void
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter1 = (v) => {}
|
||||
>kSetter1 : (v: number) => void
|
||||
>(v) => {} : (v: number) => void
|
||||
>v : number
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter2 = (v) => {}
|
||||
>kSetter2 : (v: number) => void
|
||||
>(v) => {} : (v: number) => void
|
||||
>v : number
|
||||
|
||||
export class K {}
|
||||
>K : K
|
||||
|
||||
Object.defineProperty(K.prototype, "x", {
|
||||
>Object.defineProperty(K.prototype, "x", { set: Math.random() ? kSetter1 : kSetter2}) : K
|
||||
>Object.defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>Object : ObjectConstructor
|
||||
>defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>K.prototype : K
|
||||
>K : typeof K
|
||||
>prototype : K
|
||||
>"x" : "x"
|
||||
>{ set: Math.random() ? kSetter1 : kSetter2} : { set: (v: number) => void; }
|
||||
|
||||
set: Math.random() ? kSetter1 : kSetter2
|
||||
>set : (v: number) => void
|
||||
>Math.random() ? kSetter1 : kSetter2 : (v: number) => void
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>kSetter1 : (v: number) => void
|
||||
>kSetter2 : (v: number) => void
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const lSetter1 = (v) => {}
|
||||
>lSetter1 : (v: number) => void
|
||||
>(v) => {} : (v: number) => void
|
||||
>v : number
|
||||
|
||||
/**
|
||||
* @param {string} v
|
||||
*/
|
||||
const lSetter2 = (v) => {}
|
||||
>lSetter2 : (v: string) => void
|
||||
>(v) => {} : (v: string) => void
|
||||
>v : string
|
||||
|
||||
export class L {}
|
||||
>L : L
|
||||
|
||||
Object.defineProperty(L.prototype, "x", {
|
||||
>Object.defineProperty(L.prototype, "x", { set: Math.random() ? lSetter1 : lSetter2}) : L
|
||||
>Object.defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>Object : ObjectConstructor
|
||||
>defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>L.prototype : L
|
||||
>L : typeof L
|
||||
>prototype : L
|
||||
>"x" : "x"
|
||||
>{ set: Math.random() ? lSetter1 : lSetter2} : { set: ((v: number) => void) | ((v: string) => void); }
|
||||
|
||||
set: Math.random() ? lSetter1 : lSetter2
|
||||
>set : ((v: number) => void) | ((v: string) => void)
|
||||
>Math.random() ? lSetter1 : lSetter2 : ((v: number) => void) | ((v: string) => void)
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>lSetter1 : (v: number) => void
|
||||
>lSetter2 : (v: string) => void
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number | boolean} v
|
||||
*/
|
||||
const mSetter1 = (v) => {}
|
||||
>mSetter1 : (v: number | boolean) => void
|
||||
>(v) => {} : (v: number | boolean) => void
|
||||
>v : number | boolean
|
||||
|
||||
/**
|
||||
* @param {string | boolean} v
|
||||
*/
|
||||
const mSetter2 = (v) => {}
|
||||
>mSetter2 : (v: string | boolean) => void
|
||||
>(v) => {} : (v: string | boolean) => void
|
||||
>v : string | boolean
|
||||
|
||||
export class M {}
|
||||
>M : M
|
||||
|
||||
Object.defineProperty(M.prototype, "x", {
|
||||
>Object.defineProperty(M.prototype, "x", { set: Math.random() ? mSetter1 : mSetter2}) : M
|
||||
>Object.defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>Object : ObjectConstructor
|
||||
>defineProperty : <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T
|
||||
>M.prototype : M
|
||||
>M : typeof M
|
||||
>prototype : M
|
||||
>"x" : "x"
|
||||
>{ set: Math.random() ? mSetter1 : mSetter2} : { set: ((v: number | boolean) => void) | ((v: string | boolean) => void); }
|
||||
|
||||
set: Math.random() ? mSetter1 : mSetter2
|
||||
>set : ((v: number | boolean) => void) | ((v: string | boolean) => void)
|
||||
>Math.random() ? mSetter1 : mSetter2 : ((v: number | boolean) => void) | ((v: string | boolean) => void)
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>mSetter1 : (v: number | boolean) => void
|
||||
>mSetter2 : (v: string | boolean) => void
|
||||
|
||||
});
|
||||
|
||||
|
||||
@ -64,3 +64,60 @@ export class H {}
|
||||
Object.defineProperty(H.prototype, "x", {
|
||||
set() {}
|
||||
});
|
||||
|
||||
|
||||
export class I {}
|
||||
Object.defineProperty(I.prototype, "x", {
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
set: (v) => {}
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const jSetter = (v) => {}
|
||||
export class J {}
|
||||
Object.defineProperty(J.prototype, "x", {
|
||||
set: jSetter
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter1 = (v) => {}
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const kSetter2 = (v) => {}
|
||||
export class K {}
|
||||
Object.defineProperty(K.prototype, "x", {
|
||||
set: Math.random() ? kSetter1 : kSetter2
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number} v
|
||||
*/
|
||||
const lSetter1 = (v) => {}
|
||||
/**
|
||||
* @param {string} v
|
||||
*/
|
||||
const lSetter2 = (v) => {}
|
||||
export class L {}
|
||||
Object.defineProperty(L.prototype, "x", {
|
||||
set: Math.random() ? lSetter1 : lSetter2
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {number | boolean} v
|
||||
*/
|
||||
const mSetter1 = (v) => {}
|
||||
/**
|
||||
* @param {string | boolean} v
|
||||
*/
|
||||
const mSetter2 = (v) => {}
|
||||
export class M {}
|
||||
Object.defineProperty(M.prototype, "x", {
|
||||
set: Math.random() ? mSetter1 : mSetter2
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user