From b77edd82f855ead706b6ff2f3279485b0663804a Mon Sep 17 00:00:00 2001 From: kingwl Date: Sat, 6 Mar 2021 16:56:59 +0800 Subject: [PATCH 01/33] use emit into iife --- src/compiler/parser.ts | 2 +- src/compiler/transformers/classFields.ts | 31 ++- ...ticVariableAndExportedVarThatShareAName.js | 8 +- ...VariableAndNonExportedVarThatShareAName.js | 8 +- ...onWithInvalidConstOnPropertyDeclaration.js | 4 +- .../amdImportNotAsPrimaryExpression.js | 4 +- .../reference/asyncArrowInClassES5.js | 10 +- .../reference/asyncAwaitNestedClasses_es5.js | 52 ++-- tests/baselines/reference/autolift4.js | 4 +- .../reference/awaitAndYieldInProperty.js | 6 +- .../blockScopedNamespaceDifferentFile.js | 6 +- .../blockScopedVariablesUseBeforeDef.js | 4 +- tests/baselines/reference/class2.js | 4 +- .../baselines/reference/classBlockScoping.js | 4 +- ...rationCheckUsedBeforeDefinitionInItself.js | 4 +- ...rationShouldBeOutOfScopeInComputedNames.js | 10 +- ...lassExpressionInClassStaticDeclarations.js | 16 +- .../classExpressionWithDecorator1.js | 4 +- .../reference/classInConvertedLoopES5.js | 4 +- .../classMemberInitializerScoping.js | 4 +- .../classMemberInitializerWithLamdaScoping.js | 18 +- ...tializersUsePropertiesBeforeDeclaration.js | 8 +- .../reference/classStaticPropertyAccess.js | 8 +- .../reference/classWithPrivateProperty.js | 4 +- .../reference/classWithProtectedProperty.js | 4 +- .../reference/classWithPublicProperty.js | 4 +- .../reference/cloduleStaticMembers.js | 6 +- .../reference/commentsOnStaticMembers.js | 18 +- .../commonJSImportAsPrimaryExpression.js | 4 +- .../commonJSImportNotAsPrimaryExpression.js | 4 +- .../reference/computedPropertyNames12_ES5.js | 4 +- .../reference/computedPropertyNames12_ES6.js | 4 +- ...computedPropertyNamesWithStaticProperty.js | 4 +- .../reference/declFilePrivateStatic.js | 6 +- ...arationEmitLocalClassHasRequiredDeclare.js | 4 +- .../declarationEmitPrivateReadonlyLiterals.js | 6 +- .../declarationNoDanglingGenerics.js | 8 +- .../decoratedClassExportsCommonJS1.js | 4 +- .../reference/decoratedClassExportsSystem1.js | 4 +- .../reference/decoratorOnClass5.es6.js | 4 +- .../reference/decoratorOnClass6.es6.js | 4 +- .../reference/decoratorOnClass7.es6.js | 4 +- .../reference/decoratorOnClass8.es6.js | 4 +- .../baselines/reference/decoratorOnClass9.js | 6 +- .../defaultDeclarationEmitNamedCorrectly.js | 4 +- ...DeclarationWithLiteralPropertyNameInES6.js | 10 +- ...rationWithStaticPropertyAssignmentInES6.js | 8 +- tests/baselines/reference/errorSuperCalls.js | 6 +- .../reference/errorSuperPropertyAccess.js | 6 +- .../reference/es3defaultAliasIsQuoted.js | 4 +- tests/baselines/reference/es6ClassTest.js | 4 +- tests/baselines/reference/es6ClassTest2.js | 4 +- .../reference/es6ModuleClassDeclaration.js | 36 ++- .../reference/es6modulekindWithES5Target.js | 8 +- .../reference/es6modulekindWithES5Target11.js | 4 +- .../reference/es6modulekindWithES5Target2.js | 4 +- .../reference/es6modulekindWithES5Target3.js | 4 +- .../esnextmodulekindWithES5Target.js | 8 +- .../esnextmodulekindWithES5Target11.js | 4 +- .../esnextmodulekindWithES5Target2.js | 4 +- .../esnextmodulekindWithES5Target3.js | 4 +- ...ClassWithStaticPropertyAssignmentsInES6.js | 4 +- .../exportDefaultQualifiedNameNoError.js | 4 +- tests/baselines/reference/extendFromAny.js | 4 +- .../reference/forwardRefInClassProperties.js | 6 +- .../reference/generatedContextualTyping.js | 144 ++++++++--- .../reference/generatorTypeCheck58.js | 4 +- ...nericClassWithStaticsUsingTypeArguments.js | 10 +- .../baselines/reference/gettersAndSetters.js | 4 +- .../reference/importImportOnlyModule.js | 4 +- .../inferringClassMembersFromAssignments.js | 20 +- .../instanceAndStaticDeclarations1.js | 4 +- .../reference/invalidNewTarget.es5.js | 5 +- .../reference/invalidNewTarget.es6.js | 4 +- .../baselines/reference/invalidStaticField.js | 4 +- .../reference/jsDeclarationsClasses.js | 20 +- .../reference/jsDeclarationsComputedNames.js | 4 +- .../reference/jsDeclarationsDefaultsErr.js | 4 +- ...eclarationsExportAssignedClassInstance2.js | 4 +- ...eclarationsExportAssignedClassInstance3.js | 4 +- tests/baselines/reference/newTarget.es5.js | 10 +- tests/baselines/reference/newTarget.es6.js | 4 +- .../parserAccessibilityAfterStatic3.js | 4 +- ...ErrorRecovery_IncompleteMemberVariable1.js | 6 +- ...ErrorRecovery_IncompleteMemberVariable2.js | 6 +- tests/baselines/reference/parserharness.js | 8 +- .../privacyCannotNameVarTypeDeclFile.js | 32 ++- ...NameAndStaticInitializer(target=es2015).js | 4 +- ...NameAndStaticInitializer(target=esnext).js | 4 +- .../privateNameES5Ban(target=es3).js | 4 +- .../privateNameES5Ban(target=es5).js | 4 +- .../reference/privateNameFieldsESNext.js | 4 +- .../privateNamesConstructorChain-1.js | 4 +- .../privateNamesConstructorChain-2.js | 4 +- .../privateNamesInNestedClasses-2.js | 4 +- .../reference/privateNamesUnique-3.js | 8 +- .../privateStaticMemberAccessibility.js | 4 +- .../reference/propertyAccessibility2.js | 4 +- .../reference/quotedPropertyName2.js | 4 +- .../reactDefaultPropsInferenceSuccess.js | 24 +- .../baselines/reference/reassignStaticProp.js | 4 +- ...PredicateIsInstantiateInContextOfTarget.js | 8 +- .../reference/scopeCheckStaticInitializer.js | 16 +- .../reference/sourceMap-FileWithComments.js | 6 +- .../sourceMap-FileWithComments.js.map | 4 +- .../sourceMap-FileWithComments.sourcemap.txt | 214 ++++++++-------- .../sourceMapValidationDecorators.js | 4 +- .../sourceMapValidationDecorators.js.map | 4 +- ...ourceMapValidationDecorators.sourcemap.txt | 234 +++++++++--------- ...nonymousTypeNotReferencingTypeParameter.js | 4 +- tests/baselines/reference/staticClassProps.js | 4 +- .../staticMemberAccessOffDerivedType1.js | 4 +- .../reference/staticMemberInitialization.js | 4 +- .../staticMemberWithStringAndNumberNames.js | 12 +- .../reference/staticModifierAlreadySeen.js | 4 +- tests/baselines/reference/staticPropSuper.js | 4 +- tests/baselines/reference/statics.js | 8 +- .../reference/staticsInConstructorBodies.js | 4 +- .../reference/staticsNotInScopeInClodule.js | 4 +- .../reference/strictModeInConstructor.js | 12 +- tests/baselines/reference/superAccess.js | 4 +- tests/baselines/reference/superAccess2.js | 4 +- .../reference/symbolDeclarationEmit11.js | 4 +- .../reference/systemModuleTargetES6.js | 4 +- ...thisInArrowFunctionInStaticInitializer1.js | 12 +- .../reference/thisInConstructorParameter2.js | 4 +- .../reference/thisInInvalidContexts.js | 4 +- .../thisInInvalidContextsExternalModule.js | 4 +- .../reference/thisInOuterClassBody.js | 4 +- .../thisInPropertyBoundDeclarations.js | 12 +- .../reference/thisInStaticMethod1.js | 4 +- .../reference/thisTypeAccessibility.js | 8 +- tests/baselines/reference/thisTypeErrors.js | 4 +- ...rectly.rewrittenNamespaceFollowingClass.js | 4 +- ...rrectly.transformAddCommentToProperties.js | 6 +- .../baselines/reference/tsxDefaultImports.js | 4 +- .../reference/tsxLibraryManagedAttributes.js | 72 +++--- tests/baselines/reference/typeOfPrototype.js | 4 +- .../reference/typeOfThisInStaticMembers2.js | 8 +- ...InStaticMembers3(target=es2020).errors.txt | 26 ++ ...peOfThisInStaticMembers3(target=es2020).js | 27 ++ ...hisInStaticMembers3(target=es2020).symbols | 34 +++ ...fThisInStaticMembers3(target=es2020).types | 46 ++++ ...hisInStaticMembers3(target=es5).errors.txt | 26 ++ .../typeOfThisInStaticMembers3(target=es5).js | 50 ++++ ...OfThisInStaticMembers3(target=es5).symbols | 34 +++ ...peOfThisInStaticMembers3(target=es5).types | 46 ++++ ...hisInStaticMembers3(target=es6).errors.txt | 26 ++ .../typeOfThisInStaticMembers3(target=es6).js | 27 ++ ...OfThisInStaticMembers3(target=es6).symbols | 34 +++ ...peOfThisInStaticMembers3(target=es6).types | 46 ++++ ...InStaticMembers3(target=esnext).errors.txt | 26 ++ ...peOfThisInStaticMembers3(target=esnext).js | 27 ++ ...hisInStaticMembers3(target=esnext).symbols | 34 +++ ...fThisInStaticMembers3(target=esnext).types | 46 ++++ tests/baselines/reference/typeQueryOnClass.js | 6 +- .../reference/typeofUsedBeforeBlockScoped.js | 4 +- tests/baselines/reference/uniqueSymbols.js | 22 +- .../reference/uniqueSymbolsDeclarations.js | 22 +- .../uniqueSymbolsDeclarationsInJs.js | 22 +- .../unqualifiedCallToClassStatic1.js | 10 +- .../reference/useBeforeDeclaration_jsx.js | 18 +- ...useBeforeDeclaration_propertyAssignment.js | 18 +- tests/baselines/reference/witness.js | 4 +- .../typeOfThisInStaticMembers3.ts | 11 + 165 files changed, 1645 insertions(+), 633 deletions(-) create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).types create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 3c1c118b5b33a..e77bde3213d60 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6440,7 +6440,7 @@ namespace ts { ): PropertyDeclaration { const exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(SyntaxKind.ExclamationToken) : undefined; const type = parseTypeAnnotation(); - const initializer = doOutsideOfContext(NodeFlags.YieldContext | NodeFlags.AwaitContext | NodeFlags.DisallowInContext, parseInitializer); + const initializer = doOutsideOfContext(NodeFlags.DisallowInContext, parseInitializer); parseSemicolon(); const node = factory.createPropertyDeclaration(decorators, modifiers, name, questionToken || exclamationToken, type, initializer); return withJSDoc(finishNode(node, pos), hasJSDoc); diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 96ba926dd17db..874ff1c70e3d0 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -490,7 +490,7 @@ namespace ts { // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); if (some(staticProperties)) { - addPropertyStatements(statements, staticProperties, factory.getInternalName(node)); + addPropertyStatementsForStatic(statements, staticProperties, factory.getInternalName(node)); } return statements; @@ -534,7 +534,7 @@ namespace ts { } if (pendingStatements && some(staticProperties)) { - addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); + addPropertyStatementsForStatic(pendingStatements, staticProperties, factory.getInternalName(node)); } return classExpression; } @@ -724,6 +724,33 @@ namespace ts { } } + function addPropertyStatementsForStatic(statements: Statement[], properties: readonly PropertyDeclaration[], receiver: Identifier) { + const assignmentStatements: Statement[] = []; + addPropertyStatements(assignmentStatements, properties, receiver); + + const propertyAssignmentStatement = factory.createExpressionStatement( + factory.createCallExpression( + factory.createPropertyAccessExpression( + factory.createParenthesizedExpression( + factory.createFunctionExpression( + /*modifiers*/ undefined, + /*asteriskToken*/ undefined, + /*name*/ undefined, + /*typeParameters*/ undefined, + /*parameters*/ undefined, + /*type*/ undefined, + factory.createBlock(assignmentStatements, /*multiLine*/ true) + ) + ), + factory.createIdentifier("call") + ), + undefined, + [nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver)] + ) + ); + statements.push(propertyAssignmentStatement); + } + /** * Generates assignment expressions for property initializers. * diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js index db07e83eb7f81..6eec595aef8a5 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js @@ -28,7 +28,9 @@ var Point = /** @class */ (function () { this.x = x; this.y = y; } - Point.Origin = { x: 0, y: 0 }; + (function () { + Point.Origin = { x: 0, y: 0 }; + }).call(Point); return Point; }()); (function (Point) { @@ -41,7 +43,9 @@ var A; this.x = x; this.y = y; } - Point.Origin = { x: 0, y: 0 }; + (function () { + Point.Origin = { x: 0, y: 0 }; + }).call(Point); return Point; }()); A.Point = Point; diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js index 246acf9af117b..50177fb789894 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js @@ -28,7 +28,9 @@ var Point = /** @class */ (function () { this.x = x; this.y = y; } - Point.Origin = { x: 0, y: 0 }; + (function () { + Point.Origin = { x: 0, y: 0 }; + }).call(Point); return Point; }()); (function (Point) { @@ -41,7 +43,9 @@ var A; this.x = x; this.y = y; } - Point.Origin = { x: 0, y: 0 }; + (function () { + Point.Origin = { x: 0, y: 0 }; + }).call(Point); return Point; }()); A.Point = Point; diff --git a/tests/baselines/reference/ClassDeclarationWithInvalidConstOnPropertyDeclaration.js b/tests/baselines/reference/ClassDeclarationWithInvalidConstOnPropertyDeclaration.js index c4cab7cc9396c..dd290f873999c 100644 --- a/tests/baselines/reference/ClassDeclarationWithInvalidConstOnPropertyDeclaration.js +++ b/tests/baselines/reference/ClassDeclarationWithInvalidConstOnPropertyDeclaration.js @@ -7,6 +7,8 @@ class AtomicNumbers { var AtomicNumbers = /** @class */ (function () { function AtomicNumbers() { } - AtomicNumbers.H = 1; + (function () { + AtomicNumbers.H = 1; + }).call(AtomicNumbers); return AtomicNumbers; }()); diff --git a/tests/baselines/reference/amdImportNotAsPrimaryExpression.js b/tests/baselines/reference/amdImportNotAsPrimaryExpression.js index 6020113e64b87..07d00ddd46bdf 100644 --- a/tests/baselines/reference/amdImportNotAsPrimaryExpression.js +++ b/tests/baselines/reference/amdImportNotAsPrimaryExpression.js @@ -40,7 +40,9 @@ define(["require", "exports"], function (require, exports) { function C1() { this.m1 = 42; } - C1.s1 = true; + (function () { + C1.s1 = true; + }).call(C1); return C1; }()); exports.C1 = C1; diff --git a/tests/baselines/reference/asyncArrowInClassES5.js b/tests/baselines/reference/asyncArrowInClassES5.js index f0204f7319bda..c8dba31f58c19 100644 --- a/tests/baselines/reference/asyncArrowInClassES5.js +++ b/tests/baselines/reference/asyncArrowInClassES5.js @@ -10,12 +10,14 @@ class Test { //// [asyncArrowInClassES5.js] // https://github.com/Microsoft/TypeScript/issues/16924 // Should capture `this` -var _this = this; var Test = /** @class */ (function () { function Test() { } - Test.member = function (x) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/]; - }); }); }; + (function () { + var _this = this; + Test.member = function (x) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/]; + }); }); }; + }).call(Test); return Test; }()); diff --git a/tests/baselines/reference/asyncAwaitNestedClasses_es5.js b/tests/baselines/reference/asyncAwaitNestedClasses_es5.js index f72dda7bec2af..97654fc017cde 100644 --- a/tests/baselines/reference/asyncAwaitNestedClasses_es5.js +++ b/tests/baselines/reference/asyncAwaitNestedClasses_es5.js @@ -21,32 +21,34 @@ var A = /** @class */ (function () { function A() { } var _a; - A.B = (_a = /** @class */ (function () { - function B() { - } - B.func2 = function () { - return new Promise(function (resolve) { resolve(null); }); - }; - return B; - }()), - _a.C = /** @class */ (function () { - function C() { - } - C.func = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, _a.func2()]; - case 1: - _b.sent(); - return [2 /*return*/]; - } + (function () { + A.B = (_a = /** @class */ (function () { + function B() { + } + B.func2 = function () { + return new Promise(function (resolve) { resolve(null); }); + }; + return B; + }()), + _a.C = /** @class */ (function () { + function C() { + } + C.func = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, _a.func2()]; + case 1: + _b.sent(); + return [2 /*return*/]; + } + }); }); - }); - }; - return C; - }()), - _a); + }; + return C; + }()), + _a); + }).call(A); return A; }()); A.B.C.func(); diff --git a/tests/baselines/reference/autolift4.js b/tests/baselines/reference/autolift4.js index 4c71eadc31db7..8c2e8cadc31cf 100644 --- a/tests/baselines/reference/autolift4.js +++ b/tests/baselines/reference/autolift4.js @@ -47,7 +47,9 @@ var Point = /** @class */ (function () { Point.prototype.getDist = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; - Point.origin = new Point(0, 0); + (function () { + Point.origin = new Point(0, 0); + }).call(Point); return Point; }()); var Point3D = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/awaitAndYieldInProperty.js b/tests/baselines/reference/awaitAndYieldInProperty.js index 73c04a612c2d0..3b9b85754a189 100644 --- a/tests/baselines/reference/awaitAndYieldInProperty.js +++ b/tests/baselines/reference/awaitAndYieldInProperty.js @@ -27,8 +27,10 @@ async function* test(x) { } } _a = await x, _b = await x, _c = yield 1, _d = yield 3; - C[_b] = await x; - C[_d] = yield 4; + (function () { + C[_b] = await x; + C[_d] = yield 4; + }).call(C); return _j = class { constructor() { this[_e] = await x; diff --git a/tests/baselines/reference/blockScopedNamespaceDifferentFile.js b/tests/baselines/reference/blockScopedNamespaceDifferentFile.js index 1ddb284f55cc0..aae24916fa830 100644 --- a/tests/baselines/reference/blockScopedNamespaceDifferentFile.js +++ b/tests/baselines/reference/blockScopedNamespaceDifferentFile.js @@ -27,8 +27,10 @@ var C; var Name = /** @class */ (function () { function Name(parameters) { } - Name.funcData = A.AA.func(); - Name.someConst = A.AA.foo; + (function () { + Name.funcData = A.AA.func(); + Name.someConst = A.AA.foo; + }).call(Name); return Name; }()); C.Name = Name; diff --git a/tests/baselines/reference/blockScopedVariablesUseBeforeDef.js b/tests/baselines/reference/blockScopedVariablesUseBeforeDef.js index 9ca3f8998a2eb..1ad9fccce2c02 100644 --- a/tests/baselines/reference/blockScopedVariablesUseBeforeDef.js +++ b/tests/baselines/reference/blockScopedVariablesUseBeforeDef.js @@ -178,7 +178,9 @@ function foo10() { var A = /** @class */ (function () { function A() { } - A.a = x; + (function () { + A.a = x; + }).call(A); return A; }()); var x; diff --git a/tests/baselines/reference/class2.js b/tests/baselines/reference/class2.js index 22a253bfc1900..233e47c5df799 100644 --- a/tests/baselines/reference/class2.js +++ b/tests/baselines/reference/class2.js @@ -5,6 +5,8 @@ class foo { constructor() { static f = 3; } } var foo = /** @class */ (function () { function foo() { } - foo.f = 3; + (function () { + foo.f = 3; + }).call(foo); return foo; }()); diff --git a/tests/baselines/reference/classBlockScoping.js b/tests/baselines/reference/classBlockScoping.js index ee3d9163b5e99..f0b49cee275fc 100644 --- a/tests/baselines/reference/classBlockScoping.js +++ b/tests/baselines/reference/classBlockScoping.js @@ -63,7 +63,9 @@ function f(b) { Foo.prototype.m = function () { new Foo(); }; - Foo.y = new Foo(); + (function () { + Foo.y = new Foo(); + }).call(Foo); return Foo; }()); new Foo_1(); diff --git a/tests/baselines/reference/classDeclarationCheckUsedBeforeDefinitionInItself.js b/tests/baselines/reference/classDeclarationCheckUsedBeforeDefinitionInItself.js index b3a3d25a81935..9dc62798a2f14 100644 --- a/tests/baselines/reference/classDeclarationCheckUsedBeforeDefinitionInItself.js +++ b/tests/baselines/reference/classDeclarationCheckUsedBeforeDefinitionInItself.js @@ -6,4 +6,6 @@ class C3 { //// [classDeclarationCheckUsedBeforeDefinitionInItself.js] class C3 { } -C3.intance = new C3(); // ok +(function () { + C3.intance = new C3(); // ok +}).call(C3); diff --git a/tests/baselines/reference/classDeclarationShouldBeOutOfScopeInComputedNames.js b/tests/baselines/reference/classDeclarationShouldBeOutOfScopeInComputedNames.js index 5367ef781a5cd..366f12aa46bd0 100644 --- a/tests/baselines/reference/classDeclarationShouldBeOutOfScopeInComputedNames.js +++ b/tests/baselines/reference/classDeclarationShouldBeOutOfScopeInComputedNames.js @@ -20,9 +20,11 @@ var A = /** @class */ (function () { A.prototype[A.p1] = function () { }; var _a, _b; _b = A.p2; - A.p1 = Symbol(); - A.p2 = Symbol(); - // All of the below should be out of scope or TDZ - `A` has not finished being constructed as they are executed - A[_a] = 0; + (function () { + A.p1 = Symbol(); + A.p2 = Symbol(); + // All of the below should be out of scope or TDZ - `A` has not finished being constructed as they are executed + A[_a] = 0; + }).call(A); return A; }()); diff --git a/tests/baselines/reference/classExpressionInClassStaticDeclarations.js b/tests/baselines/reference/classExpressionInClassStaticDeclarations.js index b74a5ec980b15..acb6345c85cff 100644 --- a/tests/baselines/reference/classExpressionInClassStaticDeclarations.js +++ b/tests/baselines/reference/classExpressionInClassStaticDeclarations.js @@ -22,13 +22,15 @@ var __extends = (this && this.__extends) || (function () { var C = /** @class */ (function () { function C() { } - C.D = /** @class */ (function (_super) { - __extends(class_1, _super); - function class_1() { - return _super !== null && _super.apply(this, arguments) || this; - } - return class_1; - }(C)); + (function () { + C.D = /** @class */ (function (_super) { + __extends(class_1, _super); + function class_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + return class_1; + }(C)); + }).call(C); return C; }()); diff --git a/tests/baselines/reference/classExpressionWithDecorator1.js b/tests/baselines/reference/classExpressionWithDecorator1.js index e96bc7d46d2cb..68b483c4cd832 100644 --- a/tests/baselines/reference/classExpressionWithDecorator1.js +++ b/tests/baselines/reference/classExpressionWithDecorator1.js @@ -12,7 +12,9 @@ var v = ; var C = /** @class */ (function () { function C() { } - C.p = 1; + (function () { + C.p = 1; + }).call(C); C = __decorate([ decorate ], C); diff --git a/tests/baselines/reference/classInConvertedLoopES5.js b/tests/baselines/reference/classInConvertedLoopES5.js index eb7f3d4ebf526..7f34f09944ad3 100644 --- a/tests/baselines/reference/classInConvertedLoopES5.js +++ b/tests/baselines/reference/classInConvertedLoopES5.js @@ -16,7 +16,9 @@ var _loop_1 = function (row) { function RowClass() { this.row = row; } - RowClass.factory = function () { return new RowClass(); }; + (function () { + RowClass.factory = function () { return new RowClass(); }; + }).call(RowClass); return RowClass; }()); classesByRow[row] = RowClass; diff --git a/tests/baselines/reference/classMemberInitializerScoping.js b/tests/baselines/reference/classMemberInitializerScoping.js index 7fd6b6f3a7ab6..10d42b9e2240e 100644 --- a/tests/baselines/reference/classMemberInitializerScoping.js +++ b/tests/baselines/reference/classMemberInitializerScoping.js @@ -27,7 +27,9 @@ var CCC = /** @class */ (function () { this.y = aaa; this.y = ''; // was: error, cannot assign string to number } - CCC.staticY = aaa; // This shouldnt be error + (function () { + CCC.staticY = aaa; // This shouldnt be error + }).call(CCC); return CCC; }()); // above is equivalent to this: diff --git a/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js b/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js index f7660fbec7e7e..a0e41790366de 100644 --- a/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js @@ -40,10 +40,12 @@ var Test = /** @class */ (function () { console.log(field); // Using field here shouldnt be error }; } - Test.staticMessageHandler = function () { - var field = Test.field; - console.log(field); // Using field here shouldnt be error - }; + (function () { + Test.staticMessageHandler = function () { + var field = Test.field; + console.log(field); // Using field here shouldnt be error + }; + }).call(Test); return Test; }()); var field1; @@ -56,8 +58,10 @@ var Test1 = /** @class */ (function () { // it would resolve to private field1 and thats not what user intended here. }; } - Test1.staticMessageHandler = function () { - console.log(field1); // This shouldnt be error as its a static property - }; + (function () { + Test1.staticMessageHandler = function () { + console.log(field1); // This shouldnt be error as its a static property + }; + }).call(Test1); return Test1; }()); diff --git a/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.js b/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.js index 28edb94345b43..c34808e9de284 100644 --- a/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.js +++ b/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.js @@ -22,9 +22,11 @@ namespace Namespace { var Foo = /** @class */ (function () { function Foo() { } - Foo.enumMember = Enum.A; - Foo.objLiteralMember = ObjLiteral.A; - Foo.namespaceMember = Namespace.A; + (function () { + Foo.enumMember = Enum.A; + Foo.objLiteralMember = ObjLiteral.A; + Foo.namespaceMember = Namespace.A; + }).call(Foo); return Foo; }()); var Enum; diff --git a/tests/baselines/reference/classStaticPropertyAccess.js b/tests/baselines/reference/classStaticPropertyAccess.js index 35cc60cf32a3c..c21bf2200cb1b 100644 --- a/tests/baselines/reference/classStaticPropertyAccess.js +++ b/tests/baselines/reference/classStaticPropertyAccess.js @@ -21,9 +21,11 @@ var A = /** @class */ (function () { function A() { } A["\""] = function () { }; - A.x = 1; - A.y = 1; - A._b = 2; + (function () { + A.x = 1; + A.y = 1; + A._b = 2; + }).call(A); return A; }()); var a = new A(); diff --git a/tests/baselines/reference/classWithPrivateProperty.js b/tests/baselines/reference/classWithPrivateProperty.js index 1188b43c771c4..adbdb18fac239 100644 --- a/tests/baselines/reference/classWithPrivateProperty.js +++ b/tests/baselines/reference/classWithPrivateProperty.js @@ -32,7 +32,9 @@ var C = /** @class */ (function () { } C.prototype.c = function () { return ''; }; C.f = function () { return ''; }; - C.g = function () { return ''; }; + (function () { + C.g = function () { return ''; }; + }).call(C); return C; }()); var c = new C(); diff --git a/tests/baselines/reference/classWithProtectedProperty.js b/tests/baselines/reference/classWithProtectedProperty.js index a6e62dc9f01ec..86a5061e4df98 100644 --- a/tests/baselines/reference/classWithProtectedProperty.js +++ b/tests/baselines/reference/classWithProtectedProperty.js @@ -52,7 +52,9 @@ var C = /** @class */ (function () { } C.prototype.c = function () { return ''; }; C.f = function () { return ''; }; - C.g = function () { return ''; }; + (function () { + C.g = function () { return ''; }; + }).call(C); return C; }()); var D = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/classWithPublicProperty.js b/tests/baselines/reference/classWithPublicProperty.js index 879a4db8864e4..51c651726a648 100644 --- a/tests/baselines/reference/classWithPublicProperty.js +++ b/tests/baselines/reference/classWithPublicProperty.js @@ -30,7 +30,9 @@ var C = /** @class */ (function () { } C.prototype.c = function () { return ''; }; C.f = function () { return ''; }; - C.g = function () { return ''; }; + (function () { + C.g = function () { return ''; }; + }).call(C); return C; }()); // all of these are valid diff --git a/tests/baselines/reference/cloduleStaticMembers.js b/tests/baselines/reference/cloduleStaticMembers.js index 8d59de41e68c9..0f42b5e2cce2c 100644 --- a/tests/baselines/reference/cloduleStaticMembers.js +++ b/tests/baselines/reference/cloduleStaticMembers.js @@ -16,8 +16,10 @@ module Clod { var Clod = /** @class */ (function () { function Clod() { } - Clod.x = 10; - Clod.y = 10; + (function () { + Clod.x = 10; + Clod.y = 10; + }).call(Clod); return Clod; }()); (function (Clod) { diff --git a/tests/baselines/reference/commentsOnStaticMembers.js b/tests/baselines/reference/commentsOnStaticMembers.js index 98f96e53204b0..ecb0a07448b2e 100644 --- a/tests/baselines/reference/commentsOnStaticMembers.js +++ b/tests/baselines/reference/commentsOnStaticMembers.js @@ -23,13 +23,15 @@ class test { var test = /** @class */ (function () { function test() { } - /** - * p1 comment appears in output - */ - test.p1 = ""; - /** - * p3 comment appears in output - */ - test.p3 = ""; + (function () { + /** + * p1 comment appears in output + */ + test.p1 = ""; + /** + * p3 comment appears in output + */ + test.p3 = ""; + }).call(test); return test; }()); diff --git a/tests/baselines/reference/commonJSImportAsPrimaryExpression.js b/tests/baselines/reference/commonJSImportAsPrimaryExpression.js index f59e42beb1532..6cb39450c319c 100644 --- a/tests/baselines/reference/commonJSImportAsPrimaryExpression.js +++ b/tests/baselines/reference/commonJSImportAsPrimaryExpression.js @@ -21,7 +21,9 @@ var C1 = /** @class */ (function () { function C1() { this.m1 = 42; } - C1.s1 = true; + (function () { + C1.s1 = true; + }).call(C1); return C1; }()); exports.C1 = C1; diff --git a/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.js b/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.js index cd1d0f85ec12f..6ade17e07120f 100644 --- a/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.js +++ b/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.js @@ -39,7 +39,9 @@ var C1 = /** @class */ (function () { function C1() { this.m1 = 42; } - C1.s1 = true; + (function () { + C1.s1 = true; + }).call(C1); return C1; }()); exports.C1 = C1; diff --git a/tests/baselines/reference/computedPropertyNames12_ES5.js b/tests/baselines/reference/computedPropertyNames12_ES5.js index 0245bfd3b2a05..e2984b8bbe2d2 100644 --- a/tests/baselines/reference/computedPropertyNames12_ES5.js +++ b/tests/baselines/reference/computedPropertyNames12_ES5.js @@ -28,6 +28,8 @@ var C = /** @class */ (function () { } var _a, _b, _c; _a = n, s + s, _b = s + n, +s, _c = "hello " + a + " bye"; - C[_c] = 0; + (function () { + C[_c] = 0; + }).call(C); return C; }()); diff --git a/tests/baselines/reference/computedPropertyNames12_ES6.js b/tests/baselines/reference/computedPropertyNames12_ES6.js index f56dbf287a8c6..27810930241bb 100644 --- a/tests/baselines/reference/computedPropertyNames12_ES6.js +++ b/tests/baselines/reference/computedPropertyNames12_ES6.js @@ -29,4 +29,6 @@ class C { } } _a = n, s + s, _b = s + n, +s, _c = `hello ${a} bye`; -C[_c] = 0; +(function () { + C[_c] = 0; +}).call(C); diff --git a/tests/baselines/reference/computedPropertyNamesWithStaticProperty.js b/tests/baselines/reference/computedPropertyNamesWithStaticProperty.js index 9f0407588a83e..84978734fd56e 100644 --- a/tests/baselines/reference/computedPropertyNamesWithStaticProperty.js +++ b/tests/baselines/reference/computedPropertyNamesWithStaticProperty.js @@ -20,4 +20,6 @@ class C { } [C.staticProp]() { } } -C.staticProp = 10; +(function () { + C.staticProp = 10; +}).call(C); diff --git a/tests/baselines/reference/declFilePrivateStatic.js b/tests/baselines/reference/declFilePrivateStatic.js index 78d3cb4051bc8..47b354e712bb6 100644 --- a/tests/baselines/reference/declFilePrivateStatic.js +++ b/tests/baselines/reference/declFilePrivateStatic.js @@ -39,8 +39,10 @@ var C = /** @class */ (function () { enumerable: false, configurable: true }); - C.x = 1; - C.y = 1; + (function () { + C.x = 1; + C.y = 1; + }).call(C); return C; }()); diff --git a/tests/baselines/reference/declarationEmitLocalClassHasRequiredDeclare.js b/tests/baselines/reference/declarationEmitLocalClassHasRequiredDeclare.js index c79e0cc921e44..40b404c246c5d 100644 --- a/tests/baselines/reference/declarationEmitLocalClassHasRequiredDeclare.js +++ b/tests/baselines/reference/declarationEmitLocalClassHasRequiredDeclare.js @@ -27,7 +27,9 @@ var X = /** @class */ (function () { var A = /** @class */ (function () { function A() { } - A.X = X; + (function () { + A.X = X; + }).call(A); return A; }()); exports.A = A; diff --git a/tests/baselines/reference/declarationEmitPrivateReadonlyLiterals.js b/tests/baselines/reference/declarationEmitPrivateReadonlyLiterals.js index c7e1d1e8ee6a2..ededd09c49603 100644 --- a/tests/baselines/reference/declarationEmitPrivateReadonlyLiterals.js +++ b/tests/baselines/reference/declarationEmitPrivateReadonlyLiterals.js @@ -13,8 +13,10 @@ var Foo = /** @class */ (function () { this.B = "b"; this.D = 42; } - Foo.A = "a"; - Foo.C = 42; + (function () { + Foo.A = "a"; + Foo.C = 42; + }).call(Foo); return Foo; }()); diff --git a/tests/baselines/reference/declarationNoDanglingGenerics.js b/tests/baselines/reference/declarationNoDanglingGenerics.js index 4b97a3abe0bb0..818738813d984 100644 --- a/tests/baselines/reference/declarationNoDanglingGenerics.js +++ b/tests/baselines/reference/declarationNoDanglingGenerics.js @@ -73,9 +73,11 @@ function ClassFactory(kind) { var Kinds = /** @class */ (function () { function Kinds() { } - Kinds.A = "A"; - Kinds.B = "B"; - Kinds.C = "C"; + (function () { + Kinds.A = "A"; + Kinds.B = "B"; + Kinds.C = "C"; + }).call(Kinds); return Kinds; }()); var AKind = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/decoratedClassExportsCommonJS1.js b/tests/baselines/reference/decoratedClassExportsCommonJS1.js index 2bcf0f9acda31..09518a1110bef 100644 --- a/tests/baselines/reference/decoratedClassExportsCommonJS1.js +++ b/tests/baselines/reference/decoratedClassExportsCommonJS1.js @@ -19,7 +19,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Testing123 = void 0; let Testing123 = Testing123_1 = class Testing123 { }; -Testing123.prop1 = Testing123_1.prop0; +(function () { + Testing123.prop1 = Testing123_1.prop0; +}).call(Testing123); Testing123 = Testing123_1 = __decorate([ Something({ v: () => Testing123_1 }) ], Testing123); diff --git a/tests/baselines/reference/decoratedClassExportsSystem1.js b/tests/baselines/reference/decoratedClassExportsSystem1.js index 844a87fe0930b..c325fe0c9f979 100644 --- a/tests/baselines/reference/decoratedClassExportsSystem1.js +++ b/tests/baselines/reference/decoratedClassExportsSystem1.js @@ -23,7 +23,9 @@ System.register([], function (exports_1, context_1) { execute: function () { Testing123 = Testing123_1 = class Testing123 { }; - Testing123.prop1 = Testing123_1.prop0; + (function () { + Testing123.prop1 = Testing123_1.prop0; + }).call(Testing123); Testing123 = Testing123_1 = __decorate([ Something({ v: () => Testing123_1 }) ], Testing123); diff --git a/tests/baselines/reference/decoratorOnClass5.es6.js b/tests/baselines/reference/decoratorOnClass5.es6.js index b1c45cbce312c..967323d01b52c 100644 --- a/tests/baselines/reference/decoratorOnClass5.es6.js +++ b/tests/baselines/reference/decoratorOnClass5.es6.js @@ -20,7 +20,9 @@ var C_1; let C = C_1 = class C { static x() { return C_1.y; } }; -C.y = 1; +(function () { + C.y = 1; +}).call(C); C = C_1 = __decorate([ dec ], C); diff --git a/tests/baselines/reference/decoratorOnClass6.es6.js b/tests/baselines/reference/decoratorOnClass6.es6.js index f9d8d2f419929..3460f06a75bf4 100644 --- a/tests/baselines/reference/decoratorOnClass6.es6.js +++ b/tests/baselines/reference/decoratorOnClass6.es6.js @@ -20,7 +20,9 @@ var C_1; let C = C_1 = class C { static x() { return C_1.y; } }; -C.y = 1; +(function () { + C.y = 1; +}).call(C); C = C_1 = __decorate([ dec ], C); diff --git a/tests/baselines/reference/decoratorOnClass7.es6.js b/tests/baselines/reference/decoratorOnClass7.es6.js index aefc9536a878c..fc2c4216734d1 100644 --- a/tests/baselines/reference/decoratorOnClass7.es6.js +++ b/tests/baselines/reference/decoratorOnClass7.es6.js @@ -20,7 +20,9 @@ var C_1; let C = C_1 = class C { static x() { return C_1.y; } }; -C.y = 1; +(function () { + C.y = 1; +}).call(C); C = C_1 = __decorate([ dec ], C); diff --git a/tests/baselines/reference/decoratorOnClass8.es6.js b/tests/baselines/reference/decoratorOnClass8.es6.js index 88dd41e7b6065..fe4e32cf04d8f 100644 --- a/tests/baselines/reference/decoratorOnClass8.es6.js +++ b/tests/baselines/reference/decoratorOnClass8.es6.js @@ -15,7 +15,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, }; let default_1 = class default_1 { }; -default_1.y = 1; +(function () { + default_1.y = 1; +}).call(default_1); default_1 = __decorate([ dec ], default_1); diff --git a/tests/baselines/reference/decoratorOnClass9.js b/tests/baselines/reference/decoratorOnClass9.js index 4ea1fb1a45c5b..9da4801b3028c 100644 --- a/tests/baselines/reference/decoratorOnClass9.js +++ b/tests/baselines/reference/decoratorOnClass9.js @@ -51,8 +51,10 @@ var B = /** @class */ (function (_super) { return B_1.x; }; var B_1; - B.x = 1; - B.y = B_1.x; + (function () { + B.x = 1; + B.y = B_1.x; + }).call(B); B = B_1 = __decorate([ dec ], B); diff --git a/tests/baselines/reference/defaultDeclarationEmitNamedCorrectly.js b/tests/baselines/reference/defaultDeclarationEmitNamedCorrectly.js index 2ac1e112632e5..6f07aa6ee3072 100644 --- a/tests/baselines/reference/defaultDeclarationEmitNamedCorrectly.js +++ b/tests/baselines/reference/defaultDeclarationEmitNamedCorrectly.js @@ -26,7 +26,9 @@ exports.make = make; var MyComponent = /** @class */ (function () { function MyComponent() { } - MyComponent.create = make(MyComponent); + (function () { + MyComponent.create = make(MyComponent); + }).call(MyComponent); return MyComponent; }()); exports["default"] = MyComponent; diff --git a/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js b/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js index 961bd4041cdf8..6373477ed6c9a 100644 --- a/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js +++ b/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js @@ -27,7 +27,9 @@ class B { 11() { } interface() { } } -B["hi"] = 10000; -B[22] = "twenty-two"; -B[0b101] = "binary"; -B[0o3235] = "octal"; +(function () { + B["hi"] = 10000; + B[22] = "twenty-two"; + B[0b101] = "binary"; + B[0o3235] = "octal"; +}).call(B); diff --git a/tests/baselines/reference/emitClassDeclarationWithStaticPropertyAssignmentInES6.js b/tests/baselines/reference/emitClassDeclarationWithStaticPropertyAssignmentInES6.js index 8e0bf3de06bcd..8e7f523c22c73 100644 --- a/tests/baselines/reference/emitClassDeclarationWithStaticPropertyAssignmentInES6.js +++ b/tests/baselines/reference/emitClassDeclarationWithStaticPropertyAssignmentInES6.js @@ -12,10 +12,14 @@ class D { //// [emitClassDeclarationWithStaticPropertyAssignmentInES6.js] class C { } -C.z = "Foo"; +(function () { + C.z = "Foo"; +}).call(C); class D { constructor() { this.x = 20000; } } -D.b = true; +(function () { + D.b = true; +}).call(D); diff --git a/tests/baselines/reference/errorSuperCalls.js b/tests/baselines/reference/errorSuperCalls.js index f479d4f5bbedd..6360767c27a96 100644 --- a/tests/baselines/reference/errorSuperCalls.js +++ b/tests/baselines/reference/errorSuperCalls.js @@ -129,8 +129,10 @@ var NoBase = /** @class */ (function () { enumerable: false, configurable: true }); - //super call in static class member initializer with no base type - NoBase.k = _this = _super.call(this) || this; + (function () { + //super call in static class member initializer with no base type + NoBase.k = _this = _super.call(this) || this; + }).call(NoBase); return NoBase; }()); var Base = /** @class */ (function () { diff --git a/tests/baselines/reference/errorSuperPropertyAccess.js b/tests/baselines/reference/errorSuperPropertyAccess.js index 25385a6521751..656945c697724 100644 --- a/tests/baselines/reference/errorSuperPropertyAccess.js +++ b/tests/baselines/reference/errorSuperPropertyAccess.js @@ -185,8 +185,10 @@ var SomeBase = /** @class */ (function () { SomeBase.prototype.publicFunc = function () { }; SomeBase.privateStaticFunc = function () { }; SomeBase.publicStaticFunc = function () { }; - SomeBase.privateStaticMember = 0; - SomeBase.publicStaticMember = 0; + (function () { + SomeBase.privateStaticMember = 0; + SomeBase.publicStaticMember = 0; + }).call(SomeBase); return SomeBase; }()); //super.publicInstanceMemberNotFunction in constructor of derived class diff --git a/tests/baselines/reference/es3defaultAliasIsQuoted.js b/tests/baselines/reference/es3defaultAliasIsQuoted.js index a486ad614046b..ffa785dcbcba4 100644 --- a/tests/baselines/reference/es3defaultAliasIsQuoted.js +++ b/tests/baselines/reference/es3defaultAliasIsQuoted.js @@ -20,7 +20,9 @@ exports.Foo = void 0; var Foo = /** @class */ (function () { function Foo() { } - Foo.CONSTANT = "Foo"; + (function () { + Foo.CONSTANT = "Foo"; + }).call(Foo); return Foo; }()); exports.Foo = Foo; diff --git a/tests/baselines/reference/es6ClassTest.js b/tests/baselines/reference/es6ClassTest.js index 3892765004770..06dddf222d0a8 100644 --- a/tests/baselines/reference/es6ClassTest.js +++ b/tests/baselines/reference/es6ClassTest.js @@ -124,7 +124,9 @@ var Foo = /** @class */ (function (_super) { } Foo.prototype.bar = function () { return 0; }; Foo.prototype.boo = function (x) { return x; }; - Foo.statVal = 0; + (function () { + Foo.statVal = 0; + }).call(Foo); return Foo; }(Bar)); var f = new Foo(); diff --git a/tests/baselines/reference/es6ClassTest2.js b/tests/baselines/reference/es6ClassTest2.js index 7ec8cd45f52fa..5a669474e5f18 100644 --- a/tests/baselines/reference/es6ClassTest2.js +++ b/tests/baselines/reference/es6ClassTest2.js @@ -293,7 +293,9 @@ var Statics = /** @class */ (function () { Statics.baz = function () { return ""; }; - Statics.foo = 1; + (function () { + Statics.foo = 1; + }).call(Statics); return Statics; }()); var stat = new Statics(); diff --git a/tests/baselines/reference/es6ModuleClassDeclaration.js b/tests/baselines/reference/es6ModuleClassDeclaration.js index a228739abbfb7..b54d4ca44eb5b 100644 --- a/tests/baselines/reference/es6ModuleClassDeclaration.js +++ b/tests/baselines/reference/es6ModuleClassDeclaration.js @@ -127,8 +127,10 @@ export class c { static method4() { } } -c.k = 20; -c.l = 30; +(function () { + c.k = 20; + c.l = 30; +}).call(c); class c2 { constructor() { this.x = 10; @@ -143,8 +145,10 @@ class c2 { static method4() { } } -c2.k = 20; -c2.l = 30; +(function () { + c2.k = 20; + c2.l = 30; +}).call(c2); new c(); new c2(); export var m1; @@ -163,8 +167,10 @@ export var m1; static method4() { } } - c3.k = 20; - c3.l = 30; + (function () { + c3.k = 20; + c3.l = 30; + }).call(c3); m1.c3 = c3; class c4 { constructor() { @@ -180,8 +186,10 @@ export var m1; static method4() { } } - c4.k = 20; - c4.l = 30; + (function () { + c4.k = 20; + c4.l = 30; + }).call(c4); new c(); new c2(); new c3(); @@ -203,8 +211,10 @@ var m2; static method4() { } } - c3.k = 20; - c3.l = 30; + (function () { + c3.k = 20; + c3.l = 30; + }).call(c3); m2.c3 = c3; class c4 { constructor() { @@ -220,8 +230,10 @@ var m2; static method4() { } } - c4.k = 20; - c4.l = 30; + (function () { + c4.k = 20; + c4.l = 30; + }).call(c4); new c(); new c2(); new c3(); diff --git a/tests/baselines/reference/es6modulekindWithES5Target.js b/tests/baselines/reference/es6modulekindWithES5Target.js index 3689bb9027f75..4a80ae5885b2b 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target.js +++ b/tests/baselines/reference/es6modulekindWithES5Target.js @@ -31,7 +31,9 @@ var C = /** @class */ (function () { this.p = 1; } C.prototype.method = function () { }; - C.s = 0; + (function () { + C.s = 0; + }).call(C); return C; }()); export { C }; @@ -41,7 +43,9 @@ var D = /** @class */ (function () { this.p = 1; } D.prototype.method = function () { }; - D.s = 0; + (function () { + D.s = 0; + }).call(D); D = __decorate([ foo ], D); diff --git a/tests/baselines/reference/es6modulekindWithES5Target11.js b/tests/baselines/reference/es6modulekindWithES5Target11.js index c720e4740d508..80372ec952adf 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target11.js +++ b/tests/baselines/reference/es6modulekindWithES5Target11.js @@ -23,7 +23,9 @@ var C = /** @class */ (function () { C.x = function () { return C_1.y; }; C.prototype.method = function () { }; var C_1; - C.y = 1; + (function () { + C.y = 1; + }).call(C); C = C_1 = __decorate([ foo ], C); diff --git a/tests/baselines/reference/es6modulekindWithES5Target2.js b/tests/baselines/reference/es6modulekindWithES5Target2.js index f3921d3f2bf8d..43decbe155335 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target2.js +++ b/tests/baselines/reference/es6modulekindWithES5Target2.js @@ -12,7 +12,9 @@ var C = /** @class */ (function () { this.p = 1; } C.prototype.method = function () { }; - C.s = 0; + (function () { + C.s = 0; + }).call(C); return C; }()); export default C; diff --git a/tests/baselines/reference/es6modulekindWithES5Target3.js b/tests/baselines/reference/es6modulekindWithES5Target3.js index 1c3f03cc57103..8b460eaac5cbc 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target3.js +++ b/tests/baselines/reference/es6modulekindWithES5Target3.js @@ -19,7 +19,9 @@ var D = /** @class */ (function () { this.p = 1; } D.prototype.method = function () { }; - D.s = 0; + (function () { + D.s = 0; + }).call(D); D = __decorate([ foo ], D); diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target.js b/tests/baselines/reference/esnextmodulekindWithES5Target.js index 061dd3e4050d9..1165cadad32fb 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target.js +++ b/tests/baselines/reference/esnextmodulekindWithES5Target.js @@ -31,7 +31,9 @@ var C = /** @class */ (function () { this.p = 1; } C.prototype.method = function () { }; - C.s = 0; + (function () { + C.s = 0; + }).call(C); return C; }()); export { C }; @@ -41,7 +43,9 @@ var D = /** @class */ (function () { this.p = 1; } D.prototype.method = function () { }; - D.s = 0; + (function () { + D.s = 0; + }).call(D); D = __decorate([ foo ], D); diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target11.js b/tests/baselines/reference/esnextmodulekindWithES5Target11.js index a32ac99806523..e999fc0d0a8de 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target11.js +++ b/tests/baselines/reference/esnextmodulekindWithES5Target11.js @@ -23,7 +23,9 @@ var C = /** @class */ (function () { C.x = function () { return C_1.y; }; C.prototype.method = function () { }; var C_1; - C.y = 1; + (function () { + C.y = 1; + }).call(C); C = C_1 = __decorate([ foo ], C); diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target2.js b/tests/baselines/reference/esnextmodulekindWithES5Target2.js index dd2a0b301a347..15adcbc460011 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target2.js +++ b/tests/baselines/reference/esnextmodulekindWithES5Target2.js @@ -12,7 +12,9 @@ var C = /** @class */ (function () { this.p = 1; } C.prototype.method = function () { }; - C.s = 0; + (function () { + C.s = 0; + }).call(C); return C; }()); export default C; diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target3.js b/tests/baselines/reference/esnextmodulekindWithES5Target3.js index e46e7c1bcacbd..2b6808225d20a 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target3.js +++ b/tests/baselines/reference/esnextmodulekindWithES5Target3.js @@ -19,7 +19,9 @@ var D = /** @class */ (function () { this.p = 1; } D.prototype.method = function () { }; - D.s = 0; + (function () { + D.s = 0; + }).call(D); D = __decorate([ foo ], D); diff --git a/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js index 3acb89b8696d7..219e5092deea6 100644 --- a/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js +++ b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js @@ -6,4 +6,6 @@ export default class { //// [exportDefaultClassWithStaticPropertyAssignmentsInES6.js] export default class default_1 { } -default_1.z = "Foo"; +(function () { + default_1.z = "Foo"; +}).call(default_1); diff --git a/tests/baselines/reference/exportDefaultQualifiedNameNoError.js b/tests/baselines/reference/exportDefaultQualifiedNameNoError.js index f0973d0716c15..02d3cc7e91fe8 100644 --- a/tests/baselines/reference/exportDefaultQualifiedNameNoError.js +++ b/tests/baselines/reference/exportDefaultQualifiedNameNoError.js @@ -13,7 +13,9 @@ exports.__esModule = true; var C = /** @class */ (function () { function C() { } - C.x = 0; + (function () { + C.x = 0; + }).call(C); return C; }()); ; diff --git a/tests/baselines/reference/extendFromAny.js b/tests/baselines/reference/extendFromAny.js index a2749b6208122..44113aa1b8836 100644 --- a/tests/baselines/reference/extendFromAny.js +++ b/tests/baselines/reference/extendFromAny.js @@ -35,7 +35,9 @@ var C = /** @class */ (function (_super) { _this.known = 1; return _this; } - C.sknown = 2; + (function () { + C.sknown = 2; + }).call(C); return C; }(Base)); var c = new C(); diff --git a/tests/baselines/reference/forwardRefInClassProperties.js b/tests/baselines/reference/forwardRefInClassProperties.js index 02e53e708b934..b951d658e5c0e 100644 --- a/tests/baselines/reference/forwardRefInClassProperties.js +++ b/tests/baselines/reference/forwardRefInClassProperties.js @@ -25,7 +25,9 @@ var Test = /** @class */ (function () { var a = b; // Property 'b' is used before its initialization. var b = 3; }; - Test._B = Test._A; // undefined, no error/warning - Test._A = 3; + (function () { + Test._B = Test._A; // undefined, no error/warning + Test._A = 3; + }).call(Test); return Test; }()); diff --git a/tests/baselines/reference/generatedContextualTyping.js b/tests/baselines/reference/generatedContextualTyping.js index a2671ffac6130..0c827f0004863 100644 --- a/tests/baselines/reference/generatedContextualTyping.js +++ b/tests/baselines/reference/generatedContextualTyping.js @@ -621,217 +621,289 @@ var x48 = /** @class */ (function () { var x49 = /** @class */ (function () { function x49() { } - x49.member = function () { return [d1, d2]; }; + (function () { + x49.member = function () { return [d1, d2]; }; + }).call(x49); return x49; }()); var x50 = /** @class */ (function () { function x50() { } - x50.member = function () { return [d1, d2]; }; + (function () { + x50.member = function () { return [d1, d2]; }; + }).call(x50); return x50; }()); var x51 = /** @class */ (function () { function x51() { } - x51.member = function named() { return [d1, d2]; }; + (function () { + x51.member = function named() { return [d1, d2]; }; + }).call(x51); return x51; }()); var x52 = /** @class */ (function () { function x52() { } - x52.member = function () { return [d1, d2]; }; + (function () { + x52.member = function () { return [d1, d2]; }; + }).call(x52); return x52; }()); var x53 = /** @class */ (function () { function x53() { } - x53.member = function () { return [d1, d2]; }; + (function () { + x53.member = function () { return [d1, d2]; }; + }).call(x53); return x53; }()); var x54 = /** @class */ (function () { function x54() { } - x54.member = function named() { return [d1, d2]; }; + (function () { + x54.member = function named() { return [d1, d2]; }; + }).call(x54); return x54; }()); var x55 = /** @class */ (function () { function x55() { } - x55.member = [d1, d2]; + (function () { + x55.member = [d1, d2]; + }).call(x55); return x55; }()); var x56 = /** @class */ (function () { function x56() { } - x56.member = [d1, d2]; + (function () { + x56.member = [d1, d2]; + }).call(x56); return x56; }()); var x57 = /** @class */ (function () { function x57() { } - x57.member = [d1, d2]; + (function () { + x57.member = [d1, d2]; + }).call(x57); return x57; }()); var x58 = /** @class */ (function () { function x58() { } - x58.member = { n: [d1, d2] }; + (function () { + x58.member = { n: [d1, d2] }; + }).call(x58); return x58; }()); var x59 = /** @class */ (function () { function x59() { } - x59.member = function (n) { var n; return null; }; + (function () { + x59.member = function (n) { var n; return null; }; + }).call(x59); return x59; }()); var x60 = /** @class */ (function () { function x60() { } - x60.member = { func: function (n) { return [d1, d2]; } }; + (function () { + x60.member = { func: function (n) { return [d1, d2]; } }; + }).call(x60); return x60; }()); var x61 = /** @class */ (function () { function x61() { } - x61.member = function () { return [d1, d2]; }; + (function () { + x61.member = function () { return [d1, d2]; }; + }).call(x61); return x61; }()); var x62 = /** @class */ (function () { function x62() { } - x62.member = function () { return [d1, d2]; }; + (function () { + x62.member = function () { return [d1, d2]; }; + }).call(x62); return x62; }()); var x63 = /** @class */ (function () { function x63() { } - x63.member = function named() { return [d1, d2]; }; + (function () { + x63.member = function named() { return [d1, d2]; }; + }).call(x63); return x63; }()); var x64 = /** @class */ (function () { function x64() { } - x64.member = function () { return [d1, d2]; }; + (function () { + x64.member = function () { return [d1, d2]; }; + }).call(x64); return x64; }()); var x65 = /** @class */ (function () { function x65() { } - x65.member = function () { return [d1, d2]; }; + (function () { + x65.member = function () { return [d1, d2]; }; + }).call(x65); return x65; }()); var x66 = /** @class */ (function () { function x66() { } - x66.member = function named() { return [d1, d2]; }; + (function () { + x66.member = function named() { return [d1, d2]; }; + }).call(x66); return x66; }()); var x67 = /** @class */ (function () { function x67() { } - x67.member = [d1, d2]; + (function () { + x67.member = [d1, d2]; + }).call(x67); return x67; }()); var x68 = /** @class */ (function () { function x68() { } - x68.member = [d1, d2]; + (function () { + x68.member = [d1, d2]; + }).call(x68); return x68; }()); var x69 = /** @class */ (function () { function x69() { } - x69.member = [d1, d2]; + (function () { + x69.member = [d1, d2]; + }).call(x69); return x69; }()); var x70 = /** @class */ (function () { function x70() { } - x70.member = { n: [d1, d2] }; + (function () { + x70.member = { n: [d1, d2] }; + }).call(x70); return x70; }()); var x71 = /** @class */ (function () { function x71() { } - x71.member = function (n) { var n; return null; }; + (function () { + x71.member = function (n) { var n; return null; }; + }).call(x71); return x71; }()); var x72 = /** @class */ (function () { function x72() { } - x72.member = { func: function (n) { return [d1, d2]; } }; + (function () { + x72.member = { func: function (n) { return [d1, d2]; } }; + }).call(x72); return x72; }()); var x73 = /** @class */ (function () { function x73() { } - x73.member = function () { return [d1, d2]; }; + (function () { + x73.member = function () { return [d1, d2]; }; + }).call(x73); return x73; }()); var x74 = /** @class */ (function () { function x74() { } - x74.member = function () { return [d1, d2]; }; + (function () { + x74.member = function () { return [d1, d2]; }; + }).call(x74); return x74; }()); var x75 = /** @class */ (function () { function x75() { } - x75.member = function named() { return [d1, d2]; }; + (function () { + x75.member = function named() { return [d1, d2]; }; + }).call(x75); return x75; }()); var x76 = /** @class */ (function () { function x76() { } - x76.member = function () { return [d1, d2]; }; + (function () { + x76.member = function () { return [d1, d2]; }; + }).call(x76); return x76; }()); var x77 = /** @class */ (function () { function x77() { } - x77.member = function () { return [d1, d2]; }; + (function () { + x77.member = function () { return [d1, d2]; }; + }).call(x77); return x77; }()); var x78 = /** @class */ (function () { function x78() { } - x78.member = function named() { return [d1, d2]; }; + (function () { + x78.member = function named() { return [d1, d2]; }; + }).call(x78); return x78; }()); var x79 = /** @class */ (function () { function x79() { } - x79.member = [d1, d2]; + (function () { + x79.member = [d1, d2]; + }).call(x79); return x79; }()); var x80 = /** @class */ (function () { function x80() { } - x80.member = [d1, d2]; + (function () { + x80.member = [d1, d2]; + }).call(x80); return x80; }()); var x81 = /** @class */ (function () { function x81() { } - x81.member = [d1, d2]; + (function () { + x81.member = [d1, d2]; + }).call(x81); return x81; }()); var x82 = /** @class */ (function () { function x82() { } - x82.member = { n: [d1, d2] }; + (function () { + x82.member = { n: [d1, d2] }; + }).call(x82); return x82; }()); var x83 = /** @class */ (function () { function x83() { } - x83.member = function (n) { var n; return null; }; + (function () { + x83.member = function (n) { var n; return null; }; + }).call(x83); return x83; }()); var x84 = /** @class */ (function () { function x84() { } - x84.member = { func: function (n) { return [d1, d2]; } }; + (function () { + x84.member = { func: function (n) { return [d1, d2]; } }; + }).call(x84); return x84; }()); var x85 = /** @class */ (function () { diff --git a/tests/baselines/reference/generatorTypeCheck58.js b/tests/baselines/reference/generatorTypeCheck58.js index 925fc2b76d26d..6bcac1096e05d 100644 --- a/tests/baselines/reference/generatorTypeCheck58.js +++ b/tests/baselines/reference/generatorTypeCheck58.js @@ -9,6 +9,8 @@ function* g() { function* g() { class C { } - C.x = yield 0; + (function () { + C.x = yield 0; + }).call(C); ; } diff --git a/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js b/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js index 28b0aab5b0638..092f57fb04be5 100644 --- a/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js +++ b/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js @@ -25,9 +25,11 @@ var Foo = /** @class */ (function () { Foo.f = function (xs) { return xs.reverse(); }; - Foo.a = function (n) { }; - Foo.c = []; - Foo.d = false || (function (x) { return x || undefined; })(null); - Foo.e = function (x) { return null; }; + (function () { + Foo.a = function (n) { }; + Foo.c = []; + Foo.d = false || (function (x) { return x || undefined; })(null); + Foo.e = function (x) { return null; }; + }).call(Foo); return Foo; }()); diff --git a/tests/baselines/reference/gettersAndSetters.js b/tests/baselines/reference/gettersAndSetters.js index 497bf1d3d7f60..fe1d5c6ffbd37 100644 --- a/tests/baselines/reference/gettersAndSetters.js +++ b/tests/baselines/reference/gettersAndSetters.js @@ -65,7 +65,9 @@ var C = /** @class */ (function () { enumerable: false, configurable: true }); - C.barBack = ""; + (function () { + C.barBack = ""; + }).call(C); return C; }()); var c = new C(); diff --git a/tests/baselines/reference/importImportOnlyModule.js b/tests/baselines/reference/importImportOnlyModule.js index 447bb58d690b1..d14005faabb19 100644 --- a/tests/baselines/reference/importImportOnlyModule.js +++ b/tests/baselines/reference/importImportOnlyModule.js @@ -24,7 +24,9 @@ define(["require", "exports"], function (require, exports) { function C1() { this.m1 = 42; } - C1.s1 = true; + (function () { + C1.s1 = true; + }).call(C1); return C1; }()); exports.C1 = C1; diff --git a/tests/baselines/reference/inferringClassMembersFromAssignments.js b/tests/baselines/reference/inferringClassMembersFromAssignments.js index e8d25a917dd47..63278d1bbe343 100644 --- a/tests/baselines/reference/inferringClassMembersFromAssignments.js +++ b/tests/baselines/reference/inferringClassMembersFromAssignments.js @@ -133,7 +133,6 @@ var stringOrNumberOrUndefined = C.inStaticNestedArrowFunction; //// [output.js] -var _this = this; var C = /** @class */ (function () { function C() { var _this = this; @@ -225,14 +224,17 @@ var C = /** @class */ (function () { this.inStaticSetter = "string"; } }; - C.prop = function () { - if (Math.random()) { - _this.inStaticPropertyDeclaration = 0; - } - else { - _this.inStaticPropertyDeclaration = "string"; - } - }; + (function () { + var _this = this; + C.prop = function () { + if (Math.random()) { + _this.inStaticPropertyDeclaration = 0; + } + else { + _this.inStaticPropertyDeclaration = "string"; + } + }; + }).call(C); return C; }()); var c = new C(); diff --git a/tests/baselines/reference/instanceAndStaticDeclarations1.js b/tests/baselines/reference/instanceAndStaticDeclarations1.js index 57c9bba7dbf99..bb619b55d7b3e 100644 --- a/tests/baselines/reference/instanceAndStaticDeclarations1.js +++ b/tests/baselines/reference/instanceAndStaticDeclarations1.js @@ -25,6 +25,8 @@ var Point = /** @class */ (function () { return Math.sqrt(dx * dx + dy * dy); }; Point.distance = function (p1, p2) { return p1.distance(p2); }; - Point.origin = new Point(0, 0); + (function () { + Point.origin = new Point(0, 0); + }).call(Point); return Point; }()); diff --git a/tests/baselines/reference/invalidNewTarget.es5.js b/tests/baselines/reference/invalidNewTarget.es5.js index f25847b1e983a..7b1617970dffe 100644 --- a/tests/baselines/reference/invalidNewTarget.es5.js +++ b/tests/baselines/reference/invalidNewTarget.es5.js @@ -75,7 +75,10 @@ var C = /** @class */ (function () { enumerable: false, configurable: true }); - C.j = function () { return _newTarget; }; + (function _b() { + var _newTarget = this && this instanceof _b ? this.constructor : void 0; + C.j = function () { return _newTarget; }; + }).call(C); return C; }()); var O = (_a = {}, diff --git a/tests/baselines/reference/invalidNewTarget.es6.js b/tests/baselines/reference/invalidNewTarget.es6.js index ed1b2cc1592a8..b7859d1e60fd4 100644 --- a/tests/baselines/reference/invalidNewTarget.es6.js +++ b/tests/baselines/reference/invalidNewTarget.es6.js @@ -40,7 +40,9 @@ class C { static get h() { return new.target; } static set i(_) { _ = new.target; } } -C.j = () => new.target; +(function () { + C.j = () => new.target; +}).call(C); const O = { [new.target]: undefined, k() { return new.target; }, diff --git a/tests/baselines/reference/invalidStaticField.js b/tests/baselines/reference/invalidStaticField.js index d9480f3c292f6..9d462ed6849cd 100644 --- a/tests/baselines/reference/invalidStaticField.js +++ b/tests/baselines/reference/invalidStaticField.js @@ -12,6 +12,8 @@ var A = /** @class */ (function () { var B = /** @class */ (function () { function B() { } - B.NOT_NULL = new B(); + (function () { + B.NOT_NULL = new B(); + }).call(B); return B; }()); diff --git a/tests/baselines/reference/jsDeclarationsClasses.js b/tests/baselines/reference/jsDeclarationsClasses.js index f1807e37f4c3d..c66d78febd834 100644 --- a/tests/baselines/reference/jsDeclarationsClasses.js +++ b/tests/baselines/reference/jsDeclarationsClasses.js @@ -222,18 +222,22 @@ exports.A = A; var B = /** @class */ (function () { function B() { } - B.cat = "cat"; + (function () { + B.cat = "cat"; + }).call(B); return B; }()); exports.B = B; var C = /** @class */ (function () { function C() { } - C.Cls = /** @class */ (function () { - function class_1() { - } - return class_1; - }()); + (function () { + C.Cls = /** @class */ (function () { + function class_1() { + } + return class_1; + }()); + }).call(C); return C; }()); exports.C = C; @@ -314,7 +318,9 @@ var E = /** @class */ (function () { enumerable: false, configurable: true }); - E.staticInitializedField = 12; + (function () { + E.staticInitializedField = 12; + }).call(E); return E; }()); exports.E = E; diff --git a/tests/baselines/reference/jsDeclarationsComputedNames.js b/tests/baselines/reference/jsDeclarationsComputedNames.js index 127b4604583da..28dba8aee58c6 100644 --- a/tests/baselines/reference/jsDeclarationsComputedNames.js +++ b/tests/baselines/reference/jsDeclarationsComputedNames.js @@ -61,7 +61,9 @@ var MyClass = /** @class */ (function () { } var _a, _b; _a = TopLevelSym, _b = InnerSym; - MyClass[_a] = 12; + (function () { + MyClass[_a] = 12; + }).call(MyClass); return MyClass; }()); exports.MyClass = MyClass; diff --git a/tests/baselines/reference/jsDeclarationsDefaultsErr.js b/tests/baselines/reference/jsDeclarationsDefaultsErr.js index b805043e1685a..4076367342830 100644 --- a/tests/baselines/reference/jsDeclarationsDefaultsErr.js +++ b/tests/baselines/reference/jsDeclarationsDefaultsErr.js @@ -35,7 +35,9 @@ var Cls = /** @class */ (function () { function Cls() { this.x = 12; } - Cls.y = "ok"; + (function () { + Cls.y = "ok"; + }).call(Cls); return Cls; }()); exports.default = Cls; diff --git a/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance2.js b/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance2.js index 2b03f73a4f9d0..0f120c7fdb189 100644 --- a/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance2.js +++ b/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance2.js @@ -11,7 +11,9 @@ var Foo = /** @class */ (function () { function Foo() { this.member = 10; } - Foo.stat = 10; + (function () { + Foo.stat = 10; + }).call(Foo); return Foo; }()); module.exports = new Foo(); diff --git a/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance3.js b/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance3.js index 3d8a67223a83f..32df8cc32abca 100644 --- a/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance3.js +++ b/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance3.js @@ -13,7 +13,9 @@ var Foo = /** @class */ (function () { function Foo() { this.member = 10; } - Foo.stat = 10; + (function () { + Foo.stat = 10; + }).call(Foo); return Foo; }()); module.exports = new Foo(); diff --git a/tests/baselines/reference/newTarget.es5.js b/tests/baselines/reference/newTarget.es5.js index 505631318d42e..3e75e55d82969 100644 --- a/tests/baselines/reference/newTarget.es5.js +++ b/tests/baselines/reference/newTarget.es5.js @@ -58,10 +58,12 @@ var A = /** @class */ (function () { var a = _newTarget; var b = function () { return _newTarget; }; } - A.c = function _a() { - var _newTarget = this && this instanceof _a ? this.constructor : void 0; - return _newTarget; - }; + (function () { + A.c = function _a() { + var _newTarget = this && this instanceof _a ? this.constructor : void 0; + return _newTarget; + }; + }).call(A); return A; }()); var B = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/newTarget.es6.js b/tests/baselines/reference/newTarget.es6.js index 2bd95ff9f9871..12e9062ae0ddd 100644 --- a/tests/baselines/reference/newTarget.es6.js +++ b/tests/baselines/reference/newTarget.es6.js @@ -40,7 +40,9 @@ class A { const b = () => new.target; } } -A.c = function () { return new.target; }; +(function () { + A.c = function () { return new.target; }; +}).call(A); class B extends A { constructor() { super(); diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic3.js b/tests/baselines/reference/parserAccessibilityAfterStatic3.js index 685822e7cd3d8..27c16c69c8d89 100644 --- a/tests/baselines/reference/parserAccessibilityAfterStatic3.js +++ b/tests/baselines/reference/parserAccessibilityAfterStatic3.js @@ -9,6 +9,8 @@ static public = 1; var Outer = /** @class */ (function () { function Outer() { } - Outer.public = 1; + (function () { + Outer.public = 1; + }).call(Outer); return Outer; }()); diff --git a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js index 117b7f7d9a2fe..a4549c48dc1ec 100644 --- a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js +++ b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js @@ -41,8 +41,10 @@ var Shapes; } // Instance member Point.prototype.getDist = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; - // Static member - Point.origin = new Point(0, 0); + (function () { + // Static member + Point.origin = new Point(0, 0); + }).call(Point); return Point; }()); Shapes.Point = Point; diff --git a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js index 2ff2b37182226..be3628b441a3f 100644 --- a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js +++ b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js @@ -41,8 +41,10 @@ var Shapes; } // Instance member Point.prototype.getDist = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; - // Static member - Point.origin = new Point(0, 0); + (function () { + // Static member + Point.origin = new Point(0, 0); + }).call(Point); return Point; }()); Shapes.Point = Point; diff --git a/tests/baselines/reference/parserharness.js b/tests/baselines/reference/parserharness.js index 6fe11051dc7bf..6730c158a5058 100644 --- a/tests/baselines/reference/parserharness.js +++ b/tests/baselines/reference/parserharness.js @@ -2381,9 +2381,11 @@ var Harness; errorHandlerStack[errorHandlerStack.length - 1](e); } }; - // The current stack of Runnable objects - Runnable.currentStack = []; - Runnable.errorHandlerStack = []; + (function () { + // The current stack of Runnable objects + Runnable.currentStack = []; + Runnable.errorHandlerStack = []; + }).call(Runnable); return Runnable; }()); Harness.Runnable = Runnable; diff --git a/tests/baselines/reference/privacyCannotNameVarTypeDeclFile.js b/tests/baselines/reference/privacyCannotNameVarTypeDeclFile.js index 91862eec66118..09c77d21fbceb 100644 --- a/tests/baselines/reference/privacyCannotNameVarTypeDeclFile.js +++ b/tests/baselines/reference/privacyCannotNameVarTypeDeclFile.js @@ -163,10 +163,12 @@ var publicClassWithWithPrivatePropertyTypes = /** @class */ (function () { this.myPublicProperty1 = exporter.createExportedWidget3(); // Error this.myPrivateProperty1 = exporter.createExportedWidget3(); } - publicClassWithWithPrivatePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget1(); // Error - publicClassWithWithPrivatePropertyTypes.myPrivateStaticProperty = exporter.createExportedWidget1(); - publicClassWithWithPrivatePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget3(); // Error - publicClassWithWithPrivatePropertyTypes.myPrivateStaticProperty1 = exporter.createExportedWidget3(); + (function () { + publicClassWithWithPrivatePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget1(); // Error + publicClassWithWithPrivatePropertyTypes.myPrivateStaticProperty = exporter.createExportedWidget1(); + publicClassWithWithPrivatePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget3(); // Error + publicClassWithWithPrivatePropertyTypes.myPrivateStaticProperty1 = exporter.createExportedWidget3(); + }).call(publicClassWithWithPrivatePropertyTypes); return publicClassWithWithPrivatePropertyTypes; }()); exports.publicClassWithWithPrivatePropertyTypes = publicClassWithWithPrivatePropertyTypes; @@ -177,10 +179,12 @@ var privateClassWithWithPrivatePropertyTypes = /** @class */ (function () { this.myPublicProperty1 = exporter.createExportedWidget3(); this.myPrivateProperty1 = exporter.createExportedWidget3(); } - privateClassWithWithPrivatePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget1(); - privateClassWithWithPrivatePropertyTypes.myPrivateStaticProperty = exporter.createExportedWidget1(); - privateClassWithWithPrivatePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget3(); - privateClassWithWithPrivatePropertyTypes.myPrivateStaticProperty1 = exporter.createExportedWidget3(); + (function () { + privateClassWithWithPrivatePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget1(); + privateClassWithWithPrivatePropertyTypes.myPrivateStaticProperty = exporter.createExportedWidget1(); + privateClassWithWithPrivatePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget3(); + privateClassWithWithPrivatePropertyTypes.myPrivateStaticProperty1 = exporter.createExportedWidget3(); + }).call(privateClassWithWithPrivatePropertyTypes); return privateClassWithWithPrivatePropertyTypes; }()); exports.publicVarWithPrivatePropertyTypes = exporter.createExportedWidget1(); // Error @@ -192,8 +196,10 @@ var publicClassWithPrivateModulePropertyTypes = /** @class */ (function () { this.myPublicProperty = exporter.createExportedWidget2(); // Error this.myPublicProperty1 = exporter.createExportedWidget4(); // Error } - publicClassWithPrivateModulePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget2(); // Error - publicClassWithPrivateModulePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget4(); // Error + (function () { + publicClassWithPrivateModulePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget2(); // Error + publicClassWithPrivateModulePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget4(); // Error + }).call(publicClassWithPrivateModulePropertyTypes); return publicClassWithPrivateModulePropertyTypes; }()); exports.publicClassWithPrivateModulePropertyTypes = publicClassWithPrivateModulePropertyTypes; @@ -204,8 +210,10 @@ var privateClassWithPrivateModulePropertyTypes = /** @class */ (function () { this.myPublicProperty = exporter.createExportedWidget2(); this.myPublicProperty1 = exporter.createExportedWidget4(); } - privateClassWithPrivateModulePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget2(); - privateClassWithPrivateModulePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget4(); + (function () { + privateClassWithPrivateModulePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget2(); + privateClassWithPrivateModulePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget4(); + }).call(privateClassWithPrivateModulePropertyTypes); return privateClassWithPrivateModulePropertyTypes; }()); var privateVarWithPrivateModulePropertyTypes = exporter.createExportedWidget2(); diff --git a/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js b/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js index caeb43d15a3e9..bd4b4accb6191 100644 --- a/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js +++ b/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js @@ -16,4 +16,6 @@ class A { } } _foo = new WeakMap(), _prop = new WeakMap(); -A.inst = new A(); +(function () { + A.inst = new A(); +}).call(A); diff --git a/tests/baselines/reference/privateNameAndStaticInitializer(target=esnext).js b/tests/baselines/reference/privateNameAndStaticInitializer(target=esnext).js index 3387d0b4d1a52..3fa25578c6c55 100644 --- a/tests/baselines/reference/privateNameAndStaticInitializer(target=esnext).js +++ b/tests/baselines/reference/privateNameAndStaticInitializer(target=esnext).js @@ -16,4 +16,6 @@ class A { #foo; #prop; } -A.inst = new A(); +(function () { + A.inst = new A(); +}).call(A); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index b17b950cbf530..12070a76e6950 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -34,6 +34,8 @@ var A = /** @class */ (function () { }); var _field, _sField; _field = new WeakMap(), _sField = new WeakMap(); - _sField.set(A, "hello world"); + (function () { + _sField.set(A, "hello world"); + }).call(A); return A; }()); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es5).js b/tests/baselines/reference/privateNameES5Ban(target=es5).js index b17b950cbf530..12070a76e6950 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -34,6 +34,8 @@ var A = /** @class */ (function () { }); var _field, _sField; _field = new WeakMap(), _sField = new WeakMap(); - _sField.set(A, "hello world"); + (function () { + _sField.set(A, "hello world"); + }).call(A); return A; }()); diff --git a/tests/baselines/reference/privateNameFieldsESNext.js b/tests/baselines/reference/privateNameFieldsESNext.js index acc37caa3cc8f..9586afee29d3c 100644 --- a/tests/baselines/reference/privateNameFieldsESNext.js +++ b/tests/baselines/reference/privateNameFieldsESNext.js @@ -43,4 +43,6 @@ class C { } #something; } -C.#m = "test"; +(function () { + C.#m = "test"; +}).call(C); diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index dfba142f9aa53..1a17b28cf7718 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -32,7 +32,9 @@ class Parent { } } _foo = new WeakMap(), _bar = new WeakMap(); -_bar.set(Parent, 5); +(function () { + _bar.set(Parent, 5); +}).call(Parent); class Child extends Parent { constructor() { super(...arguments); diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index 0d0069a47a9ad..10988fcba2e86 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -34,7 +34,9 @@ class Parent { } } _foo = new WeakMap(), _bar = new WeakMap(); -_bar.set(Parent, 5); +(function () { + _bar.set(Parent, 5); +}).call(Parent); class Child extends Parent { constructor() { super(...arguments); diff --git a/tests/baselines/reference/privateNamesInNestedClasses-2.js b/tests/baselines/reference/privateNamesInNestedClasses-2.js index 896beb6308339..02157f0b281ae 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-2.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-2.js @@ -42,4 +42,6 @@ class A { } } _x = new WeakMap(); -_x.set(A, 5); +(function () { + _x.set(A, 5); +}).call(A); diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index 9575d6d89c57d..7649aa41be77d 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -31,11 +31,15 @@ class A { } } _foo = new WeakMap(), _foo_1 = new WeakMap(); -_foo_1.set(A, true); // error (duplicate) +(function () { + _foo_1.set(A, true); // error (duplicate) +}).call(A); class B { test(x) { __classPrivateFieldGet(x, _foo_2); // error (#foo is a static property on B, not an instance property) } } _foo_2 = new WeakMap(); -_foo_2.set(B, true); +(function () { + _foo_2.set(B, true); +}).call(B); diff --git a/tests/baselines/reference/privateStaticMemberAccessibility.js b/tests/baselines/reference/privateStaticMemberAccessibility.js index 34498e90b4fff..1178a44f342b3 100644 --- a/tests/baselines/reference/privateStaticMemberAccessibility.js +++ b/tests/baselines/reference/privateStaticMemberAccessibility.js @@ -36,6 +36,8 @@ var Derived = /** @class */ (function (_super) { _this.bing = function () { return Base.foo; }; // error return _this; } - Derived.bar = Base.foo; // error + (function () { + Derived.bar = Base.foo; // error + }).call(Derived); return Derived; }(Base)); diff --git a/tests/baselines/reference/propertyAccessibility2.js b/tests/baselines/reference/propertyAccessibility2.js index ddd028497f891..32bd3e6de28c5 100644 --- a/tests/baselines/reference/propertyAccessibility2.js +++ b/tests/baselines/reference/propertyAccessibility2.js @@ -9,7 +9,9 @@ var c = C.x; var C = /** @class */ (function () { function C() { } - C.x = 1; + (function () { + C.x = 1; + }).call(C); return C; }()); var c = C.x; diff --git a/tests/baselines/reference/quotedPropertyName2.js b/tests/baselines/reference/quotedPropertyName2.js index 6d6ad4f0c88a6..65ada5a7ac806 100644 --- a/tests/baselines/reference/quotedPropertyName2.js +++ b/tests/baselines/reference/quotedPropertyName2.js @@ -7,6 +7,8 @@ class Test1 { var Test1 = /** @class */ (function () { function Test1() { } - Test1["prop1"] = 0; + (function () { + Test1["prop1"] = 0; + }).call(Test1); return Test1; }()); diff --git a/tests/baselines/reference/reactDefaultPropsInferenceSuccess.js b/tests/baselines/reference/reactDefaultPropsInferenceSuccess.js index ec60bfcaf2977..a4a45f0a76aba 100644 --- a/tests/baselines/reference/reactDefaultPropsInferenceSuccess.js +++ b/tests/baselines/reference/reactDefaultPropsInferenceSuccess.js @@ -99,9 +99,11 @@ var FieldFeedback = /** @class */ (function (_super) { FieldFeedback.prototype.render = function () { return react_1["default"].createElement("div", null, "Hello"); }; - FieldFeedback.defaultProps = { - when: function () { return true; } - }; + (function () { + FieldFeedback.defaultProps = { + when: function () { return true; } + }; + }).call(FieldFeedback); return FieldFeedback; }(react_1["default"].Component)); // OK @@ -116,9 +118,11 @@ var FieldFeedbackBeta = /** @class */ (function (_super) { FieldFeedbackBeta.prototype.render = function () { return react_1["default"].createElement("div", null, "Hello"); }; - FieldFeedbackBeta.defaultProps = { - when: function () { return true; } - }; + (function () { + FieldFeedbackBeta.defaultProps = { + when: function () { return true; } + }; + }).call(FieldFeedbackBeta); return FieldFeedbackBeta; }(react_1["default"].Component)); // OK @@ -134,9 +138,11 @@ var FieldFeedback2 = /** @class */ (function (_super) { this.props.when("now"); // OK, always defined return react_1["default"].createElement("div", null, "Hello"); }; - FieldFeedback2.defaultProps = { - when: function () { return true; } - }; + (function () { + FieldFeedback2.defaultProps = { + when: function () { return true; } + }; + }).call(FieldFeedback2); return FieldFeedback2; }(FieldFeedback)); // OK diff --git a/tests/baselines/reference/reassignStaticProp.js b/tests/baselines/reference/reassignStaticProp.js index 6c34c01e51086..045486dcded73 100644 --- a/tests/baselines/reference/reassignStaticProp.js +++ b/tests/baselines/reference/reassignStaticProp.js @@ -15,6 +15,8 @@ class foo { var foo = /** @class */ (function () { function foo() { } - foo.bar = 1; + (function () { + foo.bar = 1; + }).call(foo); return foo; }()); diff --git a/tests/baselines/reference/returnTypePredicateIsInstantiateInContextOfTarget.js b/tests/baselines/reference/returnTypePredicateIsInstantiateInContextOfTarget.js index b735359dc7009..ee7d3d437c913 100644 --- a/tests/baselines/reference/returnTypePredicateIsInstantiateInContextOfTarget.js +++ b/tests/baselines/reference/returnTypePredicateIsInstantiateInContextOfTarget.js @@ -43,9 +43,11 @@ var TestComponent = /** @class */ (function (_super) { TestComponent.isAny = function (obj) { return true; }; - TestComponent.defaultProps = { - isAny: TestComponent.isAny - }; + (function () { + TestComponent.defaultProps = { + isAny: TestComponent.isAny + }; + }).call(TestComponent); return TestComponent; }(React.Component)); var TestRender = function () { return React.createElement(TestComponent, null); }; diff --git a/tests/baselines/reference/scopeCheckStaticInitializer.js b/tests/baselines/reference/scopeCheckStaticInitializer.js index a03cce6e0ac9e..95942ac742d91 100644 --- a/tests/baselines/reference/scopeCheckStaticInitializer.js +++ b/tests/baselines/reference/scopeCheckStaticInitializer.js @@ -20,11 +20,13 @@ var X = /** @class */ (function () { function X() { } X.method = function () { }; - X.illegalBeforeProperty = X.data; - X.okBeforeMethod = X.method; - X.illegal2 = After.data; - X.illegal3 = After.method; - X.data = 13; + (function () { + X.illegalBeforeProperty = X.data; + X.okBeforeMethod = X.method; + X.illegal2 = After.data; + X.illegal3 = After.method; + X.data = 13; + }).call(X); return X; }()); var After = /** @class */ (function () { @@ -32,6 +34,8 @@ var After = /** @class */ (function () { } After.method = function () { }; ; - After.data = 12; + (function () { + After.data = 12; + }).call(After); return After; }()); diff --git a/tests/baselines/reference/sourceMap-FileWithComments.js b/tests/baselines/reference/sourceMap-FileWithComments.js index dc76921c0389f..0dd56810ce4dc 100644 --- a/tests/baselines/reference/sourceMap-FileWithComments.js +++ b/tests/baselines/reference/sourceMap-FileWithComments.js @@ -48,8 +48,10 @@ var Shapes; } // Instance member Point.prototype.getDist = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; - // Static member - Point.origin = new Point(0, 0); + (function () { + // Static member + Point.origin = new Point(0, 0); + }).call(Point); return Point; }()); Shapes.Point = Point; diff --git a/tests/baselines/reference/sourceMap-FileWithComments.js.map b/tests/baselines/reference/sourceMap-FileWithComments.js.map index f24767e460dbb..7e7d55f163d25 100644 --- a/tests/baselines/reference/sourceMap-FileWithComments.js.map +++ b/tests/baselines/reference/sourceMap-FileWithComments.js.map @@ -1,3 +1,3 @@ //// [sourceMap-FileWithComments.js.map] -{"version":3,"file":"sourceMap-FileWithComments.js","sourceRoot":"","sources":["sourceMap-FileWithComments.ts"],"names":[],"mappings":"AAKA,SAAS;AACT,IAAO,MAAM,CAwBZ;AAxBD,WAAO,MAAM;IAET,QAAQ;IACR;QACI,cAAc;QACd,eAAmB,CAAS,EAAS,CAAS;YAA3B,MAAC,GAAD,CAAC,CAAQ;YAAS,MAAC,GAAD,CAAC,CAAQ;QAAI,CAAC;QAEnD,kBAAkB;QAClB,uBAAO,GAAP,cAAY,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElE,gBAAgB;QACT,YAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,YAAC;KAAA,AATD,IASC;IATY,YAAK,QASjB,CAAA;IAED,+BAA+B;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;IAEX,SAAgB,GAAG;IACnB,CAAC;IADe,UAAG,MAClB,CAAA;IAED;;MAEE;IACF,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,CAAC,EAxBM,MAAM,KAAN,MAAM,QAwBZ;AAED,qBAAqB;AACrB,IAAI,CAAC,GAAW,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC"} -//// https://sokra.github.io/source-map-visualization#base64,Ly8gTW9kdWxlDQp2YXIgU2hhcGVzOw0KKGZ1bmN0aW9uIChTaGFwZXMpIHsNCiAgICAvLyBDbGFzcw0KICAgIHZhciBQb2ludCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgLy8gQ29uc3RydWN0b3INCiAgICAgICAgZnVuY3Rpb24gUG9pbnQoeCwgeSkgew0KICAgICAgICAgICAgdGhpcy54ID0geDsNCiAgICAgICAgICAgIHRoaXMueSA9IHk7DQogICAgICAgIH0NCiAgICAgICAgLy8gSW5zdGFuY2UgbWVtYmVyDQogICAgICAgIFBvaW50LnByb3RvdHlwZS5nZXREaXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7IH07DQogICAgICAgIC8vIFN0YXRpYyBtZW1iZXINCiAgICAgICAgUG9pbnQub3JpZ2luID0gbmV3IFBvaW50KDAsIDApOw0KICAgICAgICByZXR1cm4gUG9pbnQ7DQogICAgfSgpKTsNCiAgICBTaGFwZXMuUG9pbnQgPSBQb2ludDsNCiAgICAvLyBWYXJpYWJsZSBjb21tZW50IGFmdGVyIGNsYXNzDQogICAgdmFyIGEgPSAxMDsNCiAgICBmdW5jdGlvbiBmb28oKSB7DQogICAgfQ0KICAgIFNoYXBlcy5mb28gPSBmb287DQogICAgLyoqICBjb21tZW50IGFmdGVyIGZ1bmN0aW9uDQogICAgKiB0aGlzIGlzIGFub3RoZXIgY29tbWVudA0KICAgICovDQogICAgdmFyIGIgPSAxMDsNCn0pKFNoYXBlcyB8fCAoU2hhcGVzID0ge30pKTsNCi8qKiBMb2NhbCBWYXJpYWJsZSAqLw0KdmFyIHAgPSBuZXcgU2hhcGVzLlBvaW50KDMsIDQpOw0KdmFyIGRpc3QgPSBwLmdldERpc3QoKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvdXJjZU1hcC1GaWxlV2l0aENvbW1lbnRzLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwLUZpbGVXaXRoQ29tbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXAtRmlsZVdpdGhDb21tZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxTQUFTO0FBQ1QsSUFBTyxNQUFNLENBd0JaO0FBeEJELFdBQU8sTUFBTTtJQUVULFFBQVE7SUFDUjtRQUNJLGNBQWM7UUFDZCxlQUFtQixDQUFTLEVBQVMsQ0FBUztZQUEzQixNQUFDLEdBQUQsQ0FBQyxDQUFRO1lBQVMsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUFJLENBQUM7UUFFbkQsa0JBQWtCO1FBQ2xCLHVCQUFPLEdBQVAsY0FBWSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRSxnQkFBZ0I7UUFDVCxZQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLFlBQUM7S0FBQSxBQVRELElBU0M7SUFUWSxZQUFLLFFBU2pCLENBQUE7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRVgsU0FBZ0IsR0FBRztJQUNuQixDQUFDO0lBRGUsVUFBRyxNQUNsQixDQUFBO0lBRUQ7O01BRUU7SUFDRixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZixDQUFDLEVBeEJNLE1BQU0sS0FBTixNQUFNLFFBd0JaO0FBRUQscUJBQXFCO0FBQ3JCLElBQUksQ0FBQyxHQUFXLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDIn0=,Ly8gSW50ZXJmYWNlCmludGVyZmFjZSBJUG9pbnQgewogICAgZ2V0RGlzdCgpOiBudW1iZXI7Cn0KCi8vIE1vZHVsZQptb2R1bGUgU2hhcGVzIHsKCiAgICAvLyBDbGFzcwogICAgZXhwb3J0IGNsYXNzIFBvaW50IGltcGxlbWVudHMgSVBvaW50IHsKICAgICAgICAvLyBDb25zdHJ1Y3RvcgogICAgICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIsIHB1YmxpYyB5OiBudW1iZXIpIHsgfQoKICAgICAgICAvLyBJbnN0YW5jZSBtZW1iZXIKICAgICAgICBnZXREaXN0KCkgeyByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7IH0KCiAgICAgICAgLy8gU3RhdGljIG1lbWJlcgogICAgICAgIHN0YXRpYyBvcmlnaW4gPSBuZXcgUG9pbnQoMCwgMCk7CiAgICB9CgogICAgLy8gVmFyaWFibGUgY29tbWVudCBhZnRlciBjbGFzcwogICAgdmFyIGEgPSAxMDsKCiAgICBleHBvcnQgZnVuY3Rpb24gZm9vKCkgewogICAgfQoKICAgIC8qKiAgY29tbWVudCBhZnRlciBmdW5jdGlvbgogICAgKiB0aGlzIGlzIGFub3RoZXIgY29tbWVudCAKICAgICovCiAgICB2YXIgYiA9IDEwOwp9CgovKiogTG9jYWwgVmFyaWFibGUgKi8KdmFyIHA6IElQb2ludCA9IG5ldyBTaGFwZXMuUG9pbnQoMywgNCk7CnZhciBkaXN0ID0gcC5nZXREaXN0KCk7 +{"version":3,"file":"sourceMap-FileWithComments.js","sourceRoot":"","sources":["sourceMap-FileWithComments.ts"],"names":[],"mappings":"AAKA,SAAS;AACT,IAAO,MAAM,CAwBZ;AAxBD,WAAO,MAAM;IAET,QAAQ;IACR;QACI,cAAc;QACd,eAAmB,CAAS,EAAS,CAAS;YAA3B,MAAC,GAAD,CAAC,CAAQ;YAAS,MAAC,GAAD,CAAC,CAAQ;QAAI,CAAC;QAEnD,kBAAkB;QAClB,uBAAO,GAAP,cAAY,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAElE,gBAAgB;YACT,YAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;QACpC,YAAC;KAAA,AATD,IASC;IATY,YAAK,QASjB,CAAA;IAED,+BAA+B;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;IAEX,SAAgB,GAAG;IACnB,CAAC;IADe,UAAG,MAClB,CAAA;IAED;;MAEE;IACF,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,CAAC,EAxBM,MAAM,KAAN,MAAM,QAwBZ;AAED,qBAAqB;AACrB,IAAI,CAAC,GAAW,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC"} +//// https://sokra.github.io/source-map-visualization#base64,Ly8gTW9kdWxlDQp2YXIgU2hhcGVzOw0KKGZ1bmN0aW9uIChTaGFwZXMpIHsNCiAgICAvLyBDbGFzcw0KICAgIHZhciBQb2ludCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgLy8gQ29uc3RydWN0b3INCiAgICAgICAgZnVuY3Rpb24gUG9pbnQoeCwgeSkgew0KICAgICAgICAgICAgdGhpcy54ID0geDsNCiAgICAgICAgICAgIHRoaXMueSA9IHk7DQogICAgICAgIH0NCiAgICAgICAgLy8gSW5zdGFuY2UgbWVtYmVyDQogICAgICAgIFBvaW50LnByb3RvdHlwZS5nZXREaXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7IH07DQogICAgICAgIChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAvLyBTdGF0aWMgbWVtYmVyDQogICAgICAgICAgICBQb2ludC5vcmlnaW4gPSBuZXcgUG9pbnQoMCwgMCk7DQogICAgICAgIH0pLmNhbGwoUG9pbnQpOw0KICAgICAgICByZXR1cm4gUG9pbnQ7DQogICAgfSgpKTsNCiAgICBTaGFwZXMuUG9pbnQgPSBQb2ludDsNCiAgICAvLyBWYXJpYWJsZSBjb21tZW50IGFmdGVyIGNsYXNzDQogICAgdmFyIGEgPSAxMDsNCiAgICBmdW5jdGlvbiBmb28oKSB7DQogICAgfQ0KICAgIFNoYXBlcy5mb28gPSBmb287DQogICAgLyoqICBjb21tZW50IGFmdGVyIGZ1bmN0aW9uDQogICAgKiB0aGlzIGlzIGFub3RoZXIgY29tbWVudA0KICAgICovDQogICAgdmFyIGIgPSAxMDsNCn0pKFNoYXBlcyB8fCAoU2hhcGVzID0ge30pKTsNCi8qKiBMb2NhbCBWYXJpYWJsZSAqLw0KdmFyIHAgPSBuZXcgU2hhcGVzLlBvaW50KDMsIDQpOw0KdmFyIGRpc3QgPSBwLmdldERpc3QoKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvdXJjZU1hcC1GaWxlV2l0aENvbW1lbnRzLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwLUZpbGVXaXRoQ29tbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXAtRmlsZVdpdGhDb21tZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxTQUFTO0FBQ1QsSUFBTyxNQUFNLENBd0JaO0FBeEJELFdBQU8sTUFBTTtJQUVULFFBQVE7SUFDUjtRQUNJLGNBQWM7UUFDZCxlQUFtQixDQUFTLEVBQVMsQ0FBUztZQUEzQixNQUFDLEdBQUQsQ0FBQyxDQUFRO1lBQVMsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUFJLENBQUM7UUFFbkQsa0JBQWtCO1FBQ2xCLHVCQUFPLEdBQVAsY0FBWSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFbEUsZ0JBQWdCO1lBQ1QsWUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFDcEMsWUFBQztLQUFBLEFBVEQsSUFTQztJQVRZLFlBQUssUUFTakIsQ0FBQTtJQUVELCtCQUErQjtJQUMvQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFWCxTQUFnQixHQUFHO0lBQ25CLENBQUM7SUFEZSxVQUFHLE1BQ2xCLENBQUE7SUFFRDs7TUFFRTtJQUNGLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLENBQUMsRUF4Qk0sTUFBTSxLQUFOLE1BQU0sUUF3Qlo7QUFFRCxxQkFBcUI7QUFDckIsSUFBSSxDQUFDLEdBQVcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMifQ==,Ly8gSW50ZXJmYWNlCmludGVyZmFjZSBJUG9pbnQgewogICAgZ2V0RGlzdCgpOiBudW1iZXI7Cn0KCi8vIE1vZHVsZQptb2R1bGUgU2hhcGVzIHsKCiAgICAvLyBDbGFzcwogICAgZXhwb3J0IGNsYXNzIFBvaW50IGltcGxlbWVudHMgSVBvaW50IHsKICAgICAgICAvLyBDb25zdHJ1Y3RvcgogICAgICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIsIHB1YmxpYyB5OiBudW1iZXIpIHsgfQoKICAgICAgICAvLyBJbnN0YW5jZSBtZW1iZXIKICAgICAgICBnZXREaXN0KCkgeyByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7IH0KCiAgICAgICAgLy8gU3RhdGljIG1lbWJlcgogICAgICAgIHN0YXRpYyBvcmlnaW4gPSBuZXcgUG9pbnQoMCwgMCk7CiAgICB9CgogICAgLy8gVmFyaWFibGUgY29tbWVudCBhZnRlciBjbGFzcwogICAgdmFyIGEgPSAxMDsKCiAgICBleHBvcnQgZnVuY3Rpb24gZm9vKCkgewogICAgfQoKICAgIC8qKiAgY29tbWVudCBhZnRlciBmdW5jdGlvbgogICAgKiB0aGlzIGlzIGFub3RoZXIgY29tbWVudCAKICAgICovCiAgICB2YXIgYiA9IDEwOwp9CgovKiogTG9jYWwgVmFyaWFibGUgKi8KdmFyIHA6IElQb2ludCA9IG5ldyBTaGFwZXMuUG9pbnQoMywgNCk7CnZhciBkaXN0ID0gcC5nZXREaXN0KCk7 diff --git a/tests/baselines/reference/sourceMap-FileWithComments.sourcemap.txt b/tests/baselines/reference/sourceMap-FileWithComments.sourcemap.txt index 508930720659a..a431a8399967c 100644 --- a/tests/baselines/reference/sourceMap-FileWithComments.sourcemap.txt +++ b/tests/baselines/reference/sourceMap-FileWithComments.sourcemap.txt @@ -261,61 +261,63 @@ sourceFile:sourceMap-FileWithComments.ts 27>Emitted(12, 102) Source(15, 74) + SourceIndex(0) 28>Emitted(12, 103) Source(15, 75) + SourceIndex(0) --- ->>> // Static member -1 >^^^^^^^^ -2 > ^^^^^^^^^^^^^^^^ -3 > ^^^^^^^^^^^^^^^^-> +>>> (function () { +>>> // Static member +1 >^^^^^^^^^^^^ +2 > ^^^^^^^^^^^^^^^^ +3 > ^^^^^^^^^^^^^^^^-> 1 > > > -2 > // Static member -1 >Emitted(13, 9) Source(17, 9) + SourceIndex(0) -2 >Emitted(13, 25) Source(17, 25) + SourceIndex(0) +2 > // Static member +1 >Emitted(14, 13) Source(17, 9) + SourceIndex(0) +2 >Emitted(14, 29) Source(17, 25) + SourceIndex(0) --- ->>> Point.origin = new Point(0, 0); -1->^^^^^^^^ -2 > ^^^^^^^^^^^^ -3 > ^^^ -4 > ^^^^ -5 > ^^^^^ -6 > ^ -7 > ^ -8 > ^^ -9 > ^ -10> ^ -11> ^ +>>> Point.origin = new Point(0, 0); +1->^^^^^^^^^^^^ +2 > ^^^^^^^^^^^^ +3 > ^^^ +4 > ^^^^ +5 > ^^^^^ +6 > ^ +7 > ^ +8 > ^^ +9 > ^ +10> ^ +11> ^ 1-> > static -2 > origin -3 > = -4 > new -5 > Point -6 > ( -7 > 0 -8 > , -9 > 0 -10> ) -11> ; -1->Emitted(14, 9) Source(18, 16) + SourceIndex(0) -2 >Emitted(14, 21) Source(18, 22) + SourceIndex(0) -3 >Emitted(14, 24) Source(18, 25) + SourceIndex(0) -4 >Emitted(14, 28) Source(18, 29) + SourceIndex(0) -5 >Emitted(14, 33) Source(18, 34) + SourceIndex(0) -6 >Emitted(14, 34) Source(18, 35) + SourceIndex(0) -7 >Emitted(14, 35) Source(18, 36) + SourceIndex(0) -8 >Emitted(14, 37) Source(18, 38) + SourceIndex(0) -9 >Emitted(14, 38) Source(18, 39) + SourceIndex(0) -10>Emitted(14, 39) Source(18, 40) + SourceIndex(0) -11>Emitted(14, 40) Source(18, 41) + SourceIndex(0) +2 > origin +3 > = +4 > new +5 > Point +6 > ( +7 > 0 +8 > , +9 > 0 +10> ) +11> ; +1->Emitted(15, 13) Source(18, 16) + SourceIndex(0) +2 >Emitted(15, 25) Source(18, 22) + SourceIndex(0) +3 >Emitted(15, 28) Source(18, 25) + SourceIndex(0) +4 >Emitted(15, 32) Source(18, 29) + SourceIndex(0) +5 >Emitted(15, 37) Source(18, 34) + SourceIndex(0) +6 >Emitted(15, 38) Source(18, 35) + SourceIndex(0) +7 >Emitted(15, 39) Source(18, 36) + SourceIndex(0) +8 >Emitted(15, 41) Source(18, 38) + SourceIndex(0) +9 >Emitted(15, 42) Source(18, 39) + SourceIndex(0) +10>Emitted(15, 43) Source(18, 40) + SourceIndex(0) +11>Emitted(15, 44) Source(18, 41) + SourceIndex(0) --- +>>> }).call(Point); >>> return Point; 1 >^^^^^^^^ 2 > ^^^^^^^^^^^^ 1 > > 2 > } -1 >Emitted(15, 9) Source(19, 5) + SourceIndex(0) -2 >Emitted(15, 21) Source(19, 6) + SourceIndex(0) +1 >Emitted(17, 9) Source(19, 5) + SourceIndex(0) +2 >Emitted(17, 21) Source(19, 6) + SourceIndex(0) --- >>> }()); 1 >^^^^^ @@ -334,9 +336,9 @@ sourceFile:sourceMap-FileWithComments.ts > // Static member > static origin = new Point(0, 0); > } -1 >Emitted(16, 6) Source(19, 6) + SourceIndex(0) -2 >Emitted(16, 6) Source(10, 5) + SourceIndex(0) -3 >Emitted(16, 10) Source(19, 6) + SourceIndex(0) +1 >Emitted(18, 6) Source(19, 6) + SourceIndex(0) +2 >Emitted(18, 6) Source(10, 5) + SourceIndex(0) +3 >Emitted(18, 10) Source(19, 6) + SourceIndex(0) --- >>> Shapes.Point = Point; 1->^^^^ @@ -357,10 +359,10 @@ sourceFile:sourceMap-FileWithComments.ts > static origin = new Point(0, 0); > } 4 > -1->Emitted(17, 5) Source(10, 18) + SourceIndex(0) -2 >Emitted(17, 17) Source(10, 23) + SourceIndex(0) -3 >Emitted(17, 25) Source(19, 6) + SourceIndex(0) -4 >Emitted(17, 26) Source(19, 6) + SourceIndex(0) +1->Emitted(19, 5) Source(10, 18) + SourceIndex(0) +2 >Emitted(19, 17) Source(10, 23) + SourceIndex(0) +3 >Emitted(19, 25) Source(19, 6) + SourceIndex(0) +4 >Emitted(19, 26) Source(19, 6) + SourceIndex(0) --- >>> // Variable comment after class 1->^^^^ @@ -369,8 +371,8 @@ sourceFile:sourceMap-FileWithComments.ts > > 2 > // Variable comment after class -1->Emitted(18, 5) Source(21, 5) + SourceIndex(0) -2 >Emitted(18, 36) Source(21, 36) + SourceIndex(0) +1->Emitted(20, 5) Source(21, 5) + SourceIndex(0) +2 >Emitted(20, 36) Source(21, 36) + SourceIndex(0) --- >>> var a = 10; 1 >^^^^ @@ -387,12 +389,12 @@ sourceFile:sourceMap-FileWithComments.ts 4 > = 5 > 10 6 > ; -1 >Emitted(19, 5) Source(22, 5) + SourceIndex(0) -2 >Emitted(19, 9) Source(22, 9) + SourceIndex(0) -3 >Emitted(19, 10) Source(22, 10) + SourceIndex(0) -4 >Emitted(19, 13) Source(22, 13) + SourceIndex(0) -5 >Emitted(19, 15) Source(22, 15) + SourceIndex(0) -6 >Emitted(19, 16) Source(22, 16) + SourceIndex(0) +1 >Emitted(21, 5) Source(22, 5) + SourceIndex(0) +2 >Emitted(21, 9) Source(22, 9) + SourceIndex(0) +3 >Emitted(21, 10) Source(22, 10) + SourceIndex(0) +4 >Emitted(21, 13) Source(22, 13) + SourceIndex(0) +5 >Emitted(21, 15) Source(22, 15) + SourceIndex(0) +6 >Emitted(21, 16) Source(22, 16) + SourceIndex(0) --- >>> function foo() { 1->^^^^ @@ -403,9 +405,9 @@ sourceFile:sourceMap-FileWithComments.ts > 2 > export function 3 > foo -1->Emitted(20, 5) Source(24, 5) + SourceIndex(0) -2 >Emitted(20, 14) Source(24, 21) + SourceIndex(0) -3 >Emitted(20, 17) Source(24, 24) + SourceIndex(0) +1->Emitted(22, 5) Source(24, 5) + SourceIndex(0) +2 >Emitted(22, 14) Source(24, 21) + SourceIndex(0) +3 >Emitted(22, 17) Source(24, 24) + SourceIndex(0) --- >>> } 1 >^^^^ @@ -414,8 +416,8 @@ sourceFile:sourceMap-FileWithComments.ts 1 >() { > 2 > } -1 >Emitted(21, 5) Source(25, 5) + SourceIndex(0) -2 >Emitted(21, 6) Source(25, 6) + SourceIndex(0) +1 >Emitted(23, 5) Source(25, 5) + SourceIndex(0) +2 >Emitted(23, 6) Source(25, 6) + SourceIndex(0) --- >>> Shapes.foo = foo; 1->^^^^ @@ -428,10 +430,10 @@ sourceFile:sourceMap-FileWithComments.ts 3 > () { > } 4 > -1->Emitted(22, 5) Source(24, 21) + SourceIndex(0) -2 >Emitted(22, 15) Source(24, 24) + SourceIndex(0) -3 >Emitted(22, 21) Source(25, 6) + SourceIndex(0) -4 >Emitted(22, 22) Source(25, 6) + SourceIndex(0) +1->Emitted(24, 5) Source(24, 21) + SourceIndex(0) +2 >Emitted(24, 15) Source(24, 24) + SourceIndex(0) +3 >Emitted(24, 21) Source(25, 6) + SourceIndex(0) +4 >Emitted(24, 22) Source(25, 6) + SourceIndex(0) --- >>> /** comment after function 1->^^^^ @@ -439,7 +441,7 @@ sourceFile:sourceMap-FileWithComments.ts 1-> > > -1->Emitted(23, 5) Source(27, 5) + SourceIndex(0) +1->Emitted(25, 5) Source(27, 5) + SourceIndex(0) --- >>> * this is another comment >>> */ @@ -448,7 +450,7 @@ sourceFile:sourceMap-FileWithComments.ts 1->/** comment after function > * this is another comment > */ -1->Emitted(25, 7) Source(29, 7) + SourceIndex(0) +1->Emitted(27, 7) Source(29, 7) + SourceIndex(0) --- >>> var b = 10; 1->^^^^ @@ -465,12 +467,12 @@ sourceFile:sourceMap-FileWithComments.ts 4 > = 5 > 10 6 > ; -1->Emitted(26, 5) Source(30, 5) + SourceIndex(0) -2 >Emitted(26, 9) Source(30, 9) + SourceIndex(0) -3 >Emitted(26, 10) Source(30, 10) + SourceIndex(0) -4 >Emitted(26, 13) Source(30, 13) + SourceIndex(0) -5 >Emitted(26, 15) Source(30, 15) + SourceIndex(0) -6 >Emitted(26, 16) Source(30, 16) + SourceIndex(0) +1->Emitted(28, 5) Source(30, 5) + SourceIndex(0) +2 >Emitted(28, 9) Source(30, 9) + SourceIndex(0) +3 >Emitted(28, 10) Source(30, 10) + SourceIndex(0) +4 >Emitted(28, 13) Source(30, 13) + SourceIndex(0) +5 >Emitted(28, 15) Source(30, 15) + SourceIndex(0) +6 >Emitted(28, 16) Source(30, 16) + SourceIndex(0) --- >>>})(Shapes || (Shapes = {})); 1-> @@ -512,13 +514,13 @@ sourceFile:sourceMap-FileWithComments.ts > */ > var b = 10; > } -1->Emitted(27, 1) Source(31, 1) + SourceIndex(0) -2 >Emitted(27, 2) Source(31, 2) + SourceIndex(0) -3 >Emitted(27, 4) Source(7, 8) + SourceIndex(0) -4 >Emitted(27, 10) Source(7, 14) + SourceIndex(0) -5 >Emitted(27, 15) Source(7, 8) + SourceIndex(0) -6 >Emitted(27, 21) Source(7, 14) + SourceIndex(0) -7 >Emitted(27, 29) Source(31, 2) + SourceIndex(0) +1->Emitted(29, 1) Source(31, 1) + SourceIndex(0) +2 >Emitted(29, 2) Source(31, 2) + SourceIndex(0) +3 >Emitted(29, 4) Source(7, 8) + SourceIndex(0) +4 >Emitted(29, 10) Source(7, 14) + SourceIndex(0) +5 >Emitted(29, 15) Source(7, 8) + SourceIndex(0) +6 >Emitted(29, 21) Source(7, 14) + SourceIndex(0) +7 >Emitted(29, 29) Source(31, 2) + SourceIndex(0) --- >>>/** Local Variable */ 1 > @@ -528,8 +530,8 @@ sourceFile:sourceMap-FileWithComments.ts > > 2 >/** Local Variable */ -1 >Emitted(28, 1) Source(33, 1) + SourceIndex(0) -2 >Emitted(28, 22) Source(33, 22) + SourceIndex(0) +1 >Emitted(30, 1) Source(33, 1) + SourceIndex(0) +2 >Emitted(30, 22) Source(33, 22) + SourceIndex(0) --- >>>var p = new Shapes.Point(3, 4); 1-> @@ -561,20 +563,20 @@ sourceFile:sourceMap-FileWithComments.ts 12> 4 13> ) 14> ; -1->Emitted(29, 1) Source(34, 1) + SourceIndex(0) -2 >Emitted(29, 5) Source(34, 5) + SourceIndex(0) -3 >Emitted(29, 6) Source(34, 6) + SourceIndex(0) -4 >Emitted(29, 9) Source(34, 17) + SourceIndex(0) -5 >Emitted(29, 13) Source(34, 21) + SourceIndex(0) -6 >Emitted(29, 19) Source(34, 27) + SourceIndex(0) -7 >Emitted(29, 20) Source(34, 28) + SourceIndex(0) -8 >Emitted(29, 25) Source(34, 33) + SourceIndex(0) -9 >Emitted(29, 26) Source(34, 34) + SourceIndex(0) -10>Emitted(29, 27) Source(34, 35) + SourceIndex(0) -11>Emitted(29, 29) Source(34, 37) + SourceIndex(0) -12>Emitted(29, 30) Source(34, 38) + SourceIndex(0) -13>Emitted(29, 31) Source(34, 39) + SourceIndex(0) -14>Emitted(29, 32) Source(34, 40) + SourceIndex(0) +1->Emitted(31, 1) Source(34, 1) + SourceIndex(0) +2 >Emitted(31, 5) Source(34, 5) + SourceIndex(0) +3 >Emitted(31, 6) Source(34, 6) + SourceIndex(0) +4 >Emitted(31, 9) Source(34, 17) + SourceIndex(0) +5 >Emitted(31, 13) Source(34, 21) + SourceIndex(0) +6 >Emitted(31, 19) Source(34, 27) + SourceIndex(0) +7 >Emitted(31, 20) Source(34, 28) + SourceIndex(0) +8 >Emitted(31, 25) Source(34, 33) + SourceIndex(0) +9 >Emitted(31, 26) Source(34, 34) + SourceIndex(0) +10>Emitted(31, 27) Source(34, 35) + SourceIndex(0) +11>Emitted(31, 29) Source(34, 37) + SourceIndex(0) +12>Emitted(31, 30) Source(34, 38) + SourceIndex(0) +13>Emitted(31, 31) Source(34, 39) + SourceIndex(0) +14>Emitted(31, 32) Source(34, 40) + SourceIndex(0) --- >>>var dist = p.getDist(); 1 > @@ -597,14 +599,14 @@ sourceFile:sourceMap-FileWithComments.ts 7 > getDist 8 > () 9 > ; -1 >Emitted(30, 1) Source(35, 1) + SourceIndex(0) -2 >Emitted(30, 5) Source(35, 5) + SourceIndex(0) -3 >Emitted(30, 9) Source(35, 9) + SourceIndex(0) -4 >Emitted(30, 12) Source(35, 12) + SourceIndex(0) -5 >Emitted(30, 13) Source(35, 13) + SourceIndex(0) -6 >Emitted(30, 14) Source(35, 14) + SourceIndex(0) -7 >Emitted(30, 21) Source(35, 21) + SourceIndex(0) -8 >Emitted(30, 23) Source(35, 23) + SourceIndex(0) -9 >Emitted(30, 24) Source(35, 24) + SourceIndex(0) +1 >Emitted(32, 1) Source(35, 1) + SourceIndex(0) +2 >Emitted(32, 5) Source(35, 5) + SourceIndex(0) +3 >Emitted(32, 9) Source(35, 9) + SourceIndex(0) +4 >Emitted(32, 12) Source(35, 12) + SourceIndex(0) +5 >Emitted(32, 13) Source(35, 13) + SourceIndex(0) +6 >Emitted(32, 14) Source(35, 14) + SourceIndex(0) +7 >Emitted(32, 21) Source(35, 21) + SourceIndex(0) +8 >Emitted(32, 23) Source(35, 23) + SourceIndex(0) +9 >Emitted(32, 24) Source(35, 24) + SourceIndex(0) --- >>>//# sourceMappingURL=sourceMap-FileWithComments.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapValidationDecorators.js b/tests/baselines/reference/sourceMapValidationDecorators.js index 86a843f7f82c3..77b4041f9b909 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.js +++ b/tests/baselines/reference/sourceMapValidationDecorators.js @@ -88,7 +88,9 @@ var Greeter = /** @class */ (function () { enumerable: false, configurable: true }); - Greeter.x1 = 10; + (function () { + Greeter.x1 = 10; + }).call(Greeter); __decorate([ PropertyDecorator1, PropertyDecorator2(40) diff --git a/tests/baselines/reference/sourceMapValidationDecorators.js.map b/tests/baselines/reference/sourceMapValidationDecorators.js.map index 5b5471bc7bf62..b5bda4b40d524 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.js.map +++ b/tests/baselines/reference/sourceMapValidationDecorators.js.map @@ -1,3 +1,3 @@ //// [sourceMapValidationDecorators.js.map] -{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA;IACI,iBAGS,QAAgB;QAIvB,WAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,0BAAc;;QAJP,aAAQ,GAAR,QAAQ,CAAQ;IAKzB,CAAC;IAID,uBAAK,GAAL;QACI,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5C,CAAC;IAUO,oBAAE,GAAV,UAGE,CAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,sBAAI,8BAAS;aAAb;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAGE,SAAiB;YACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC9B,CAAC;;;OAPA;IAbc,UAAE,GAAW,EAAE,CAAC;IAV/B;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;wCAGtB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;sCACL;IAMlB;QACG,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;qCAGzB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;QAMpB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;4CAJzB;IAbD;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;6BACQ;IAvB7B,OAAO;QAFZ,eAAe;QACf,eAAe,CAAC,EAAE,CAAC;QAGb,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAGvB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;OAPxB,OAAO,CA4CZ;IAAD,cAAC;CAAA,AA5CD,IA4CC"} -//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCnZhciBHcmVldGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgew0KICAgIGZ1bmN0aW9uIEdyZWV0ZXIoZ3JlZXRpbmcpIHsNCiAgICAgICAgdmFyIGIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsNCiAgICAgICAgICAgIGJbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBHcmVldGVyLnByb3RvdHlwZS5ncmVldCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH07DQogICAgR3JlZXRlci5wcm90b3R5cGUuZm4gPSBmdW5jdGlvbiAoeCkgew0KICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICB9Ow0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIHsNCiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICAgICAgfSwNCiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZ3JlZXRpbmdzKSB7DQogICAgICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgICAgICB9LA0KICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwNCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlDQogICAgfSk7DQogICAgR3JlZXRlci54MSA9IDEwOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig0MCkNCiAgICBdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0IiwgbnVsbCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IyKDUwKQ0KICAgIF0sIEdyZWV0ZXIucHJvdG90eXBlLCAieCIsIHZvaWQgMCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig3MCkpDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJmbiIsIG51bGwpOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig4MCksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig5MCkpDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldGluZ3MiLCBudWxsKTsNCiAgICBfX2RlY29yYXRlKFsNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjIoNjApDQogICAgXSwgR3JlZXRlciwgIngxIiwgdm9pZCAwKTsNCiAgICBHcmVldGVyID0gX19kZWNvcmF0ZShbDQogICAgICAgIENsYXNzRGVjb3JhdG9yMSwNCiAgICAgICAgQ2xhc3NEZWNvcmF0b3IyKDEwKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDIwKSksDQogICAgICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMigzMCkpDQogICAgXSwgR3JlZXRlcik7DQogICAgcmV0dXJuIEdyZWV0ZXI7DQp9KCkpOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9c291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMubWFw,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQTtJQUNJLGlCQUdTLFFBQWdCO1FBSXZCLFdBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQsMEJBQWM7O1FBSlAsYUFBUSxHQUFSLFFBQVEsQ0FBUTtJQUt6QixDQUFDO0lBSUQsdUJBQUssR0FBTDtRQUNJLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFVTyxvQkFBRSxHQUFWLFVBR0UsQ0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsc0JBQUksOEJBQVM7YUFBYjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO2FBRUQsVUFHRSxTQUFpQjtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQVBBO0lBYmMsVUFBRSxHQUFXLEVBQUUsQ0FBQztJQVYvQjtRQUZDLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxFQUFFLENBQUM7d0NBR3RCO0lBSUQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3NDQUNMO0lBTWxCO1FBQ0csV0FBQSxtQkFBbUIsQ0FBQTtRQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO3FDQUd6QjtJQUlEO1FBRkMsa0JBQWtCO1FBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQU1wQixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7NENBSnpCO0lBYkQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDOzZCQUNRO0lBdkI3QixPQUFPO1FBRlosZUFBZTtRQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFHYixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7UUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtRQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO09BUHhCLE9BQU8sQ0E0Q1o7SUFBRCxjQUFDO0NBQUEsQUE1Q0QsSUE0Q0MifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 +{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA;IACI,iBAGS,QAAgB;QAIvB,WAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,0BAAc;;QAJP,aAAQ,GAAR,QAAQ,CAAQ;IAKzB,CAAC;IAID,uBAAK,GAAL;QACI,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5C,CAAC;IAUO,oBAAE,GAAV,UAGE,CAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,sBAAI,8BAAS;aAAb;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAGE,SAAiB;YACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC9B,CAAC;;;OAPA;;QAbc,UAAE,GAAW,EAAE,CAAC;;IAV/B;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;wCAGtB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;sCACL;IAMlB;QACG,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;qCAGzB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;QAMpB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;4CAJzB;IAbD;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;6BACQ;IAvB7B,OAAO;QAFZ,eAAe;QACf,eAAe,CAAC,EAAE,CAAC;QAGb,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAGvB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;OAPxB,OAAO,CA4CZ;IAAD,cAAC;CAAA,AA5CD,IA4CC"} +//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCnZhciBHcmVldGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgew0KICAgIGZ1bmN0aW9uIEdyZWV0ZXIoZ3JlZXRpbmcpIHsNCiAgICAgICAgdmFyIGIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsNCiAgICAgICAgICAgIGJbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBHcmVldGVyLnByb3RvdHlwZS5ncmVldCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH07DQogICAgR3JlZXRlci5wcm90b3R5cGUuZm4gPSBmdW5jdGlvbiAoeCkgew0KICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICB9Ow0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIHsNCiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICAgICAgfSwNCiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZ3JlZXRpbmdzKSB7DQogICAgICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgICAgICB9LA0KICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwNCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlDQogICAgfSk7DQogICAgKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgR3JlZXRlci54MSA9IDEwOw0KICAgIH0pLmNhbGwoR3JlZXRlcik7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IyKDQwKQ0KICAgIF0sIEdyZWV0ZXIucHJvdG90eXBlLCAiZ3JlZXQiLCBudWxsKTsNCiAgICBfX2RlY29yYXRlKFsNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjIoNTApDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJ4Iiwgdm9pZCAwKTsNCiAgICBfX2RlY29yYXRlKFsNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDcwKSkNCiAgICBdLCBHcmVldGVyLnByb3RvdHlwZSwgImZuIiwgbnVsbCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IyKDgwKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDkwKSkNCiAgICBdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIG51bGwpOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig2MCkNCiAgICBdLCBHcmVldGVyLCAieDEiLCB2b2lkIDApOw0KICAgIEdyZWV0ZXIgPSBfX2RlY29yYXRlKFsNCiAgICAgICAgQ2xhc3NEZWNvcmF0b3IxLA0KICAgICAgICBDbGFzc0RlY29yYXRvcjIoMTApLA0KICAgICAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgICAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjIoMjApKSwNCiAgICAgICAgX19wYXJhbSgxLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgxLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDMwKSkNCiAgICBdLCBHcmVldGVyKTsNCiAgICByZXR1cm4gR3JlZXRlcjsNCn0oKSk7DQovLyMgc291cmNlTWFwcGluZ1VSTD1zb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy5qcy5tYXA=,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQTtJQUNJLGlCQUdTLFFBQWdCO1FBSXZCLFdBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQsMEJBQWM7O1FBSlAsYUFBUSxHQUFSLFFBQVEsQ0FBUTtJQUt6QixDQUFDO0lBSUQsdUJBQUssR0FBTDtRQUNJLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFVTyxvQkFBRSxHQUFWLFVBR0UsQ0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsc0JBQUksOEJBQVM7YUFBYjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO2FBRUQsVUFHRSxTQUFpQjtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQVBBOztRQWJjLFVBQUUsR0FBVyxFQUFFLENBQUM7O0lBVi9CO1FBRkMsa0JBQWtCO1FBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQzt3Q0FHdEI7SUFJRDtRQUZDLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxFQUFFLENBQUM7c0NBQ0w7SUFNbEI7UUFDRyxXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7cUNBR3pCO0lBSUQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBTXBCLFdBQUEsbUJBQW1CLENBQUE7UUFDbkIsV0FBQSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTs0Q0FKekI7SUFiRDtRQUZDLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxFQUFFLENBQUM7NkJBQ1E7SUF2QjdCLE9BQU87UUFGWixlQUFlO1FBQ2YsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUdiLFdBQUEsbUJBQW1CLENBQUE7UUFDbkIsV0FBQSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUd2QixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7T0FQeEIsT0FBTyxDQTRDWjtJQUFELGNBQUM7Q0FBQSxBQTVDRCxJQTRDQyJ9,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 diff --git a/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt b/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt index de57be0e9fa38..31e659a3ff19f 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt +++ b/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt @@ -347,32 +347,34 @@ sourceFile:sourceMapValidationDecorators.ts >>> configurable: true >>> }); 1->^^^^^^^ -2 > ^^^^^^^^^^^^^^-> +2 > ^^^^^^^^^^^^-> 1-> 1->Emitted(33, 8) Source(46, 6) + SourceIndex(0) --- ->>> Greeter.x1 = 10; -1->^^^^ -2 > ^^^^^^^^^^ -3 > ^^^ -4 > ^^ -5 > ^ +>>> (function () { +>>> Greeter.x1 = 10; +1->^^^^^^^^ +2 > ^^^^^^^^^^ +3 > ^^^ +4 > ^^ +5 > ^ 1-> -2 > x1 -3 > : number = -4 > 10 -5 > ; -1->Emitted(34, 5) Source(33, 20) + SourceIndex(0) -2 >Emitted(34, 15) Source(33, 22) + SourceIndex(0) -3 >Emitted(34, 18) Source(33, 33) + SourceIndex(0) -4 >Emitted(34, 20) Source(33, 35) + SourceIndex(0) -5 >Emitted(34, 21) Source(33, 36) + SourceIndex(0) ---- +2 > x1 +3 > : number = +4 > 10 +5 > ; +1->Emitted(35, 9) Source(33, 20) + SourceIndex(0) +2 >Emitted(35, 19) Source(33, 22) + SourceIndex(0) +3 >Emitted(35, 22) Source(33, 33) + SourceIndex(0) +4 >Emitted(35, 24) Source(33, 35) + SourceIndex(0) +5 >Emitted(35, 25) Source(33, 36) + SourceIndex(0) +--- +>>> }).call(Greeter); >>> __decorate([ 1 >^^^^ 2 > ^^^^^^^^^^^^^^^^^^^^^^^^-> 1 > -1 >Emitted(35, 5) Source(23, 5) + SourceIndex(0) +1 >Emitted(37, 5) Source(23, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^^^^^ @@ -380,8 +382,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^-> 1-> 2 > PropertyDecorator1 -1->Emitted(36, 9) Source(21, 6) + SourceIndex(0) -2 >Emitted(36, 27) Source(21, 24) + SourceIndex(0) +1->Emitted(38, 9) Source(21, 6) + SourceIndex(0) +2 >Emitted(38, 27) Source(21, 24) + SourceIndex(0) --- >>> PropertyDecorator2(40) 1->^^^^^^^^ @@ -396,11 +398,11 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 40 5 > ) -1->Emitted(37, 9) Source(22, 6) + SourceIndex(0) -2 >Emitted(37, 27) Source(22, 24) + SourceIndex(0) -3 >Emitted(37, 28) Source(22, 25) + SourceIndex(0) -4 >Emitted(37, 30) Source(22, 27) + SourceIndex(0) -5 >Emitted(37, 31) Source(22, 28) + SourceIndex(0) +1->Emitted(39, 9) Source(22, 6) + SourceIndex(0) +2 >Emitted(39, 27) Source(22, 24) + SourceIndex(0) +3 >Emitted(39, 28) Source(22, 25) + SourceIndex(0) +4 >Emitted(39, 30) Source(22, 27) + SourceIndex(0) +5 >Emitted(39, 31) Source(22, 28) + SourceIndex(0) --- >>> ], Greeter.prototype, "greet", null); 1->^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -408,7 +410,7 @@ sourceFile:sourceMapValidationDecorators.ts > greet() { > return "

" + this.greeting + "

"; > } -1->Emitted(38, 41) Source(25, 6) + SourceIndex(0) +1->Emitted(40, 41) Source(25, 6) + SourceIndex(0) --- >>> __decorate([ 1 >^^^^ @@ -418,7 +420,7 @@ sourceFile:sourceMapValidationDecorators.ts > @PropertyDecorator1 > @PropertyDecorator2(50) > -1 >Emitted(39, 5) Source(29, 5) + SourceIndex(0) +1 >Emitted(41, 5) Source(29, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^^^^^ @@ -426,8 +428,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^-> 1-> 2 > PropertyDecorator1 -1->Emitted(40, 9) Source(27, 6) + SourceIndex(0) -2 >Emitted(40, 27) Source(27, 24) + SourceIndex(0) +1->Emitted(42, 9) Source(27, 6) + SourceIndex(0) +2 >Emitted(42, 27) Source(27, 24) + SourceIndex(0) --- >>> PropertyDecorator2(50) 1->^^^^^^^^ @@ -442,17 +444,17 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 50 5 > ) -1->Emitted(41, 9) Source(28, 6) + SourceIndex(0) -2 >Emitted(41, 27) Source(28, 24) + SourceIndex(0) -3 >Emitted(41, 28) Source(28, 25) + SourceIndex(0) -4 >Emitted(41, 30) Source(28, 27) + SourceIndex(0) -5 >Emitted(41, 31) Source(28, 28) + SourceIndex(0) +1->Emitted(43, 9) Source(28, 6) + SourceIndex(0) +2 >Emitted(43, 27) Source(28, 24) + SourceIndex(0) +3 >Emitted(43, 28) Source(28, 25) + SourceIndex(0) +4 >Emitted(43, 30) Source(28, 27) + SourceIndex(0) +5 >Emitted(43, 31) Source(28, 28) + SourceIndex(0) --- >>> ], Greeter.prototype, "x", void 0); 1->^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1-> > private x: string; -1->Emitted(42, 39) Source(29, 23) + SourceIndex(0) +1->Emitted(44, 39) Source(29, 23) + SourceIndex(0) --- >>> __decorate([ 1 >^^^^ @@ -464,7 +466,7 @@ sourceFile:sourceMapValidationDecorators.ts > private static x1: number = 10; > > -1 >Emitted(43, 5) Source(35, 5) + SourceIndex(0) +1 >Emitted(45, 5) Source(35, 5) + SourceIndex(0) --- >>> __param(0, ParameterDecorator1), 1->^^^^^^^^ @@ -477,10 +479,10 @@ sourceFile:sourceMapValidationDecorators.ts 2 > 3 > ParameterDecorator1 4 > -1->Emitted(44, 9) Source(36, 8) + SourceIndex(0) -2 >Emitted(44, 20) Source(36, 8) + SourceIndex(0) -3 >Emitted(44, 39) Source(36, 27) + SourceIndex(0) -4 >Emitted(44, 40) Source(36, 27) + SourceIndex(0) +1->Emitted(46, 9) Source(36, 8) + SourceIndex(0) +2 >Emitted(46, 20) Source(36, 8) + SourceIndex(0) +3 >Emitted(46, 39) Source(36, 27) + SourceIndex(0) +4 >Emitted(46, 40) Source(36, 27) + SourceIndex(0) --- >>> __param(0, ParameterDecorator2(70)) 1->^^^^^^^^ @@ -498,13 +500,13 @@ sourceFile:sourceMapValidationDecorators.ts 5 > 70 6 > ) 7 > -1->Emitted(45, 9) Source(37, 8) + SourceIndex(0) -2 >Emitted(45, 20) Source(37, 8) + SourceIndex(0) -3 >Emitted(45, 39) Source(37, 27) + SourceIndex(0) -4 >Emitted(45, 40) Source(37, 28) + SourceIndex(0) -5 >Emitted(45, 42) Source(37, 30) + SourceIndex(0) -6 >Emitted(45, 43) Source(37, 31) + SourceIndex(0) -7 >Emitted(45, 44) Source(37, 31) + SourceIndex(0) +1->Emitted(47, 9) Source(37, 8) + SourceIndex(0) +2 >Emitted(47, 20) Source(37, 8) + SourceIndex(0) +3 >Emitted(47, 39) Source(37, 27) + SourceIndex(0) +4 >Emitted(47, 40) Source(37, 28) + SourceIndex(0) +5 >Emitted(47, 42) Source(37, 30) + SourceIndex(0) +6 >Emitted(47, 43) Source(37, 31) + SourceIndex(0) +7 >Emitted(47, 44) Source(37, 31) + SourceIndex(0) --- >>> ], Greeter.prototype, "fn", null); 1 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -512,7 +514,7 @@ sourceFile:sourceMapValidationDecorators.ts > x: number) { > return this.greeting; > } -1 >Emitted(46, 38) Source(40, 6) + SourceIndex(0) +1 >Emitted(48, 38) Source(40, 6) + SourceIndex(0) --- >>> __decorate([ 1 >^^^^ @@ -522,7 +524,7 @@ sourceFile:sourceMapValidationDecorators.ts > @PropertyDecorator1 > @PropertyDecorator2(80) > -1 >Emitted(47, 5) Source(44, 5) + SourceIndex(0) +1 >Emitted(49, 5) Source(44, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^^^^^ @@ -530,8 +532,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^^-> 1-> 2 > PropertyDecorator1 -1->Emitted(48, 9) Source(42, 6) + SourceIndex(0) -2 >Emitted(48, 27) Source(42, 24) + SourceIndex(0) +1->Emitted(50, 9) Source(42, 6) + SourceIndex(0) +2 >Emitted(50, 27) Source(42, 24) + SourceIndex(0) --- >>> PropertyDecorator2(80), 1->^^^^^^^^ @@ -546,11 +548,11 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 80 5 > ) -1->Emitted(49, 9) Source(43, 6) + SourceIndex(0) -2 >Emitted(49, 27) Source(43, 24) + SourceIndex(0) -3 >Emitted(49, 28) Source(43, 25) + SourceIndex(0) -4 >Emitted(49, 30) Source(43, 27) + SourceIndex(0) -5 >Emitted(49, 31) Source(43, 28) + SourceIndex(0) +1->Emitted(51, 9) Source(43, 6) + SourceIndex(0) +2 >Emitted(51, 27) Source(43, 24) + SourceIndex(0) +3 >Emitted(51, 28) Source(43, 25) + SourceIndex(0) +4 >Emitted(51, 30) Source(43, 27) + SourceIndex(0) +5 >Emitted(51, 31) Source(43, 28) + SourceIndex(0) --- >>> __param(0, ParameterDecorator1), 1->^^^^^^^^ @@ -568,10 +570,10 @@ sourceFile:sourceMapValidationDecorators.ts 2 > 3 > ParameterDecorator1 4 > -1->Emitted(50, 9) Source(49, 8) + SourceIndex(0) -2 >Emitted(50, 20) Source(49, 8) + SourceIndex(0) -3 >Emitted(50, 39) Source(49, 27) + SourceIndex(0) -4 >Emitted(50, 40) Source(49, 27) + SourceIndex(0) +1->Emitted(52, 9) Source(49, 8) + SourceIndex(0) +2 >Emitted(52, 20) Source(49, 8) + SourceIndex(0) +3 >Emitted(52, 39) Source(49, 27) + SourceIndex(0) +4 >Emitted(52, 40) Source(49, 27) + SourceIndex(0) --- >>> __param(0, ParameterDecorator2(90)) 1->^^^^^^^^ @@ -590,24 +592,24 @@ sourceFile:sourceMapValidationDecorators.ts 5 > 90 6 > ) 7 > -1->Emitted(51, 9) Source(50, 8) + SourceIndex(0) -2 >Emitted(51, 20) Source(50, 8) + SourceIndex(0) -3 >Emitted(51, 39) Source(50, 27) + SourceIndex(0) -4 >Emitted(51, 40) Source(50, 28) + SourceIndex(0) -5 >Emitted(51, 42) Source(50, 30) + SourceIndex(0) -6 >Emitted(51, 43) Source(50, 31) + SourceIndex(0) -7 >Emitted(51, 44) Source(50, 31) + SourceIndex(0) +1->Emitted(53, 9) Source(50, 8) + SourceIndex(0) +2 >Emitted(53, 20) Source(50, 8) + SourceIndex(0) +3 >Emitted(53, 39) Source(50, 27) + SourceIndex(0) +4 >Emitted(53, 40) Source(50, 28) + SourceIndex(0) +5 >Emitted(53, 42) Source(50, 30) + SourceIndex(0) +6 >Emitted(53, 43) Source(50, 31) + SourceIndex(0) +7 >Emitted(53, 44) Source(50, 31) + SourceIndex(0) --- >>> ], Greeter.prototype, "greetings", null); 1->^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1-> -1->Emitted(52, 45) Source(46, 6) + SourceIndex(0) +1->Emitted(54, 45) Source(46, 6) + SourceIndex(0) --- >>> __decorate([ 1 >^^^^ 2 > ^^^^^^^^^^^^^^^^^^^^^^^^-> 1 > -1 >Emitted(53, 5) Source(33, 5) + SourceIndex(0) +1 >Emitted(55, 5) Source(33, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^^^^^ @@ -615,8 +617,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^-> 1-> 2 > PropertyDecorator1 -1->Emitted(54, 9) Source(31, 6) + SourceIndex(0) -2 >Emitted(54, 27) Source(31, 24) + SourceIndex(0) +1->Emitted(56, 9) Source(31, 6) + SourceIndex(0) +2 >Emitted(56, 27) Source(31, 24) + SourceIndex(0) --- >>> PropertyDecorator2(60) 1->^^^^^^^^ @@ -631,17 +633,17 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 60 5 > ) -1->Emitted(55, 9) Source(32, 6) + SourceIndex(0) -2 >Emitted(55, 27) Source(32, 24) + SourceIndex(0) -3 >Emitted(55, 28) Source(32, 25) + SourceIndex(0) -4 >Emitted(55, 30) Source(32, 27) + SourceIndex(0) -5 >Emitted(55, 31) Source(32, 28) + SourceIndex(0) +1->Emitted(57, 9) Source(32, 6) + SourceIndex(0) +2 >Emitted(57, 27) Source(32, 24) + SourceIndex(0) +3 >Emitted(57, 28) Source(32, 25) + SourceIndex(0) +4 >Emitted(57, 30) Source(32, 27) + SourceIndex(0) +5 >Emitted(57, 31) Source(32, 28) + SourceIndex(0) --- >>> ], Greeter, "x1", void 0); 1->^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1-> > private static x1: number = 10; -1->Emitted(56, 30) Source(33, 36) + SourceIndex(0) +1->Emitted(58, 30) Source(33, 36) + SourceIndex(0) --- >>> Greeter = __decorate([ 1 >^^^^ @@ -649,8 +651,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^^^^^^^^^^-> 1 > 2 > Greeter -1 >Emitted(57, 5) Source(10, 7) + SourceIndex(0) -2 >Emitted(57, 12) Source(10, 14) + SourceIndex(0) +1 >Emitted(59, 5) Source(10, 7) + SourceIndex(0) +2 >Emitted(59, 12) Source(10, 14) + SourceIndex(0) --- >>> ClassDecorator1, 1->^^^^^^^^ @@ -658,8 +660,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^^-> 1-> 2 > ClassDecorator1 -1->Emitted(58, 9) Source(8, 2) + SourceIndex(0) -2 >Emitted(58, 24) Source(8, 17) + SourceIndex(0) +1->Emitted(60, 9) Source(8, 2) + SourceIndex(0) +2 >Emitted(60, 24) Source(8, 17) + SourceIndex(0) --- >>> ClassDecorator2(10), 1->^^^^^^^^ @@ -674,11 +676,11 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 10 5 > ) -1->Emitted(59, 9) Source(9, 2) + SourceIndex(0) -2 >Emitted(59, 24) Source(9, 17) + SourceIndex(0) -3 >Emitted(59, 25) Source(9, 18) + SourceIndex(0) -4 >Emitted(59, 27) Source(9, 20) + SourceIndex(0) -5 >Emitted(59, 28) Source(9, 21) + SourceIndex(0) +1->Emitted(61, 9) Source(9, 2) + SourceIndex(0) +2 >Emitted(61, 24) Source(9, 17) + SourceIndex(0) +3 >Emitted(61, 25) Source(9, 18) + SourceIndex(0) +4 >Emitted(61, 27) Source(9, 20) + SourceIndex(0) +5 >Emitted(61, 28) Source(9, 21) + SourceIndex(0) --- >>> __param(0, ParameterDecorator1), 1->^^^^^^^^ @@ -693,10 +695,10 @@ sourceFile:sourceMapValidationDecorators.ts 2 > 3 > ParameterDecorator1 4 > -1->Emitted(60, 9) Source(12, 8) + SourceIndex(0) -2 >Emitted(60, 20) Source(12, 8) + SourceIndex(0) -3 >Emitted(60, 39) Source(12, 27) + SourceIndex(0) -4 >Emitted(60, 40) Source(12, 27) + SourceIndex(0) +1->Emitted(62, 9) Source(12, 8) + SourceIndex(0) +2 >Emitted(62, 20) Source(12, 8) + SourceIndex(0) +3 >Emitted(62, 39) Source(12, 27) + SourceIndex(0) +4 >Emitted(62, 40) Source(12, 27) + SourceIndex(0) --- >>> __param(0, ParameterDecorator2(20)), 1->^^^^^^^^ @@ -714,13 +716,13 @@ sourceFile:sourceMapValidationDecorators.ts 5 > 20 6 > ) 7 > -1->Emitted(61, 9) Source(13, 8) + SourceIndex(0) -2 >Emitted(61, 20) Source(13, 8) + SourceIndex(0) -3 >Emitted(61, 39) Source(13, 27) + SourceIndex(0) -4 >Emitted(61, 40) Source(13, 28) + SourceIndex(0) -5 >Emitted(61, 42) Source(13, 30) + SourceIndex(0) -6 >Emitted(61, 43) Source(13, 31) + SourceIndex(0) -7 >Emitted(61, 44) Source(13, 31) + SourceIndex(0) +1->Emitted(63, 9) Source(13, 8) + SourceIndex(0) +2 >Emitted(63, 20) Source(13, 8) + SourceIndex(0) +3 >Emitted(63, 39) Source(13, 27) + SourceIndex(0) +4 >Emitted(63, 40) Source(13, 28) + SourceIndex(0) +5 >Emitted(63, 42) Source(13, 30) + SourceIndex(0) +6 >Emitted(63, 43) Source(13, 31) + SourceIndex(0) +7 >Emitted(63, 44) Source(13, 31) + SourceIndex(0) --- >>> __param(1, ParameterDecorator1), 1 >^^^^^^^^ @@ -735,10 +737,10 @@ sourceFile:sourceMapValidationDecorators.ts 2 > 3 > ParameterDecorator1 4 > -1 >Emitted(62, 9) Source(16, 8) + SourceIndex(0) -2 >Emitted(62, 20) Source(16, 8) + SourceIndex(0) -3 >Emitted(62, 39) Source(16, 27) + SourceIndex(0) -4 >Emitted(62, 40) Source(16, 27) + SourceIndex(0) +1 >Emitted(64, 9) Source(16, 8) + SourceIndex(0) +2 >Emitted(64, 20) Source(16, 8) + SourceIndex(0) +3 >Emitted(64, 39) Source(16, 27) + SourceIndex(0) +4 >Emitted(64, 40) Source(16, 27) + SourceIndex(0) --- >>> __param(1, ParameterDecorator2(30)) 1->^^^^^^^^ @@ -756,13 +758,13 @@ sourceFile:sourceMapValidationDecorators.ts 5 > 30 6 > ) 7 > -1->Emitted(63, 9) Source(17, 8) + SourceIndex(0) -2 >Emitted(63, 20) Source(17, 8) + SourceIndex(0) -3 >Emitted(63, 39) Source(17, 27) + SourceIndex(0) -4 >Emitted(63, 40) Source(17, 28) + SourceIndex(0) -5 >Emitted(63, 42) Source(17, 30) + SourceIndex(0) -6 >Emitted(63, 43) Source(17, 31) + SourceIndex(0) -7 >Emitted(63, 44) Source(17, 31) + SourceIndex(0) +1->Emitted(65, 9) Source(17, 8) + SourceIndex(0) +2 >Emitted(65, 20) Source(17, 8) + SourceIndex(0) +3 >Emitted(65, 39) Source(17, 27) + SourceIndex(0) +4 >Emitted(65, 40) Source(17, 28) + SourceIndex(0) +5 >Emitted(65, 42) Source(17, 30) + SourceIndex(0) +6 >Emitted(65, 43) Source(17, 31) + SourceIndex(0) +7 >Emitted(65, 44) Source(17, 31) + SourceIndex(0) --- >>> ], Greeter); 1 >^^^^^^^ @@ -816,17 +818,17 @@ sourceFile:sourceMapValidationDecorators.ts > this.greeting = greetings; > } > } -1 >Emitted(64, 8) Source(10, 7) + SourceIndex(0) -2 >Emitted(64, 15) Source(10, 14) + SourceIndex(0) -3 >Emitted(64, 16) Source(54, 2) + SourceIndex(0) +1 >Emitted(66, 8) Source(10, 7) + SourceIndex(0) +2 >Emitted(66, 15) Source(10, 14) + SourceIndex(0) +3 >Emitted(66, 16) Source(54, 2) + SourceIndex(0) --- >>> return Greeter; 1->^^^^ 2 > ^^^^^^^^^^^^^^ 1-> 2 > } -1->Emitted(65, 5) Source(54, 1) + SourceIndex(0) -2 >Emitted(65, 19) Source(54, 2) + SourceIndex(0) +1->Emitted(67, 5) Source(54, 1) + SourceIndex(0) +2 >Emitted(67, 19) Source(54, 2) + SourceIndex(0) --- >>>}()); 1 >^ @@ -880,8 +882,8 @@ sourceFile:sourceMapValidationDecorators.ts > this.greeting = greetings; > } > } -1 >Emitted(66, 2) Source(54, 2) + SourceIndex(0) -2 >Emitted(66, 2) Source(10, 1) + SourceIndex(0) -3 >Emitted(66, 6) Source(54, 2) + SourceIndex(0) +1 >Emitted(68, 2) Source(54, 2) + SourceIndex(0) +2 >Emitted(68, 2) Source(10, 1) + SourceIndex(0) +3 >Emitted(68, 6) Source(54, 2) + SourceIndex(0) --- >>>//# sourceMappingURL=sourceMapValidationDecorators.js.map \ No newline at end of file diff --git a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.js b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.js index 83d72128212c3..000f23782273a 100644 --- a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.js +++ b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.js @@ -148,7 +148,9 @@ function outer(x) { var Inner = /** @class */ (function () { function Inner() { } - Inner.y = x; + (function () { + Inner.y = x; + }).call(Inner); return Inner; }()); return Inner; diff --git a/tests/baselines/reference/staticClassProps.js b/tests/baselines/reference/staticClassProps.js index 112c3525693e2..00fb281fe7d8f 100644 --- a/tests/baselines/reference/staticClassProps.js +++ b/tests/baselines/reference/staticClassProps.js @@ -14,6 +14,8 @@ var C = /** @class */ (function () { } C.prototype.foo = function () { }; - C.z = 1; + (function () { + C.z = 1; + }).call(C); return C; }()); diff --git a/tests/baselines/reference/staticMemberAccessOffDerivedType1.js b/tests/baselines/reference/staticMemberAccessOffDerivedType1.js index b1ad3b1d870dd..d955319b10510 100644 --- a/tests/baselines/reference/staticMemberAccessOffDerivedType1.js +++ b/tests/baselines/reference/staticMemberAccessOffDerivedType1.js @@ -38,6 +38,8 @@ var P = /** @class */ (function (_super) { function P() { return _super !== null && _super.apply(this, arguments) || this; } - P.SomeNumber = P.GetNumber(); + (function () { + P.SomeNumber = P.GetNumber(); + }).call(P); return P; }(SomeBase)); diff --git a/tests/baselines/reference/staticMemberInitialization.js b/tests/baselines/reference/staticMemberInitialization.js index adde0b4137758..537550809a8aa 100644 --- a/tests/baselines/reference/staticMemberInitialization.js +++ b/tests/baselines/reference/staticMemberInitialization.js @@ -10,7 +10,9 @@ var r = C.x; var C = /** @class */ (function () { function C() { } - C.x = 1; + (function () { + C.x = 1; + }).call(C); return C; }()); var c = new C(); diff --git a/tests/baselines/reference/staticMemberWithStringAndNumberNames.js b/tests/baselines/reference/staticMemberWithStringAndNumberNames.js index 21be5b9817abd..7cc267ae60652 100644 --- a/tests/baselines/reference/staticMemberWithStringAndNumberNames.js +++ b/tests/baselines/reference/staticMemberWithStringAndNumberNames.js @@ -19,10 +19,12 @@ var C = /** @class */ (function () { this.x2 = C['0']; this.x3 = C[0]; } - C["foo"] = 0; - C[0] = 1; - C.s = C['foo']; - C.s2 = C['0']; - C.s3 = C[0]; + (function () { + C["foo"] = 0; + C[0] = 1; + C.s = C['foo']; + C.s2 = C['0']; + C.s3 = C[0]; + }).call(C); return C; }()); diff --git a/tests/baselines/reference/staticModifierAlreadySeen.js b/tests/baselines/reference/staticModifierAlreadySeen.js index 0a0aeb189f2f1..6e66478be0781 100644 --- a/tests/baselines/reference/staticModifierAlreadySeen.js +++ b/tests/baselines/reference/staticModifierAlreadySeen.js @@ -9,6 +9,8 @@ var C = /** @class */ (function () { function C() { } C.bar = function () { }; - C.foo = 1; + (function () { + C.foo = 1; + }).call(C); return C; }()); diff --git a/tests/baselines/reference/staticPropSuper.js b/tests/baselines/reference/staticPropSuper.js index 170879d4b647e..527c09843777f 100644 --- a/tests/baselines/reference/staticPropSuper.js +++ b/tests/baselines/reference/staticPropSuper.js @@ -64,7 +64,9 @@ var B = /** @class */ (function (_super) { _this = _super.call(this) || this; return _this; } - B.s = 9; + (function () { + B.s = 9; + }).call(B); return B; }(A)); var C = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/statics.js b/tests/baselines/reference/statics.js index 7f98cfe18f1eb..a64a10a2f8631 100644 --- a/tests/baselines/reference/statics.js +++ b/tests/baselines/reference/statics.js @@ -45,9 +45,11 @@ var M; C.f = function (n) { return "wow: " + (n + C.y + C.pub + C.priv); }; - C.priv = 2; - C.pub = 3; - C.y = C.priv; + (function () { + C.priv = 2; + C.pub = 3; + C.y = C.priv; + }).call(C); return C; }()); M.C = C; diff --git a/tests/baselines/reference/staticsInConstructorBodies.js b/tests/baselines/reference/staticsInConstructorBodies.js index 34ac94238e1ea..bcce7f593061e 100644 --- a/tests/baselines/reference/staticsInConstructorBodies.js +++ b/tests/baselines/reference/staticsInConstructorBodies.js @@ -11,6 +11,8 @@ var C = /** @class */ (function () { function C() { } C.m1 = function () { }; // ERROR - C.p1 = 0; // ERROR + (function () { + C.p1 = 0; // ERROR + }).call(C); return C; }()); diff --git a/tests/baselines/reference/staticsNotInScopeInClodule.js b/tests/baselines/reference/staticsNotInScopeInClodule.js index 29b9df475dd4f..623a832b29636 100644 --- a/tests/baselines/reference/staticsNotInScopeInClodule.js +++ b/tests/baselines/reference/staticsNotInScopeInClodule.js @@ -11,7 +11,9 @@ module Clod { var Clod = /** @class */ (function () { function Clod() { } - Clod.x = 10; + (function () { + Clod.x = 10; + }).call(Clod); return Clod; }()); (function (Clod) { diff --git a/tests/baselines/reference/strictModeInConstructor.js b/tests/baselines/reference/strictModeInConstructor.js index 85d5d3eecbfd5..65ec412eca715 100644 --- a/tests/baselines/reference/strictModeInConstructor.js +++ b/tests/baselines/reference/strictModeInConstructor.js @@ -119,7 +119,9 @@ var Bs = /** @class */ (function (_super) { "use strict"; // No error return _super.call(this) || this; } - Bs.s = 9; + (function () { + Bs.s = 9; + }).call(Bs); return Bs; }(A)); var Cs = /** @class */ (function (_super) { @@ -129,7 +131,9 @@ var Cs = /** @class */ (function (_super) { var _this = _super.call(this) || this; return _this; } - Cs.s = 9; + (function () { + Cs.s = 9; + }).call(Cs); return Cs; }(A)); var Ds = /** @class */ (function (_super) { @@ -141,6 +145,8 @@ var Ds = /** @class */ (function (_super) { "use strict"; return _this; } - Ds.s = 9; + (function () { + Ds.s = 9; + }).call(Ds); return Ds; }(A)); diff --git a/tests/baselines/reference/superAccess.js b/tests/baselines/reference/superAccess.js index 18b7fe9ca75c1..bf529a883d1bb 100644 --- a/tests/baselines/reference/superAccess.js +++ b/tests/baselines/reference/superAccess.js @@ -34,7 +34,9 @@ var MyBase = /** @class */ (function () { this.S2 = "test"; this.f = function () { return 5; }; } - MyBase.S1 = 5; + (function () { + MyBase.S1 = 5; + }).call(MyBase); return MyBase; }()); var MyDerived = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/superAccess2.js b/tests/baselines/reference/superAccess2.js index 5edae76957a13..41b8b015d74cc 100644 --- a/tests/baselines/reference/superAccess2.js +++ b/tests/baselines/reference/superAccess2.js @@ -69,6 +69,8 @@ var Q = /** @class */ (function (_super) { _super.x.call(this); // error _super.y.call(this); }; - Q.yy = _super.; // error for static initializer accessing super + (function () { + Q.yy = _super.; // error for static initializer accessing super + }).call(Q); return Q; }(P)); diff --git a/tests/baselines/reference/symbolDeclarationEmit11.js b/tests/baselines/reference/symbolDeclarationEmit11.js index dc6ea17829dae..029511cba8a63 100644 --- a/tests/baselines/reference/symbolDeclarationEmit11.js +++ b/tests/baselines/reference/symbolDeclarationEmit11.js @@ -13,7 +13,9 @@ class C { static get [Symbol.toPrimitive]() { return ""; } static set [Symbol.toPrimitive](x) { } } -C[_a] = 0; +(function () { + C[_a] = 0; +}).call(C); //// [symbolDeclarationEmit11.d.ts] diff --git a/tests/baselines/reference/systemModuleTargetES6.js b/tests/baselines/reference/systemModuleTargetES6.js index 0df2835683e82..52e3e1d33977d 100644 --- a/tests/baselines/reference/systemModuleTargetES6.js +++ b/tests/baselines/reference/systemModuleTargetES6.js @@ -36,7 +36,9 @@ System.register([], function (exports_1, context_1) { static getInstance() { return MyClass2.value; } }; exports_1("MyClass2", MyClass2); - MyClass2.value = 42; + (function () { + MyClass2.value = 42; + }).call(MyClass2); } }; }); diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js index 2d58fd455ac4a..63890e817e7ab 100644 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js +++ b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js @@ -9,14 +9,16 @@ class Vector { } //// [thisInArrowFunctionInStaticInitializer1.js] -var _this = this; function log(a) { } var Vector = /** @class */ (function () { function Vector() { } - Vector.foo = function () { - // 'this' should not be available in a static initializer. - log(_this); - }; + (function () { + var _this = this; + Vector.foo = function () { + // 'this' should not be available in a static initializer. + log(_this); + }; + }).call(Vector); return Vector; }()); diff --git a/tests/baselines/reference/thisInConstructorParameter2.js b/tests/baselines/reference/thisInConstructorParameter2.js index df2f22b8ae7bd..c28c3a4f8f197 100644 --- a/tests/baselines/reference/thisInConstructorParameter2.js +++ b/tests/baselines/reference/thisInConstructorParameter2.js @@ -36,6 +36,8 @@ var P = /** @class */ (function () { if (zz === void 0) { zz = this; } zz.y; }; - P.y = this; + (function () { + P.y = this; + }).call(P); return P; }()); diff --git a/tests/baselines/reference/thisInInvalidContexts.js b/tests/baselines/reference/thisInInvalidContexts.js index 7e6db52458631..0649574ed3203 100644 --- a/tests/baselines/reference/thisInInvalidContexts.js +++ b/tests/baselines/reference/thisInInvalidContexts.js @@ -68,7 +68,9 @@ var __extends = (this && this.__extends) || (function () { var ErrClass1 = /** @class */ (function () { function ErrClass1() { } - ErrClass1.t = this; // Error + (function () { + ErrClass1.t = this; // Error + }).call(ErrClass1); return ErrClass1; }()); var BaseErrClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.js b/tests/baselines/reference/thisInInvalidContextsExternalModule.js index ef18f01edda0c..09dda2ca7f7b9 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.js +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.js @@ -69,7 +69,9 @@ var __extends = (this && this.__extends) || (function () { var ErrClass1 = /** @class */ (function () { function ErrClass1() { } - ErrClass1.t = this; // Error + (function () { + ErrClass1.t = this; // Error + }).call(ErrClass1); return ErrClass1; }()); var BaseErrClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisInOuterClassBody.js b/tests/baselines/reference/thisInOuterClassBody.js index 2b4e3a1aabdb6..69a661c96a7cf 100644 --- a/tests/baselines/reference/thisInOuterClassBody.js +++ b/tests/baselines/reference/thisInOuterClassBody.js @@ -36,6 +36,8 @@ var Foo = /** @class */ (function () { var a = this.y; var b = this.x; }; - Foo.y = this; + (function () { + Foo.y = this; + }).call(Foo); return Foo; }()); diff --git a/tests/baselines/reference/thisInPropertyBoundDeclarations.js b/tests/baselines/reference/thisInPropertyBoundDeclarations.js index 15c0bf5951986..97cc157f74d10 100644 --- a/tests/baselines/reference/thisInPropertyBoundDeclarations.js +++ b/tests/baselines/reference/thisInPropertyBoundDeclarations.js @@ -74,11 +74,13 @@ var Bug = /** @class */ (function () { Bug.prototype.foo = function (name) { this.name = name; }; - Bug.func = [ - function (that, name) { - that.foo(name); - } - ]; + (function () { + Bug.func = [ + function (that, name) { + that.foo(name); + } + ]; + }).call(Bug); return Bug; }()); // Valid use of this in a property bound decl diff --git a/tests/baselines/reference/thisInStaticMethod1.js b/tests/baselines/reference/thisInStaticMethod1.js index bbeb55c48fb1f..840e6e19f3b09 100644 --- a/tests/baselines/reference/thisInStaticMethod1.js +++ b/tests/baselines/reference/thisInStaticMethod1.js @@ -14,7 +14,9 @@ var foo = /** @class */ (function () { foo.bar = function () { return this.x; }; - foo.x = 3; + (function () { + foo.x = 3; + }).call(foo); return foo; }()); var x = foo.bar(); diff --git a/tests/baselines/reference/thisTypeAccessibility.js b/tests/baselines/reference/thisTypeAccessibility.js index 0f39317460ac0..f97713cb4d081 100644 --- a/tests/baselines/reference/thisTypeAccessibility.js +++ b/tests/baselines/reference/thisTypeAccessibility.js @@ -69,9 +69,11 @@ var MyClass = /** @class */ (function () { this.pp = 123; this.ppp = 123; } - MyClass.sp = 123; - MyClass.spp = 123; - MyClass.sppp = 123; + (function () { + MyClass.sp = 123; + MyClass.spp = 123; + MyClass.sppp = 123; + }).call(MyClass); return MyClass; }()); var MyGenericClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisTypeErrors.js b/tests/baselines/reference/thisTypeErrors.js index 96039071cb655..3a94b6b6ab49a 100644 --- a/tests/baselines/reference/thisTypeErrors.js +++ b/tests/baselines/reference/thisTypeErrors.js @@ -75,7 +75,9 @@ var C2 = /** @class */ (function () { C2.foo = function (x) { return undefined; }; - C2.y = undefined; + (function () { + C2.y = undefined; + }).call(C2); return C2; }()); var N1; diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.rewrittenNamespaceFollowingClass.js b/tests/baselines/reference/transformApi/transformsCorrectly.rewrittenNamespaceFollowingClass.js index 3f2dd6cdb56fb..8f7b1bbe474d5 100644 --- a/tests/baselines/reference/transformApi/transformsCorrectly.rewrittenNamespaceFollowingClass.js +++ b/tests/baselines/reference/transformApi/transformsCorrectly.rewrittenNamespaceFollowingClass.js @@ -3,7 +3,9 @@ class C { this.foo = 10; } } -C.bar = 20; +(function () { + C.bar = 20; +}).call(C); (function (C) { C.x = 10; })(C || (C = {})); diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js index d5f27d7148c6e..74338d5906e7d 100644 --- a/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js +++ b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js @@ -8,5 +8,7 @@ class Clazz { this.instanceProp = 2; } } -/*comment*/ -Clazz.staticProp = 1; +(function () { + /*comment*/ + Clazz.staticProp = 1; +}).call(Clazz); diff --git a/tests/baselines/reference/tsxDefaultImports.js b/tests/baselines/reference/tsxDefaultImports.js index a0ca09cd8405a..d7da426f113f0 100644 --- a/tests/baselines/reference/tsxDefaultImports.js +++ b/tests/baselines/reference/tsxDefaultImports.js @@ -23,7 +23,9 @@ var SomeEnum; var SomeClass = /** @class */ (function () { function SomeClass() { } - SomeClass.E = SomeEnum; + (function () { + SomeClass.E = SomeEnum; + }).call(SomeClass); return SomeClass; }()); exports["default"] = SomeClass; diff --git a/tests/baselines/reference/tsxLibraryManagedAttributes.js b/tests/baselines/reference/tsxLibraryManagedAttributes.js index 44f009b439239..0e7541fa696e7 100644 --- a/tests/baselines/reference/tsxLibraryManagedAttributes.js +++ b/tests/baselines/reference/tsxLibraryManagedAttributes.js @@ -147,14 +147,16 @@ var Component = /** @class */ (function (_super) { function Component() { return _super !== null && _super.apply(this, arguments) || this; } - Component.propTypes = { - foo: PropTypes.number, - bar: PropTypes.node, - baz: PropTypes.string.isRequired - }; - Component.defaultProps = { - foo: 42 - }; + (function () { + Component.propTypes = { + foo: PropTypes.number, + bar: PropTypes.node, + baz: PropTypes.string.isRequired + }; + Component.defaultProps = { + foo: 42 + }; + }).call(Component); return Component; }(ReactComponent)); var a = ; @@ -168,10 +170,12 @@ var JustPropTypes = /** @class */ (function (_super) { function JustPropTypes() { return _super !== null && _super.apply(this, arguments) || this; } - JustPropTypes.propTypes = { - foo: PropTypes.number, - bar: PropTypes.node.isRequired - }; + (function () { + JustPropTypes.propTypes = { + foo: PropTypes.number, + bar: PropTypes.node.isRequired + }; + }).call(JustPropTypes); return JustPropTypes; }(ReactComponent)); var g = ; @@ -183,9 +187,11 @@ var JustDefaultProps = /** @class */ (function (_super) { function JustDefaultProps() { return _super !== null && _super.apply(this, arguments) || this; } - JustDefaultProps.defaultProps = { - foo: 42 - }; + (function () { + JustDefaultProps.defaultProps = { + foo: 42 + }; + }).call(JustDefaultProps); return JustDefaultProps; }(ReactComponent)); var k = ; @@ -196,14 +202,16 @@ var BothWithSpecifiedGeneric = /** @class */ (function (_super) { function BothWithSpecifiedGeneric() { return _super !== null && _super.apply(this, arguments) || this; } - BothWithSpecifiedGeneric.propTypes = { - foo: PropTypes.string, - bar: PropTypes.node, - baz: PropTypes.number.isRequired - }; - BothWithSpecifiedGeneric.defaultProps = { - foo: "yo" - }; + (function () { + BothWithSpecifiedGeneric.propTypes = { + foo: PropTypes.string, + bar: PropTypes.node, + baz: PropTypes.number.isRequired + }; + BothWithSpecifiedGeneric.defaultProps = { + foo: "yo" + }; + }).call(BothWithSpecifiedGeneric); return BothWithSpecifiedGeneric; }(ReactComponent)); var n = ; @@ -217,10 +225,12 @@ var JustPropTypesWithSpecifiedGeneric = /** @class */ (function (_super) { function JustPropTypesWithSpecifiedGeneric() { return _super !== null && _super.apply(this, arguments) || this; } - JustPropTypesWithSpecifiedGeneric.propTypes = { - foo: PropTypes.string, - bar: PropTypes.node.isRequired - }; + (function () { + JustPropTypesWithSpecifiedGeneric.propTypes = { + foo: PropTypes.string, + bar: PropTypes.node.isRequired + }; + }).call(JustPropTypesWithSpecifiedGeneric); return JustPropTypesWithSpecifiedGeneric; }(ReactComponent)); var t = ; @@ -232,9 +242,11 @@ var JustDefaultPropsWithSpecifiedGeneric = /** @class */ (function (_super) { function JustDefaultPropsWithSpecifiedGeneric() { return _super !== null && _super.apply(this, arguments) || this; } - JustDefaultPropsWithSpecifiedGeneric.defaultProps = { - foo: "no" - }; + (function () { + JustDefaultPropsWithSpecifiedGeneric.defaultProps = { + foo: "no" + }; + }).call(JustDefaultPropsWithSpecifiedGeneric); return JustDefaultPropsWithSpecifiedGeneric; }(ReactComponent)); var x = ; diff --git a/tests/baselines/reference/typeOfPrototype.js b/tests/baselines/reference/typeOfPrototype.js index 01279cc563230..47e917a7ca00d 100644 --- a/tests/baselines/reference/typeOfPrototype.js +++ b/tests/baselines/reference/typeOfPrototype.js @@ -11,7 +11,9 @@ var Foo = /** @class */ (function () { function Foo() { this.bar = 3; } - Foo.bar = ''; + (function () { + Foo.bar = ''; + }).call(Foo); return Foo; }()); Foo.prototype.bar = undefined; // Should be OK diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.js b/tests/baselines/reference/typeOfThisInStaticMembers2.js index 72243cdd3e619..b72a223abe047 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.js +++ b/tests/baselines/reference/typeOfThisInStaticMembers2.js @@ -11,12 +11,16 @@ class C2 { var C = /** @class */ (function () { function C() { } - C.foo = this; // error + (function () { + C.foo = this; // error + }).call(C); return C; }()); var C2 = /** @class */ (function () { function C2() { } - C2.foo = this; // error + (function () { + C2.foo = this; // error + }).call(C2); return C2; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).errors.txt new file mode 100644 index 0000000000000..9171bc7c3c9fa --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).errors.txt @@ -0,0 +1,26 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (4 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~~ +!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js new file mode 100644 index 0000000000000..a45a441f935ec --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js @@ -0,0 +1,27 @@ +//// [typeOfThisInStaticMembers3.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers3.js] +class C { +} +(function () { + C.a = 1; + C.b = this.a + 1; +}).call(C); +class D extends C { +} +(function () { + D.c = 2; + D.d = this.c + 1; + D.e = super.a + this.c + 1; +}).call(D); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols new file mode 100644 index 0000000000000..3645ae6ff14f0 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers3.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers3.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types new file mode 100644 index 0000000000000..4127fd13f16b9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : any +>super.a + this.c + 1 : any +>super.a + this.c : any +>super.a : any +>super : any +>a : any +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt new file mode 100644 index 0000000000000..9171bc7c3c9fa --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt @@ -0,0 +1,26 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (4 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~~ +!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js new file mode 100644 index 0000000000000..6a6bdb0073ca8 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js @@ -0,0 +1,50 @@ +//// [typeOfThisInStaticMembers3.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers3.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var C = /** @class */ (function () { + function C() { + } + (function () { + C.a = 1; + C.b = this.a + 1; + }).call(C); + return C; +}()); +var D = /** @class */ (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + (function () { + D.c = 2; + D.d = this.c + 1; + D.e = _super.a + this.c + 1; + }).call(D); + return D; +}(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).symbols new file mode 100644 index 0000000000000..3645ae6ff14f0 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers3.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers3.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).types new file mode 100644 index 0000000000000..4127fd13f16b9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : any +>super.a + this.c + 1 : any +>super.a + this.c : any +>super.a : any +>super : any +>a : any +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt new file mode 100644 index 0000000000000..9171bc7c3c9fa --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt @@ -0,0 +1,26 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (4 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~~ +!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js new file mode 100644 index 0000000000000..a45a441f935ec --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js @@ -0,0 +1,27 @@ +//// [typeOfThisInStaticMembers3.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers3.js] +class C { +} +(function () { + C.a = 1; + C.b = this.a + 1; +}).call(C); +class D extends C { +} +(function () { + D.c = 2; + D.d = this.c + 1; + D.e = super.a + this.c + 1; +}).call(D); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).symbols new file mode 100644 index 0000000000000..3645ae6ff14f0 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers3.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers3.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).types new file mode 100644 index 0000000000000..4127fd13f16b9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : any +>super.a + this.c + 1 : any +>super.a + this.c : any +>super.a : any +>super : any +>a : any +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt new file mode 100644 index 0000000000000..9171bc7c3c9fa --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt @@ -0,0 +1,26 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (4 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~~ +!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js new file mode 100644 index 0000000000000..a45a441f935ec --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js @@ -0,0 +1,27 @@ +//// [typeOfThisInStaticMembers3.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers3.js] +class C { +} +(function () { + C.a = 1; + C.b = this.a + 1; +}).call(C); +class D extends C { +} +(function () { + D.c = 2; + D.d = this.c + 1; + D.e = super.a + this.c + 1; +}).call(D); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).symbols new file mode 100644 index 0000000000000..3645ae6ff14f0 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers3.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers3.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).types new file mode 100644 index 0000000000000..4127fd13f16b9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : any +>super.a + this.c + 1 : any +>super.a + this.c : any +>super.a : any +>super : any +>a : any +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeQueryOnClass.js b/tests/baselines/reference/typeQueryOnClass.js index 2e99e21a1f26f..1c2c5f7439b49 100644 --- a/tests/baselines/reference/typeQueryOnClass.js +++ b/tests/baselines/reference/typeQueryOnClass.js @@ -99,8 +99,10 @@ var C = /** @class */ (function () { enumerable: false, configurable: true }); - C.sa = 1; - C.sb = function () { return 1; }; + (function () { + C.sa = 1; + C.sb = function () { return 1; }; + }).call(C); return C; }()); var c; diff --git a/tests/baselines/reference/typeofUsedBeforeBlockScoped.js b/tests/baselines/reference/typeofUsedBeforeBlockScoped.js index 3963df601948a..3f5db529b5228 100644 --- a/tests/baselines/reference/typeofUsedBeforeBlockScoped.js +++ b/tests/baselines/reference/typeofUsedBeforeBlockScoped.js @@ -12,7 +12,9 @@ let o = { n: 12 }; var C = /** @class */ (function () { function C() { } - C.s = 2; + (function () { + C.s = 2; + }).call(C); return C; }()); var o2; diff --git a/tests/baselines/reference/uniqueSymbols.js b/tests/baselines/reference/uniqueSymbols.js index 54f59e8e217b6..6f949512504a8 100644 --- a/tests/baselines/reference/uniqueSymbols.js +++ b/tests/baselines/reference/uniqueSymbols.js @@ -320,9 +320,11 @@ class C { this.readwriteCall = Symbol(); } } -C.readonlyStaticCall = Symbol(); -C.readonlyStaticTypeAndCall = Symbol(); -C.readwriteStaticCall = Symbol(); +(function () { + C.readonlyStaticCall = Symbol(); + C.readonlyStaticTypeAndCall = Symbol(); + C.readwriteStaticCall = Symbol(); +}).call(C); const constInitToCReadonlyStaticCall = C.readonlyStaticCall; const constInitToCReadonlyStaticType = C.readonlyStaticType; const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; @@ -385,12 +387,14 @@ class C0 { *method4() { yield s; } method5(p = s) { return p; } } -C0.a = s; -C0.b = N.s; -C0.c = N["s"]; -C0.d = s; -C0.e = N.s; -C0.f = N["s"]; +(function () { + C0.a = s; + C0.b = N.s; + C0.c = N["s"]; + C0.d = s; + C0.e = N.s; + C0.f = N["s"]; +}).call(C0); // non-widening positions // element access o[s]; diff --git a/tests/baselines/reference/uniqueSymbolsDeclarations.js b/tests/baselines/reference/uniqueSymbolsDeclarations.js index 15342a0bd97fc..9b92d83fcc8f4 100644 --- a/tests/baselines/reference/uniqueSymbolsDeclarations.js +++ b/tests/baselines/reference/uniqueSymbolsDeclarations.js @@ -288,9 +288,11 @@ class C { this.readwriteCall = Symbol(); } } -C.readonlyStaticCall = Symbol(); -C.readonlyStaticTypeAndCall = Symbol(); -C.readwriteStaticCall = Symbol(); +(function () { + C.readonlyStaticCall = Symbol(); + C.readonlyStaticTypeAndCall = Symbol(); + C.readwriteStaticCall = Symbol(); +}).call(C); const constInitToCReadonlyStaticCall = C.readonlyStaticCall; const constInitToCReadonlyStaticType = C.readonlyStaticType; const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; @@ -353,12 +355,14 @@ class C0 { *method4() { yield s; } method5(p = s) { return p; } } -C0.a = s; -C0.b = N.s; -C0.c = N["s"]; -C0.d = s; -C0.e = N.s; -C0.f = N["s"]; +(function () { + C0.a = s; + C0.b = N.s; + C0.c = N["s"]; + C0.d = s; + C0.e = N.s; + C0.f = N["s"]; +}).call(C0); // non-widening positions // element access o[s]; diff --git a/tests/baselines/reference/uniqueSymbolsDeclarationsInJs.js b/tests/baselines/reference/uniqueSymbolsDeclarationsInJs.js index 88d29c6a68430..b74810e726411 100644 --- a/tests/baselines/reference/uniqueSymbolsDeclarationsInJs.js +++ b/tests/baselines/reference/uniqueSymbolsDeclarationsInJs.js @@ -36,16 +36,18 @@ class C { this.readwriteCall = Symbol(); } } -/** - * @readonly - */ -C.readonlyStaticCall = Symbol(); -/** - * @type {unique symbol} - * @readonly - */ -C.readonlyStaticTypeAndCall = Symbol(); -C.readwriteStaticCall = Symbol(); +(function () { + /** + * @readonly + */ + C.readonlyStaticCall = Symbol(); + /** + * @type {unique symbol} + * @readonly + */ + C.readonlyStaticTypeAndCall = Symbol(); + C.readwriteStaticCall = Symbol(); +}).call(C); //// [uniqueSymbolsDeclarationsInJs-out.d.ts] diff --git a/tests/baselines/reference/unqualifiedCallToClassStatic1.js b/tests/baselines/reference/unqualifiedCallToClassStatic1.js index 2ca2dfe713104..627349f64b3ad 100644 --- a/tests/baselines/reference/unqualifiedCallToClassStatic1.js +++ b/tests/baselines/reference/unqualifiedCallToClassStatic1.js @@ -10,9 +10,11 @@ class Vector { var Vector = /** @class */ (function () { function Vector() { } - Vector.foo = function () { - // 'foo' cannot be called in an unqualified manner. - foo(); - }; + (function () { + Vector.foo = function () { + // 'foo' cannot be called in an unqualified manner. + foo(); + }; + }).call(Vector); return Vector; }()); diff --git a/tests/baselines/reference/useBeforeDeclaration_jsx.js b/tests/baselines/reference/useBeforeDeclaration_jsx.js index e95bf25464413..f06600545b700 100644 --- a/tests/baselines/reference/useBeforeDeclaration_jsx.js +++ b/tests/baselines/reference/useBeforeDeclaration_jsx.js @@ -18,11 +18,13 @@ class C { //// [useBeforeDeclaration_jsx.jsx] class C { } -C.a = ; -C.b = ; -C.c = ; -C.d = ; -C.e = {C.y}; -C.x = {}; -C.y = ''; -C.z = () => ; +(function () { + C.a = ; + C.b = ; + C.c = ; + C.d = ; + C.e = {C.y}; + C.x = {}; + C.y = ''; + C.z = () => ; +}).call(C); diff --git a/tests/baselines/reference/useBeforeDeclaration_propertyAssignment.js b/tests/baselines/reference/useBeforeDeclaration_propertyAssignment.js index 4ee81065518e1..e22dad19afc51 100644 --- a/tests/baselines/reference/useBeforeDeclaration_propertyAssignment.js +++ b/tests/baselines/reference/useBeforeDeclaration_propertyAssignment.js @@ -27,11 +27,13 @@ export class C { } class D { } -D.A = class extends D.B { - [D.D]() { } // should be an error -}; -D.B = class { -}; -D.C = Object.assign({ [D.D]: 1 }, { get [D.D]() { return 0; } } // should be an error -); -D.D = ''; +(function () { + D.A = class extends D.B { + [D.D]() { } // should be an error + }; + D.B = class { + }; + D.C = Object.assign({ [D.D]: 1 }, { get [D.D]() { return 0; } } // should be an error + ); + D.D = ''; +}).call(D); diff --git a/tests/baselines/reference/witness.js b/tests/baselines/reference/witness.js index 63ffc45411100..6f861d7d010bb 100644 --- a/tests/baselines/reference/witness.js +++ b/tests/baselines/reference/witness.js @@ -258,7 +258,9 @@ var c2inst; var C3 = /** @class */ (function () { function C3() { } - C3.q = C3.q; + (function () { + C3.q = C3.q; + }).call(C3); return C3; }()); var qq = C3.q; diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts new file mode 100644 index 0000000000000..8e49192c6dc85 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts @@ -0,0 +1,11 @@ +// @target: esnext, es2020, es6, es5 +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} From 061f916ee1ba3244571ca796e79309edc71222ba Mon Sep 17 00:00:00 2001 From: kingwl Date: Sat, 6 Mar 2021 18:54:50 +0800 Subject: [PATCH 02/33] Update emit --- src/compiler/transformers/classFields.ts | 55 ++-- ...ticVariableAndExportedVarThatShareAName.js | 8 +- ...VariableAndNonExportedVarThatShareAName.js | 8 +- ...onWithInvalidConstOnPropertyDeclaration.js | 4 +- .../amdImportNotAsPrimaryExpression.js | 4 +- .../reference/asyncArrowInClassES5.js | 10 +- .../reference/asyncAwaitNestedClasses_es5.js | 52 ++-- tests/baselines/reference/autolift4.js | 4 +- .../awaitAndYieldInProperty.errors.txt | 26 +- .../reference/awaitAndYieldInProperty.js | 6 +- .../awaitInClassInAsyncFunction.errors.txt | 18 -- .../blockScopedNamespaceDifferentFile.js | 6 +- .../blockScopedVariablesUseBeforeDef.js | 4 +- tests/baselines/reference/class2.js | 4 +- .../baselines/reference/classBlockScoping.js | 4 +- ...rationCheckUsedBeforeDefinitionInItself.js | 4 +- ...rationShouldBeOutOfScopeInComputedNames.js | 10 +- ...lassExpressionInClassStaticDeclarations.js | 16 +- .../classExpressionWithDecorator1.js | 4 +- .../reference/classInConvertedLoopES5.js | 4 +- .../classMemberInitializerScoping.js | 4 +- .../classMemberInitializerWithLamdaScoping.js | 18 +- ...tializersUsePropertiesBeforeDeclaration.js | 8 +- .../reference/classStaticPropertyAccess.js | 8 +- .../reference/classWithPrivateProperty.js | 4 +- .../reference/classWithProtectedProperty.js | 4 +- .../reference/classWithPublicProperty.js | 4 +- .../reference/cloduleStaticMembers.js | 6 +- .../reference/commentsOnStaticMembers.js | 18 +- .../commonJSImportAsPrimaryExpression.js | 4 +- .../commonJSImportNotAsPrimaryExpression.js | 4 +- .../reference/computedPropertyNames12_ES5.js | 4 +- .../reference/computedPropertyNames12_ES6.js | 4 +- ...computedPropertyNamesWithStaticProperty.js | 4 +- .../reference/declFilePrivateStatic.js | 6 +- ...arationEmitLocalClassHasRequiredDeclare.js | 4 +- .../declarationEmitPrivateReadonlyLiterals.js | 6 +- .../declarationNoDanglingGenerics.js | 8 +- .../decoratedClassExportsCommonJS1.js | 4 +- .../reference/decoratedClassExportsSystem1.js | 4 +- .../reference/decoratorOnClass5.es6.js | 4 +- .../reference/decoratorOnClass6.es6.js | 4 +- .../reference/decoratorOnClass7.es6.js | 4 +- .../reference/decoratorOnClass8.es6.js | 4 +- .../baselines/reference/decoratorOnClass9.js | 6 +- .../defaultDeclarationEmitNamedCorrectly.js | 4 +- ...DeclarationWithLiteralPropertyNameInES6.js | 10 +- ...rationWithStaticPropertyAssignmentInES6.js | 8 +- tests/baselines/reference/errorSuperCalls.js | 6 +- .../reference/errorSuperPropertyAccess.js | 6 +- .../reference/es3defaultAliasIsQuoted.js | 4 +- tests/baselines/reference/es6ClassTest.js | 4 +- tests/baselines/reference/es6ClassTest2.js | 4 +- .../reference/es6ModuleClassDeclaration.js | 36 +-- .../reference/es6modulekindWithES5Target.js | 8 +- .../reference/es6modulekindWithES5Target11.js | 4 +- .../reference/es6modulekindWithES5Target2.js | 4 +- .../reference/es6modulekindWithES5Target3.js | 4 +- .../esnextmodulekindWithES5Target.js | 8 +- .../esnextmodulekindWithES5Target11.js | 4 +- .../esnextmodulekindWithES5Target2.js | 4 +- .../esnextmodulekindWithES5Target3.js | 4 +- ...ClassWithStaticPropertyAssignmentsInES6.js | 4 +- .../exportDefaultQualifiedNameNoError.js | 4 +- tests/baselines/reference/extendFromAny.js | 4 +- .../reference/forwardRefInClassProperties.js | 6 +- .../reference/generatedContextualTyping.js | 144 +++-------- .../reference/generatorTypeCheck39.errors.txt | 5 +- .../reference/generatorTypeCheck57.errors.txt | 11 - .../reference/generatorTypeCheck58.errors.txt | 11 - .../reference/generatorTypeCheck58.js | 4 +- ...nericClassWithStaticsUsingTypeArguments.js | 10 +- .../baselines/reference/gettersAndSetters.js | 4 +- .../reference/importImportOnlyModule.js | 4 +- .../inferringClassMembersFromAssignments.js | 19 +- .../instanceAndStaticDeclarations1.js | 4 +- .../reference/invalidNewTarget.es5.js | 5 +- .../reference/invalidNewTarget.es6.js | 4 +- .../baselines/reference/invalidStaticField.js | 4 +- .../reference/jsDeclarationsClasses.js | 20 +- .../reference/jsDeclarationsComputedNames.js | 4 +- .../reference/jsDeclarationsDefaultsErr.js | 4 +- ...eclarationsExportAssignedClassInstance2.js | 4 +- ...eclarationsExportAssignedClassInstance3.js | 4 +- tests/baselines/reference/newTarget.es5.js | 10 +- tests/baselines/reference/newTarget.es6.js | 4 +- .../parserAccessibilityAfterStatic3.js | 4 +- ...ErrorRecovery_IncompleteMemberVariable1.js | 6 +- ...ErrorRecovery_IncompleteMemberVariable2.js | 6 +- tests/baselines/reference/parserharness.js | 8 +- .../privacyCannotNameVarTypeDeclFile.js | 32 +-- ...NameAndStaticInitializer(target=es2015).js | 4 +- ...NameAndStaticInitializer(target=esnext).js | 4 +- .../privateNameES5Ban(target=es3).js | 4 +- .../privateNameES5Ban(target=es5).js | 4 +- .../reference/privateNameFieldsESNext.js | 4 +- .../privateNamesConstructorChain-1.js | 4 +- .../privateNamesConstructorChain-2.js | 4 +- .../privateNamesInNestedClasses-2.js | 4 +- .../reference/privateNamesUnique-3.js | 8 +- .../privateStaticMemberAccessibility.js | 4 +- .../reference/propertyAccessibility2.js | 4 +- .../reference/quotedPropertyName2.js | 4 +- .../reactDefaultPropsInferenceSuccess.js | 24 +- .../baselines/reference/reassignStaticProp.js | 4 +- ...PredicateIsInstantiateInContextOfTarget.js | 8 +- .../reference/scopeCheckStaticInitializer.js | 16 +- .../reference/sourceMap-FileWithComments.js | 6 +- .../sourceMap-FileWithComments.js.map | 4 +- .../sourceMap-FileWithComments.sourcemap.txt | 214 ++++++++-------- .../sourceMapValidationDecorators.js | 4 +- .../sourceMapValidationDecorators.js.map | 4 +- ...ourceMapValidationDecorators.sourcemap.txt | 234 +++++++++--------- ...nonymousTypeNotReferencingTypeParameter.js | 4 +- tests/baselines/reference/staticClassProps.js | 4 +- .../staticMemberAccessOffDerivedType1.js | 4 +- .../reference/staticMemberInitialization.js | 4 +- .../staticMemberWithStringAndNumberNames.js | 12 +- .../reference/staticModifierAlreadySeen.js | 4 +- tests/baselines/reference/staticPropSuper.js | 4 +- tests/baselines/reference/statics.js | 8 +- .../reference/staticsInConstructorBodies.js | 4 +- .../reference/staticsNotInScopeInClodule.js | 4 +- .../reference/strictModeInConstructor.js | 12 +- tests/baselines/reference/superAccess.js | 4 +- tests/baselines/reference/superAccess2.js | 4 +- .../reference/symbolDeclarationEmit11.js | 4 +- .../reference/systemModuleTargetES6.js | 4 +- ...thisInArrowFunctionInStaticInitializer1.js | 11 +- .../reference/thisInConstructorParameter2.js | 4 +- .../reference/thisInInvalidContexts.js | 4 +- .../thisInInvalidContextsExternalModule.js | 4 +- .../reference/thisInOuterClassBody.js | 4 +- .../thisInPropertyBoundDeclarations.js | 12 +- .../reference/thisInStaticMethod1.js | 4 +- .../reference/thisTypeAccessibility.js | 8 +- tests/baselines/reference/thisTypeErrors.js | 4 +- ...rectly.rewrittenNamespaceFollowingClass.js | 4 +- ...rrectly.transformAddCommentToProperties.js | 6 +- .../baselines/reference/tsxDefaultImports.js | 4 +- .../reference/tsxLibraryManagedAttributes.js | 72 +++--- tests/baselines/reference/typeOfPrototype.js | 4 +- .../reference/typeOfThisInStaticMembers2.js | 8 +- ...peOfThisInStaticMembers3(target=es2020).js | 14 +- .../typeOfThisInStaticMembers3(target=es5).js | 14 +- .../typeOfThisInStaticMembers3(target=es6).js | 14 +- ...peOfThisInStaticMembers3(target=esnext).js | 14 +- tests/baselines/reference/typeQueryOnClass.js | 6 +- .../reference/typeofUsedBeforeBlockScoped.js | 4 +- tests/baselines/reference/uniqueSymbols.js | 22 +- .../reference/uniqueSymbolsDeclarations.js | 22 +- .../uniqueSymbolsDeclarationsInJs.js | 22 +- .../unqualifiedCallToClassStatic1.js | 10 +- .../reference/useBeforeDeclaration_jsx.js | 18 +- ...useBeforeDeclaration_propertyAssignment.js | 18 +- tests/baselines/reference/witness.js | 4 +- 156 files changed, 675 insertions(+), 1184 deletions(-) delete mode 100644 tests/baselines/reference/awaitInClassInAsyncFunction.errors.txt delete mode 100644 tests/baselines/reference/generatorTypeCheck57.errors.txt delete mode 100644 tests/baselines/reference/generatorTypeCheck58.errors.txt diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 874ff1c70e3d0..3b3a7e150acb9 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -122,6 +122,23 @@ namespace ts { } } + function visitorThisInStaticFieldContext(receiver: LeftHandSideExpression) { + return function staticFieldThisVisitor(node: Node): Node { + if (!(node.transformFlags & TransformFlags.ContainsLexicalThis)) return node; + + // This in static field cannot cross function or class boundary. + if (isClassLike(node) || isFunctionDeclaration(node) || isFunctionExpression(node)) { + return node; + } + + if (node.kind === SyntaxKind.ThisKeyword) { + return nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver); + } + + return visitEachChild(node, staticFieldThisVisitor, context); + } + } + /** * If we visit a private name, this means it is an undeclared private name. * Replace it with an empty identifier to indicate a problem with the code. @@ -490,7 +507,7 @@ namespace ts { // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); if (some(staticProperties)) { - addPropertyStatementsForStatic(statements, staticProperties, factory.getInternalName(node)); + addPropertyStatements(statements, staticProperties, factory.getInternalName(node)); } return statements; @@ -534,7 +551,7 @@ namespace ts { } if (pendingStatements && some(staticProperties)) { - addPropertyStatementsForStatic(pendingStatements, staticProperties, factory.getInternalName(node)); + addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); } return classExpression; } @@ -724,33 +741,6 @@ namespace ts { } } - function addPropertyStatementsForStatic(statements: Statement[], properties: readonly PropertyDeclaration[], receiver: Identifier) { - const assignmentStatements: Statement[] = []; - addPropertyStatements(assignmentStatements, properties, receiver); - - const propertyAssignmentStatement = factory.createExpressionStatement( - factory.createCallExpression( - factory.createPropertyAccessExpression( - factory.createParenthesizedExpression( - factory.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, - /*parameters*/ undefined, - /*type*/ undefined, - factory.createBlock(assignmentStatements, /*multiLine*/ true) - ) - ), - factory.createIdentifier("call") - ), - undefined, - [nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver)] - ) - ); - statements.push(propertyAssignmentStatement); - } - /** * Generates assignment expressions for property initializers. * @@ -816,7 +806,12 @@ namespace ts { if (hasSyntacticModifier(propertyOriginalNode, ModifierFlags.Abstract)) { return undefined; } - const initializer = property.initializer || emitAssignment ? visitNode(property.initializer, visitor, isExpression) ?? factory.createVoidZero() + + const initializer = property.initializer || emitAssignment ? visitNode( + hasStaticModifier(property) ? visitNode(property.initializer, visitorThisInStaticFieldContext(receiver), isExpression) : property.initializer, + visitor, + isExpression + ) ?? factory.createVoidZero() : isParameterPropertyDeclaration(propertyOriginalNode, propertyOriginalNode.parent) && isIdentifier(propertyName) ? propertyName : factory.createVoidZero(); diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js index 6eec595aef8a5..db07e83eb7f81 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js @@ -28,9 +28,7 @@ var Point = /** @class */ (function () { this.x = x; this.y = y; } - (function () { - Point.Origin = { x: 0, y: 0 }; - }).call(Point); + Point.Origin = { x: 0, y: 0 }; return Point; }()); (function (Point) { @@ -43,9 +41,7 @@ var A; this.x = x; this.y = y; } - (function () { - Point.Origin = { x: 0, y: 0 }; - }).call(Point); + Point.Origin = { x: 0, y: 0 }; return Point; }()); A.Point = Point; diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js index 50177fb789894..246acf9af117b 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js @@ -28,9 +28,7 @@ var Point = /** @class */ (function () { this.x = x; this.y = y; } - (function () { - Point.Origin = { x: 0, y: 0 }; - }).call(Point); + Point.Origin = { x: 0, y: 0 }; return Point; }()); (function (Point) { @@ -43,9 +41,7 @@ var A; this.x = x; this.y = y; } - (function () { - Point.Origin = { x: 0, y: 0 }; - }).call(Point); + Point.Origin = { x: 0, y: 0 }; return Point; }()); A.Point = Point; diff --git a/tests/baselines/reference/ClassDeclarationWithInvalidConstOnPropertyDeclaration.js b/tests/baselines/reference/ClassDeclarationWithInvalidConstOnPropertyDeclaration.js index dd290f873999c..c4cab7cc9396c 100644 --- a/tests/baselines/reference/ClassDeclarationWithInvalidConstOnPropertyDeclaration.js +++ b/tests/baselines/reference/ClassDeclarationWithInvalidConstOnPropertyDeclaration.js @@ -7,8 +7,6 @@ class AtomicNumbers { var AtomicNumbers = /** @class */ (function () { function AtomicNumbers() { } - (function () { - AtomicNumbers.H = 1; - }).call(AtomicNumbers); + AtomicNumbers.H = 1; return AtomicNumbers; }()); diff --git a/tests/baselines/reference/amdImportNotAsPrimaryExpression.js b/tests/baselines/reference/amdImportNotAsPrimaryExpression.js index 07d00ddd46bdf..6020113e64b87 100644 --- a/tests/baselines/reference/amdImportNotAsPrimaryExpression.js +++ b/tests/baselines/reference/amdImportNotAsPrimaryExpression.js @@ -40,9 +40,7 @@ define(["require", "exports"], function (require, exports) { function C1() { this.m1 = 42; } - (function () { - C1.s1 = true; - }).call(C1); + C1.s1 = true; return C1; }()); exports.C1 = C1; diff --git a/tests/baselines/reference/asyncArrowInClassES5.js b/tests/baselines/reference/asyncArrowInClassES5.js index c8dba31f58c19..f0204f7319bda 100644 --- a/tests/baselines/reference/asyncArrowInClassES5.js +++ b/tests/baselines/reference/asyncArrowInClassES5.js @@ -10,14 +10,12 @@ class Test { //// [asyncArrowInClassES5.js] // https://github.com/Microsoft/TypeScript/issues/16924 // Should capture `this` +var _this = this; var Test = /** @class */ (function () { function Test() { } - (function () { - var _this = this; - Test.member = function (x) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/]; - }); }); }; - }).call(Test); + Test.member = function (x) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/]; + }); }); }; return Test; }()); diff --git a/tests/baselines/reference/asyncAwaitNestedClasses_es5.js b/tests/baselines/reference/asyncAwaitNestedClasses_es5.js index 97654fc017cde..f72dda7bec2af 100644 --- a/tests/baselines/reference/asyncAwaitNestedClasses_es5.js +++ b/tests/baselines/reference/asyncAwaitNestedClasses_es5.js @@ -21,34 +21,32 @@ var A = /** @class */ (function () { function A() { } var _a; - (function () { - A.B = (_a = /** @class */ (function () { - function B() { - } - B.func2 = function () { - return new Promise(function (resolve) { resolve(null); }); - }; - return B; - }()), - _a.C = /** @class */ (function () { - function C() { - } - C.func = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, _a.func2()]; - case 1: - _b.sent(); - return [2 /*return*/]; - } - }); + A.B = (_a = /** @class */ (function () { + function B() { + } + B.func2 = function () { + return new Promise(function (resolve) { resolve(null); }); + }; + return B; + }()), + _a.C = /** @class */ (function () { + function C() { + } + C.func = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, _a.func2()]; + case 1: + _b.sent(); + return [2 /*return*/]; + } }); - }; - return C; - }()), - _a); - }).call(A); + }); + }; + return C; + }()), + _a); return A; }()); A.B.C.func(); diff --git a/tests/baselines/reference/autolift4.js b/tests/baselines/reference/autolift4.js index 8c2e8cadc31cf..4c71eadc31db7 100644 --- a/tests/baselines/reference/autolift4.js +++ b/tests/baselines/reference/autolift4.js @@ -47,9 +47,7 @@ var Point = /** @class */ (function () { Point.prototype.getDist = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; - (function () { - Point.origin = new Point(0, 0); - }).call(Point); + Point.origin = new Point(0, 0); return Point; }()); var Point3D = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/awaitAndYieldInProperty.errors.txt b/tests/baselines/reference/awaitAndYieldInProperty.errors.txt index 46a05266a4dc9..7e6c3058ff9a3 100644 --- a/tests/baselines/reference/awaitAndYieldInProperty.errors.txt +++ b/tests/baselines/reference/awaitAndYieldInProperty.errors.txt @@ -1,68 +1,44 @@ tests/cases/conformance/classes/awaitAndYieldInProperty.ts(3,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. -tests/cases/conformance/classes/awaitAndYieldInProperty.ts(3,21): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(4,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. -tests/cases/conformance/classes/awaitAndYieldInProperty.ts(4,28): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(6,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. -tests/cases/conformance/classes/awaitAndYieldInProperty.ts(6,21): error TS1163: A 'yield' expression is only allowed in a generator body. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(7,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. -tests/cases/conformance/classes/awaitAndYieldInProperty.ts(7,28): error TS1163: A 'yield' expression is only allowed in a generator body. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(11,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. -tests/cases/conformance/classes/awaitAndYieldInProperty.ts(11,21): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(12,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. -tests/cases/conformance/classes/awaitAndYieldInProperty.ts(12,28): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(14,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. -tests/cases/conformance/classes/awaitAndYieldInProperty.ts(14,21): error TS1163: A 'yield' expression is only allowed in a generator body. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(15,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. -tests/cases/conformance/classes/awaitAndYieldInProperty.ts(15,28): error TS1163: A 'yield' expression is only allowed in a generator body. -==== tests/cases/conformance/classes/awaitAndYieldInProperty.ts (16 errors) ==== +==== tests/cases/conformance/classes/awaitAndYieldInProperty.ts (8 errors) ==== async function* test(x: Promise) { class C { [await x] = await x; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. - ~~~~~ -!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. static [await x] = await x; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. - ~~~~~ -!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. [yield 1] = yield 2; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. - ~~~~~ -!!! error TS1163: A 'yield' expression is only allowed in a generator body. static [yield 3] = yield 4; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. - ~~~~~ -!!! error TS1163: A 'yield' expression is only allowed in a generator body. } return class { [await x] = await x; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. - ~~~~~ -!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. static [await x] = await x; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. - ~~~~~ -!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. [yield 1] = yield 2; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. - ~~~~~ -!!! error TS1163: A 'yield' expression is only allowed in a generator body. static [yield 3] = yield 4; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. - ~~~~~ -!!! error TS1163: A 'yield' expression is only allowed in a generator body. } } \ No newline at end of file diff --git a/tests/baselines/reference/awaitAndYieldInProperty.js b/tests/baselines/reference/awaitAndYieldInProperty.js index 3b9b85754a189..73c04a612c2d0 100644 --- a/tests/baselines/reference/awaitAndYieldInProperty.js +++ b/tests/baselines/reference/awaitAndYieldInProperty.js @@ -27,10 +27,8 @@ async function* test(x) { } } _a = await x, _b = await x, _c = yield 1, _d = yield 3; - (function () { - C[_b] = await x; - C[_d] = yield 4; - }).call(C); + C[_b] = await x; + C[_d] = yield 4; return _j = class { constructor() { this[_e] = await x; diff --git a/tests/baselines/reference/awaitInClassInAsyncFunction.errors.txt b/tests/baselines/reference/awaitInClassInAsyncFunction.errors.txt deleted file mode 100644 index 53d4a48dd45af..0000000000000 --- a/tests/baselines/reference/awaitInClassInAsyncFunction.errors.txt +++ /dev/null @@ -1,18 +0,0 @@ -tests/cases/compiler/awaitInClassInAsyncFunction.ts(9,15): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. - - -==== tests/cases/compiler/awaitInClassInAsyncFunction.ts (1 errors) ==== - // https://github.com/microsoft/TypeScript/issues/34887 - - async function bar() { - return 2; - } - - async function foo() { - return new class { - baz = await bar(); - ~~~~~ -!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. - }; - } - \ No newline at end of file diff --git a/tests/baselines/reference/blockScopedNamespaceDifferentFile.js b/tests/baselines/reference/blockScopedNamespaceDifferentFile.js index aae24916fa830..1ddb284f55cc0 100644 --- a/tests/baselines/reference/blockScopedNamespaceDifferentFile.js +++ b/tests/baselines/reference/blockScopedNamespaceDifferentFile.js @@ -27,10 +27,8 @@ var C; var Name = /** @class */ (function () { function Name(parameters) { } - (function () { - Name.funcData = A.AA.func(); - Name.someConst = A.AA.foo; - }).call(Name); + Name.funcData = A.AA.func(); + Name.someConst = A.AA.foo; return Name; }()); C.Name = Name; diff --git a/tests/baselines/reference/blockScopedVariablesUseBeforeDef.js b/tests/baselines/reference/blockScopedVariablesUseBeforeDef.js index 1ad9fccce2c02..9ca3f8998a2eb 100644 --- a/tests/baselines/reference/blockScopedVariablesUseBeforeDef.js +++ b/tests/baselines/reference/blockScopedVariablesUseBeforeDef.js @@ -178,9 +178,7 @@ function foo10() { var A = /** @class */ (function () { function A() { } - (function () { - A.a = x; - }).call(A); + A.a = x; return A; }()); var x; diff --git a/tests/baselines/reference/class2.js b/tests/baselines/reference/class2.js index 233e47c5df799..22a253bfc1900 100644 --- a/tests/baselines/reference/class2.js +++ b/tests/baselines/reference/class2.js @@ -5,8 +5,6 @@ class foo { constructor() { static f = 3; } } var foo = /** @class */ (function () { function foo() { } - (function () { - foo.f = 3; - }).call(foo); + foo.f = 3; return foo; }()); diff --git a/tests/baselines/reference/classBlockScoping.js b/tests/baselines/reference/classBlockScoping.js index f0b49cee275fc..ee3d9163b5e99 100644 --- a/tests/baselines/reference/classBlockScoping.js +++ b/tests/baselines/reference/classBlockScoping.js @@ -63,9 +63,7 @@ function f(b) { Foo.prototype.m = function () { new Foo(); }; - (function () { - Foo.y = new Foo(); - }).call(Foo); + Foo.y = new Foo(); return Foo; }()); new Foo_1(); diff --git a/tests/baselines/reference/classDeclarationCheckUsedBeforeDefinitionInItself.js b/tests/baselines/reference/classDeclarationCheckUsedBeforeDefinitionInItself.js index 9dc62798a2f14..b3a3d25a81935 100644 --- a/tests/baselines/reference/classDeclarationCheckUsedBeforeDefinitionInItself.js +++ b/tests/baselines/reference/classDeclarationCheckUsedBeforeDefinitionInItself.js @@ -6,6 +6,4 @@ class C3 { //// [classDeclarationCheckUsedBeforeDefinitionInItself.js] class C3 { } -(function () { - C3.intance = new C3(); // ok -}).call(C3); +C3.intance = new C3(); // ok diff --git a/tests/baselines/reference/classDeclarationShouldBeOutOfScopeInComputedNames.js b/tests/baselines/reference/classDeclarationShouldBeOutOfScopeInComputedNames.js index 366f12aa46bd0..5367ef781a5cd 100644 --- a/tests/baselines/reference/classDeclarationShouldBeOutOfScopeInComputedNames.js +++ b/tests/baselines/reference/classDeclarationShouldBeOutOfScopeInComputedNames.js @@ -20,11 +20,9 @@ var A = /** @class */ (function () { A.prototype[A.p1] = function () { }; var _a, _b; _b = A.p2; - (function () { - A.p1 = Symbol(); - A.p2 = Symbol(); - // All of the below should be out of scope or TDZ - `A` has not finished being constructed as they are executed - A[_a] = 0; - }).call(A); + A.p1 = Symbol(); + A.p2 = Symbol(); + // All of the below should be out of scope or TDZ - `A` has not finished being constructed as they are executed + A[_a] = 0; return A; }()); diff --git a/tests/baselines/reference/classExpressionInClassStaticDeclarations.js b/tests/baselines/reference/classExpressionInClassStaticDeclarations.js index acb6345c85cff..b74a5ec980b15 100644 --- a/tests/baselines/reference/classExpressionInClassStaticDeclarations.js +++ b/tests/baselines/reference/classExpressionInClassStaticDeclarations.js @@ -22,15 +22,13 @@ var __extends = (this && this.__extends) || (function () { var C = /** @class */ (function () { function C() { } - (function () { - C.D = /** @class */ (function (_super) { - __extends(class_1, _super); - function class_1() { - return _super !== null && _super.apply(this, arguments) || this; - } - return class_1; - }(C)); - }).call(C); + C.D = /** @class */ (function (_super) { + __extends(class_1, _super); + function class_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + return class_1; + }(C)); return C; }()); diff --git a/tests/baselines/reference/classExpressionWithDecorator1.js b/tests/baselines/reference/classExpressionWithDecorator1.js index 68b483c4cd832..e96bc7d46d2cb 100644 --- a/tests/baselines/reference/classExpressionWithDecorator1.js +++ b/tests/baselines/reference/classExpressionWithDecorator1.js @@ -12,9 +12,7 @@ var v = ; var C = /** @class */ (function () { function C() { } - (function () { - C.p = 1; - }).call(C); + C.p = 1; C = __decorate([ decorate ], C); diff --git a/tests/baselines/reference/classInConvertedLoopES5.js b/tests/baselines/reference/classInConvertedLoopES5.js index 7f34f09944ad3..eb7f3d4ebf526 100644 --- a/tests/baselines/reference/classInConvertedLoopES5.js +++ b/tests/baselines/reference/classInConvertedLoopES5.js @@ -16,9 +16,7 @@ var _loop_1 = function (row) { function RowClass() { this.row = row; } - (function () { - RowClass.factory = function () { return new RowClass(); }; - }).call(RowClass); + RowClass.factory = function () { return new RowClass(); }; return RowClass; }()); classesByRow[row] = RowClass; diff --git a/tests/baselines/reference/classMemberInitializerScoping.js b/tests/baselines/reference/classMemberInitializerScoping.js index 10d42b9e2240e..7fd6b6f3a7ab6 100644 --- a/tests/baselines/reference/classMemberInitializerScoping.js +++ b/tests/baselines/reference/classMemberInitializerScoping.js @@ -27,9 +27,7 @@ var CCC = /** @class */ (function () { this.y = aaa; this.y = ''; // was: error, cannot assign string to number } - (function () { - CCC.staticY = aaa; // This shouldnt be error - }).call(CCC); + CCC.staticY = aaa; // This shouldnt be error return CCC; }()); // above is equivalent to this: diff --git a/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js b/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js index a0e41790366de..f7660fbec7e7e 100644 --- a/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js @@ -40,12 +40,10 @@ var Test = /** @class */ (function () { console.log(field); // Using field here shouldnt be error }; } - (function () { - Test.staticMessageHandler = function () { - var field = Test.field; - console.log(field); // Using field here shouldnt be error - }; - }).call(Test); + Test.staticMessageHandler = function () { + var field = Test.field; + console.log(field); // Using field here shouldnt be error + }; return Test; }()); var field1; @@ -58,10 +56,8 @@ var Test1 = /** @class */ (function () { // it would resolve to private field1 and thats not what user intended here. }; } - (function () { - Test1.staticMessageHandler = function () { - console.log(field1); // This shouldnt be error as its a static property - }; - }).call(Test1); + Test1.staticMessageHandler = function () { + console.log(field1); // This shouldnt be error as its a static property + }; return Test1; }()); diff --git a/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.js b/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.js index c34808e9de284..28edb94345b43 100644 --- a/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.js +++ b/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.js @@ -22,11 +22,9 @@ namespace Namespace { var Foo = /** @class */ (function () { function Foo() { } - (function () { - Foo.enumMember = Enum.A; - Foo.objLiteralMember = ObjLiteral.A; - Foo.namespaceMember = Namespace.A; - }).call(Foo); + Foo.enumMember = Enum.A; + Foo.objLiteralMember = ObjLiteral.A; + Foo.namespaceMember = Namespace.A; return Foo; }()); var Enum; diff --git a/tests/baselines/reference/classStaticPropertyAccess.js b/tests/baselines/reference/classStaticPropertyAccess.js index c21bf2200cb1b..35cc60cf32a3c 100644 --- a/tests/baselines/reference/classStaticPropertyAccess.js +++ b/tests/baselines/reference/classStaticPropertyAccess.js @@ -21,11 +21,9 @@ var A = /** @class */ (function () { function A() { } A["\""] = function () { }; - (function () { - A.x = 1; - A.y = 1; - A._b = 2; - }).call(A); + A.x = 1; + A.y = 1; + A._b = 2; return A; }()); var a = new A(); diff --git a/tests/baselines/reference/classWithPrivateProperty.js b/tests/baselines/reference/classWithPrivateProperty.js index adbdb18fac239..1188b43c771c4 100644 --- a/tests/baselines/reference/classWithPrivateProperty.js +++ b/tests/baselines/reference/classWithPrivateProperty.js @@ -32,9 +32,7 @@ var C = /** @class */ (function () { } C.prototype.c = function () { return ''; }; C.f = function () { return ''; }; - (function () { - C.g = function () { return ''; }; - }).call(C); + C.g = function () { return ''; }; return C; }()); var c = new C(); diff --git a/tests/baselines/reference/classWithProtectedProperty.js b/tests/baselines/reference/classWithProtectedProperty.js index 86a5061e4df98..a6e62dc9f01ec 100644 --- a/tests/baselines/reference/classWithProtectedProperty.js +++ b/tests/baselines/reference/classWithProtectedProperty.js @@ -52,9 +52,7 @@ var C = /** @class */ (function () { } C.prototype.c = function () { return ''; }; C.f = function () { return ''; }; - (function () { - C.g = function () { return ''; }; - }).call(C); + C.g = function () { return ''; }; return C; }()); var D = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/classWithPublicProperty.js b/tests/baselines/reference/classWithPublicProperty.js index 51c651726a648..879a4db8864e4 100644 --- a/tests/baselines/reference/classWithPublicProperty.js +++ b/tests/baselines/reference/classWithPublicProperty.js @@ -30,9 +30,7 @@ var C = /** @class */ (function () { } C.prototype.c = function () { return ''; }; C.f = function () { return ''; }; - (function () { - C.g = function () { return ''; }; - }).call(C); + C.g = function () { return ''; }; return C; }()); // all of these are valid diff --git a/tests/baselines/reference/cloduleStaticMembers.js b/tests/baselines/reference/cloduleStaticMembers.js index 0f42b5e2cce2c..8d59de41e68c9 100644 --- a/tests/baselines/reference/cloduleStaticMembers.js +++ b/tests/baselines/reference/cloduleStaticMembers.js @@ -16,10 +16,8 @@ module Clod { var Clod = /** @class */ (function () { function Clod() { } - (function () { - Clod.x = 10; - Clod.y = 10; - }).call(Clod); + Clod.x = 10; + Clod.y = 10; return Clod; }()); (function (Clod) { diff --git a/tests/baselines/reference/commentsOnStaticMembers.js b/tests/baselines/reference/commentsOnStaticMembers.js index ecb0a07448b2e..98f96e53204b0 100644 --- a/tests/baselines/reference/commentsOnStaticMembers.js +++ b/tests/baselines/reference/commentsOnStaticMembers.js @@ -23,15 +23,13 @@ class test { var test = /** @class */ (function () { function test() { } - (function () { - /** - * p1 comment appears in output - */ - test.p1 = ""; - /** - * p3 comment appears in output - */ - test.p3 = ""; - }).call(test); + /** + * p1 comment appears in output + */ + test.p1 = ""; + /** + * p3 comment appears in output + */ + test.p3 = ""; return test; }()); diff --git a/tests/baselines/reference/commonJSImportAsPrimaryExpression.js b/tests/baselines/reference/commonJSImportAsPrimaryExpression.js index 6cb39450c319c..f59e42beb1532 100644 --- a/tests/baselines/reference/commonJSImportAsPrimaryExpression.js +++ b/tests/baselines/reference/commonJSImportAsPrimaryExpression.js @@ -21,9 +21,7 @@ var C1 = /** @class */ (function () { function C1() { this.m1 = 42; } - (function () { - C1.s1 = true; - }).call(C1); + C1.s1 = true; return C1; }()); exports.C1 = C1; diff --git a/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.js b/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.js index 6ade17e07120f..cd1d0f85ec12f 100644 --- a/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.js +++ b/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.js @@ -39,9 +39,7 @@ var C1 = /** @class */ (function () { function C1() { this.m1 = 42; } - (function () { - C1.s1 = true; - }).call(C1); + C1.s1 = true; return C1; }()); exports.C1 = C1; diff --git a/tests/baselines/reference/computedPropertyNames12_ES5.js b/tests/baselines/reference/computedPropertyNames12_ES5.js index e2984b8bbe2d2..0245bfd3b2a05 100644 --- a/tests/baselines/reference/computedPropertyNames12_ES5.js +++ b/tests/baselines/reference/computedPropertyNames12_ES5.js @@ -28,8 +28,6 @@ var C = /** @class */ (function () { } var _a, _b, _c; _a = n, s + s, _b = s + n, +s, _c = "hello " + a + " bye"; - (function () { - C[_c] = 0; - }).call(C); + C[_c] = 0; return C; }()); diff --git a/tests/baselines/reference/computedPropertyNames12_ES6.js b/tests/baselines/reference/computedPropertyNames12_ES6.js index 27810930241bb..f56dbf287a8c6 100644 --- a/tests/baselines/reference/computedPropertyNames12_ES6.js +++ b/tests/baselines/reference/computedPropertyNames12_ES6.js @@ -29,6 +29,4 @@ class C { } } _a = n, s + s, _b = s + n, +s, _c = `hello ${a} bye`; -(function () { - C[_c] = 0; -}).call(C); +C[_c] = 0; diff --git a/tests/baselines/reference/computedPropertyNamesWithStaticProperty.js b/tests/baselines/reference/computedPropertyNamesWithStaticProperty.js index 84978734fd56e..9f0407588a83e 100644 --- a/tests/baselines/reference/computedPropertyNamesWithStaticProperty.js +++ b/tests/baselines/reference/computedPropertyNamesWithStaticProperty.js @@ -20,6 +20,4 @@ class C { } [C.staticProp]() { } } -(function () { - C.staticProp = 10; -}).call(C); +C.staticProp = 10; diff --git a/tests/baselines/reference/declFilePrivateStatic.js b/tests/baselines/reference/declFilePrivateStatic.js index 47b354e712bb6..78d3cb4051bc8 100644 --- a/tests/baselines/reference/declFilePrivateStatic.js +++ b/tests/baselines/reference/declFilePrivateStatic.js @@ -39,10 +39,8 @@ var C = /** @class */ (function () { enumerable: false, configurable: true }); - (function () { - C.x = 1; - C.y = 1; - }).call(C); + C.x = 1; + C.y = 1; return C; }()); diff --git a/tests/baselines/reference/declarationEmitLocalClassHasRequiredDeclare.js b/tests/baselines/reference/declarationEmitLocalClassHasRequiredDeclare.js index 40b404c246c5d..c79e0cc921e44 100644 --- a/tests/baselines/reference/declarationEmitLocalClassHasRequiredDeclare.js +++ b/tests/baselines/reference/declarationEmitLocalClassHasRequiredDeclare.js @@ -27,9 +27,7 @@ var X = /** @class */ (function () { var A = /** @class */ (function () { function A() { } - (function () { - A.X = X; - }).call(A); + A.X = X; return A; }()); exports.A = A; diff --git a/tests/baselines/reference/declarationEmitPrivateReadonlyLiterals.js b/tests/baselines/reference/declarationEmitPrivateReadonlyLiterals.js index ededd09c49603..c7e1d1e8ee6a2 100644 --- a/tests/baselines/reference/declarationEmitPrivateReadonlyLiterals.js +++ b/tests/baselines/reference/declarationEmitPrivateReadonlyLiterals.js @@ -13,10 +13,8 @@ var Foo = /** @class */ (function () { this.B = "b"; this.D = 42; } - (function () { - Foo.A = "a"; - Foo.C = 42; - }).call(Foo); + Foo.A = "a"; + Foo.C = 42; return Foo; }()); diff --git a/tests/baselines/reference/declarationNoDanglingGenerics.js b/tests/baselines/reference/declarationNoDanglingGenerics.js index 818738813d984..4b97a3abe0bb0 100644 --- a/tests/baselines/reference/declarationNoDanglingGenerics.js +++ b/tests/baselines/reference/declarationNoDanglingGenerics.js @@ -73,11 +73,9 @@ function ClassFactory(kind) { var Kinds = /** @class */ (function () { function Kinds() { } - (function () { - Kinds.A = "A"; - Kinds.B = "B"; - Kinds.C = "C"; - }).call(Kinds); + Kinds.A = "A"; + Kinds.B = "B"; + Kinds.C = "C"; return Kinds; }()); var AKind = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/decoratedClassExportsCommonJS1.js b/tests/baselines/reference/decoratedClassExportsCommonJS1.js index 09518a1110bef..2bcf0f9acda31 100644 --- a/tests/baselines/reference/decoratedClassExportsCommonJS1.js +++ b/tests/baselines/reference/decoratedClassExportsCommonJS1.js @@ -19,9 +19,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Testing123 = void 0; let Testing123 = Testing123_1 = class Testing123 { }; -(function () { - Testing123.prop1 = Testing123_1.prop0; -}).call(Testing123); +Testing123.prop1 = Testing123_1.prop0; Testing123 = Testing123_1 = __decorate([ Something({ v: () => Testing123_1 }) ], Testing123); diff --git a/tests/baselines/reference/decoratedClassExportsSystem1.js b/tests/baselines/reference/decoratedClassExportsSystem1.js index c325fe0c9f979..844a87fe0930b 100644 --- a/tests/baselines/reference/decoratedClassExportsSystem1.js +++ b/tests/baselines/reference/decoratedClassExportsSystem1.js @@ -23,9 +23,7 @@ System.register([], function (exports_1, context_1) { execute: function () { Testing123 = Testing123_1 = class Testing123 { }; - (function () { - Testing123.prop1 = Testing123_1.prop0; - }).call(Testing123); + Testing123.prop1 = Testing123_1.prop0; Testing123 = Testing123_1 = __decorate([ Something({ v: () => Testing123_1 }) ], Testing123); diff --git a/tests/baselines/reference/decoratorOnClass5.es6.js b/tests/baselines/reference/decoratorOnClass5.es6.js index 967323d01b52c..b1c45cbce312c 100644 --- a/tests/baselines/reference/decoratorOnClass5.es6.js +++ b/tests/baselines/reference/decoratorOnClass5.es6.js @@ -20,9 +20,7 @@ var C_1; let C = C_1 = class C { static x() { return C_1.y; } }; -(function () { - C.y = 1; -}).call(C); +C.y = 1; C = C_1 = __decorate([ dec ], C); diff --git a/tests/baselines/reference/decoratorOnClass6.es6.js b/tests/baselines/reference/decoratorOnClass6.es6.js index 3460f06a75bf4..f9d8d2f419929 100644 --- a/tests/baselines/reference/decoratorOnClass6.es6.js +++ b/tests/baselines/reference/decoratorOnClass6.es6.js @@ -20,9 +20,7 @@ var C_1; let C = C_1 = class C { static x() { return C_1.y; } }; -(function () { - C.y = 1; -}).call(C); +C.y = 1; C = C_1 = __decorate([ dec ], C); diff --git a/tests/baselines/reference/decoratorOnClass7.es6.js b/tests/baselines/reference/decoratorOnClass7.es6.js index fc2c4216734d1..aefc9536a878c 100644 --- a/tests/baselines/reference/decoratorOnClass7.es6.js +++ b/tests/baselines/reference/decoratorOnClass7.es6.js @@ -20,9 +20,7 @@ var C_1; let C = C_1 = class C { static x() { return C_1.y; } }; -(function () { - C.y = 1; -}).call(C); +C.y = 1; C = C_1 = __decorate([ dec ], C); diff --git a/tests/baselines/reference/decoratorOnClass8.es6.js b/tests/baselines/reference/decoratorOnClass8.es6.js index fe4e32cf04d8f..88dd41e7b6065 100644 --- a/tests/baselines/reference/decoratorOnClass8.es6.js +++ b/tests/baselines/reference/decoratorOnClass8.es6.js @@ -15,9 +15,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, }; let default_1 = class default_1 { }; -(function () { - default_1.y = 1; -}).call(default_1); +default_1.y = 1; default_1 = __decorate([ dec ], default_1); diff --git a/tests/baselines/reference/decoratorOnClass9.js b/tests/baselines/reference/decoratorOnClass9.js index 9da4801b3028c..4ea1fb1a45c5b 100644 --- a/tests/baselines/reference/decoratorOnClass9.js +++ b/tests/baselines/reference/decoratorOnClass9.js @@ -51,10 +51,8 @@ var B = /** @class */ (function (_super) { return B_1.x; }; var B_1; - (function () { - B.x = 1; - B.y = B_1.x; - }).call(B); + B.x = 1; + B.y = B_1.x; B = B_1 = __decorate([ dec ], B); diff --git a/tests/baselines/reference/defaultDeclarationEmitNamedCorrectly.js b/tests/baselines/reference/defaultDeclarationEmitNamedCorrectly.js index 6f07aa6ee3072..2ac1e112632e5 100644 --- a/tests/baselines/reference/defaultDeclarationEmitNamedCorrectly.js +++ b/tests/baselines/reference/defaultDeclarationEmitNamedCorrectly.js @@ -26,9 +26,7 @@ exports.make = make; var MyComponent = /** @class */ (function () { function MyComponent() { } - (function () { - MyComponent.create = make(MyComponent); - }).call(MyComponent); + MyComponent.create = make(MyComponent); return MyComponent; }()); exports["default"] = MyComponent; diff --git a/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js b/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js index 6373477ed6c9a..961bd4041cdf8 100644 --- a/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js +++ b/tests/baselines/reference/emitClassDeclarationWithLiteralPropertyNameInES6.js @@ -27,9 +27,7 @@ class B { 11() { } interface() { } } -(function () { - B["hi"] = 10000; - B[22] = "twenty-two"; - B[0b101] = "binary"; - B[0o3235] = "octal"; -}).call(B); +B["hi"] = 10000; +B[22] = "twenty-two"; +B[0b101] = "binary"; +B[0o3235] = "octal"; diff --git a/tests/baselines/reference/emitClassDeclarationWithStaticPropertyAssignmentInES6.js b/tests/baselines/reference/emitClassDeclarationWithStaticPropertyAssignmentInES6.js index 8e7f523c22c73..8e0bf3de06bcd 100644 --- a/tests/baselines/reference/emitClassDeclarationWithStaticPropertyAssignmentInES6.js +++ b/tests/baselines/reference/emitClassDeclarationWithStaticPropertyAssignmentInES6.js @@ -12,14 +12,10 @@ class D { //// [emitClassDeclarationWithStaticPropertyAssignmentInES6.js] class C { } -(function () { - C.z = "Foo"; -}).call(C); +C.z = "Foo"; class D { constructor() { this.x = 20000; } } -(function () { - D.b = true; -}).call(D); +D.b = true; diff --git a/tests/baselines/reference/errorSuperCalls.js b/tests/baselines/reference/errorSuperCalls.js index 6360767c27a96..f479d4f5bbedd 100644 --- a/tests/baselines/reference/errorSuperCalls.js +++ b/tests/baselines/reference/errorSuperCalls.js @@ -129,10 +129,8 @@ var NoBase = /** @class */ (function () { enumerable: false, configurable: true }); - (function () { - //super call in static class member initializer with no base type - NoBase.k = _this = _super.call(this) || this; - }).call(NoBase); + //super call in static class member initializer with no base type + NoBase.k = _this = _super.call(this) || this; return NoBase; }()); var Base = /** @class */ (function () { diff --git a/tests/baselines/reference/errorSuperPropertyAccess.js b/tests/baselines/reference/errorSuperPropertyAccess.js index 656945c697724..25385a6521751 100644 --- a/tests/baselines/reference/errorSuperPropertyAccess.js +++ b/tests/baselines/reference/errorSuperPropertyAccess.js @@ -185,10 +185,8 @@ var SomeBase = /** @class */ (function () { SomeBase.prototype.publicFunc = function () { }; SomeBase.privateStaticFunc = function () { }; SomeBase.publicStaticFunc = function () { }; - (function () { - SomeBase.privateStaticMember = 0; - SomeBase.publicStaticMember = 0; - }).call(SomeBase); + SomeBase.privateStaticMember = 0; + SomeBase.publicStaticMember = 0; return SomeBase; }()); //super.publicInstanceMemberNotFunction in constructor of derived class diff --git a/tests/baselines/reference/es3defaultAliasIsQuoted.js b/tests/baselines/reference/es3defaultAliasIsQuoted.js index ffa785dcbcba4..a486ad614046b 100644 --- a/tests/baselines/reference/es3defaultAliasIsQuoted.js +++ b/tests/baselines/reference/es3defaultAliasIsQuoted.js @@ -20,9 +20,7 @@ exports.Foo = void 0; var Foo = /** @class */ (function () { function Foo() { } - (function () { - Foo.CONSTANT = "Foo"; - }).call(Foo); + Foo.CONSTANT = "Foo"; return Foo; }()); exports.Foo = Foo; diff --git a/tests/baselines/reference/es6ClassTest.js b/tests/baselines/reference/es6ClassTest.js index 06dddf222d0a8..3892765004770 100644 --- a/tests/baselines/reference/es6ClassTest.js +++ b/tests/baselines/reference/es6ClassTest.js @@ -124,9 +124,7 @@ var Foo = /** @class */ (function (_super) { } Foo.prototype.bar = function () { return 0; }; Foo.prototype.boo = function (x) { return x; }; - (function () { - Foo.statVal = 0; - }).call(Foo); + Foo.statVal = 0; return Foo; }(Bar)); var f = new Foo(); diff --git a/tests/baselines/reference/es6ClassTest2.js b/tests/baselines/reference/es6ClassTest2.js index 5a669474e5f18..7ec8cd45f52fa 100644 --- a/tests/baselines/reference/es6ClassTest2.js +++ b/tests/baselines/reference/es6ClassTest2.js @@ -293,9 +293,7 @@ var Statics = /** @class */ (function () { Statics.baz = function () { return ""; }; - (function () { - Statics.foo = 1; - }).call(Statics); + Statics.foo = 1; return Statics; }()); var stat = new Statics(); diff --git a/tests/baselines/reference/es6ModuleClassDeclaration.js b/tests/baselines/reference/es6ModuleClassDeclaration.js index b54d4ca44eb5b..a228739abbfb7 100644 --- a/tests/baselines/reference/es6ModuleClassDeclaration.js +++ b/tests/baselines/reference/es6ModuleClassDeclaration.js @@ -127,10 +127,8 @@ export class c { static method4() { } } -(function () { - c.k = 20; - c.l = 30; -}).call(c); +c.k = 20; +c.l = 30; class c2 { constructor() { this.x = 10; @@ -145,10 +143,8 @@ class c2 { static method4() { } } -(function () { - c2.k = 20; - c2.l = 30; -}).call(c2); +c2.k = 20; +c2.l = 30; new c(); new c2(); export var m1; @@ -167,10 +163,8 @@ export var m1; static method4() { } } - (function () { - c3.k = 20; - c3.l = 30; - }).call(c3); + c3.k = 20; + c3.l = 30; m1.c3 = c3; class c4 { constructor() { @@ -186,10 +180,8 @@ export var m1; static method4() { } } - (function () { - c4.k = 20; - c4.l = 30; - }).call(c4); + c4.k = 20; + c4.l = 30; new c(); new c2(); new c3(); @@ -211,10 +203,8 @@ var m2; static method4() { } } - (function () { - c3.k = 20; - c3.l = 30; - }).call(c3); + c3.k = 20; + c3.l = 30; m2.c3 = c3; class c4 { constructor() { @@ -230,10 +220,8 @@ var m2; static method4() { } } - (function () { - c4.k = 20; - c4.l = 30; - }).call(c4); + c4.k = 20; + c4.l = 30; new c(); new c2(); new c3(); diff --git a/tests/baselines/reference/es6modulekindWithES5Target.js b/tests/baselines/reference/es6modulekindWithES5Target.js index 4a80ae5885b2b..3689bb9027f75 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target.js +++ b/tests/baselines/reference/es6modulekindWithES5Target.js @@ -31,9 +31,7 @@ var C = /** @class */ (function () { this.p = 1; } C.prototype.method = function () { }; - (function () { - C.s = 0; - }).call(C); + C.s = 0; return C; }()); export { C }; @@ -43,9 +41,7 @@ var D = /** @class */ (function () { this.p = 1; } D.prototype.method = function () { }; - (function () { - D.s = 0; - }).call(D); + D.s = 0; D = __decorate([ foo ], D); diff --git a/tests/baselines/reference/es6modulekindWithES5Target11.js b/tests/baselines/reference/es6modulekindWithES5Target11.js index 80372ec952adf..c720e4740d508 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target11.js +++ b/tests/baselines/reference/es6modulekindWithES5Target11.js @@ -23,9 +23,7 @@ var C = /** @class */ (function () { C.x = function () { return C_1.y; }; C.prototype.method = function () { }; var C_1; - (function () { - C.y = 1; - }).call(C); + C.y = 1; C = C_1 = __decorate([ foo ], C); diff --git a/tests/baselines/reference/es6modulekindWithES5Target2.js b/tests/baselines/reference/es6modulekindWithES5Target2.js index 43decbe155335..f3921d3f2bf8d 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target2.js +++ b/tests/baselines/reference/es6modulekindWithES5Target2.js @@ -12,9 +12,7 @@ var C = /** @class */ (function () { this.p = 1; } C.prototype.method = function () { }; - (function () { - C.s = 0; - }).call(C); + C.s = 0; return C; }()); export default C; diff --git a/tests/baselines/reference/es6modulekindWithES5Target3.js b/tests/baselines/reference/es6modulekindWithES5Target3.js index 8b460eaac5cbc..1c3f03cc57103 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target3.js +++ b/tests/baselines/reference/es6modulekindWithES5Target3.js @@ -19,9 +19,7 @@ var D = /** @class */ (function () { this.p = 1; } D.prototype.method = function () { }; - (function () { - D.s = 0; - }).call(D); + D.s = 0; D = __decorate([ foo ], D); diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target.js b/tests/baselines/reference/esnextmodulekindWithES5Target.js index 1165cadad32fb..061dd3e4050d9 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target.js +++ b/tests/baselines/reference/esnextmodulekindWithES5Target.js @@ -31,9 +31,7 @@ var C = /** @class */ (function () { this.p = 1; } C.prototype.method = function () { }; - (function () { - C.s = 0; - }).call(C); + C.s = 0; return C; }()); export { C }; @@ -43,9 +41,7 @@ var D = /** @class */ (function () { this.p = 1; } D.prototype.method = function () { }; - (function () { - D.s = 0; - }).call(D); + D.s = 0; D = __decorate([ foo ], D); diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target11.js b/tests/baselines/reference/esnextmodulekindWithES5Target11.js index e999fc0d0a8de..a32ac99806523 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target11.js +++ b/tests/baselines/reference/esnextmodulekindWithES5Target11.js @@ -23,9 +23,7 @@ var C = /** @class */ (function () { C.x = function () { return C_1.y; }; C.prototype.method = function () { }; var C_1; - (function () { - C.y = 1; - }).call(C); + C.y = 1; C = C_1 = __decorate([ foo ], C); diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target2.js b/tests/baselines/reference/esnextmodulekindWithES5Target2.js index 15adcbc460011..dd2a0b301a347 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target2.js +++ b/tests/baselines/reference/esnextmodulekindWithES5Target2.js @@ -12,9 +12,7 @@ var C = /** @class */ (function () { this.p = 1; } C.prototype.method = function () { }; - (function () { - C.s = 0; - }).call(C); + C.s = 0; return C; }()); export default C; diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target3.js b/tests/baselines/reference/esnextmodulekindWithES5Target3.js index 2b6808225d20a..e46e7c1bcacbd 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target3.js +++ b/tests/baselines/reference/esnextmodulekindWithES5Target3.js @@ -19,9 +19,7 @@ var D = /** @class */ (function () { this.p = 1; } D.prototype.method = function () { }; - (function () { - D.s = 0; - }).call(D); + D.s = 0; D = __decorate([ foo ], D); diff --git a/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js index 219e5092deea6..3acb89b8696d7 100644 --- a/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js +++ b/tests/baselines/reference/exportDefaultClassWithStaticPropertyAssignmentsInES6.js @@ -6,6 +6,4 @@ export default class { //// [exportDefaultClassWithStaticPropertyAssignmentsInES6.js] export default class default_1 { } -(function () { - default_1.z = "Foo"; -}).call(default_1); +default_1.z = "Foo"; diff --git a/tests/baselines/reference/exportDefaultQualifiedNameNoError.js b/tests/baselines/reference/exportDefaultQualifiedNameNoError.js index 02d3cc7e91fe8..f0973d0716c15 100644 --- a/tests/baselines/reference/exportDefaultQualifiedNameNoError.js +++ b/tests/baselines/reference/exportDefaultQualifiedNameNoError.js @@ -13,9 +13,7 @@ exports.__esModule = true; var C = /** @class */ (function () { function C() { } - (function () { - C.x = 0; - }).call(C); + C.x = 0; return C; }()); ; diff --git a/tests/baselines/reference/extendFromAny.js b/tests/baselines/reference/extendFromAny.js index 44113aa1b8836..a2749b6208122 100644 --- a/tests/baselines/reference/extendFromAny.js +++ b/tests/baselines/reference/extendFromAny.js @@ -35,9 +35,7 @@ var C = /** @class */ (function (_super) { _this.known = 1; return _this; } - (function () { - C.sknown = 2; - }).call(C); + C.sknown = 2; return C; }(Base)); var c = new C(); diff --git a/tests/baselines/reference/forwardRefInClassProperties.js b/tests/baselines/reference/forwardRefInClassProperties.js index b951d658e5c0e..02e53e708b934 100644 --- a/tests/baselines/reference/forwardRefInClassProperties.js +++ b/tests/baselines/reference/forwardRefInClassProperties.js @@ -25,9 +25,7 @@ var Test = /** @class */ (function () { var a = b; // Property 'b' is used before its initialization. var b = 3; }; - (function () { - Test._B = Test._A; // undefined, no error/warning - Test._A = 3; - }).call(Test); + Test._B = Test._A; // undefined, no error/warning + Test._A = 3; return Test; }()); diff --git a/tests/baselines/reference/generatedContextualTyping.js b/tests/baselines/reference/generatedContextualTyping.js index 0c827f0004863..a2671ffac6130 100644 --- a/tests/baselines/reference/generatedContextualTyping.js +++ b/tests/baselines/reference/generatedContextualTyping.js @@ -621,289 +621,217 @@ var x48 = /** @class */ (function () { var x49 = /** @class */ (function () { function x49() { } - (function () { - x49.member = function () { return [d1, d2]; }; - }).call(x49); + x49.member = function () { return [d1, d2]; }; return x49; }()); var x50 = /** @class */ (function () { function x50() { } - (function () { - x50.member = function () { return [d1, d2]; }; - }).call(x50); + x50.member = function () { return [d1, d2]; }; return x50; }()); var x51 = /** @class */ (function () { function x51() { } - (function () { - x51.member = function named() { return [d1, d2]; }; - }).call(x51); + x51.member = function named() { return [d1, d2]; }; return x51; }()); var x52 = /** @class */ (function () { function x52() { } - (function () { - x52.member = function () { return [d1, d2]; }; - }).call(x52); + x52.member = function () { return [d1, d2]; }; return x52; }()); var x53 = /** @class */ (function () { function x53() { } - (function () { - x53.member = function () { return [d1, d2]; }; - }).call(x53); + x53.member = function () { return [d1, d2]; }; return x53; }()); var x54 = /** @class */ (function () { function x54() { } - (function () { - x54.member = function named() { return [d1, d2]; }; - }).call(x54); + x54.member = function named() { return [d1, d2]; }; return x54; }()); var x55 = /** @class */ (function () { function x55() { } - (function () { - x55.member = [d1, d2]; - }).call(x55); + x55.member = [d1, d2]; return x55; }()); var x56 = /** @class */ (function () { function x56() { } - (function () { - x56.member = [d1, d2]; - }).call(x56); + x56.member = [d1, d2]; return x56; }()); var x57 = /** @class */ (function () { function x57() { } - (function () { - x57.member = [d1, d2]; - }).call(x57); + x57.member = [d1, d2]; return x57; }()); var x58 = /** @class */ (function () { function x58() { } - (function () { - x58.member = { n: [d1, d2] }; - }).call(x58); + x58.member = { n: [d1, d2] }; return x58; }()); var x59 = /** @class */ (function () { function x59() { } - (function () { - x59.member = function (n) { var n; return null; }; - }).call(x59); + x59.member = function (n) { var n; return null; }; return x59; }()); var x60 = /** @class */ (function () { function x60() { } - (function () { - x60.member = { func: function (n) { return [d1, d2]; } }; - }).call(x60); + x60.member = { func: function (n) { return [d1, d2]; } }; return x60; }()); var x61 = /** @class */ (function () { function x61() { } - (function () { - x61.member = function () { return [d1, d2]; }; - }).call(x61); + x61.member = function () { return [d1, d2]; }; return x61; }()); var x62 = /** @class */ (function () { function x62() { } - (function () { - x62.member = function () { return [d1, d2]; }; - }).call(x62); + x62.member = function () { return [d1, d2]; }; return x62; }()); var x63 = /** @class */ (function () { function x63() { } - (function () { - x63.member = function named() { return [d1, d2]; }; - }).call(x63); + x63.member = function named() { return [d1, d2]; }; return x63; }()); var x64 = /** @class */ (function () { function x64() { } - (function () { - x64.member = function () { return [d1, d2]; }; - }).call(x64); + x64.member = function () { return [d1, d2]; }; return x64; }()); var x65 = /** @class */ (function () { function x65() { } - (function () { - x65.member = function () { return [d1, d2]; }; - }).call(x65); + x65.member = function () { return [d1, d2]; }; return x65; }()); var x66 = /** @class */ (function () { function x66() { } - (function () { - x66.member = function named() { return [d1, d2]; }; - }).call(x66); + x66.member = function named() { return [d1, d2]; }; return x66; }()); var x67 = /** @class */ (function () { function x67() { } - (function () { - x67.member = [d1, d2]; - }).call(x67); + x67.member = [d1, d2]; return x67; }()); var x68 = /** @class */ (function () { function x68() { } - (function () { - x68.member = [d1, d2]; - }).call(x68); + x68.member = [d1, d2]; return x68; }()); var x69 = /** @class */ (function () { function x69() { } - (function () { - x69.member = [d1, d2]; - }).call(x69); + x69.member = [d1, d2]; return x69; }()); var x70 = /** @class */ (function () { function x70() { } - (function () { - x70.member = { n: [d1, d2] }; - }).call(x70); + x70.member = { n: [d1, d2] }; return x70; }()); var x71 = /** @class */ (function () { function x71() { } - (function () { - x71.member = function (n) { var n; return null; }; - }).call(x71); + x71.member = function (n) { var n; return null; }; return x71; }()); var x72 = /** @class */ (function () { function x72() { } - (function () { - x72.member = { func: function (n) { return [d1, d2]; } }; - }).call(x72); + x72.member = { func: function (n) { return [d1, d2]; } }; return x72; }()); var x73 = /** @class */ (function () { function x73() { } - (function () { - x73.member = function () { return [d1, d2]; }; - }).call(x73); + x73.member = function () { return [d1, d2]; }; return x73; }()); var x74 = /** @class */ (function () { function x74() { } - (function () { - x74.member = function () { return [d1, d2]; }; - }).call(x74); + x74.member = function () { return [d1, d2]; }; return x74; }()); var x75 = /** @class */ (function () { function x75() { } - (function () { - x75.member = function named() { return [d1, d2]; }; - }).call(x75); + x75.member = function named() { return [d1, d2]; }; return x75; }()); var x76 = /** @class */ (function () { function x76() { } - (function () { - x76.member = function () { return [d1, d2]; }; - }).call(x76); + x76.member = function () { return [d1, d2]; }; return x76; }()); var x77 = /** @class */ (function () { function x77() { } - (function () { - x77.member = function () { return [d1, d2]; }; - }).call(x77); + x77.member = function () { return [d1, d2]; }; return x77; }()); var x78 = /** @class */ (function () { function x78() { } - (function () { - x78.member = function named() { return [d1, d2]; }; - }).call(x78); + x78.member = function named() { return [d1, d2]; }; return x78; }()); var x79 = /** @class */ (function () { function x79() { } - (function () { - x79.member = [d1, d2]; - }).call(x79); + x79.member = [d1, d2]; return x79; }()); var x80 = /** @class */ (function () { function x80() { } - (function () { - x80.member = [d1, d2]; - }).call(x80); + x80.member = [d1, d2]; return x80; }()); var x81 = /** @class */ (function () { function x81() { } - (function () { - x81.member = [d1, d2]; - }).call(x81); + x81.member = [d1, d2]; return x81; }()); var x82 = /** @class */ (function () { function x82() { } - (function () { - x82.member = { n: [d1, d2] }; - }).call(x82); + x82.member = { n: [d1, d2] }; return x82; }()); var x83 = /** @class */ (function () { function x83() { } - (function () { - x83.member = function (n) { var n; return null; }; - }).call(x83); + x83.member = function (n) { var n; return null; }; return x83; }()); var x84 = /** @class */ (function () { function x84() { } - (function () { - x84.member = { func: function (n) { return [d1, d2]; } }; - }).call(x84); + x84.member = { func: function (n) { return [d1, d2]; } }; return x84; }()); var x85 = /** @class */ (function () { diff --git a/tests/baselines/reference/generatorTypeCheck39.errors.txt b/tests/baselines/reference/generatorTypeCheck39.errors.txt index 740c363436848..0d28db89b19da 100644 --- a/tests/baselines/reference/generatorTypeCheck39.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck39.errors.txt @@ -1,8 +1,7 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts(6,11): error TS1219: Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option in your 'tsconfig' or 'jsconfig' to remove this warning. -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts(7,13): error TS1163: A 'yield' expression is only allowed in a generator body. -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts (2 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts (1 errors) ==== function decorator(x: any) { return y => { }; } @@ -12,7 +11,5 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts(7,13): erro ~ !!! error TS1219: Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option in your 'tsconfig' or 'jsconfig' to remove this warning. x = yield 0; - ~~~~~ -!!! error TS1163: A 'yield' expression is only allowed in a generator body. } } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck57.errors.txt b/tests/baselines/reference/generatorTypeCheck57.errors.txt deleted file mode 100644 index aa39e534d62c8..0000000000000 --- a/tests/baselines/reference/generatorTypeCheck57.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck57.ts(3,13): error TS1163: A 'yield' expression is only allowed in a generator body. - - -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck57.ts (1 errors) ==== - function* g() { - class C { - x = yield 0; - ~~~~~ -!!! error TS1163: A 'yield' expression is only allowed in a generator body. - }; - } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck58.errors.txt b/tests/baselines/reference/generatorTypeCheck58.errors.txt deleted file mode 100644 index 7407c83b34bef..0000000000000 --- a/tests/baselines/reference/generatorTypeCheck58.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck58.ts(3,20): error TS1163: A 'yield' expression is only allowed in a generator body. - - -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck58.ts (1 errors) ==== - function* g() { - class C { - static x = yield 0; - ~~~~~ -!!! error TS1163: A 'yield' expression is only allowed in a generator body. - }; - } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck58.js b/tests/baselines/reference/generatorTypeCheck58.js index 6bcac1096e05d..925fc2b76d26d 100644 --- a/tests/baselines/reference/generatorTypeCheck58.js +++ b/tests/baselines/reference/generatorTypeCheck58.js @@ -9,8 +9,6 @@ function* g() { function* g() { class C { } - (function () { - C.x = yield 0; - }).call(C); + C.x = yield 0; ; } diff --git a/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js b/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js index 092f57fb04be5..28b0aab5b0638 100644 --- a/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js +++ b/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js @@ -25,11 +25,9 @@ var Foo = /** @class */ (function () { Foo.f = function (xs) { return xs.reverse(); }; - (function () { - Foo.a = function (n) { }; - Foo.c = []; - Foo.d = false || (function (x) { return x || undefined; })(null); - Foo.e = function (x) { return null; }; - }).call(Foo); + Foo.a = function (n) { }; + Foo.c = []; + Foo.d = false || (function (x) { return x || undefined; })(null); + Foo.e = function (x) { return null; }; return Foo; }()); diff --git a/tests/baselines/reference/gettersAndSetters.js b/tests/baselines/reference/gettersAndSetters.js index fe1d5c6ffbd37..497bf1d3d7f60 100644 --- a/tests/baselines/reference/gettersAndSetters.js +++ b/tests/baselines/reference/gettersAndSetters.js @@ -65,9 +65,7 @@ var C = /** @class */ (function () { enumerable: false, configurable: true }); - (function () { - C.barBack = ""; - }).call(C); + C.barBack = ""; return C; }()); var c = new C(); diff --git a/tests/baselines/reference/importImportOnlyModule.js b/tests/baselines/reference/importImportOnlyModule.js index d14005faabb19..447bb58d690b1 100644 --- a/tests/baselines/reference/importImportOnlyModule.js +++ b/tests/baselines/reference/importImportOnlyModule.js @@ -24,9 +24,7 @@ define(["require", "exports"], function (require, exports) { function C1() { this.m1 = 42; } - (function () { - C1.s1 = true; - }).call(C1); + C1.s1 = true; return C1; }()); exports.C1 = C1; diff --git a/tests/baselines/reference/inferringClassMembersFromAssignments.js b/tests/baselines/reference/inferringClassMembersFromAssignments.js index 63278d1bbe343..f46fe6fdc305c 100644 --- a/tests/baselines/reference/inferringClassMembersFromAssignments.js +++ b/tests/baselines/reference/inferringClassMembersFromAssignments.js @@ -224,17 +224,14 @@ var C = /** @class */ (function () { this.inStaticSetter = "string"; } }; - (function () { - var _this = this; - C.prop = function () { - if (Math.random()) { - _this.inStaticPropertyDeclaration = 0; - } - else { - _this.inStaticPropertyDeclaration = "string"; - } - }; - }).call(C); + C.prop = function () { + if (Math.random()) { + C.inStaticPropertyDeclaration = 0; + } + else { + C.inStaticPropertyDeclaration = "string"; + } + }; return C; }()); var c = new C(); diff --git a/tests/baselines/reference/instanceAndStaticDeclarations1.js b/tests/baselines/reference/instanceAndStaticDeclarations1.js index bb619b55d7b3e..57c9bba7dbf99 100644 --- a/tests/baselines/reference/instanceAndStaticDeclarations1.js +++ b/tests/baselines/reference/instanceAndStaticDeclarations1.js @@ -25,8 +25,6 @@ var Point = /** @class */ (function () { return Math.sqrt(dx * dx + dy * dy); }; Point.distance = function (p1, p2) { return p1.distance(p2); }; - (function () { - Point.origin = new Point(0, 0); - }).call(Point); + Point.origin = new Point(0, 0); return Point; }()); diff --git a/tests/baselines/reference/invalidNewTarget.es5.js b/tests/baselines/reference/invalidNewTarget.es5.js index 7b1617970dffe..f25847b1e983a 100644 --- a/tests/baselines/reference/invalidNewTarget.es5.js +++ b/tests/baselines/reference/invalidNewTarget.es5.js @@ -75,10 +75,7 @@ var C = /** @class */ (function () { enumerable: false, configurable: true }); - (function _b() { - var _newTarget = this && this instanceof _b ? this.constructor : void 0; - C.j = function () { return _newTarget; }; - }).call(C); + C.j = function () { return _newTarget; }; return C; }()); var O = (_a = {}, diff --git a/tests/baselines/reference/invalidNewTarget.es6.js b/tests/baselines/reference/invalidNewTarget.es6.js index b7859d1e60fd4..ed1b2cc1592a8 100644 --- a/tests/baselines/reference/invalidNewTarget.es6.js +++ b/tests/baselines/reference/invalidNewTarget.es6.js @@ -40,9 +40,7 @@ class C { static get h() { return new.target; } static set i(_) { _ = new.target; } } -(function () { - C.j = () => new.target; -}).call(C); +C.j = () => new.target; const O = { [new.target]: undefined, k() { return new.target; }, diff --git a/tests/baselines/reference/invalidStaticField.js b/tests/baselines/reference/invalidStaticField.js index 9d462ed6849cd..d9480f3c292f6 100644 --- a/tests/baselines/reference/invalidStaticField.js +++ b/tests/baselines/reference/invalidStaticField.js @@ -12,8 +12,6 @@ var A = /** @class */ (function () { var B = /** @class */ (function () { function B() { } - (function () { - B.NOT_NULL = new B(); - }).call(B); + B.NOT_NULL = new B(); return B; }()); diff --git a/tests/baselines/reference/jsDeclarationsClasses.js b/tests/baselines/reference/jsDeclarationsClasses.js index c66d78febd834..f1807e37f4c3d 100644 --- a/tests/baselines/reference/jsDeclarationsClasses.js +++ b/tests/baselines/reference/jsDeclarationsClasses.js @@ -222,22 +222,18 @@ exports.A = A; var B = /** @class */ (function () { function B() { } - (function () { - B.cat = "cat"; - }).call(B); + B.cat = "cat"; return B; }()); exports.B = B; var C = /** @class */ (function () { function C() { } - (function () { - C.Cls = /** @class */ (function () { - function class_1() { - } - return class_1; - }()); - }).call(C); + C.Cls = /** @class */ (function () { + function class_1() { + } + return class_1; + }()); return C; }()); exports.C = C; @@ -318,9 +314,7 @@ var E = /** @class */ (function () { enumerable: false, configurable: true }); - (function () { - E.staticInitializedField = 12; - }).call(E); + E.staticInitializedField = 12; return E; }()); exports.E = E; diff --git a/tests/baselines/reference/jsDeclarationsComputedNames.js b/tests/baselines/reference/jsDeclarationsComputedNames.js index 28dba8aee58c6..127b4604583da 100644 --- a/tests/baselines/reference/jsDeclarationsComputedNames.js +++ b/tests/baselines/reference/jsDeclarationsComputedNames.js @@ -61,9 +61,7 @@ var MyClass = /** @class */ (function () { } var _a, _b; _a = TopLevelSym, _b = InnerSym; - (function () { - MyClass[_a] = 12; - }).call(MyClass); + MyClass[_a] = 12; return MyClass; }()); exports.MyClass = MyClass; diff --git a/tests/baselines/reference/jsDeclarationsDefaultsErr.js b/tests/baselines/reference/jsDeclarationsDefaultsErr.js index 4076367342830..b805043e1685a 100644 --- a/tests/baselines/reference/jsDeclarationsDefaultsErr.js +++ b/tests/baselines/reference/jsDeclarationsDefaultsErr.js @@ -35,9 +35,7 @@ var Cls = /** @class */ (function () { function Cls() { this.x = 12; } - (function () { - Cls.y = "ok"; - }).call(Cls); + Cls.y = "ok"; return Cls; }()); exports.default = Cls; diff --git a/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance2.js b/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance2.js index 0f120c7fdb189..2b03f73a4f9d0 100644 --- a/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance2.js +++ b/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance2.js @@ -11,9 +11,7 @@ var Foo = /** @class */ (function () { function Foo() { this.member = 10; } - (function () { - Foo.stat = 10; - }).call(Foo); + Foo.stat = 10; return Foo; }()); module.exports = new Foo(); diff --git a/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance3.js b/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance3.js index 32df8cc32abca..3d8a67223a83f 100644 --- a/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance3.js +++ b/tests/baselines/reference/jsDeclarationsExportAssignedClassInstance3.js @@ -13,9 +13,7 @@ var Foo = /** @class */ (function () { function Foo() { this.member = 10; } - (function () { - Foo.stat = 10; - }).call(Foo); + Foo.stat = 10; return Foo; }()); module.exports = new Foo(); diff --git a/tests/baselines/reference/newTarget.es5.js b/tests/baselines/reference/newTarget.es5.js index 3e75e55d82969..505631318d42e 100644 --- a/tests/baselines/reference/newTarget.es5.js +++ b/tests/baselines/reference/newTarget.es5.js @@ -58,12 +58,10 @@ var A = /** @class */ (function () { var a = _newTarget; var b = function () { return _newTarget; }; } - (function () { - A.c = function _a() { - var _newTarget = this && this instanceof _a ? this.constructor : void 0; - return _newTarget; - }; - }).call(A); + A.c = function _a() { + var _newTarget = this && this instanceof _a ? this.constructor : void 0; + return _newTarget; + }; return A; }()); var B = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/newTarget.es6.js b/tests/baselines/reference/newTarget.es6.js index 12e9062ae0ddd..2bd95ff9f9871 100644 --- a/tests/baselines/reference/newTarget.es6.js +++ b/tests/baselines/reference/newTarget.es6.js @@ -40,9 +40,7 @@ class A { const b = () => new.target; } } -(function () { - A.c = function () { return new.target; }; -}).call(A); +A.c = function () { return new.target; }; class B extends A { constructor() { super(); diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic3.js b/tests/baselines/reference/parserAccessibilityAfterStatic3.js index 27c16c69c8d89..685822e7cd3d8 100644 --- a/tests/baselines/reference/parserAccessibilityAfterStatic3.js +++ b/tests/baselines/reference/parserAccessibilityAfterStatic3.js @@ -9,8 +9,6 @@ static public = 1; var Outer = /** @class */ (function () { function Outer() { } - (function () { - Outer.public = 1; - }).call(Outer); + Outer.public = 1; return Outer; }()); diff --git a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js index a4549c48dc1ec..117b7f7d9a2fe 100644 --- a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js +++ b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js @@ -41,10 +41,8 @@ var Shapes; } // Instance member Point.prototype.getDist = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; - (function () { - // Static member - Point.origin = new Point(0, 0); - }).call(Point); + // Static member + Point.origin = new Point(0, 0); return Point; }()); Shapes.Point = Point; diff --git a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js index be3628b441a3f..2ff2b37182226 100644 --- a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js +++ b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js @@ -41,10 +41,8 @@ var Shapes; } // Instance member Point.prototype.getDist = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; - (function () { - // Static member - Point.origin = new Point(0, 0); - }).call(Point); + // Static member + Point.origin = new Point(0, 0); return Point; }()); Shapes.Point = Point; diff --git a/tests/baselines/reference/parserharness.js b/tests/baselines/reference/parserharness.js index 6730c158a5058..6fe11051dc7bf 100644 --- a/tests/baselines/reference/parserharness.js +++ b/tests/baselines/reference/parserharness.js @@ -2381,11 +2381,9 @@ var Harness; errorHandlerStack[errorHandlerStack.length - 1](e); } }; - (function () { - // The current stack of Runnable objects - Runnable.currentStack = []; - Runnable.errorHandlerStack = []; - }).call(Runnable); + // The current stack of Runnable objects + Runnable.currentStack = []; + Runnable.errorHandlerStack = []; return Runnable; }()); Harness.Runnable = Runnable; diff --git a/tests/baselines/reference/privacyCannotNameVarTypeDeclFile.js b/tests/baselines/reference/privacyCannotNameVarTypeDeclFile.js index 09c77d21fbceb..91862eec66118 100644 --- a/tests/baselines/reference/privacyCannotNameVarTypeDeclFile.js +++ b/tests/baselines/reference/privacyCannotNameVarTypeDeclFile.js @@ -163,12 +163,10 @@ var publicClassWithWithPrivatePropertyTypes = /** @class */ (function () { this.myPublicProperty1 = exporter.createExportedWidget3(); // Error this.myPrivateProperty1 = exporter.createExportedWidget3(); } - (function () { - publicClassWithWithPrivatePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget1(); // Error - publicClassWithWithPrivatePropertyTypes.myPrivateStaticProperty = exporter.createExportedWidget1(); - publicClassWithWithPrivatePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget3(); // Error - publicClassWithWithPrivatePropertyTypes.myPrivateStaticProperty1 = exporter.createExportedWidget3(); - }).call(publicClassWithWithPrivatePropertyTypes); + publicClassWithWithPrivatePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget1(); // Error + publicClassWithWithPrivatePropertyTypes.myPrivateStaticProperty = exporter.createExportedWidget1(); + publicClassWithWithPrivatePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget3(); // Error + publicClassWithWithPrivatePropertyTypes.myPrivateStaticProperty1 = exporter.createExportedWidget3(); return publicClassWithWithPrivatePropertyTypes; }()); exports.publicClassWithWithPrivatePropertyTypes = publicClassWithWithPrivatePropertyTypes; @@ -179,12 +177,10 @@ var privateClassWithWithPrivatePropertyTypes = /** @class */ (function () { this.myPublicProperty1 = exporter.createExportedWidget3(); this.myPrivateProperty1 = exporter.createExportedWidget3(); } - (function () { - privateClassWithWithPrivatePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget1(); - privateClassWithWithPrivatePropertyTypes.myPrivateStaticProperty = exporter.createExportedWidget1(); - privateClassWithWithPrivatePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget3(); - privateClassWithWithPrivatePropertyTypes.myPrivateStaticProperty1 = exporter.createExportedWidget3(); - }).call(privateClassWithWithPrivatePropertyTypes); + privateClassWithWithPrivatePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget1(); + privateClassWithWithPrivatePropertyTypes.myPrivateStaticProperty = exporter.createExportedWidget1(); + privateClassWithWithPrivatePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget3(); + privateClassWithWithPrivatePropertyTypes.myPrivateStaticProperty1 = exporter.createExportedWidget3(); return privateClassWithWithPrivatePropertyTypes; }()); exports.publicVarWithPrivatePropertyTypes = exporter.createExportedWidget1(); // Error @@ -196,10 +192,8 @@ var publicClassWithPrivateModulePropertyTypes = /** @class */ (function () { this.myPublicProperty = exporter.createExportedWidget2(); // Error this.myPublicProperty1 = exporter.createExportedWidget4(); // Error } - (function () { - publicClassWithPrivateModulePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget2(); // Error - publicClassWithPrivateModulePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget4(); // Error - }).call(publicClassWithPrivateModulePropertyTypes); + publicClassWithPrivateModulePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget2(); // Error + publicClassWithPrivateModulePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget4(); // Error return publicClassWithPrivateModulePropertyTypes; }()); exports.publicClassWithPrivateModulePropertyTypes = publicClassWithPrivateModulePropertyTypes; @@ -210,10 +204,8 @@ var privateClassWithPrivateModulePropertyTypes = /** @class */ (function () { this.myPublicProperty = exporter.createExportedWidget2(); this.myPublicProperty1 = exporter.createExportedWidget4(); } - (function () { - privateClassWithPrivateModulePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget2(); - privateClassWithPrivateModulePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget4(); - }).call(privateClassWithPrivateModulePropertyTypes); + privateClassWithPrivateModulePropertyTypes.myPublicStaticProperty = exporter.createExportedWidget2(); + privateClassWithPrivateModulePropertyTypes.myPublicStaticProperty1 = exporter.createExportedWidget4(); return privateClassWithPrivateModulePropertyTypes; }()); var privateVarWithPrivateModulePropertyTypes = exporter.createExportedWidget2(); diff --git a/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js b/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js index bd4b4accb6191..caeb43d15a3e9 100644 --- a/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js +++ b/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js @@ -16,6 +16,4 @@ class A { } } _foo = new WeakMap(), _prop = new WeakMap(); -(function () { - A.inst = new A(); -}).call(A); +A.inst = new A(); diff --git a/tests/baselines/reference/privateNameAndStaticInitializer(target=esnext).js b/tests/baselines/reference/privateNameAndStaticInitializer(target=esnext).js index 3fa25578c6c55..3387d0b4d1a52 100644 --- a/tests/baselines/reference/privateNameAndStaticInitializer(target=esnext).js +++ b/tests/baselines/reference/privateNameAndStaticInitializer(target=esnext).js @@ -16,6 +16,4 @@ class A { #foo; #prop; } -(function () { - A.inst = new A(); -}).call(A); +A.inst = new A(); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index 12070a76e6950..b17b950cbf530 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -34,8 +34,6 @@ var A = /** @class */ (function () { }); var _field, _sField; _field = new WeakMap(), _sField = new WeakMap(); - (function () { - _sField.set(A, "hello world"); - }).call(A); + _sField.set(A, "hello world"); return A; }()); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es5).js b/tests/baselines/reference/privateNameES5Ban(target=es5).js index 12070a76e6950..b17b950cbf530 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -34,8 +34,6 @@ var A = /** @class */ (function () { }); var _field, _sField; _field = new WeakMap(), _sField = new WeakMap(); - (function () { - _sField.set(A, "hello world"); - }).call(A); + _sField.set(A, "hello world"); return A; }()); diff --git a/tests/baselines/reference/privateNameFieldsESNext.js b/tests/baselines/reference/privateNameFieldsESNext.js index 9586afee29d3c..acc37caa3cc8f 100644 --- a/tests/baselines/reference/privateNameFieldsESNext.js +++ b/tests/baselines/reference/privateNameFieldsESNext.js @@ -43,6 +43,4 @@ class C { } #something; } -(function () { - C.#m = "test"; -}).call(C); +C.#m = "test"; diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index 1a17b28cf7718..dfba142f9aa53 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -32,9 +32,7 @@ class Parent { } } _foo = new WeakMap(), _bar = new WeakMap(); -(function () { - _bar.set(Parent, 5); -}).call(Parent); +_bar.set(Parent, 5); class Child extends Parent { constructor() { super(...arguments); diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index 10988fcba2e86..0d0069a47a9ad 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -34,9 +34,7 @@ class Parent { } } _foo = new WeakMap(), _bar = new WeakMap(); -(function () { - _bar.set(Parent, 5); -}).call(Parent); +_bar.set(Parent, 5); class Child extends Parent { constructor() { super(...arguments); diff --git a/tests/baselines/reference/privateNamesInNestedClasses-2.js b/tests/baselines/reference/privateNamesInNestedClasses-2.js index 02157f0b281ae..896beb6308339 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-2.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-2.js @@ -42,6 +42,4 @@ class A { } } _x = new WeakMap(); -(function () { - _x.set(A, 5); -}).call(A); +_x.set(A, 5); diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index 7649aa41be77d..9575d6d89c57d 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -31,15 +31,11 @@ class A { } } _foo = new WeakMap(), _foo_1 = new WeakMap(); -(function () { - _foo_1.set(A, true); // error (duplicate) -}).call(A); +_foo_1.set(A, true); // error (duplicate) class B { test(x) { __classPrivateFieldGet(x, _foo_2); // error (#foo is a static property on B, not an instance property) } } _foo_2 = new WeakMap(); -(function () { - _foo_2.set(B, true); -}).call(B); +_foo_2.set(B, true); diff --git a/tests/baselines/reference/privateStaticMemberAccessibility.js b/tests/baselines/reference/privateStaticMemberAccessibility.js index 1178a44f342b3..34498e90b4fff 100644 --- a/tests/baselines/reference/privateStaticMemberAccessibility.js +++ b/tests/baselines/reference/privateStaticMemberAccessibility.js @@ -36,8 +36,6 @@ var Derived = /** @class */ (function (_super) { _this.bing = function () { return Base.foo; }; // error return _this; } - (function () { - Derived.bar = Base.foo; // error - }).call(Derived); + Derived.bar = Base.foo; // error return Derived; }(Base)); diff --git a/tests/baselines/reference/propertyAccessibility2.js b/tests/baselines/reference/propertyAccessibility2.js index 32bd3e6de28c5..ddd028497f891 100644 --- a/tests/baselines/reference/propertyAccessibility2.js +++ b/tests/baselines/reference/propertyAccessibility2.js @@ -9,9 +9,7 @@ var c = C.x; var C = /** @class */ (function () { function C() { } - (function () { - C.x = 1; - }).call(C); + C.x = 1; return C; }()); var c = C.x; diff --git a/tests/baselines/reference/quotedPropertyName2.js b/tests/baselines/reference/quotedPropertyName2.js index 65ada5a7ac806..6d6ad4f0c88a6 100644 --- a/tests/baselines/reference/quotedPropertyName2.js +++ b/tests/baselines/reference/quotedPropertyName2.js @@ -7,8 +7,6 @@ class Test1 { var Test1 = /** @class */ (function () { function Test1() { } - (function () { - Test1["prop1"] = 0; - }).call(Test1); + Test1["prop1"] = 0; return Test1; }()); diff --git a/tests/baselines/reference/reactDefaultPropsInferenceSuccess.js b/tests/baselines/reference/reactDefaultPropsInferenceSuccess.js index a4a45f0a76aba..ec60bfcaf2977 100644 --- a/tests/baselines/reference/reactDefaultPropsInferenceSuccess.js +++ b/tests/baselines/reference/reactDefaultPropsInferenceSuccess.js @@ -99,11 +99,9 @@ var FieldFeedback = /** @class */ (function (_super) { FieldFeedback.prototype.render = function () { return react_1["default"].createElement("div", null, "Hello"); }; - (function () { - FieldFeedback.defaultProps = { - when: function () { return true; } - }; - }).call(FieldFeedback); + FieldFeedback.defaultProps = { + when: function () { return true; } + }; return FieldFeedback; }(react_1["default"].Component)); // OK @@ -118,11 +116,9 @@ var FieldFeedbackBeta = /** @class */ (function (_super) { FieldFeedbackBeta.prototype.render = function () { return react_1["default"].createElement("div", null, "Hello"); }; - (function () { - FieldFeedbackBeta.defaultProps = { - when: function () { return true; } - }; - }).call(FieldFeedbackBeta); + FieldFeedbackBeta.defaultProps = { + when: function () { return true; } + }; return FieldFeedbackBeta; }(react_1["default"].Component)); // OK @@ -138,11 +134,9 @@ var FieldFeedback2 = /** @class */ (function (_super) { this.props.when("now"); // OK, always defined return react_1["default"].createElement("div", null, "Hello"); }; - (function () { - FieldFeedback2.defaultProps = { - when: function () { return true; } - }; - }).call(FieldFeedback2); + FieldFeedback2.defaultProps = { + when: function () { return true; } + }; return FieldFeedback2; }(FieldFeedback)); // OK diff --git a/tests/baselines/reference/reassignStaticProp.js b/tests/baselines/reference/reassignStaticProp.js index 045486dcded73..6c34c01e51086 100644 --- a/tests/baselines/reference/reassignStaticProp.js +++ b/tests/baselines/reference/reassignStaticProp.js @@ -15,8 +15,6 @@ class foo { var foo = /** @class */ (function () { function foo() { } - (function () { - foo.bar = 1; - }).call(foo); + foo.bar = 1; return foo; }()); diff --git a/tests/baselines/reference/returnTypePredicateIsInstantiateInContextOfTarget.js b/tests/baselines/reference/returnTypePredicateIsInstantiateInContextOfTarget.js index ee7d3d437c913..b735359dc7009 100644 --- a/tests/baselines/reference/returnTypePredicateIsInstantiateInContextOfTarget.js +++ b/tests/baselines/reference/returnTypePredicateIsInstantiateInContextOfTarget.js @@ -43,11 +43,9 @@ var TestComponent = /** @class */ (function (_super) { TestComponent.isAny = function (obj) { return true; }; - (function () { - TestComponent.defaultProps = { - isAny: TestComponent.isAny - }; - }).call(TestComponent); + TestComponent.defaultProps = { + isAny: TestComponent.isAny + }; return TestComponent; }(React.Component)); var TestRender = function () { return React.createElement(TestComponent, null); }; diff --git a/tests/baselines/reference/scopeCheckStaticInitializer.js b/tests/baselines/reference/scopeCheckStaticInitializer.js index 95942ac742d91..a03cce6e0ac9e 100644 --- a/tests/baselines/reference/scopeCheckStaticInitializer.js +++ b/tests/baselines/reference/scopeCheckStaticInitializer.js @@ -20,13 +20,11 @@ var X = /** @class */ (function () { function X() { } X.method = function () { }; - (function () { - X.illegalBeforeProperty = X.data; - X.okBeforeMethod = X.method; - X.illegal2 = After.data; - X.illegal3 = After.method; - X.data = 13; - }).call(X); + X.illegalBeforeProperty = X.data; + X.okBeforeMethod = X.method; + X.illegal2 = After.data; + X.illegal3 = After.method; + X.data = 13; return X; }()); var After = /** @class */ (function () { @@ -34,8 +32,6 @@ var After = /** @class */ (function () { } After.method = function () { }; ; - (function () { - After.data = 12; - }).call(After); + After.data = 12; return After; }()); diff --git a/tests/baselines/reference/sourceMap-FileWithComments.js b/tests/baselines/reference/sourceMap-FileWithComments.js index 0dd56810ce4dc..dc76921c0389f 100644 --- a/tests/baselines/reference/sourceMap-FileWithComments.js +++ b/tests/baselines/reference/sourceMap-FileWithComments.js @@ -48,10 +48,8 @@ var Shapes; } // Instance member Point.prototype.getDist = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; - (function () { - // Static member - Point.origin = new Point(0, 0); - }).call(Point); + // Static member + Point.origin = new Point(0, 0); return Point; }()); Shapes.Point = Point; diff --git a/tests/baselines/reference/sourceMap-FileWithComments.js.map b/tests/baselines/reference/sourceMap-FileWithComments.js.map index 7e7d55f163d25..f24767e460dbb 100644 --- a/tests/baselines/reference/sourceMap-FileWithComments.js.map +++ b/tests/baselines/reference/sourceMap-FileWithComments.js.map @@ -1,3 +1,3 @@ //// [sourceMap-FileWithComments.js.map] -{"version":3,"file":"sourceMap-FileWithComments.js","sourceRoot":"","sources":["sourceMap-FileWithComments.ts"],"names":[],"mappings":"AAKA,SAAS;AACT,IAAO,MAAM,CAwBZ;AAxBD,WAAO,MAAM;IAET,QAAQ;IACR;QACI,cAAc;QACd,eAAmB,CAAS,EAAS,CAAS;YAA3B,MAAC,GAAD,CAAC,CAAQ;YAAS,MAAC,GAAD,CAAC,CAAQ;QAAI,CAAC;QAEnD,kBAAkB;QAClB,uBAAO,GAAP,cAAY,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAElE,gBAAgB;YACT,YAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;QACpC,YAAC;KAAA,AATD,IASC;IATY,YAAK,QASjB,CAAA;IAED,+BAA+B;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;IAEX,SAAgB,GAAG;IACnB,CAAC;IADe,UAAG,MAClB,CAAA;IAED;;MAEE;IACF,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,CAAC,EAxBM,MAAM,KAAN,MAAM,QAwBZ;AAED,qBAAqB;AACrB,IAAI,CAAC,GAAW,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC"} -//// https://sokra.github.io/source-map-visualization#base64,Ly8gTW9kdWxlDQp2YXIgU2hhcGVzOw0KKGZ1bmN0aW9uIChTaGFwZXMpIHsNCiAgICAvLyBDbGFzcw0KICAgIHZhciBQb2ludCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgLy8gQ29uc3RydWN0b3INCiAgICAgICAgZnVuY3Rpb24gUG9pbnQoeCwgeSkgew0KICAgICAgICAgICAgdGhpcy54ID0geDsNCiAgICAgICAgICAgIHRoaXMueSA9IHk7DQogICAgICAgIH0NCiAgICAgICAgLy8gSW5zdGFuY2UgbWVtYmVyDQogICAgICAgIFBvaW50LnByb3RvdHlwZS5nZXREaXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7IH07DQogICAgICAgIChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAvLyBTdGF0aWMgbWVtYmVyDQogICAgICAgICAgICBQb2ludC5vcmlnaW4gPSBuZXcgUG9pbnQoMCwgMCk7DQogICAgICAgIH0pLmNhbGwoUG9pbnQpOw0KICAgICAgICByZXR1cm4gUG9pbnQ7DQogICAgfSgpKTsNCiAgICBTaGFwZXMuUG9pbnQgPSBQb2ludDsNCiAgICAvLyBWYXJpYWJsZSBjb21tZW50IGFmdGVyIGNsYXNzDQogICAgdmFyIGEgPSAxMDsNCiAgICBmdW5jdGlvbiBmb28oKSB7DQogICAgfQ0KICAgIFNoYXBlcy5mb28gPSBmb287DQogICAgLyoqICBjb21tZW50IGFmdGVyIGZ1bmN0aW9uDQogICAgKiB0aGlzIGlzIGFub3RoZXIgY29tbWVudA0KICAgICovDQogICAgdmFyIGIgPSAxMDsNCn0pKFNoYXBlcyB8fCAoU2hhcGVzID0ge30pKTsNCi8qKiBMb2NhbCBWYXJpYWJsZSAqLw0KdmFyIHAgPSBuZXcgU2hhcGVzLlBvaW50KDMsIDQpOw0KdmFyIGRpc3QgPSBwLmdldERpc3QoKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvdXJjZU1hcC1GaWxlV2l0aENvbW1lbnRzLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwLUZpbGVXaXRoQ29tbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXAtRmlsZVdpdGhDb21tZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxTQUFTO0FBQ1QsSUFBTyxNQUFNLENBd0JaO0FBeEJELFdBQU8sTUFBTTtJQUVULFFBQVE7SUFDUjtRQUNJLGNBQWM7UUFDZCxlQUFtQixDQUFTLEVBQVMsQ0FBUztZQUEzQixNQUFDLEdBQUQsQ0FBQyxDQUFRO1lBQVMsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUFJLENBQUM7UUFFbkQsa0JBQWtCO1FBQ2xCLHVCQUFPLEdBQVAsY0FBWSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFbEUsZ0JBQWdCO1lBQ1QsWUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFDcEMsWUFBQztLQUFBLEFBVEQsSUFTQztJQVRZLFlBQUssUUFTakIsQ0FBQTtJQUVELCtCQUErQjtJQUMvQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFWCxTQUFnQixHQUFHO0lBQ25CLENBQUM7SUFEZSxVQUFHLE1BQ2xCLENBQUE7SUFFRDs7TUFFRTtJQUNGLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLENBQUMsRUF4Qk0sTUFBTSxLQUFOLE1BQU0sUUF3Qlo7QUFFRCxxQkFBcUI7QUFDckIsSUFBSSxDQUFDLEdBQVcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMifQ==,Ly8gSW50ZXJmYWNlCmludGVyZmFjZSBJUG9pbnQgewogICAgZ2V0RGlzdCgpOiBudW1iZXI7Cn0KCi8vIE1vZHVsZQptb2R1bGUgU2hhcGVzIHsKCiAgICAvLyBDbGFzcwogICAgZXhwb3J0IGNsYXNzIFBvaW50IGltcGxlbWVudHMgSVBvaW50IHsKICAgICAgICAvLyBDb25zdHJ1Y3RvcgogICAgICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIsIHB1YmxpYyB5OiBudW1iZXIpIHsgfQoKICAgICAgICAvLyBJbnN0YW5jZSBtZW1iZXIKICAgICAgICBnZXREaXN0KCkgeyByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7IH0KCiAgICAgICAgLy8gU3RhdGljIG1lbWJlcgogICAgICAgIHN0YXRpYyBvcmlnaW4gPSBuZXcgUG9pbnQoMCwgMCk7CiAgICB9CgogICAgLy8gVmFyaWFibGUgY29tbWVudCBhZnRlciBjbGFzcwogICAgdmFyIGEgPSAxMDsKCiAgICBleHBvcnQgZnVuY3Rpb24gZm9vKCkgewogICAgfQoKICAgIC8qKiAgY29tbWVudCBhZnRlciBmdW5jdGlvbgogICAgKiB0aGlzIGlzIGFub3RoZXIgY29tbWVudCAKICAgICovCiAgICB2YXIgYiA9IDEwOwp9CgovKiogTG9jYWwgVmFyaWFibGUgKi8KdmFyIHA6IElQb2ludCA9IG5ldyBTaGFwZXMuUG9pbnQoMywgNCk7CnZhciBkaXN0ID0gcC5nZXREaXN0KCk7 +{"version":3,"file":"sourceMap-FileWithComments.js","sourceRoot":"","sources":["sourceMap-FileWithComments.ts"],"names":[],"mappings":"AAKA,SAAS;AACT,IAAO,MAAM,CAwBZ;AAxBD,WAAO,MAAM;IAET,QAAQ;IACR;QACI,cAAc;QACd,eAAmB,CAAS,EAAS,CAAS;YAA3B,MAAC,GAAD,CAAC,CAAQ;YAAS,MAAC,GAAD,CAAC,CAAQ;QAAI,CAAC;QAEnD,kBAAkB;QAClB,uBAAO,GAAP,cAAY,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElE,gBAAgB;QACT,YAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,YAAC;KAAA,AATD,IASC;IATY,YAAK,QASjB,CAAA;IAED,+BAA+B;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;IAEX,SAAgB,GAAG;IACnB,CAAC;IADe,UAAG,MAClB,CAAA;IAED;;MAEE;IACF,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,CAAC,EAxBM,MAAM,KAAN,MAAM,QAwBZ;AAED,qBAAqB;AACrB,IAAI,CAAC,GAAW,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC"} +//// https://sokra.github.io/source-map-visualization#base64,Ly8gTW9kdWxlDQp2YXIgU2hhcGVzOw0KKGZ1bmN0aW9uIChTaGFwZXMpIHsNCiAgICAvLyBDbGFzcw0KICAgIHZhciBQb2ludCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgLy8gQ29uc3RydWN0b3INCiAgICAgICAgZnVuY3Rpb24gUG9pbnQoeCwgeSkgew0KICAgICAgICAgICAgdGhpcy54ID0geDsNCiAgICAgICAgICAgIHRoaXMueSA9IHk7DQogICAgICAgIH0NCiAgICAgICAgLy8gSW5zdGFuY2UgbWVtYmVyDQogICAgICAgIFBvaW50LnByb3RvdHlwZS5nZXREaXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7IH07DQogICAgICAgIC8vIFN0YXRpYyBtZW1iZXINCiAgICAgICAgUG9pbnQub3JpZ2luID0gbmV3IFBvaW50KDAsIDApOw0KICAgICAgICByZXR1cm4gUG9pbnQ7DQogICAgfSgpKTsNCiAgICBTaGFwZXMuUG9pbnQgPSBQb2ludDsNCiAgICAvLyBWYXJpYWJsZSBjb21tZW50IGFmdGVyIGNsYXNzDQogICAgdmFyIGEgPSAxMDsNCiAgICBmdW5jdGlvbiBmb28oKSB7DQogICAgfQ0KICAgIFNoYXBlcy5mb28gPSBmb287DQogICAgLyoqICBjb21tZW50IGFmdGVyIGZ1bmN0aW9uDQogICAgKiB0aGlzIGlzIGFub3RoZXIgY29tbWVudA0KICAgICovDQogICAgdmFyIGIgPSAxMDsNCn0pKFNoYXBlcyB8fCAoU2hhcGVzID0ge30pKTsNCi8qKiBMb2NhbCBWYXJpYWJsZSAqLw0KdmFyIHAgPSBuZXcgU2hhcGVzLlBvaW50KDMsIDQpOw0KdmFyIGRpc3QgPSBwLmdldERpc3QoKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvdXJjZU1hcC1GaWxlV2l0aENvbW1lbnRzLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwLUZpbGVXaXRoQ29tbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXAtRmlsZVdpdGhDb21tZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxTQUFTO0FBQ1QsSUFBTyxNQUFNLENBd0JaO0FBeEJELFdBQU8sTUFBTTtJQUVULFFBQVE7SUFDUjtRQUNJLGNBQWM7UUFDZCxlQUFtQixDQUFTLEVBQVMsQ0FBUztZQUEzQixNQUFDLEdBQUQsQ0FBQyxDQUFRO1lBQVMsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUFJLENBQUM7UUFFbkQsa0JBQWtCO1FBQ2xCLHVCQUFPLEdBQVAsY0FBWSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRSxnQkFBZ0I7UUFDVCxZQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLFlBQUM7S0FBQSxBQVRELElBU0M7SUFUWSxZQUFLLFFBU2pCLENBQUE7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRVgsU0FBZ0IsR0FBRztJQUNuQixDQUFDO0lBRGUsVUFBRyxNQUNsQixDQUFBO0lBRUQ7O01BRUU7SUFDRixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZixDQUFDLEVBeEJNLE1BQU0sS0FBTixNQUFNLFFBd0JaO0FBRUQscUJBQXFCO0FBQ3JCLElBQUksQ0FBQyxHQUFXLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDIn0=,Ly8gSW50ZXJmYWNlCmludGVyZmFjZSBJUG9pbnQgewogICAgZ2V0RGlzdCgpOiBudW1iZXI7Cn0KCi8vIE1vZHVsZQptb2R1bGUgU2hhcGVzIHsKCiAgICAvLyBDbGFzcwogICAgZXhwb3J0IGNsYXNzIFBvaW50IGltcGxlbWVudHMgSVBvaW50IHsKICAgICAgICAvLyBDb25zdHJ1Y3RvcgogICAgICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIsIHB1YmxpYyB5OiBudW1iZXIpIHsgfQoKICAgICAgICAvLyBJbnN0YW5jZSBtZW1iZXIKICAgICAgICBnZXREaXN0KCkgeyByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7IH0KCiAgICAgICAgLy8gU3RhdGljIG1lbWJlcgogICAgICAgIHN0YXRpYyBvcmlnaW4gPSBuZXcgUG9pbnQoMCwgMCk7CiAgICB9CgogICAgLy8gVmFyaWFibGUgY29tbWVudCBhZnRlciBjbGFzcwogICAgdmFyIGEgPSAxMDsKCiAgICBleHBvcnQgZnVuY3Rpb24gZm9vKCkgewogICAgfQoKICAgIC8qKiAgY29tbWVudCBhZnRlciBmdW5jdGlvbgogICAgKiB0aGlzIGlzIGFub3RoZXIgY29tbWVudCAKICAgICovCiAgICB2YXIgYiA9IDEwOwp9CgovKiogTG9jYWwgVmFyaWFibGUgKi8KdmFyIHA6IElQb2ludCA9IG5ldyBTaGFwZXMuUG9pbnQoMywgNCk7CnZhciBkaXN0ID0gcC5nZXREaXN0KCk7 diff --git a/tests/baselines/reference/sourceMap-FileWithComments.sourcemap.txt b/tests/baselines/reference/sourceMap-FileWithComments.sourcemap.txt index a431a8399967c..508930720659a 100644 --- a/tests/baselines/reference/sourceMap-FileWithComments.sourcemap.txt +++ b/tests/baselines/reference/sourceMap-FileWithComments.sourcemap.txt @@ -261,63 +261,61 @@ sourceFile:sourceMap-FileWithComments.ts 27>Emitted(12, 102) Source(15, 74) + SourceIndex(0) 28>Emitted(12, 103) Source(15, 75) + SourceIndex(0) --- ->>> (function () { ->>> // Static member -1 >^^^^^^^^^^^^ -2 > ^^^^^^^^^^^^^^^^ -3 > ^^^^^^^^^^^^^^^^-> +>>> // Static member +1 >^^^^^^^^ +2 > ^^^^^^^^^^^^^^^^ +3 > ^^^^^^^^^^^^^^^^-> 1 > > > -2 > // Static member -1 >Emitted(14, 13) Source(17, 9) + SourceIndex(0) -2 >Emitted(14, 29) Source(17, 25) + SourceIndex(0) +2 > // Static member +1 >Emitted(13, 9) Source(17, 9) + SourceIndex(0) +2 >Emitted(13, 25) Source(17, 25) + SourceIndex(0) --- ->>> Point.origin = new Point(0, 0); -1->^^^^^^^^^^^^ -2 > ^^^^^^^^^^^^ -3 > ^^^ -4 > ^^^^ -5 > ^^^^^ -6 > ^ -7 > ^ -8 > ^^ -9 > ^ -10> ^ -11> ^ +>>> Point.origin = new Point(0, 0); +1->^^^^^^^^ +2 > ^^^^^^^^^^^^ +3 > ^^^ +4 > ^^^^ +5 > ^^^^^ +6 > ^ +7 > ^ +8 > ^^ +9 > ^ +10> ^ +11> ^ 1-> > static -2 > origin -3 > = -4 > new -5 > Point -6 > ( -7 > 0 -8 > , -9 > 0 -10> ) -11> ; -1->Emitted(15, 13) Source(18, 16) + SourceIndex(0) -2 >Emitted(15, 25) Source(18, 22) + SourceIndex(0) -3 >Emitted(15, 28) Source(18, 25) + SourceIndex(0) -4 >Emitted(15, 32) Source(18, 29) + SourceIndex(0) -5 >Emitted(15, 37) Source(18, 34) + SourceIndex(0) -6 >Emitted(15, 38) Source(18, 35) + SourceIndex(0) -7 >Emitted(15, 39) Source(18, 36) + SourceIndex(0) -8 >Emitted(15, 41) Source(18, 38) + SourceIndex(0) -9 >Emitted(15, 42) Source(18, 39) + SourceIndex(0) -10>Emitted(15, 43) Source(18, 40) + SourceIndex(0) -11>Emitted(15, 44) Source(18, 41) + SourceIndex(0) +2 > origin +3 > = +4 > new +5 > Point +6 > ( +7 > 0 +8 > , +9 > 0 +10> ) +11> ; +1->Emitted(14, 9) Source(18, 16) + SourceIndex(0) +2 >Emitted(14, 21) Source(18, 22) + SourceIndex(0) +3 >Emitted(14, 24) Source(18, 25) + SourceIndex(0) +4 >Emitted(14, 28) Source(18, 29) + SourceIndex(0) +5 >Emitted(14, 33) Source(18, 34) + SourceIndex(0) +6 >Emitted(14, 34) Source(18, 35) + SourceIndex(0) +7 >Emitted(14, 35) Source(18, 36) + SourceIndex(0) +8 >Emitted(14, 37) Source(18, 38) + SourceIndex(0) +9 >Emitted(14, 38) Source(18, 39) + SourceIndex(0) +10>Emitted(14, 39) Source(18, 40) + SourceIndex(0) +11>Emitted(14, 40) Source(18, 41) + SourceIndex(0) --- ->>> }).call(Point); >>> return Point; 1 >^^^^^^^^ 2 > ^^^^^^^^^^^^ 1 > > 2 > } -1 >Emitted(17, 9) Source(19, 5) + SourceIndex(0) -2 >Emitted(17, 21) Source(19, 6) + SourceIndex(0) +1 >Emitted(15, 9) Source(19, 5) + SourceIndex(0) +2 >Emitted(15, 21) Source(19, 6) + SourceIndex(0) --- >>> }()); 1 >^^^^^ @@ -336,9 +334,9 @@ sourceFile:sourceMap-FileWithComments.ts > // Static member > static origin = new Point(0, 0); > } -1 >Emitted(18, 6) Source(19, 6) + SourceIndex(0) -2 >Emitted(18, 6) Source(10, 5) + SourceIndex(0) -3 >Emitted(18, 10) Source(19, 6) + SourceIndex(0) +1 >Emitted(16, 6) Source(19, 6) + SourceIndex(0) +2 >Emitted(16, 6) Source(10, 5) + SourceIndex(0) +3 >Emitted(16, 10) Source(19, 6) + SourceIndex(0) --- >>> Shapes.Point = Point; 1->^^^^ @@ -359,10 +357,10 @@ sourceFile:sourceMap-FileWithComments.ts > static origin = new Point(0, 0); > } 4 > -1->Emitted(19, 5) Source(10, 18) + SourceIndex(0) -2 >Emitted(19, 17) Source(10, 23) + SourceIndex(0) -3 >Emitted(19, 25) Source(19, 6) + SourceIndex(0) -4 >Emitted(19, 26) Source(19, 6) + SourceIndex(0) +1->Emitted(17, 5) Source(10, 18) + SourceIndex(0) +2 >Emitted(17, 17) Source(10, 23) + SourceIndex(0) +3 >Emitted(17, 25) Source(19, 6) + SourceIndex(0) +4 >Emitted(17, 26) Source(19, 6) + SourceIndex(0) --- >>> // Variable comment after class 1->^^^^ @@ -371,8 +369,8 @@ sourceFile:sourceMap-FileWithComments.ts > > 2 > // Variable comment after class -1->Emitted(20, 5) Source(21, 5) + SourceIndex(0) -2 >Emitted(20, 36) Source(21, 36) + SourceIndex(0) +1->Emitted(18, 5) Source(21, 5) + SourceIndex(0) +2 >Emitted(18, 36) Source(21, 36) + SourceIndex(0) --- >>> var a = 10; 1 >^^^^ @@ -389,12 +387,12 @@ sourceFile:sourceMap-FileWithComments.ts 4 > = 5 > 10 6 > ; -1 >Emitted(21, 5) Source(22, 5) + SourceIndex(0) -2 >Emitted(21, 9) Source(22, 9) + SourceIndex(0) -3 >Emitted(21, 10) Source(22, 10) + SourceIndex(0) -4 >Emitted(21, 13) Source(22, 13) + SourceIndex(0) -5 >Emitted(21, 15) Source(22, 15) + SourceIndex(0) -6 >Emitted(21, 16) Source(22, 16) + SourceIndex(0) +1 >Emitted(19, 5) Source(22, 5) + SourceIndex(0) +2 >Emitted(19, 9) Source(22, 9) + SourceIndex(0) +3 >Emitted(19, 10) Source(22, 10) + SourceIndex(0) +4 >Emitted(19, 13) Source(22, 13) + SourceIndex(0) +5 >Emitted(19, 15) Source(22, 15) + SourceIndex(0) +6 >Emitted(19, 16) Source(22, 16) + SourceIndex(0) --- >>> function foo() { 1->^^^^ @@ -405,9 +403,9 @@ sourceFile:sourceMap-FileWithComments.ts > 2 > export function 3 > foo -1->Emitted(22, 5) Source(24, 5) + SourceIndex(0) -2 >Emitted(22, 14) Source(24, 21) + SourceIndex(0) -3 >Emitted(22, 17) Source(24, 24) + SourceIndex(0) +1->Emitted(20, 5) Source(24, 5) + SourceIndex(0) +2 >Emitted(20, 14) Source(24, 21) + SourceIndex(0) +3 >Emitted(20, 17) Source(24, 24) + SourceIndex(0) --- >>> } 1 >^^^^ @@ -416,8 +414,8 @@ sourceFile:sourceMap-FileWithComments.ts 1 >() { > 2 > } -1 >Emitted(23, 5) Source(25, 5) + SourceIndex(0) -2 >Emitted(23, 6) Source(25, 6) + SourceIndex(0) +1 >Emitted(21, 5) Source(25, 5) + SourceIndex(0) +2 >Emitted(21, 6) Source(25, 6) + SourceIndex(0) --- >>> Shapes.foo = foo; 1->^^^^ @@ -430,10 +428,10 @@ sourceFile:sourceMap-FileWithComments.ts 3 > () { > } 4 > -1->Emitted(24, 5) Source(24, 21) + SourceIndex(0) -2 >Emitted(24, 15) Source(24, 24) + SourceIndex(0) -3 >Emitted(24, 21) Source(25, 6) + SourceIndex(0) -4 >Emitted(24, 22) Source(25, 6) + SourceIndex(0) +1->Emitted(22, 5) Source(24, 21) + SourceIndex(0) +2 >Emitted(22, 15) Source(24, 24) + SourceIndex(0) +3 >Emitted(22, 21) Source(25, 6) + SourceIndex(0) +4 >Emitted(22, 22) Source(25, 6) + SourceIndex(0) --- >>> /** comment after function 1->^^^^ @@ -441,7 +439,7 @@ sourceFile:sourceMap-FileWithComments.ts 1-> > > -1->Emitted(25, 5) Source(27, 5) + SourceIndex(0) +1->Emitted(23, 5) Source(27, 5) + SourceIndex(0) --- >>> * this is another comment >>> */ @@ -450,7 +448,7 @@ sourceFile:sourceMap-FileWithComments.ts 1->/** comment after function > * this is another comment > */ -1->Emitted(27, 7) Source(29, 7) + SourceIndex(0) +1->Emitted(25, 7) Source(29, 7) + SourceIndex(0) --- >>> var b = 10; 1->^^^^ @@ -467,12 +465,12 @@ sourceFile:sourceMap-FileWithComments.ts 4 > = 5 > 10 6 > ; -1->Emitted(28, 5) Source(30, 5) + SourceIndex(0) -2 >Emitted(28, 9) Source(30, 9) + SourceIndex(0) -3 >Emitted(28, 10) Source(30, 10) + SourceIndex(0) -4 >Emitted(28, 13) Source(30, 13) + SourceIndex(0) -5 >Emitted(28, 15) Source(30, 15) + SourceIndex(0) -6 >Emitted(28, 16) Source(30, 16) + SourceIndex(0) +1->Emitted(26, 5) Source(30, 5) + SourceIndex(0) +2 >Emitted(26, 9) Source(30, 9) + SourceIndex(0) +3 >Emitted(26, 10) Source(30, 10) + SourceIndex(0) +4 >Emitted(26, 13) Source(30, 13) + SourceIndex(0) +5 >Emitted(26, 15) Source(30, 15) + SourceIndex(0) +6 >Emitted(26, 16) Source(30, 16) + SourceIndex(0) --- >>>})(Shapes || (Shapes = {})); 1-> @@ -514,13 +512,13 @@ sourceFile:sourceMap-FileWithComments.ts > */ > var b = 10; > } -1->Emitted(29, 1) Source(31, 1) + SourceIndex(0) -2 >Emitted(29, 2) Source(31, 2) + SourceIndex(0) -3 >Emitted(29, 4) Source(7, 8) + SourceIndex(0) -4 >Emitted(29, 10) Source(7, 14) + SourceIndex(0) -5 >Emitted(29, 15) Source(7, 8) + SourceIndex(0) -6 >Emitted(29, 21) Source(7, 14) + SourceIndex(0) -7 >Emitted(29, 29) Source(31, 2) + SourceIndex(0) +1->Emitted(27, 1) Source(31, 1) + SourceIndex(0) +2 >Emitted(27, 2) Source(31, 2) + SourceIndex(0) +3 >Emitted(27, 4) Source(7, 8) + SourceIndex(0) +4 >Emitted(27, 10) Source(7, 14) + SourceIndex(0) +5 >Emitted(27, 15) Source(7, 8) + SourceIndex(0) +6 >Emitted(27, 21) Source(7, 14) + SourceIndex(0) +7 >Emitted(27, 29) Source(31, 2) + SourceIndex(0) --- >>>/** Local Variable */ 1 > @@ -530,8 +528,8 @@ sourceFile:sourceMap-FileWithComments.ts > > 2 >/** Local Variable */ -1 >Emitted(30, 1) Source(33, 1) + SourceIndex(0) -2 >Emitted(30, 22) Source(33, 22) + SourceIndex(0) +1 >Emitted(28, 1) Source(33, 1) + SourceIndex(0) +2 >Emitted(28, 22) Source(33, 22) + SourceIndex(0) --- >>>var p = new Shapes.Point(3, 4); 1-> @@ -563,20 +561,20 @@ sourceFile:sourceMap-FileWithComments.ts 12> 4 13> ) 14> ; -1->Emitted(31, 1) Source(34, 1) + SourceIndex(0) -2 >Emitted(31, 5) Source(34, 5) + SourceIndex(0) -3 >Emitted(31, 6) Source(34, 6) + SourceIndex(0) -4 >Emitted(31, 9) Source(34, 17) + SourceIndex(0) -5 >Emitted(31, 13) Source(34, 21) + SourceIndex(0) -6 >Emitted(31, 19) Source(34, 27) + SourceIndex(0) -7 >Emitted(31, 20) Source(34, 28) + SourceIndex(0) -8 >Emitted(31, 25) Source(34, 33) + SourceIndex(0) -9 >Emitted(31, 26) Source(34, 34) + SourceIndex(0) -10>Emitted(31, 27) Source(34, 35) + SourceIndex(0) -11>Emitted(31, 29) Source(34, 37) + SourceIndex(0) -12>Emitted(31, 30) Source(34, 38) + SourceIndex(0) -13>Emitted(31, 31) Source(34, 39) + SourceIndex(0) -14>Emitted(31, 32) Source(34, 40) + SourceIndex(0) +1->Emitted(29, 1) Source(34, 1) + SourceIndex(0) +2 >Emitted(29, 5) Source(34, 5) + SourceIndex(0) +3 >Emitted(29, 6) Source(34, 6) + SourceIndex(0) +4 >Emitted(29, 9) Source(34, 17) + SourceIndex(0) +5 >Emitted(29, 13) Source(34, 21) + SourceIndex(0) +6 >Emitted(29, 19) Source(34, 27) + SourceIndex(0) +7 >Emitted(29, 20) Source(34, 28) + SourceIndex(0) +8 >Emitted(29, 25) Source(34, 33) + SourceIndex(0) +9 >Emitted(29, 26) Source(34, 34) + SourceIndex(0) +10>Emitted(29, 27) Source(34, 35) + SourceIndex(0) +11>Emitted(29, 29) Source(34, 37) + SourceIndex(0) +12>Emitted(29, 30) Source(34, 38) + SourceIndex(0) +13>Emitted(29, 31) Source(34, 39) + SourceIndex(0) +14>Emitted(29, 32) Source(34, 40) + SourceIndex(0) --- >>>var dist = p.getDist(); 1 > @@ -599,14 +597,14 @@ sourceFile:sourceMap-FileWithComments.ts 7 > getDist 8 > () 9 > ; -1 >Emitted(32, 1) Source(35, 1) + SourceIndex(0) -2 >Emitted(32, 5) Source(35, 5) + SourceIndex(0) -3 >Emitted(32, 9) Source(35, 9) + SourceIndex(0) -4 >Emitted(32, 12) Source(35, 12) + SourceIndex(0) -5 >Emitted(32, 13) Source(35, 13) + SourceIndex(0) -6 >Emitted(32, 14) Source(35, 14) + SourceIndex(0) -7 >Emitted(32, 21) Source(35, 21) + SourceIndex(0) -8 >Emitted(32, 23) Source(35, 23) + SourceIndex(0) -9 >Emitted(32, 24) Source(35, 24) + SourceIndex(0) +1 >Emitted(30, 1) Source(35, 1) + SourceIndex(0) +2 >Emitted(30, 5) Source(35, 5) + SourceIndex(0) +3 >Emitted(30, 9) Source(35, 9) + SourceIndex(0) +4 >Emitted(30, 12) Source(35, 12) + SourceIndex(0) +5 >Emitted(30, 13) Source(35, 13) + SourceIndex(0) +6 >Emitted(30, 14) Source(35, 14) + SourceIndex(0) +7 >Emitted(30, 21) Source(35, 21) + SourceIndex(0) +8 >Emitted(30, 23) Source(35, 23) + SourceIndex(0) +9 >Emitted(30, 24) Source(35, 24) + SourceIndex(0) --- >>>//# sourceMappingURL=sourceMap-FileWithComments.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapValidationDecorators.js b/tests/baselines/reference/sourceMapValidationDecorators.js index 77b4041f9b909..86a843f7f82c3 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.js +++ b/tests/baselines/reference/sourceMapValidationDecorators.js @@ -88,9 +88,7 @@ var Greeter = /** @class */ (function () { enumerable: false, configurable: true }); - (function () { - Greeter.x1 = 10; - }).call(Greeter); + Greeter.x1 = 10; __decorate([ PropertyDecorator1, PropertyDecorator2(40) diff --git a/tests/baselines/reference/sourceMapValidationDecorators.js.map b/tests/baselines/reference/sourceMapValidationDecorators.js.map index b5bda4b40d524..5b5471bc7bf62 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.js.map +++ b/tests/baselines/reference/sourceMapValidationDecorators.js.map @@ -1,3 +1,3 @@ //// [sourceMapValidationDecorators.js.map] -{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA;IACI,iBAGS,QAAgB;QAIvB,WAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,0BAAc;;QAJP,aAAQ,GAAR,QAAQ,CAAQ;IAKzB,CAAC;IAID,uBAAK,GAAL;QACI,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5C,CAAC;IAUO,oBAAE,GAAV,UAGE,CAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,sBAAI,8BAAS;aAAb;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAGE,SAAiB;YACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC9B,CAAC;;;OAPA;;QAbc,UAAE,GAAW,EAAE,CAAC;;IAV/B;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;wCAGtB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;sCACL;IAMlB;QACG,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;qCAGzB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;QAMpB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;4CAJzB;IAbD;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;6BACQ;IAvB7B,OAAO;QAFZ,eAAe;QACf,eAAe,CAAC,EAAE,CAAC;QAGb,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAGvB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;OAPxB,OAAO,CA4CZ;IAAD,cAAC;CAAA,AA5CD,IA4CC"} -//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCnZhciBHcmVldGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgew0KICAgIGZ1bmN0aW9uIEdyZWV0ZXIoZ3JlZXRpbmcpIHsNCiAgICAgICAgdmFyIGIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsNCiAgICAgICAgICAgIGJbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBHcmVldGVyLnByb3RvdHlwZS5ncmVldCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH07DQogICAgR3JlZXRlci5wcm90b3R5cGUuZm4gPSBmdW5jdGlvbiAoeCkgew0KICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICB9Ow0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIHsNCiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICAgICAgfSwNCiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZ3JlZXRpbmdzKSB7DQogICAgICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgICAgICB9LA0KICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwNCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlDQogICAgfSk7DQogICAgKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgR3JlZXRlci54MSA9IDEwOw0KICAgIH0pLmNhbGwoR3JlZXRlcik7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IyKDQwKQ0KICAgIF0sIEdyZWV0ZXIucHJvdG90eXBlLCAiZ3JlZXQiLCBudWxsKTsNCiAgICBfX2RlY29yYXRlKFsNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjIoNTApDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJ4Iiwgdm9pZCAwKTsNCiAgICBfX2RlY29yYXRlKFsNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDcwKSkNCiAgICBdLCBHcmVldGVyLnByb3RvdHlwZSwgImZuIiwgbnVsbCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IyKDgwKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDkwKSkNCiAgICBdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIG51bGwpOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig2MCkNCiAgICBdLCBHcmVldGVyLCAieDEiLCB2b2lkIDApOw0KICAgIEdyZWV0ZXIgPSBfX2RlY29yYXRlKFsNCiAgICAgICAgQ2xhc3NEZWNvcmF0b3IxLA0KICAgICAgICBDbGFzc0RlY29yYXRvcjIoMTApLA0KICAgICAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgICAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjIoMjApKSwNCiAgICAgICAgX19wYXJhbSgxLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgxLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDMwKSkNCiAgICBdLCBHcmVldGVyKTsNCiAgICByZXR1cm4gR3JlZXRlcjsNCn0oKSk7DQovLyMgc291cmNlTWFwcGluZ1VSTD1zb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy5qcy5tYXA=,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQTtJQUNJLGlCQUdTLFFBQWdCO1FBSXZCLFdBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQsMEJBQWM7O1FBSlAsYUFBUSxHQUFSLFFBQVEsQ0FBUTtJQUt6QixDQUFDO0lBSUQsdUJBQUssR0FBTDtRQUNJLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFVTyxvQkFBRSxHQUFWLFVBR0UsQ0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsc0JBQUksOEJBQVM7YUFBYjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO2FBRUQsVUFHRSxTQUFpQjtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQVBBOztRQWJjLFVBQUUsR0FBVyxFQUFFLENBQUM7O0lBVi9CO1FBRkMsa0JBQWtCO1FBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQzt3Q0FHdEI7SUFJRDtRQUZDLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxFQUFFLENBQUM7c0NBQ0w7SUFNbEI7UUFDRyxXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7cUNBR3pCO0lBSUQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBTXBCLFdBQUEsbUJBQW1CLENBQUE7UUFDbkIsV0FBQSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTs0Q0FKekI7SUFiRDtRQUZDLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxFQUFFLENBQUM7NkJBQ1E7SUF2QjdCLE9BQU87UUFGWixlQUFlO1FBQ2YsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUdiLFdBQUEsbUJBQW1CLENBQUE7UUFDbkIsV0FBQSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUd2QixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7T0FQeEIsT0FBTyxDQTRDWjtJQUFELGNBQUM7Q0FBQSxBQTVDRCxJQTRDQyJ9,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 +{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA;IACI,iBAGS,QAAgB;QAIvB,WAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,0BAAc;;QAJP,aAAQ,GAAR,QAAQ,CAAQ;IAKzB,CAAC;IAID,uBAAK,GAAL;QACI,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5C,CAAC;IAUO,oBAAE,GAAV,UAGE,CAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,sBAAI,8BAAS;aAAb;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAGE,SAAiB;YACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC9B,CAAC;;;OAPA;IAbc,UAAE,GAAW,EAAE,CAAC;IAV/B;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;wCAGtB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;sCACL;IAMlB;QACG,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;qCAGzB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;QAMpB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;4CAJzB;IAbD;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;6BACQ;IAvB7B,OAAO;QAFZ,eAAe;QACf,eAAe,CAAC,EAAE,CAAC;QAGb,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAGvB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;OAPxB,OAAO,CA4CZ;IAAD,cAAC;CAAA,AA5CD,IA4CC"} +//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCnZhciBHcmVldGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgew0KICAgIGZ1bmN0aW9uIEdyZWV0ZXIoZ3JlZXRpbmcpIHsNCiAgICAgICAgdmFyIGIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsNCiAgICAgICAgICAgIGJbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBHcmVldGVyLnByb3RvdHlwZS5ncmVldCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH07DQogICAgR3JlZXRlci5wcm90b3R5cGUuZm4gPSBmdW5jdGlvbiAoeCkgew0KICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICB9Ow0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIHsNCiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICAgICAgfSwNCiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZ3JlZXRpbmdzKSB7DQogICAgICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgICAgICB9LA0KICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwNCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlDQogICAgfSk7DQogICAgR3JlZXRlci54MSA9IDEwOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig0MCkNCiAgICBdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0IiwgbnVsbCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IyKDUwKQ0KICAgIF0sIEdyZWV0ZXIucHJvdG90eXBlLCAieCIsIHZvaWQgMCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig3MCkpDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJmbiIsIG51bGwpOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig4MCksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig5MCkpDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldGluZ3MiLCBudWxsKTsNCiAgICBfX2RlY29yYXRlKFsNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjIoNjApDQogICAgXSwgR3JlZXRlciwgIngxIiwgdm9pZCAwKTsNCiAgICBHcmVldGVyID0gX19kZWNvcmF0ZShbDQogICAgICAgIENsYXNzRGVjb3JhdG9yMSwNCiAgICAgICAgQ2xhc3NEZWNvcmF0b3IyKDEwKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDIwKSksDQogICAgICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMigzMCkpDQogICAgXSwgR3JlZXRlcik7DQogICAgcmV0dXJuIEdyZWV0ZXI7DQp9KCkpOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9c291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMubWFw,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQTtJQUNJLGlCQUdTLFFBQWdCO1FBSXZCLFdBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQsMEJBQWM7O1FBSlAsYUFBUSxHQUFSLFFBQVEsQ0FBUTtJQUt6QixDQUFDO0lBSUQsdUJBQUssR0FBTDtRQUNJLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFVTyxvQkFBRSxHQUFWLFVBR0UsQ0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsc0JBQUksOEJBQVM7YUFBYjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO2FBRUQsVUFHRSxTQUFpQjtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQVBBO0lBYmMsVUFBRSxHQUFXLEVBQUUsQ0FBQztJQVYvQjtRQUZDLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxFQUFFLENBQUM7d0NBR3RCO0lBSUQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3NDQUNMO0lBTWxCO1FBQ0csV0FBQSxtQkFBbUIsQ0FBQTtRQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO3FDQUd6QjtJQUlEO1FBRkMsa0JBQWtCO1FBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQU1wQixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7NENBSnpCO0lBYkQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDOzZCQUNRO0lBdkI3QixPQUFPO1FBRlosZUFBZTtRQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFHYixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7UUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtRQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO09BUHhCLE9BQU8sQ0E0Q1o7SUFBRCxjQUFDO0NBQUEsQUE1Q0QsSUE0Q0MifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 diff --git a/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt b/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt index 31e659a3ff19f..de57be0e9fa38 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt +++ b/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt @@ -347,34 +347,32 @@ sourceFile:sourceMapValidationDecorators.ts >>> configurable: true >>> }); 1->^^^^^^^ -2 > ^^^^^^^^^^^^-> +2 > ^^^^^^^^^^^^^^-> 1-> 1->Emitted(33, 8) Source(46, 6) + SourceIndex(0) --- ->>> (function () { ->>> Greeter.x1 = 10; -1->^^^^^^^^ -2 > ^^^^^^^^^^ -3 > ^^^ -4 > ^^ -5 > ^ +>>> Greeter.x1 = 10; +1->^^^^ +2 > ^^^^^^^^^^ +3 > ^^^ +4 > ^^ +5 > ^ 1-> -2 > x1 -3 > : number = -4 > 10 -5 > ; -1->Emitted(35, 9) Source(33, 20) + SourceIndex(0) -2 >Emitted(35, 19) Source(33, 22) + SourceIndex(0) -3 >Emitted(35, 22) Source(33, 33) + SourceIndex(0) -4 >Emitted(35, 24) Source(33, 35) + SourceIndex(0) -5 >Emitted(35, 25) Source(33, 36) + SourceIndex(0) ---- ->>> }).call(Greeter); +2 > x1 +3 > : number = +4 > 10 +5 > ; +1->Emitted(34, 5) Source(33, 20) + SourceIndex(0) +2 >Emitted(34, 15) Source(33, 22) + SourceIndex(0) +3 >Emitted(34, 18) Source(33, 33) + SourceIndex(0) +4 >Emitted(34, 20) Source(33, 35) + SourceIndex(0) +5 >Emitted(34, 21) Source(33, 36) + SourceIndex(0) +--- >>> __decorate([ 1 >^^^^ 2 > ^^^^^^^^^^^^^^^^^^^^^^^^-> 1 > -1 >Emitted(37, 5) Source(23, 5) + SourceIndex(0) +1 >Emitted(35, 5) Source(23, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^^^^^ @@ -382,8 +380,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^-> 1-> 2 > PropertyDecorator1 -1->Emitted(38, 9) Source(21, 6) + SourceIndex(0) -2 >Emitted(38, 27) Source(21, 24) + SourceIndex(0) +1->Emitted(36, 9) Source(21, 6) + SourceIndex(0) +2 >Emitted(36, 27) Source(21, 24) + SourceIndex(0) --- >>> PropertyDecorator2(40) 1->^^^^^^^^ @@ -398,11 +396,11 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 40 5 > ) -1->Emitted(39, 9) Source(22, 6) + SourceIndex(0) -2 >Emitted(39, 27) Source(22, 24) + SourceIndex(0) -3 >Emitted(39, 28) Source(22, 25) + SourceIndex(0) -4 >Emitted(39, 30) Source(22, 27) + SourceIndex(0) -5 >Emitted(39, 31) Source(22, 28) + SourceIndex(0) +1->Emitted(37, 9) Source(22, 6) + SourceIndex(0) +2 >Emitted(37, 27) Source(22, 24) + SourceIndex(0) +3 >Emitted(37, 28) Source(22, 25) + SourceIndex(0) +4 >Emitted(37, 30) Source(22, 27) + SourceIndex(0) +5 >Emitted(37, 31) Source(22, 28) + SourceIndex(0) --- >>> ], Greeter.prototype, "greet", null); 1->^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -410,7 +408,7 @@ sourceFile:sourceMapValidationDecorators.ts > greet() { > return "

" + this.greeting + "

"; > } -1->Emitted(40, 41) Source(25, 6) + SourceIndex(0) +1->Emitted(38, 41) Source(25, 6) + SourceIndex(0) --- >>> __decorate([ 1 >^^^^ @@ -420,7 +418,7 @@ sourceFile:sourceMapValidationDecorators.ts > @PropertyDecorator1 > @PropertyDecorator2(50) > -1 >Emitted(41, 5) Source(29, 5) + SourceIndex(0) +1 >Emitted(39, 5) Source(29, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^^^^^ @@ -428,8 +426,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^-> 1-> 2 > PropertyDecorator1 -1->Emitted(42, 9) Source(27, 6) + SourceIndex(0) -2 >Emitted(42, 27) Source(27, 24) + SourceIndex(0) +1->Emitted(40, 9) Source(27, 6) + SourceIndex(0) +2 >Emitted(40, 27) Source(27, 24) + SourceIndex(0) --- >>> PropertyDecorator2(50) 1->^^^^^^^^ @@ -444,17 +442,17 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 50 5 > ) -1->Emitted(43, 9) Source(28, 6) + SourceIndex(0) -2 >Emitted(43, 27) Source(28, 24) + SourceIndex(0) -3 >Emitted(43, 28) Source(28, 25) + SourceIndex(0) -4 >Emitted(43, 30) Source(28, 27) + SourceIndex(0) -5 >Emitted(43, 31) Source(28, 28) + SourceIndex(0) +1->Emitted(41, 9) Source(28, 6) + SourceIndex(0) +2 >Emitted(41, 27) Source(28, 24) + SourceIndex(0) +3 >Emitted(41, 28) Source(28, 25) + SourceIndex(0) +4 >Emitted(41, 30) Source(28, 27) + SourceIndex(0) +5 >Emitted(41, 31) Source(28, 28) + SourceIndex(0) --- >>> ], Greeter.prototype, "x", void 0); 1->^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1-> > private x: string; -1->Emitted(44, 39) Source(29, 23) + SourceIndex(0) +1->Emitted(42, 39) Source(29, 23) + SourceIndex(0) --- >>> __decorate([ 1 >^^^^ @@ -466,7 +464,7 @@ sourceFile:sourceMapValidationDecorators.ts > private static x1: number = 10; > > -1 >Emitted(45, 5) Source(35, 5) + SourceIndex(0) +1 >Emitted(43, 5) Source(35, 5) + SourceIndex(0) --- >>> __param(0, ParameterDecorator1), 1->^^^^^^^^ @@ -479,10 +477,10 @@ sourceFile:sourceMapValidationDecorators.ts 2 > 3 > ParameterDecorator1 4 > -1->Emitted(46, 9) Source(36, 8) + SourceIndex(0) -2 >Emitted(46, 20) Source(36, 8) + SourceIndex(0) -3 >Emitted(46, 39) Source(36, 27) + SourceIndex(0) -4 >Emitted(46, 40) Source(36, 27) + SourceIndex(0) +1->Emitted(44, 9) Source(36, 8) + SourceIndex(0) +2 >Emitted(44, 20) Source(36, 8) + SourceIndex(0) +3 >Emitted(44, 39) Source(36, 27) + SourceIndex(0) +4 >Emitted(44, 40) Source(36, 27) + SourceIndex(0) --- >>> __param(0, ParameterDecorator2(70)) 1->^^^^^^^^ @@ -500,13 +498,13 @@ sourceFile:sourceMapValidationDecorators.ts 5 > 70 6 > ) 7 > -1->Emitted(47, 9) Source(37, 8) + SourceIndex(0) -2 >Emitted(47, 20) Source(37, 8) + SourceIndex(0) -3 >Emitted(47, 39) Source(37, 27) + SourceIndex(0) -4 >Emitted(47, 40) Source(37, 28) + SourceIndex(0) -5 >Emitted(47, 42) Source(37, 30) + SourceIndex(0) -6 >Emitted(47, 43) Source(37, 31) + SourceIndex(0) -7 >Emitted(47, 44) Source(37, 31) + SourceIndex(0) +1->Emitted(45, 9) Source(37, 8) + SourceIndex(0) +2 >Emitted(45, 20) Source(37, 8) + SourceIndex(0) +3 >Emitted(45, 39) Source(37, 27) + SourceIndex(0) +4 >Emitted(45, 40) Source(37, 28) + SourceIndex(0) +5 >Emitted(45, 42) Source(37, 30) + SourceIndex(0) +6 >Emitted(45, 43) Source(37, 31) + SourceIndex(0) +7 >Emitted(45, 44) Source(37, 31) + SourceIndex(0) --- >>> ], Greeter.prototype, "fn", null); 1 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -514,7 +512,7 @@ sourceFile:sourceMapValidationDecorators.ts > x: number) { > return this.greeting; > } -1 >Emitted(48, 38) Source(40, 6) + SourceIndex(0) +1 >Emitted(46, 38) Source(40, 6) + SourceIndex(0) --- >>> __decorate([ 1 >^^^^ @@ -524,7 +522,7 @@ sourceFile:sourceMapValidationDecorators.ts > @PropertyDecorator1 > @PropertyDecorator2(80) > -1 >Emitted(49, 5) Source(44, 5) + SourceIndex(0) +1 >Emitted(47, 5) Source(44, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^^^^^ @@ -532,8 +530,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^^-> 1-> 2 > PropertyDecorator1 -1->Emitted(50, 9) Source(42, 6) + SourceIndex(0) -2 >Emitted(50, 27) Source(42, 24) + SourceIndex(0) +1->Emitted(48, 9) Source(42, 6) + SourceIndex(0) +2 >Emitted(48, 27) Source(42, 24) + SourceIndex(0) --- >>> PropertyDecorator2(80), 1->^^^^^^^^ @@ -548,11 +546,11 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 80 5 > ) -1->Emitted(51, 9) Source(43, 6) + SourceIndex(0) -2 >Emitted(51, 27) Source(43, 24) + SourceIndex(0) -3 >Emitted(51, 28) Source(43, 25) + SourceIndex(0) -4 >Emitted(51, 30) Source(43, 27) + SourceIndex(0) -5 >Emitted(51, 31) Source(43, 28) + SourceIndex(0) +1->Emitted(49, 9) Source(43, 6) + SourceIndex(0) +2 >Emitted(49, 27) Source(43, 24) + SourceIndex(0) +3 >Emitted(49, 28) Source(43, 25) + SourceIndex(0) +4 >Emitted(49, 30) Source(43, 27) + SourceIndex(0) +5 >Emitted(49, 31) Source(43, 28) + SourceIndex(0) --- >>> __param(0, ParameterDecorator1), 1->^^^^^^^^ @@ -570,10 +568,10 @@ sourceFile:sourceMapValidationDecorators.ts 2 > 3 > ParameterDecorator1 4 > -1->Emitted(52, 9) Source(49, 8) + SourceIndex(0) -2 >Emitted(52, 20) Source(49, 8) + SourceIndex(0) -3 >Emitted(52, 39) Source(49, 27) + SourceIndex(0) -4 >Emitted(52, 40) Source(49, 27) + SourceIndex(0) +1->Emitted(50, 9) Source(49, 8) + SourceIndex(0) +2 >Emitted(50, 20) Source(49, 8) + SourceIndex(0) +3 >Emitted(50, 39) Source(49, 27) + SourceIndex(0) +4 >Emitted(50, 40) Source(49, 27) + SourceIndex(0) --- >>> __param(0, ParameterDecorator2(90)) 1->^^^^^^^^ @@ -592,24 +590,24 @@ sourceFile:sourceMapValidationDecorators.ts 5 > 90 6 > ) 7 > -1->Emitted(53, 9) Source(50, 8) + SourceIndex(0) -2 >Emitted(53, 20) Source(50, 8) + SourceIndex(0) -3 >Emitted(53, 39) Source(50, 27) + SourceIndex(0) -4 >Emitted(53, 40) Source(50, 28) + SourceIndex(0) -5 >Emitted(53, 42) Source(50, 30) + SourceIndex(0) -6 >Emitted(53, 43) Source(50, 31) + SourceIndex(0) -7 >Emitted(53, 44) Source(50, 31) + SourceIndex(0) +1->Emitted(51, 9) Source(50, 8) + SourceIndex(0) +2 >Emitted(51, 20) Source(50, 8) + SourceIndex(0) +3 >Emitted(51, 39) Source(50, 27) + SourceIndex(0) +4 >Emitted(51, 40) Source(50, 28) + SourceIndex(0) +5 >Emitted(51, 42) Source(50, 30) + SourceIndex(0) +6 >Emitted(51, 43) Source(50, 31) + SourceIndex(0) +7 >Emitted(51, 44) Source(50, 31) + SourceIndex(0) --- >>> ], Greeter.prototype, "greetings", null); 1->^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1-> -1->Emitted(54, 45) Source(46, 6) + SourceIndex(0) +1->Emitted(52, 45) Source(46, 6) + SourceIndex(0) --- >>> __decorate([ 1 >^^^^ 2 > ^^^^^^^^^^^^^^^^^^^^^^^^-> 1 > -1 >Emitted(55, 5) Source(33, 5) + SourceIndex(0) +1 >Emitted(53, 5) Source(33, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^^^^^ @@ -617,8 +615,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^-> 1-> 2 > PropertyDecorator1 -1->Emitted(56, 9) Source(31, 6) + SourceIndex(0) -2 >Emitted(56, 27) Source(31, 24) + SourceIndex(0) +1->Emitted(54, 9) Source(31, 6) + SourceIndex(0) +2 >Emitted(54, 27) Source(31, 24) + SourceIndex(0) --- >>> PropertyDecorator2(60) 1->^^^^^^^^ @@ -633,17 +631,17 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 60 5 > ) -1->Emitted(57, 9) Source(32, 6) + SourceIndex(0) -2 >Emitted(57, 27) Source(32, 24) + SourceIndex(0) -3 >Emitted(57, 28) Source(32, 25) + SourceIndex(0) -4 >Emitted(57, 30) Source(32, 27) + SourceIndex(0) -5 >Emitted(57, 31) Source(32, 28) + SourceIndex(0) +1->Emitted(55, 9) Source(32, 6) + SourceIndex(0) +2 >Emitted(55, 27) Source(32, 24) + SourceIndex(0) +3 >Emitted(55, 28) Source(32, 25) + SourceIndex(0) +4 >Emitted(55, 30) Source(32, 27) + SourceIndex(0) +5 >Emitted(55, 31) Source(32, 28) + SourceIndex(0) --- >>> ], Greeter, "x1", void 0); 1->^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1-> > private static x1: number = 10; -1->Emitted(58, 30) Source(33, 36) + SourceIndex(0) +1->Emitted(56, 30) Source(33, 36) + SourceIndex(0) --- >>> Greeter = __decorate([ 1 >^^^^ @@ -651,8 +649,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^^^^^^^^^^-> 1 > 2 > Greeter -1 >Emitted(59, 5) Source(10, 7) + SourceIndex(0) -2 >Emitted(59, 12) Source(10, 14) + SourceIndex(0) +1 >Emitted(57, 5) Source(10, 7) + SourceIndex(0) +2 >Emitted(57, 12) Source(10, 14) + SourceIndex(0) --- >>> ClassDecorator1, 1->^^^^^^^^ @@ -660,8 +658,8 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ^^^^^^-> 1-> 2 > ClassDecorator1 -1->Emitted(60, 9) Source(8, 2) + SourceIndex(0) -2 >Emitted(60, 24) Source(8, 17) + SourceIndex(0) +1->Emitted(58, 9) Source(8, 2) + SourceIndex(0) +2 >Emitted(58, 24) Source(8, 17) + SourceIndex(0) --- >>> ClassDecorator2(10), 1->^^^^^^^^ @@ -676,11 +674,11 @@ sourceFile:sourceMapValidationDecorators.ts 3 > ( 4 > 10 5 > ) -1->Emitted(61, 9) Source(9, 2) + SourceIndex(0) -2 >Emitted(61, 24) Source(9, 17) + SourceIndex(0) -3 >Emitted(61, 25) Source(9, 18) + SourceIndex(0) -4 >Emitted(61, 27) Source(9, 20) + SourceIndex(0) -5 >Emitted(61, 28) Source(9, 21) + SourceIndex(0) +1->Emitted(59, 9) Source(9, 2) + SourceIndex(0) +2 >Emitted(59, 24) Source(9, 17) + SourceIndex(0) +3 >Emitted(59, 25) Source(9, 18) + SourceIndex(0) +4 >Emitted(59, 27) Source(9, 20) + SourceIndex(0) +5 >Emitted(59, 28) Source(9, 21) + SourceIndex(0) --- >>> __param(0, ParameterDecorator1), 1->^^^^^^^^ @@ -695,10 +693,10 @@ sourceFile:sourceMapValidationDecorators.ts 2 > 3 > ParameterDecorator1 4 > -1->Emitted(62, 9) Source(12, 8) + SourceIndex(0) -2 >Emitted(62, 20) Source(12, 8) + SourceIndex(0) -3 >Emitted(62, 39) Source(12, 27) + SourceIndex(0) -4 >Emitted(62, 40) Source(12, 27) + SourceIndex(0) +1->Emitted(60, 9) Source(12, 8) + SourceIndex(0) +2 >Emitted(60, 20) Source(12, 8) + SourceIndex(0) +3 >Emitted(60, 39) Source(12, 27) + SourceIndex(0) +4 >Emitted(60, 40) Source(12, 27) + SourceIndex(0) --- >>> __param(0, ParameterDecorator2(20)), 1->^^^^^^^^ @@ -716,13 +714,13 @@ sourceFile:sourceMapValidationDecorators.ts 5 > 20 6 > ) 7 > -1->Emitted(63, 9) Source(13, 8) + SourceIndex(0) -2 >Emitted(63, 20) Source(13, 8) + SourceIndex(0) -3 >Emitted(63, 39) Source(13, 27) + SourceIndex(0) -4 >Emitted(63, 40) Source(13, 28) + SourceIndex(0) -5 >Emitted(63, 42) Source(13, 30) + SourceIndex(0) -6 >Emitted(63, 43) Source(13, 31) + SourceIndex(0) -7 >Emitted(63, 44) Source(13, 31) + SourceIndex(0) +1->Emitted(61, 9) Source(13, 8) + SourceIndex(0) +2 >Emitted(61, 20) Source(13, 8) + SourceIndex(0) +3 >Emitted(61, 39) Source(13, 27) + SourceIndex(0) +4 >Emitted(61, 40) Source(13, 28) + SourceIndex(0) +5 >Emitted(61, 42) Source(13, 30) + SourceIndex(0) +6 >Emitted(61, 43) Source(13, 31) + SourceIndex(0) +7 >Emitted(61, 44) Source(13, 31) + SourceIndex(0) --- >>> __param(1, ParameterDecorator1), 1 >^^^^^^^^ @@ -737,10 +735,10 @@ sourceFile:sourceMapValidationDecorators.ts 2 > 3 > ParameterDecorator1 4 > -1 >Emitted(64, 9) Source(16, 8) + SourceIndex(0) -2 >Emitted(64, 20) Source(16, 8) + SourceIndex(0) -3 >Emitted(64, 39) Source(16, 27) + SourceIndex(0) -4 >Emitted(64, 40) Source(16, 27) + SourceIndex(0) +1 >Emitted(62, 9) Source(16, 8) + SourceIndex(0) +2 >Emitted(62, 20) Source(16, 8) + SourceIndex(0) +3 >Emitted(62, 39) Source(16, 27) + SourceIndex(0) +4 >Emitted(62, 40) Source(16, 27) + SourceIndex(0) --- >>> __param(1, ParameterDecorator2(30)) 1->^^^^^^^^ @@ -758,13 +756,13 @@ sourceFile:sourceMapValidationDecorators.ts 5 > 30 6 > ) 7 > -1->Emitted(65, 9) Source(17, 8) + SourceIndex(0) -2 >Emitted(65, 20) Source(17, 8) + SourceIndex(0) -3 >Emitted(65, 39) Source(17, 27) + SourceIndex(0) -4 >Emitted(65, 40) Source(17, 28) + SourceIndex(0) -5 >Emitted(65, 42) Source(17, 30) + SourceIndex(0) -6 >Emitted(65, 43) Source(17, 31) + SourceIndex(0) -7 >Emitted(65, 44) Source(17, 31) + SourceIndex(0) +1->Emitted(63, 9) Source(17, 8) + SourceIndex(0) +2 >Emitted(63, 20) Source(17, 8) + SourceIndex(0) +3 >Emitted(63, 39) Source(17, 27) + SourceIndex(0) +4 >Emitted(63, 40) Source(17, 28) + SourceIndex(0) +5 >Emitted(63, 42) Source(17, 30) + SourceIndex(0) +6 >Emitted(63, 43) Source(17, 31) + SourceIndex(0) +7 >Emitted(63, 44) Source(17, 31) + SourceIndex(0) --- >>> ], Greeter); 1 >^^^^^^^ @@ -818,17 +816,17 @@ sourceFile:sourceMapValidationDecorators.ts > this.greeting = greetings; > } > } -1 >Emitted(66, 8) Source(10, 7) + SourceIndex(0) -2 >Emitted(66, 15) Source(10, 14) + SourceIndex(0) -3 >Emitted(66, 16) Source(54, 2) + SourceIndex(0) +1 >Emitted(64, 8) Source(10, 7) + SourceIndex(0) +2 >Emitted(64, 15) Source(10, 14) + SourceIndex(0) +3 >Emitted(64, 16) Source(54, 2) + SourceIndex(0) --- >>> return Greeter; 1->^^^^ 2 > ^^^^^^^^^^^^^^ 1-> 2 > } -1->Emitted(67, 5) Source(54, 1) + SourceIndex(0) -2 >Emitted(67, 19) Source(54, 2) + SourceIndex(0) +1->Emitted(65, 5) Source(54, 1) + SourceIndex(0) +2 >Emitted(65, 19) Source(54, 2) + SourceIndex(0) --- >>>}()); 1 >^ @@ -882,8 +880,8 @@ sourceFile:sourceMapValidationDecorators.ts > this.greeting = greetings; > } > } -1 >Emitted(68, 2) Source(54, 2) + SourceIndex(0) -2 >Emitted(68, 2) Source(10, 1) + SourceIndex(0) -3 >Emitted(68, 6) Source(54, 2) + SourceIndex(0) +1 >Emitted(66, 2) Source(54, 2) + SourceIndex(0) +2 >Emitted(66, 2) Source(10, 1) + SourceIndex(0) +3 >Emitted(66, 6) Source(54, 2) + SourceIndex(0) --- >>>//# sourceMappingURL=sourceMapValidationDecorators.js.map \ No newline at end of file diff --git a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.js b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.js index 000f23782273a..83d72128212c3 100644 --- a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.js +++ b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.js @@ -148,9 +148,7 @@ function outer(x) { var Inner = /** @class */ (function () { function Inner() { } - (function () { - Inner.y = x; - }).call(Inner); + Inner.y = x; return Inner; }()); return Inner; diff --git a/tests/baselines/reference/staticClassProps.js b/tests/baselines/reference/staticClassProps.js index 00fb281fe7d8f..112c3525693e2 100644 --- a/tests/baselines/reference/staticClassProps.js +++ b/tests/baselines/reference/staticClassProps.js @@ -14,8 +14,6 @@ var C = /** @class */ (function () { } C.prototype.foo = function () { }; - (function () { - C.z = 1; - }).call(C); + C.z = 1; return C; }()); diff --git a/tests/baselines/reference/staticMemberAccessOffDerivedType1.js b/tests/baselines/reference/staticMemberAccessOffDerivedType1.js index d955319b10510..b1ad3b1d870dd 100644 --- a/tests/baselines/reference/staticMemberAccessOffDerivedType1.js +++ b/tests/baselines/reference/staticMemberAccessOffDerivedType1.js @@ -38,8 +38,6 @@ var P = /** @class */ (function (_super) { function P() { return _super !== null && _super.apply(this, arguments) || this; } - (function () { - P.SomeNumber = P.GetNumber(); - }).call(P); + P.SomeNumber = P.GetNumber(); return P; }(SomeBase)); diff --git a/tests/baselines/reference/staticMemberInitialization.js b/tests/baselines/reference/staticMemberInitialization.js index 537550809a8aa..adde0b4137758 100644 --- a/tests/baselines/reference/staticMemberInitialization.js +++ b/tests/baselines/reference/staticMemberInitialization.js @@ -10,9 +10,7 @@ var r = C.x; var C = /** @class */ (function () { function C() { } - (function () { - C.x = 1; - }).call(C); + C.x = 1; return C; }()); var c = new C(); diff --git a/tests/baselines/reference/staticMemberWithStringAndNumberNames.js b/tests/baselines/reference/staticMemberWithStringAndNumberNames.js index 7cc267ae60652..21be5b9817abd 100644 --- a/tests/baselines/reference/staticMemberWithStringAndNumberNames.js +++ b/tests/baselines/reference/staticMemberWithStringAndNumberNames.js @@ -19,12 +19,10 @@ var C = /** @class */ (function () { this.x2 = C['0']; this.x3 = C[0]; } - (function () { - C["foo"] = 0; - C[0] = 1; - C.s = C['foo']; - C.s2 = C['0']; - C.s3 = C[0]; - }).call(C); + C["foo"] = 0; + C[0] = 1; + C.s = C['foo']; + C.s2 = C['0']; + C.s3 = C[0]; return C; }()); diff --git a/tests/baselines/reference/staticModifierAlreadySeen.js b/tests/baselines/reference/staticModifierAlreadySeen.js index 6e66478be0781..0a0aeb189f2f1 100644 --- a/tests/baselines/reference/staticModifierAlreadySeen.js +++ b/tests/baselines/reference/staticModifierAlreadySeen.js @@ -9,8 +9,6 @@ var C = /** @class */ (function () { function C() { } C.bar = function () { }; - (function () { - C.foo = 1; - }).call(C); + C.foo = 1; return C; }()); diff --git a/tests/baselines/reference/staticPropSuper.js b/tests/baselines/reference/staticPropSuper.js index 527c09843777f..170879d4b647e 100644 --- a/tests/baselines/reference/staticPropSuper.js +++ b/tests/baselines/reference/staticPropSuper.js @@ -64,9 +64,7 @@ var B = /** @class */ (function (_super) { _this = _super.call(this) || this; return _this; } - (function () { - B.s = 9; - }).call(B); + B.s = 9; return B; }(A)); var C = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/statics.js b/tests/baselines/reference/statics.js index a64a10a2f8631..7f98cfe18f1eb 100644 --- a/tests/baselines/reference/statics.js +++ b/tests/baselines/reference/statics.js @@ -45,11 +45,9 @@ var M; C.f = function (n) { return "wow: " + (n + C.y + C.pub + C.priv); }; - (function () { - C.priv = 2; - C.pub = 3; - C.y = C.priv; - }).call(C); + C.priv = 2; + C.pub = 3; + C.y = C.priv; return C; }()); M.C = C; diff --git a/tests/baselines/reference/staticsInConstructorBodies.js b/tests/baselines/reference/staticsInConstructorBodies.js index bcce7f593061e..34ac94238e1ea 100644 --- a/tests/baselines/reference/staticsInConstructorBodies.js +++ b/tests/baselines/reference/staticsInConstructorBodies.js @@ -11,8 +11,6 @@ var C = /** @class */ (function () { function C() { } C.m1 = function () { }; // ERROR - (function () { - C.p1 = 0; // ERROR - }).call(C); + C.p1 = 0; // ERROR return C; }()); diff --git a/tests/baselines/reference/staticsNotInScopeInClodule.js b/tests/baselines/reference/staticsNotInScopeInClodule.js index 623a832b29636..29b9df475dd4f 100644 --- a/tests/baselines/reference/staticsNotInScopeInClodule.js +++ b/tests/baselines/reference/staticsNotInScopeInClodule.js @@ -11,9 +11,7 @@ module Clod { var Clod = /** @class */ (function () { function Clod() { } - (function () { - Clod.x = 10; - }).call(Clod); + Clod.x = 10; return Clod; }()); (function (Clod) { diff --git a/tests/baselines/reference/strictModeInConstructor.js b/tests/baselines/reference/strictModeInConstructor.js index 65ec412eca715..85d5d3eecbfd5 100644 --- a/tests/baselines/reference/strictModeInConstructor.js +++ b/tests/baselines/reference/strictModeInConstructor.js @@ -119,9 +119,7 @@ var Bs = /** @class */ (function (_super) { "use strict"; // No error return _super.call(this) || this; } - (function () { - Bs.s = 9; - }).call(Bs); + Bs.s = 9; return Bs; }(A)); var Cs = /** @class */ (function (_super) { @@ -131,9 +129,7 @@ var Cs = /** @class */ (function (_super) { var _this = _super.call(this) || this; return _this; } - (function () { - Cs.s = 9; - }).call(Cs); + Cs.s = 9; return Cs; }(A)); var Ds = /** @class */ (function (_super) { @@ -145,8 +141,6 @@ var Ds = /** @class */ (function (_super) { "use strict"; return _this; } - (function () { - Ds.s = 9; - }).call(Ds); + Ds.s = 9; return Ds; }(A)); diff --git a/tests/baselines/reference/superAccess.js b/tests/baselines/reference/superAccess.js index bf529a883d1bb..18b7fe9ca75c1 100644 --- a/tests/baselines/reference/superAccess.js +++ b/tests/baselines/reference/superAccess.js @@ -34,9 +34,7 @@ var MyBase = /** @class */ (function () { this.S2 = "test"; this.f = function () { return 5; }; } - (function () { - MyBase.S1 = 5; - }).call(MyBase); + MyBase.S1 = 5; return MyBase; }()); var MyDerived = /** @class */ (function (_super) { diff --git a/tests/baselines/reference/superAccess2.js b/tests/baselines/reference/superAccess2.js index 41b8b015d74cc..5edae76957a13 100644 --- a/tests/baselines/reference/superAccess2.js +++ b/tests/baselines/reference/superAccess2.js @@ -69,8 +69,6 @@ var Q = /** @class */ (function (_super) { _super.x.call(this); // error _super.y.call(this); }; - (function () { - Q.yy = _super.; // error for static initializer accessing super - }).call(Q); + Q.yy = _super.; // error for static initializer accessing super return Q; }(P)); diff --git a/tests/baselines/reference/symbolDeclarationEmit11.js b/tests/baselines/reference/symbolDeclarationEmit11.js index 029511cba8a63..dc6ea17829dae 100644 --- a/tests/baselines/reference/symbolDeclarationEmit11.js +++ b/tests/baselines/reference/symbolDeclarationEmit11.js @@ -13,9 +13,7 @@ class C { static get [Symbol.toPrimitive]() { return ""; } static set [Symbol.toPrimitive](x) { } } -(function () { - C[_a] = 0; -}).call(C); +C[_a] = 0; //// [symbolDeclarationEmit11.d.ts] diff --git a/tests/baselines/reference/systemModuleTargetES6.js b/tests/baselines/reference/systemModuleTargetES6.js index 52e3e1d33977d..0df2835683e82 100644 --- a/tests/baselines/reference/systemModuleTargetES6.js +++ b/tests/baselines/reference/systemModuleTargetES6.js @@ -36,9 +36,7 @@ System.register([], function (exports_1, context_1) { static getInstance() { return MyClass2.value; } }; exports_1("MyClass2", MyClass2); - (function () { - MyClass2.value = 42; - }).call(MyClass2); + MyClass2.value = 42; } }; }); diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js index 63890e817e7ab..b0bb52bc4fed0 100644 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js +++ b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js @@ -13,12 +13,9 @@ function log(a) { } var Vector = /** @class */ (function () { function Vector() { } - (function () { - var _this = this; - Vector.foo = function () { - // 'this' should not be available in a static initializer. - log(_this); - }; - }).call(Vector); + Vector.foo = function () { + // 'this' should not be available in a static initializer. + log(Vector); + }; return Vector; }()); diff --git a/tests/baselines/reference/thisInConstructorParameter2.js b/tests/baselines/reference/thisInConstructorParameter2.js index c28c3a4f8f197..1ab5ed4851922 100644 --- a/tests/baselines/reference/thisInConstructorParameter2.js +++ b/tests/baselines/reference/thisInConstructorParameter2.js @@ -36,8 +36,6 @@ var P = /** @class */ (function () { if (zz === void 0) { zz = this; } zz.y; }; - (function () { - P.y = this; - }).call(P); + P.y = P; return P; }()); diff --git a/tests/baselines/reference/thisInInvalidContexts.js b/tests/baselines/reference/thisInInvalidContexts.js index 0649574ed3203..8b4b8b92ef74e 100644 --- a/tests/baselines/reference/thisInInvalidContexts.js +++ b/tests/baselines/reference/thisInInvalidContexts.js @@ -68,9 +68,7 @@ var __extends = (this && this.__extends) || (function () { var ErrClass1 = /** @class */ (function () { function ErrClass1() { } - (function () { - ErrClass1.t = this; // Error - }).call(ErrClass1); + ErrClass1.t = ErrClass1; // Error return ErrClass1; }()); var BaseErrClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.js b/tests/baselines/reference/thisInInvalidContextsExternalModule.js index 09dda2ca7f7b9..a8fa318db83e3 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.js +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.js @@ -69,9 +69,7 @@ var __extends = (this && this.__extends) || (function () { var ErrClass1 = /** @class */ (function () { function ErrClass1() { } - (function () { - ErrClass1.t = this; // Error - }).call(ErrClass1); + ErrClass1.t = ErrClass1; // Error return ErrClass1; }()); var BaseErrClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisInOuterClassBody.js b/tests/baselines/reference/thisInOuterClassBody.js index 69a661c96a7cf..a23c2b1be22d6 100644 --- a/tests/baselines/reference/thisInOuterClassBody.js +++ b/tests/baselines/reference/thisInOuterClassBody.js @@ -36,8 +36,6 @@ var Foo = /** @class */ (function () { var a = this.y; var b = this.x; }; - (function () { - Foo.y = this; - }).call(Foo); + Foo.y = Foo; return Foo; }()); diff --git a/tests/baselines/reference/thisInPropertyBoundDeclarations.js b/tests/baselines/reference/thisInPropertyBoundDeclarations.js index 97cc157f74d10..15c0bf5951986 100644 --- a/tests/baselines/reference/thisInPropertyBoundDeclarations.js +++ b/tests/baselines/reference/thisInPropertyBoundDeclarations.js @@ -74,13 +74,11 @@ var Bug = /** @class */ (function () { Bug.prototype.foo = function (name) { this.name = name; }; - (function () { - Bug.func = [ - function (that, name) { - that.foo(name); - } - ]; - }).call(Bug); + Bug.func = [ + function (that, name) { + that.foo(name); + } + ]; return Bug; }()); // Valid use of this in a property bound decl diff --git a/tests/baselines/reference/thisInStaticMethod1.js b/tests/baselines/reference/thisInStaticMethod1.js index 840e6e19f3b09..bbeb55c48fb1f 100644 --- a/tests/baselines/reference/thisInStaticMethod1.js +++ b/tests/baselines/reference/thisInStaticMethod1.js @@ -14,9 +14,7 @@ var foo = /** @class */ (function () { foo.bar = function () { return this.x; }; - (function () { - foo.x = 3; - }).call(foo); + foo.x = 3; return foo; }()); var x = foo.bar(); diff --git a/tests/baselines/reference/thisTypeAccessibility.js b/tests/baselines/reference/thisTypeAccessibility.js index f97713cb4d081..0f39317460ac0 100644 --- a/tests/baselines/reference/thisTypeAccessibility.js +++ b/tests/baselines/reference/thisTypeAccessibility.js @@ -69,11 +69,9 @@ var MyClass = /** @class */ (function () { this.pp = 123; this.ppp = 123; } - (function () { - MyClass.sp = 123; - MyClass.spp = 123; - MyClass.sppp = 123; - }).call(MyClass); + MyClass.sp = 123; + MyClass.spp = 123; + MyClass.sppp = 123; return MyClass; }()); var MyGenericClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisTypeErrors.js b/tests/baselines/reference/thisTypeErrors.js index 3a94b6b6ab49a..96039071cb655 100644 --- a/tests/baselines/reference/thisTypeErrors.js +++ b/tests/baselines/reference/thisTypeErrors.js @@ -75,9 +75,7 @@ var C2 = /** @class */ (function () { C2.foo = function (x) { return undefined; }; - (function () { - C2.y = undefined; - }).call(C2); + C2.y = undefined; return C2; }()); var N1; diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.rewrittenNamespaceFollowingClass.js b/tests/baselines/reference/transformApi/transformsCorrectly.rewrittenNamespaceFollowingClass.js index 8f7b1bbe474d5..3f2dd6cdb56fb 100644 --- a/tests/baselines/reference/transformApi/transformsCorrectly.rewrittenNamespaceFollowingClass.js +++ b/tests/baselines/reference/transformApi/transformsCorrectly.rewrittenNamespaceFollowingClass.js @@ -3,9 +3,7 @@ class C { this.foo = 10; } } -(function () { - C.bar = 20; -}).call(C); +C.bar = 20; (function (C) { C.x = 10; })(C || (C = {})); diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js index 74338d5906e7d..d5f27d7148c6e 100644 --- a/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js +++ b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js @@ -8,7 +8,5 @@ class Clazz { this.instanceProp = 2; } } -(function () { - /*comment*/ - Clazz.staticProp = 1; -}).call(Clazz); +/*comment*/ +Clazz.staticProp = 1; diff --git a/tests/baselines/reference/tsxDefaultImports.js b/tests/baselines/reference/tsxDefaultImports.js index d7da426f113f0..a0ca09cd8405a 100644 --- a/tests/baselines/reference/tsxDefaultImports.js +++ b/tests/baselines/reference/tsxDefaultImports.js @@ -23,9 +23,7 @@ var SomeEnum; var SomeClass = /** @class */ (function () { function SomeClass() { } - (function () { - SomeClass.E = SomeEnum; - }).call(SomeClass); + SomeClass.E = SomeEnum; return SomeClass; }()); exports["default"] = SomeClass; diff --git a/tests/baselines/reference/tsxLibraryManagedAttributes.js b/tests/baselines/reference/tsxLibraryManagedAttributes.js index 0e7541fa696e7..44f009b439239 100644 --- a/tests/baselines/reference/tsxLibraryManagedAttributes.js +++ b/tests/baselines/reference/tsxLibraryManagedAttributes.js @@ -147,16 +147,14 @@ var Component = /** @class */ (function (_super) { function Component() { return _super !== null && _super.apply(this, arguments) || this; } - (function () { - Component.propTypes = { - foo: PropTypes.number, - bar: PropTypes.node, - baz: PropTypes.string.isRequired - }; - Component.defaultProps = { - foo: 42 - }; - }).call(Component); + Component.propTypes = { + foo: PropTypes.number, + bar: PropTypes.node, + baz: PropTypes.string.isRequired + }; + Component.defaultProps = { + foo: 42 + }; return Component; }(ReactComponent)); var a = ; @@ -170,12 +168,10 @@ var JustPropTypes = /** @class */ (function (_super) { function JustPropTypes() { return _super !== null && _super.apply(this, arguments) || this; } - (function () { - JustPropTypes.propTypes = { - foo: PropTypes.number, - bar: PropTypes.node.isRequired - }; - }).call(JustPropTypes); + JustPropTypes.propTypes = { + foo: PropTypes.number, + bar: PropTypes.node.isRequired + }; return JustPropTypes; }(ReactComponent)); var g = ; @@ -187,11 +183,9 @@ var JustDefaultProps = /** @class */ (function (_super) { function JustDefaultProps() { return _super !== null && _super.apply(this, arguments) || this; } - (function () { - JustDefaultProps.defaultProps = { - foo: 42 - }; - }).call(JustDefaultProps); + JustDefaultProps.defaultProps = { + foo: 42 + }; return JustDefaultProps; }(ReactComponent)); var k = ; @@ -202,16 +196,14 @@ var BothWithSpecifiedGeneric = /** @class */ (function (_super) { function BothWithSpecifiedGeneric() { return _super !== null && _super.apply(this, arguments) || this; } - (function () { - BothWithSpecifiedGeneric.propTypes = { - foo: PropTypes.string, - bar: PropTypes.node, - baz: PropTypes.number.isRequired - }; - BothWithSpecifiedGeneric.defaultProps = { - foo: "yo" - }; - }).call(BothWithSpecifiedGeneric); + BothWithSpecifiedGeneric.propTypes = { + foo: PropTypes.string, + bar: PropTypes.node, + baz: PropTypes.number.isRequired + }; + BothWithSpecifiedGeneric.defaultProps = { + foo: "yo" + }; return BothWithSpecifiedGeneric; }(ReactComponent)); var n = ; @@ -225,12 +217,10 @@ var JustPropTypesWithSpecifiedGeneric = /** @class */ (function (_super) { function JustPropTypesWithSpecifiedGeneric() { return _super !== null && _super.apply(this, arguments) || this; } - (function () { - JustPropTypesWithSpecifiedGeneric.propTypes = { - foo: PropTypes.string, - bar: PropTypes.node.isRequired - }; - }).call(JustPropTypesWithSpecifiedGeneric); + JustPropTypesWithSpecifiedGeneric.propTypes = { + foo: PropTypes.string, + bar: PropTypes.node.isRequired + }; return JustPropTypesWithSpecifiedGeneric; }(ReactComponent)); var t = ; @@ -242,11 +232,9 @@ var JustDefaultPropsWithSpecifiedGeneric = /** @class */ (function (_super) { function JustDefaultPropsWithSpecifiedGeneric() { return _super !== null && _super.apply(this, arguments) || this; } - (function () { - JustDefaultPropsWithSpecifiedGeneric.defaultProps = { - foo: "no" - }; - }).call(JustDefaultPropsWithSpecifiedGeneric); + JustDefaultPropsWithSpecifiedGeneric.defaultProps = { + foo: "no" + }; return JustDefaultPropsWithSpecifiedGeneric; }(ReactComponent)); var x = ; diff --git a/tests/baselines/reference/typeOfPrototype.js b/tests/baselines/reference/typeOfPrototype.js index 47e917a7ca00d..01279cc563230 100644 --- a/tests/baselines/reference/typeOfPrototype.js +++ b/tests/baselines/reference/typeOfPrototype.js @@ -11,9 +11,7 @@ var Foo = /** @class */ (function () { function Foo() { this.bar = 3; } - (function () { - Foo.bar = ''; - }).call(Foo); + Foo.bar = ''; return Foo; }()); Foo.prototype.bar = undefined; // Should be OK diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.js b/tests/baselines/reference/typeOfThisInStaticMembers2.js index b72a223abe047..f851ff93be001 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.js +++ b/tests/baselines/reference/typeOfThisInStaticMembers2.js @@ -11,16 +11,12 @@ class C2 { var C = /** @class */ (function () { function C() { } - (function () { - C.foo = this; // error - }).call(C); + C.foo = C; // error return C; }()); var C2 = /** @class */ (function () { function C2() { } - (function () { - C2.foo = this; // error - }).call(C2); + C2.foo = C2; // error return C2; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js index a45a441f935ec..161ad42d447d6 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js @@ -14,14 +14,10 @@ class D extends C { //// [typeOfThisInStaticMembers3.js] class C { } -(function () { - C.a = 1; - C.b = this.a + 1; -}).call(C); +C.a = 1; +C.b = C.a + 1; class D extends C { } -(function () { - D.c = 2; - D.d = this.c + 1; - D.e = super.a + this.c + 1; -}).call(D); +D.c = 2; +D.d = D.c + 1; +D.e = super.a + D.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js index 6a6bdb0073ca8..2d74f4822d30a 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js @@ -30,10 +30,8 @@ var __extends = (this && this.__extends) || (function () { var C = /** @class */ (function () { function C() { } - (function () { - C.a = 1; - C.b = this.a + 1; - }).call(C); + C.a = 1; + C.b = C.a + 1; return C; }()); var D = /** @class */ (function (_super) { @@ -41,10 +39,8 @@ var D = /** @class */ (function (_super) { function D() { return _super !== null && _super.apply(this, arguments) || this; } - (function () { - D.c = 2; - D.d = this.c + 1; - D.e = _super.a + this.c + 1; - }).call(D); + D.c = 2; + D.d = D.c + 1; + D.e = _super.a + D.c + 1; return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js index a45a441f935ec..161ad42d447d6 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js @@ -14,14 +14,10 @@ class D extends C { //// [typeOfThisInStaticMembers3.js] class C { } -(function () { - C.a = 1; - C.b = this.a + 1; -}).call(C); +C.a = 1; +C.b = C.a + 1; class D extends C { } -(function () { - D.c = 2; - D.d = this.c + 1; - D.e = super.a + this.c + 1; -}).call(D); +D.c = 2; +D.d = D.c + 1; +D.e = super.a + D.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js index a45a441f935ec..161ad42d447d6 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js @@ -14,14 +14,10 @@ class D extends C { //// [typeOfThisInStaticMembers3.js] class C { } -(function () { - C.a = 1; - C.b = this.a + 1; -}).call(C); +C.a = 1; +C.b = C.a + 1; class D extends C { } -(function () { - D.c = 2; - D.d = this.c + 1; - D.e = super.a + this.c + 1; -}).call(D); +D.c = 2; +D.d = D.c + 1; +D.e = super.a + D.c + 1; diff --git a/tests/baselines/reference/typeQueryOnClass.js b/tests/baselines/reference/typeQueryOnClass.js index 1c2c5f7439b49..2e99e21a1f26f 100644 --- a/tests/baselines/reference/typeQueryOnClass.js +++ b/tests/baselines/reference/typeQueryOnClass.js @@ -99,10 +99,8 @@ var C = /** @class */ (function () { enumerable: false, configurable: true }); - (function () { - C.sa = 1; - C.sb = function () { return 1; }; - }).call(C); + C.sa = 1; + C.sb = function () { return 1; }; return C; }()); var c; diff --git a/tests/baselines/reference/typeofUsedBeforeBlockScoped.js b/tests/baselines/reference/typeofUsedBeforeBlockScoped.js index 3f5db529b5228..3963df601948a 100644 --- a/tests/baselines/reference/typeofUsedBeforeBlockScoped.js +++ b/tests/baselines/reference/typeofUsedBeforeBlockScoped.js @@ -12,9 +12,7 @@ let o = { n: 12 }; var C = /** @class */ (function () { function C() { } - (function () { - C.s = 2; - }).call(C); + C.s = 2; return C; }()); var o2; diff --git a/tests/baselines/reference/uniqueSymbols.js b/tests/baselines/reference/uniqueSymbols.js index 6f949512504a8..54f59e8e217b6 100644 --- a/tests/baselines/reference/uniqueSymbols.js +++ b/tests/baselines/reference/uniqueSymbols.js @@ -320,11 +320,9 @@ class C { this.readwriteCall = Symbol(); } } -(function () { - C.readonlyStaticCall = Symbol(); - C.readonlyStaticTypeAndCall = Symbol(); - C.readwriteStaticCall = Symbol(); -}).call(C); +C.readonlyStaticCall = Symbol(); +C.readonlyStaticTypeAndCall = Symbol(); +C.readwriteStaticCall = Symbol(); const constInitToCReadonlyStaticCall = C.readonlyStaticCall; const constInitToCReadonlyStaticType = C.readonlyStaticType; const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; @@ -387,14 +385,12 @@ class C0 { *method4() { yield s; } method5(p = s) { return p; } } -(function () { - C0.a = s; - C0.b = N.s; - C0.c = N["s"]; - C0.d = s; - C0.e = N.s; - C0.f = N["s"]; -}).call(C0); +C0.a = s; +C0.b = N.s; +C0.c = N["s"]; +C0.d = s; +C0.e = N.s; +C0.f = N["s"]; // non-widening positions // element access o[s]; diff --git a/tests/baselines/reference/uniqueSymbolsDeclarations.js b/tests/baselines/reference/uniqueSymbolsDeclarations.js index 9b92d83fcc8f4..15342a0bd97fc 100644 --- a/tests/baselines/reference/uniqueSymbolsDeclarations.js +++ b/tests/baselines/reference/uniqueSymbolsDeclarations.js @@ -288,11 +288,9 @@ class C { this.readwriteCall = Symbol(); } } -(function () { - C.readonlyStaticCall = Symbol(); - C.readonlyStaticTypeAndCall = Symbol(); - C.readwriteStaticCall = Symbol(); -}).call(C); +C.readonlyStaticCall = Symbol(); +C.readonlyStaticTypeAndCall = Symbol(); +C.readwriteStaticCall = Symbol(); const constInitToCReadonlyStaticCall = C.readonlyStaticCall; const constInitToCReadonlyStaticType = C.readonlyStaticType; const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; @@ -355,14 +353,12 @@ class C0 { *method4() { yield s; } method5(p = s) { return p; } } -(function () { - C0.a = s; - C0.b = N.s; - C0.c = N["s"]; - C0.d = s; - C0.e = N.s; - C0.f = N["s"]; -}).call(C0); +C0.a = s; +C0.b = N.s; +C0.c = N["s"]; +C0.d = s; +C0.e = N.s; +C0.f = N["s"]; // non-widening positions // element access o[s]; diff --git a/tests/baselines/reference/uniqueSymbolsDeclarationsInJs.js b/tests/baselines/reference/uniqueSymbolsDeclarationsInJs.js index b74810e726411..88d29c6a68430 100644 --- a/tests/baselines/reference/uniqueSymbolsDeclarationsInJs.js +++ b/tests/baselines/reference/uniqueSymbolsDeclarationsInJs.js @@ -36,18 +36,16 @@ class C { this.readwriteCall = Symbol(); } } -(function () { - /** - * @readonly - */ - C.readonlyStaticCall = Symbol(); - /** - * @type {unique symbol} - * @readonly - */ - C.readonlyStaticTypeAndCall = Symbol(); - C.readwriteStaticCall = Symbol(); -}).call(C); +/** + * @readonly + */ +C.readonlyStaticCall = Symbol(); +/** + * @type {unique symbol} + * @readonly + */ +C.readonlyStaticTypeAndCall = Symbol(); +C.readwriteStaticCall = Symbol(); //// [uniqueSymbolsDeclarationsInJs-out.d.ts] diff --git a/tests/baselines/reference/unqualifiedCallToClassStatic1.js b/tests/baselines/reference/unqualifiedCallToClassStatic1.js index 627349f64b3ad..2ca2dfe713104 100644 --- a/tests/baselines/reference/unqualifiedCallToClassStatic1.js +++ b/tests/baselines/reference/unqualifiedCallToClassStatic1.js @@ -10,11 +10,9 @@ class Vector { var Vector = /** @class */ (function () { function Vector() { } - (function () { - Vector.foo = function () { - // 'foo' cannot be called in an unqualified manner. - foo(); - }; - }).call(Vector); + Vector.foo = function () { + // 'foo' cannot be called in an unqualified manner. + foo(); + }; return Vector; }()); diff --git a/tests/baselines/reference/useBeforeDeclaration_jsx.js b/tests/baselines/reference/useBeforeDeclaration_jsx.js index f06600545b700..e95bf25464413 100644 --- a/tests/baselines/reference/useBeforeDeclaration_jsx.js +++ b/tests/baselines/reference/useBeforeDeclaration_jsx.js @@ -18,13 +18,11 @@ class C { //// [useBeforeDeclaration_jsx.jsx] class C { } -(function () { - C.a = ; - C.b = ; - C.c = ; - C.d = ; - C.e = {C.y}; - C.x = {}; - C.y = ''; - C.z = () => ; -}).call(C); +C.a = ; +C.b = ; +C.c = ; +C.d = ; +C.e = {C.y}; +C.x = {}; +C.y = ''; +C.z = () => ; diff --git a/tests/baselines/reference/useBeforeDeclaration_propertyAssignment.js b/tests/baselines/reference/useBeforeDeclaration_propertyAssignment.js index e22dad19afc51..4ee81065518e1 100644 --- a/tests/baselines/reference/useBeforeDeclaration_propertyAssignment.js +++ b/tests/baselines/reference/useBeforeDeclaration_propertyAssignment.js @@ -27,13 +27,11 @@ export class C { } class D { } -(function () { - D.A = class extends D.B { - [D.D]() { } // should be an error - }; - D.B = class { - }; - D.C = Object.assign({ [D.D]: 1 }, { get [D.D]() { return 0; } } // should be an error - ); - D.D = ''; -}).call(D); +D.A = class extends D.B { + [D.D]() { } // should be an error +}; +D.B = class { +}; +D.C = Object.assign({ [D.D]: 1 }, { get [D.D]() { return 0; } } // should be an error +); +D.D = ''; diff --git a/tests/baselines/reference/witness.js b/tests/baselines/reference/witness.js index 6f861d7d010bb..63ffc45411100 100644 --- a/tests/baselines/reference/witness.js +++ b/tests/baselines/reference/witness.js @@ -258,9 +258,7 @@ var c2inst; var C3 = /** @class */ (function () { function C3() { } - (function () { - C3.q = C3.q; - }).call(C3); + C3.q = C3.q; return C3; }()); var qq = C3.q; From 3a6f8daf79ad2c1850f4870394c71a1389f07791 Mon Sep 17 00:00:00 2001 From: kingwl Date: Sat, 6 Mar 2021 19:03:54 +0800 Subject: [PATCH 03/33] Revert un-related changes --- src/compiler/parser.ts | 2 +- .../awaitAndYieldInProperty.errors.txt | 26 ++++++++++++++++++- .../awaitInClassInAsyncFunction.errors.txt | 18 +++++++++++++ .../reference/generatorTypeCheck39.errors.txt | 5 +++- .../reference/generatorTypeCheck57.errors.txt | 11 ++++++++ .../reference/generatorTypeCheck58.errors.txt | 11 ++++++++ 6 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/awaitInClassInAsyncFunction.errors.txt create mode 100644 tests/baselines/reference/generatorTypeCheck57.errors.txt create mode 100644 tests/baselines/reference/generatorTypeCheck58.errors.txt diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e77bde3213d60..3c1c118b5b33a 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6440,7 +6440,7 @@ namespace ts { ): PropertyDeclaration { const exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(SyntaxKind.ExclamationToken) : undefined; const type = parseTypeAnnotation(); - const initializer = doOutsideOfContext(NodeFlags.DisallowInContext, parseInitializer); + const initializer = doOutsideOfContext(NodeFlags.YieldContext | NodeFlags.AwaitContext | NodeFlags.DisallowInContext, parseInitializer); parseSemicolon(); const node = factory.createPropertyDeclaration(decorators, modifiers, name, questionToken || exclamationToken, type, initializer); return withJSDoc(finishNode(node, pos), hasJSDoc); diff --git a/tests/baselines/reference/awaitAndYieldInProperty.errors.txt b/tests/baselines/reference/awaitAndYieldInProperty.errors.txt index 7e6c3058ff9a3..46a05266a4dc9 100644 --- a/tests/baselines/reference/awaitAndYieldInProperty.errors.txt +++ b/tests/baselines/reference/awaitAndYieldInProperty.errors.txt @@ -1,44 +1,68 @@ tests/cases/conformance/classes/awaitAndYieldInProperty.ts(3,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/awaitAndYieldInProperty.ts(3,21): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(4,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/awaitAndYieldInProperty.ts(4,28): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(6,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/awaitAndYieldInProperty.ts(6,21): error TS1163: A 'yield' expression is only allowed in a generator body. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(7,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/awaitAndYieldInProperty.ts(7,28): error TS1163: A 'yield' expression is only allowed in a generator body. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(11,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/awaitAndYieldInProperty.ts(11,21): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(12,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/awaitAndYieldInProperty.ts(12,28): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(14,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/awaitAndYieldInProperty.ts(14,21): error TS1163: A 'yield' expression is only allowed in a generator body. tests/cases/conformance/classes/awaitAndYieldInProperty.ts(15,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/awaitAndYieldInProperty.ts(15,28): error TS1163: A 'yield' expression is only allowed in a generator body. -==== tests/cases/conformance/classes/awaitAndYieldInProperty.ts (8 errors) ==== +==== tests/cases/conformance/classes/awaitAndYieldInProperty.ts (16 errors) ==== async function* test(x: Promise) { class C { [await x] = await x; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~~ +!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. static [await x] = await x; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~~ +!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. [yield 1] = yield 2; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. static [yield 3] = yield 4; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. } return class { [await x] = await x; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~~ +!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. static [await x] = await x; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~~ +!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. [yield 1] = yield 2; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. static [yield 3] = yield 4; ~~~~~~~~~ !!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. } } \ No newline at end of file diff --git a/tests/baselines/reference/awaitInClassInAsyncFunction.errors.txt b/tests/baselines/reference/awaitInClassInAsyncFunction.errors.txt new file mode 100644 index 0000000000000..53d4a48dd45af --- /dev/null +++ b/tests/baselines/reference/awaitInClassInAsyncFunction.errors.txt @@ -0,0 +1,18 @@ +tests/cases/compiler/awaitInClassInAsyncFunction.ts(9,15): error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. + + +==== tests/cases/compiler/awaitInClassInAsyncFunction.ts (1 errors) ==== + // https://github.com/microsoft/TypeScript/issues/34887 + + async function bar() { + return 2; + } + + async function foo() { + return new class { + baz = await bar(); + ~~~~~ +!!! error TS1308: 'await' expressions are only allowed within async functions and at the top levels of modules. + }; + } + \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck39.errors.txt b/tests/baselines/reference/generatorTypeCheck39.errors.txt index 0d28db89b19da..740c363436848 100644 --- a/tests/baselines/reference/generatorTypeCheck39.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck39.errors.txt @@ -1,7 +1,8 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts(6,11): error TS1219: Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option in your 'tsconfig' or 'jsconfig' to remove this warning. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts(7,13): error TS1163: A 'yield' expression is only allowed in a generator body. -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts (2 errors) ==== function decorator(x: any) { return y => { }; } @@ -11,5 +12,7 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck39.ts(6,11): erro ~ !!! error TS1219: Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option in your 'tsconfig' or 'jsconfig' to remove this warning. x = yield 0; + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. } } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck57.errors.txt b/tests/baselines/reference/generatorTypeCheck57.errors.txt new file mode 100644 index 0000000000000..aa39e534d62c8 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck57.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck57.ts(3,13): error TS1163: A 'yield' expression is only allowed in a generator body. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck57.ts (1 errors) ==== + function* g() { + class C { + x = yield 0; + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. + }; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck58.errors.txt b/tests/baselines/reference/generatorTypeCheck58.errors.txt new file mode 100644 index 0000000000000..7407c83b34bef --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck58.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck58.ts(3,20): error TS1163: A 'yield' expression is only allowed in a generator body. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck58.ts (1 errors) ==== + function* g() { + class C { + static x = yield 0; + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. + }; + } \ No newline at end of file From 77a43f7ff0bb7741da2cf0662dd5a86a9c553120 Mon Sep 17 00:00:00 2001 From: kingwl Date: Sun, 7 Mar 2021 00:00:24 +0800 Subject: [PATCH 04/33] Allow super in static context --- src/compiler/factory/nodeFactory.ts | 4 +- src/compiler/transformers/classFields.ts | 36 ++++++---- src/compiler/types.ts | 13 ++-- ...peOfThisInStaticMembers3(target=es2020).js | 2 +- .../typeOfThisInStaticMembers3(target=es6).js | 2 +- ...peOfThisInStaticMembers3(target=esnext).js | 2 +- ...InStaticMembers4(target=es2020).errors.txt | 26 +++++++ ...peOfThisInStaticMembers4(target=es2020).js | 48 +++++++++++++ ...hisInStaticMembers4(target=es2020).symbols | 34 +++++++++ ...fThisInStaticMembers4(target=es2020).types | 46 ++++++++++++ ...hisInStaticMembers4(target=es5).errors.txt | 26 +++++++ .../typeOfThisInStaticMembers4(target=es5).js | 71 +++++++++++++++++++ ...OfThisInStaticMembers4(target=es5).symbols | 34 +++++++++ ...peOfThisInStaticMembers4(target=es5).types | 46 ++++++++++++ ...hisInStaticMembers4(target=es6).errors.txt | 26 +++++++ .../typeOfThisInStaticMembers4(target=es6).js | 48 +++++++++++++ ...OfThisInStaticMembers4(target=es6).symbols | 34 +++++++++ ...peOfThisInStaticMembers4(target=es6).types | 46 ++++++++++++ ...InStaticMembers4(target=esnext).errors.txt | 17 +++++ ...peOfThisInStaticMembers4(target=esnext).js | 23 ++++++ ...hisInStaticMembers4(target=esnext).symbols | 34 +++++++++ ...fThisInStaticMembers4(target=esnext).types | 46 ++++++++++++ .../typeOfThisInStaticMembers3.ts | 1 + .../typeOfThisInStaticMembers4.ts | 12 ++++ 24 files changed, 652 insertions(+), 25 deletions(-) create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).types create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index ddb8c8cf59ea7..94aa754f69bc5 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -970,8 +970,10 @@ namespace ts { case SyntaxKind.UndefinedKeyword: // `undefined` is an Identifier in the expression case. transformFlags = TransformFlags.ContainsTypeScript; break; - case SyntaxKind.StaticKeyword: case SyntaxKind.SuperKeyword: + transformFlags = TransformFlags.ContainsLexicalSuper | TransformFlags.ContainsES2015; + break; + case SyntaxKind.StaticKeyword: transformFlags = TransformFlags.ContainsES2015; break; case SyntaxKind.ThisKeyword: diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 3b3a7e150acb9..f8e3231174ce3 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -122,11 +122,14 @@ namespace ts { } } - function visitorThisInStaticFieldContext(receiver: LeftHandSideExpression) { - return function staticFieldThisVisitor(node: Node): Node { - if (!(node.transformFlags & TransformFlags.ContainsLexicalThis)) return node; + function visitorThisOrSuperInStaticFieldContext(receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined) { + const shouldCareAboutSuper = baseClass && languageVersion >= ScriptTarget.ES2015; + return function staticFieldThisOrSuperVisitor(node: Node): Node { + if (!(node.transformFlags & (TransformFlags.ContainsLexicalThis | (shouldCareAboutSuper ? TransformFlags.ContainsLexicalSuper : TransformFlags.None)))) { + return node; + } - // This in static field cannot cross function or class boundary. + // `This` access in static field cannot cross function or class boundary. if (isClassLike(node) || isFunctionDeclaration(node) || isFunctionExpression(node)) { return node; } @@ -134,9 +137,12 @@ namespace ts { if (node.kind === SyntaxKind.ThisKeyword) { return nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver); } + else if (baseClass && shouldCareAboutSuper && node.kind === SyntaxKind.SuperKeyword) { + return nodeIsSynthesized(baseClass) ? baseClass : factory.cloneNode(baseClass); + } - return visitEachChild(node, staticFieldThisVisitor, context); - } + return visitEachChild(node, staticFieldThisOrSuperVisitor, context); + }; } /** @@ -507,7 +513,7 @@ namespace ts { // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); if (some(staticProperties)) { - addPropertyStatements(statements, staticProperties, factory.getInternalName(node)); + addPropertyStatements(statements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression); } return statements; @@ -551,7 +557,7 @@ namespace ts { } if (pendingStatements && some(staticProperties)) { - addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); + addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression); } return classExpression; } @@ -573,7 +579,7 @@ namespace ts { expressions.push(startOnNewLine(factory.createAssignment(temp, classExpression))); // Add any pending expressions leftover from elided or relocated computed property names addRange(expressions, map(pendingExpressions, startOnNewLine)); - addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp)); + addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp, extendsClauseElement?.expression)); expressions.push(startOnNewLine(temp)); return factory.inlineExpressions(expressions); @@ -727,9 +733,9 @@ namespace ts { * @param properties An array of property declarations to transform. * @param receiver The receiver on which each property should be assigned. */ - function addPropertyStatements(statements: Statement[], properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression) { + function addPropertyStatements(statements: Statement[], properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression, baseClass?: LeftHandSideExpression) { for (const property of properties) { - const expression = transformProperty(property, receiver); + const expression = transformProperty(property, receiver, baseClass); if (!expression) { continue; } @@ -747,10 +753,10 @@ namespace ts { * @param properties An array of property declarations to transform. * @param receiver The receiver on which each property should be assigned. */ - function generateInitializedPropertyExpressions(properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression) { + function generateInitializedPropertyExpressions(properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined) { const expressions: Expression[] = []; for (const property of properties) { - const expression = transformProperty(property, receiver); + const expression = transformProperty(property, receiver, baseClass); if (!expression) { continue; } @@ -770,7 +776,7 @@ namespace ts { * @param property The property declaration. * @param receiver The object receiving the property assignment. */ - function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression) { + function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined) { // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name) const emitAssignment = !context.getCompilerOptions().useDefineForClassFields; const propertyName = isComputedPropertyName(property.name) && !isSimpleInlineableExpression(property.name.expression) @@ -808,7 +814,7 @@ namespace ts { } const initializer = property.initializer || emitAssignment ? visitNode( - hasStaticModifier(property) ? visitNode(property.initializer, visitorThisInStaticFieldContext(receiver), isExpression) : property.initializer, + hasStaticModifier(property) ? visitNode(property.initializer, visitorThisOrSuperInStaticFieldContext(receiver, baseClass), isExpression) : property.initializer, visitor, isExpression ) ?? factory.createVoidZero() diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 091987c17c967..c548c5e5817ca 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -6467,6 +6467,7 @@ namespace ts { ContainsDynamicImport = 1 << 21, ContainsClassFields = 1 << 22, ContainsPossibleTopLevelAwait = 1 << 23, + ContainsLexicalSuper = 1 << 24, // Please leave this as 1 << 29. // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system. @@ -6494,12 +6495,12 @@ namespace ts { PropertyAccessExcludes = OuterExpressionExcludes, NodeExcludes = PropertyAccessExcludes, ArrowFunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - FunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - ConstructorExcludes = NodeExcludes | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - MethodOrAccessorExcludes = NodeExcludes | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread, - PropertyExcludes = NodeExcludes | ContainsLexicalThis, + FunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, + ConstructorExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, + MethodOrAccessorExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread, + PropertyExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper, ClassExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsComputedPropertyName, - ModuleExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsHoistedDeclarationOrCompletion | ContainsPossibleTopLevelAwait, + ModuleExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsHoistedDeclarationOrCompletion | ContainsPossibleTopLevelAwait, TypeExcludes = ~ContainsTypeScript, ObjectLiteralExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsComputedPropertyName | ContainsObjectRestOrSpread, ArrayLiteralOrCallOrNewExcludes = NodeExcludes | ContainsRestOrSpread, @@ -6510,7 +6511,7 @@ namespace ts { // Propagating flags // - Bitmasks for flags that should propagate from a child - PropertyNamePropagatingFlags = ContainsLexicalThis, + PropertyNamePropagatingFlags = ContainsLexicalThis | ContainsLexicalSuper, // Masks // - Additional bitmasks diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js index 161ad42d447d6..b789f68f55f4b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js @@ -20,4 +20,4 @@ class D extends C { } D.c = 2; D.d = D.c + 1; -D.e = super.a + D.c + 1; +D.e = C.a + D.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js index 161ad42d447d6..b789f68f55f4b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js @@ -20,4 +20,4 @@ class D extends C { } D.c = 2; D.d = D.c + 1; -D.e = super.a + D.c + 1; +D.e = C.a + D.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js index 161ad42d447d6..b789f68f55f4b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js @@ -20,4 +20,4 @@ class D extends C { } D.c = 2; D.d = D.c + 1; -D.e = super.a + D.c + 1; +D.e = C.a + D.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).errors.txt new file mode 100644 index 0000000000000..0afb551e2138b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).errors.txt @@ -0,0 +1,26 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (4 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~~ +!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).js new file mode 100644 index 0000000000000..4fc7476c94eac --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).js @@ -0,0 +1,48 @@ +//// [typeOfThisInStaticMembers4.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers4.js] +class C { +} +Object.defineProperty(C, "a", { + enumerable: true, + configurable: true, + writable: true, + value: 1 +}); +Object.defineProperty(C, "b", { + enumerable: true, + configurable: true, + writable: true, + value: C.a + 1 +}); +class D extends C { +} +Object.defineProperty(D, "c", { + enumerable: true, + configurable: true, + writable: true, + value: 2 +}); +Object.defineProperty(D, "d", { + enumerable: true, + configurable: true, + writable: true, + value: D.c + 1 +}); +Object.defineProperty(D, "e", { + enumerable: true, + configurable: true, + writable: true, + value: C.a + D.c + 1 +}); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols new file mode 100644 index 0000000000000..4e8b94b52cd9b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers4.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers4.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types new file mode 100644 index 0000000000000..f5495ab5e5398 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : any +>super.a + this.c + 1 : any +>super.a + this.c : any +>super.a : any +>super : any +>a : any +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt new file mode 100644 index 0000000000000..0afb551e2138b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt @@ -0,0 +1,26 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (4 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~~ +!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js new file mode 100644 index 0000000000000..138f2f2c41338 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js @@ -0,0 +1,71 @@ +//// [typeOfThisInStaticMembers4.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers4.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var C = /** @class */ (function () { + function C() { + } + Object.defineProperty(C, "a", { + enumerable: true, + configurable: true, + writable: true, + value: 1 + }); + Object.defineProperty(C, "b", { + enumerable: true, + configurable: true, + writable: true, + value: C.a + 1 + }); + return C; +}()); +var D = /** @class */ (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(D, "c", { + enumerable: true, + configurable: true, + writable: true, + value: 2 + }); + Object.defineProperty(D, "d", { + enumerable: true, + configurable: true, + writable: true, + value: D.c + 1 + }); + Object.defineProperty(D, "e", { + enumerable: true, + configurable: true, + writable: true, + value: _super.a + D.c + 1 + }); + return D; +}(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).symbols new file mode 100644 index 0000000000000..4e8b94b52cd9b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers4.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers4.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).types new file mode 100644 index 0000000000000..f5495ab5e5398 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : any +>super.a + this.c + 1 : any +>super.a + this.c : any +>super.a : any +>super : any +>a : any +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt new file mode 100644 index 0000000000000..0afb551e2138b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt @@ -0,0 +1,26 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (4 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~~ +!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js new file mode 100644 index 0000000000000..4fc7476c94eac --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js @@ -0,0 +1,48 @@ +//// [typeOfThisInStaticMembers4.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers4.js] +class C { +} +Object.defineProperty(C, "a", { + enumerable: true, + configurable: true, + writable: true, + value: 1 +}); +Object.defineProperty(C, "b", { + enumerable: true, + configurable: true, + writable: true, + value: C.a + 1 +}); +class D extends C { +} +Object.defineProperty(D, "c", { + enumerable: true, + configurable: true, + writable: true, + value: 2 +}); +Object.defineProperty(D, "d", { + enumerable: true, + configurable: true, + writable: true, + value: D.c + 1 +}); +Object.defineProperty(D, "e", { + enumerable: true, + configurable: true, + writable: true, + value: C.a + D.c + 1 +}); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).symbols new file mode 100644 index 0000000000000..4e8b94b52cd9b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers4.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers4.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).types new file mode 100644 index 0000000000000..f5495ab5e5398 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : any +>super.a + this.c + 1 : any +>super.a + this.c : any +>super.a : any +>super : any +>a : any +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).errors.txt new file mode 100644 index 0000000000000..15b3154124300 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (1 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + } + + class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + ~~~~~ +!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).js new file mode 100644 index 0000000000000..1d64a21910e21 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).js @@ -0,0 +1,23 @@ +//// [typeOfThisInStaticMembers4.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers4.js] +class C { + static a = 1; + static b = this.a + 1; +} +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).symbols new file mode 100644 index 0000000000000..4e8b94b52cd9b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers4.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers4.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).types new file mode 100644 index 0000000000000..f5495ab5e5398 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : any +>super.a + this.c + 1 : any +>super.a + this.c : any +>super.a : any +>super : any +>a : any +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts index 8e49192c6dc85..53202e9bf802f 100644 --- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts @@ -1,4 +1,5 @@ // @target: esnext, es2020, es6, es5 +// @useDefineForClassFields: false class C { static a = 1; static b = this.a + 1; diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts new file mode 100644 index 0000000000000..c0ed5ec3907e7 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts @@ -0,0 +1,12 @@ +// @target: esnext, es2020, es6, es5 +// @useDefineForClassFields: true +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} From bbf99eafa2fee7c3ce9c8335aa5c59eb6080517c Mon Sep 17 00:00:00 2001 From: kingwl Date: Sun, 7 Mar 2021 00:11:25 +0800 Subject: [PATCH 05/33] Allow this and super in static property declaration --- src/compiler/checker.ts | 12 ++++-------- .../typeOfThisInStaticMembers2.errors.txt | 16 ---------------- ...fThisInStaticMembers3(target=es2020).symbols | 3 +++ ...eOfThisInStaticMembers3(target=es2020).types | 12 ++++++------ ...fThisInStaticMembers3(target=es5).errors.txt | 17 ++++------------- ...peOfThisInStaticMembers3(target=es5).symbols | 3 +++ ...typeOfThisInStaticMembers3(target=es5).types | 12 ++++++------ ...peOfThisInStaticMembers3(target=es6).symbols | 3 +++ ...typeOfThisInStaticMembers3(target=es6).types | 12 ++++++------ ...fThisInStaticMembers3(target=esnext).symbols | 3 +++ ...eOfThisInStaticMembers3(target=esnext).types | 12 ++++++------ ...fThisInStaticMembers4(target=es2020).symbols | 3 +++ ...eOfThisInStaticMembers4(target=es2020).types | 12 ++++++------ ...fThisInStaticMembers4(target=es5).errors.txt | 17 ++++------------- ...peOfThisInStaticMembers4(target=es5).symbols | 3 +++ ...typeOfThisInStaticMembers4(target=es5).types | 12 ++++++------ ...peOfThisInStaticMembers4(target=es6).symbols | 3 +++ ...typeOfThisInStaticMembers4(target=es6).types | 12 ++++++------ ...fThisInStaticMembers4(target=esnext).symbols | 3 +++ ...eOfThisInStaticMembers4(target=esnext).types | 12 ++++++------ 20 files changed, 84 insertions(+), 98 deletions(-) delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3633ce34794f0..1d4c546466e73 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -23940,13 +23940,6 @@ namespace ts { // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks } break; - case SyntaxKind.PropertyDeclaration: - case SyntaxKind.PropertySignature: - if (hasSyntacticModifier(container, ModifierFlags.Static) && !(compilerOptions.target === ScriptTarget.ESNext && compilerOptions.useDefineForClassFields)) { - error(node, Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); - // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks - } - break; case SyntaxKind.ComputedPropertyName: error(node, Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; @@ -24289,6 +24282,8 @@ namespace ts { // 'super' property access is allowed // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance // - In a static member function or static member accessor + // (March 2021) + // - In a static property declaration // topmost container must be something that is directly nested in the class declaration\object literal expression if (isClassLike(container.parent) || container.parent.kind === SyntaxKind.ObjectLiteralExpression) { @@ -24296,7 +24291,8 @@ namespace ts { return container.kind === SyntaxKind.MethodDeclaration || container.kind === SyntaxKind.MethodSignature || container.kind === SyntaxKind.GetAccessor || - container.kind === SyntaxKind.SetAccessor; + container.kind === SyntaxKind.SetAccessor || + container.kind === SyntaxKind.PropertyDeclaration; } else { return container.kind === SyntaxKind.MethodDeclaration || diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt deleted file mode 100644 index 9fd14cc57193a..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt +++ /dev/null @@ -1,16 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts(2,18): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts(6,18): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts (2 errors) ==== - class C { - static foo = this; // error - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class C2 { - static foo = this; // error - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols index 3645ae6ff14f0..bfd5a942122f0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols @@ -27,6 +27,9 @@ class D extends C { static e = super.a + this.c + 1; >e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types index 4127fd13f16b9..9af87449fff5c 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types @@ -32,12 +32,12 @@ class D extends C { >1 : 1 static e = super.a + this.c + 1; ->e : any ->super.a + this.c + 1 : any ->super.a + this.c : any ->super.a : any ->super : any ->a : any +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number >this.c : number >this : typeof D >c : number diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt index 9171bc7c3c9fa..da38e0eb95920 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt @@ -1,26 +1,17 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (1 errors) ==== class C { static a = 1; static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class D extends C { static c = 2; static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).symbols index 3645ae6ff14f0..bfd5a942122f0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).symbols @@ -27,6 +27,9 @@ class D extends C { static e = super.a + this.c + 1; >e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).types index 4127fd13f16b9..9af87449fff5c 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).types @@ -32,12 +32,12 @@ class D extends C { >1 : 1 static e = super.a + this.c + 1; ->e : any ->super.a + this.c + 1 : any ->super.a + this.c : any ->super.a : any ->super : any ->a : any +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number >this.c : number >this : typeof D >c : number diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).symbols index 3645ae6ff14f0..bfd5a942122f0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).symbols @@ -27,6 +27,9 @@ class D extends C { static e = super.a + this.c + 1; >e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).types index 4127fd13f16b9..9af87449fff5c 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).types @@ -32,12 +32,12 @@ class D extends C { >1 : 1 static e = super.a + this.c + 1; ->e : any ->super.a + this.c + 1 : any ->super.a + this.c : any ->super.a : any ->super : any ->a : any +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number >this.c : number >this : typeof D >c : number diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).symbols index 3645ae6ff14f0..bfd5a942122f0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).symbols @@ -27,6 +27,9 @@ class D extends C { static e = super.a + this.c + 1; >e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).types index 4127fd13f16b9..9af87449fff5c 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).types @@ -32,12 +32,12 @@ class D extends C { >1 : 1 static e = super.a + this.c + 1; ->e : any ->super.a + this.c + 1 : any ->super.a + this.c : any ->super.a : any ->super : any ->a : any +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number >this.c : number >this : typeof D >c : number diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols index 4e8b94b52cd9b..90e4f31f37107 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols @@ -27,6 +27,9 @@ class D extends C { static e = super.a + this.c + 1; >e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types index f5495ab5e5398..547768640b1e9 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types @@ -32,12 +32,12 @@ class D extends C { >1 : 1 static e = super.a + this.c + 1; ->e : any ->super.a + this.c + 1 : any ->super.a + this.c : any ->super.a : any ->super : any ->a : any +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number >this.c : number >this : typeof D >c : number diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt index 0afb551e2138b..2502ce9dd53be 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt @@ -1,26 +1,17 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (1 errors) ==== class C { static a = 1; static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class D extends C { static c = 2; static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).symbols index 4e8b94b52cd9b..90e4f31f37107 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).symbols @@ -27,6 +27,9 @@ class D extends C { static e = super.a + this.c + 1; >e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).types index f5495ab5e5398..547768640b1e9 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).types @@ -32,12 +32,12 @@ class D extends C { >1 : 1 static e = super.a + this.c + 1; ->e : any ->super.a + this.c + 1 : any ->super.a + this.c : any ->super.a : any ->super : any ->a : any +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number >this.c : number >this : typeof D >c : number diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).symbols index 4e8b94b52cd9b..90e4f31f37107 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).symbols @@ -27,6 +27,9 @@ class D extends C { static e = super.a + this.c + 1; >e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).types index f5495ab5e5398..547768640b1e9 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).types @@ -32,12 +32,12 @@ class D extends C { >1 : 1 static e = super.a + this.c + 1; ->e : any ->super.a + this.c + 1 : any ->super.a + this.c : any ->super.a : any ->super : any ->a : any +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number >this.c : number >this : typeof D >c : number diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).symbols index 4e8b94b52cd9b..90e4f31f37107 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).symbols @@ -27,6 +27,9 @@ class D extends C { static e = super.a + this.c + 1; >e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).types index f5495ab5e5398..547768640b1e9 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).types @@ -32,12 +32,12 @@ class D extends C { >1 : 1 static e = super.a + this.c + 1; ->e : any ->super.a + this.c + 1 : any ->super.a + this.c : any ->super.a : any ->super : any ->a : any +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number >this.c : number >this : typeof D >c : number From 9c732eea3174c743245e375ca0274fbad79668cd Mon Sep 17 00:00:00 2001 From: kingwl Date: Sun, 7 Mar 2021 00:50:14 +0800 Subject: [PATCH 06/33] Add more tests --- src/compiler/checker.ts | 2 + ...InStaticMembers3(target=es2020).errors.txt | 26 ------ ...hisInStaticMembers3(target=es2020).symbols | 37 --------- ...hisInStaticMembers3(target=es6).errors.txt | 26 ------ ...InStaticMembers3(target=esnext).errors.txt | 26 ------ ...InStaticMembers4(target=es2020).errors.txt | 26 ------ ...peOfThisInStaticMembers4(target=es2020).js | 48 ----------- ...hisInStaticMembers4(target=es2020).symbols | 37 --------- ...hisInStaticMembers4(target=es6).errors.txt | 26 ------ ...InStaticMembers4(target=esnext).errors.txt | 17 ---- .../typeOfThisInStaticMembers5(target=es5).js | 18 ++++ ...OfThisInStaticMembers5(target=es5).symbols | 14 ++++ ...peOfThisInStaticMembers5(target=es5).types | 17 ++++ .../typeOfThisInStaticMembers5(target=es6).js | 17 ++++ ...OfThisInStaticMembers5(target=es6).symbols | 14 ++++ ...peOfThisInStaticMembers5(target=es6).types | 17 ++++ ...peOfThisInStaticMembers5(target=esnext).js | 17 ++++ ...hisInStaticMembers5(target=esnext).symbols | 14 ++++ ...fThisInStaticMembers5(target=esnext).types | 17 ++++ .../typeOfThisInStaticMembers6.errors.txt | 14 ++++ .../reference/typeOfThisInStaticMembers6.js | 40 +++++++++ .../typeOfThisInStaticMembers6.symbols | 16 ++++ .../typeOfThisInStaticMembers6.types | 19 +++++ ...hisInStaticMembers7(target=es5).errors.txt | 17 ++++ .../typeOfThisInStaticMembers7(target=es5).js | 46 +++++++++++ ...OfThisInStaticMembers7(target=es5).symbols | 37 +++++++++ ...eOfThisInStaticMembers7(target=es5).types} | 14 +++- ...typeOfThisInStaticMembers7(target=es6).js} | 8 +- ...OfThisInStaticMembers7(target=es6).symbols | 37 +++++++++ ...eOfThisInStaticMembers7(target=es6).types} | 14 +++- ...peOfThisInStaticMembers7(target=esnext).js | 23 ++++++ ...hisInStaticMembers7(target=esnext).symbols | 37 +++++++++ ...fThisInStaticMembers7(target=esnext).types | 52 ++++++++++++ ...hisInStaticMembers8(target=es5).errors.txt | 30 +++++++ .../typeOfThisInStaticMembers8(target=es5).js | 49 +++++++++++ ...OfThisInStaticMembers8(target=es5).symbols | 46 +++++++++++ ...peOfThisInStaticMembers8(target=es5).types | 77 +++++++++++++++++ ...hisInStaticMembers8(target=es6).errors.txt | 30 +++++++ .../typeOfThisInStaticMembers8(target=es6).js | 44 ++++++++++ ...OfThisInStaticMembers8(target=es6).symbols | 46 +++++++++++ ...peOfThisInStaticMembers8(target=es6).types | 77 +++++++++++++++++ ...InStaticMembers8(target=esnext).errors.txt | 30 +++++++ ...peOfThisInStaticMembers8(target=esnext).js | 44 ++++++++++ ...hisInStaticMembers8(target=esnext).symbols | 46 +++++++++++ ...fThisInStaticMembers8(target=esnext).types | 77 +++++++++++++++++ ...hisInStaticMembers9(target=es5).errors.txt | 42 ++++++++++ .../typeOfThisInStaticMembers9(target=es5).js | 74 +++++++++++++++++ ...OfThisInStaticMembers9(target=es5).symbols | 48 +++++++++++ ...peOfThisInStaticMembers9(target=es5).types | 82 +++++++++++++++++++ ...hisInStaticMembers9(target=es6).errors.txt | 39 +++++++++ .../typeOfThisInStaticMembers9(target=es6).js | 49 +++++++++++ ...OfThisInStaticMembers9(target=es6).symbols | 48 +++++++++++ ...peOfThisInStaticMembers9(target=es6).types | 82 +++++++++++++++++++ ...InStaticMembers9(target=esnext).errors.txt | 39 +++++++++ ...peOfThisInStaticMembers9(target=esnext).js | 49 +++++++++++ ...hisInStaticMembers9(target=esnext).symbols | 48 +++++++++++ ...fThisInStaticMembers9(target=esnext).types | 82 +++++++++++++++++++ .../typeOfThisInStaticMembers3.ts | 2 +- .../typeOfThisInStaticMembers4.ts | 2 +- .../typeOfThisInStaticMembers5.ts | 9 ++ .../typeOfThisInStaticMembers6.ts | 7 ++ .../typeOfThisInStaticMembers7.ts | 12 +++ .../typeOfThisInStaticMembers8.ts | 19 +++++ .../typeOfThisInStaticMembers9.ts | 22 +++++ 64 files changed, 1858 insertions(+), 283 deletions(-) delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).js delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers6.errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers6.js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers6.symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers6.types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).symbols rename tests/baselines/reference/{typeOfThisInStaticMembers4(target=es2020).types => typeOfThisInStaticMembers7(target=es5).types} (62%) rename tests/baselines/reference/{typeOfThisInStaticMembers3(target=es2020).js => typeOfThisInStaticMembers7(target=es6).js} (55%) create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).symbols rename tests/baselines/reference/{typeOfThisInStaticMembers3(target=es2020).types => typeOfThisInStaticMembers7(target=es6).types} (62%) create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).types create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 1d4c546466e73..3b5cd58c8295e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26431,6 +26431,8 @@ namespace ts { // - In a static member function or static member accessor // where this references the constructor function object of a derived class, // a super property access is permitted and must specify a public static member function of the base class. + // (March 2021): + // - All static class member can be access via super. if (languageVersion < ScriptTarget.ES2015) { if (symbolHasNonMethodDeclaration(prop)) { error(errorNode, Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).errors.txt deleted file mode 100644 index 9171bc7c3c9fa..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).errors.txt +++ /dev/null @@ -1,26 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (4 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols deleted file mode 100644 index bfd5a942122f0..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).symbols +++ /dev/null @@ -1,37 +0,0 @@ -=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === -class C { ->C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) - - static a = 1; ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) - - static b = this.a + 1; ->b : Symbol(C.b, Decl(typeOfThisInStaticMembers3.ts, 1, 17)) ->this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) ->this : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) -} - -class D extends C { ->D : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) ->C : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) - - static c = 2; ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) - - static d = this.c + 1; ->d : Symbol(D.d, Decl(typeOfThisInStaticMembers3.ts, 6, 17)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) - - static e = super.a + this.c + 1; ->e : Symbol(D.e, Decl(typeOfThisInStaticMembers3.ts, 7, 26)) ->super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) ->super : Symbol(C, Decl(typeOfThisInStaticMembers3.ts, 0, 0)) ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers3.ts, 0, 9)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers3.ts, 3, 1)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers3.ts, 5, 19)) -} - diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt deleted file mode 100644 index 9171bc7c3c9fa..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt +++ /dev/null @@ -1,26 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (4 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt deleted file mode 100644 index 9171bc7c3c9fa..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt +++ /dev/null @@ -1,26 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (4 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).errors.txt deleted file mode 100644 index 0afb551e2138b..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).errors.txt +++ /dev/null @@ -1,26 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (4 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).js deleted file mode 100644 index 4fc7476c94eac..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).js +++ /dev/null @@ -1,48 +0,0 @@ -//// [typeOfThisInStaticMembers4.ts] -class C { - static a = 1; - static b = this.a + 1; -} - -class D extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; -} - - -//// [typeOfThisInStaticMembers4.js] -class C { -} -Object.defineProperty(C, "a", { - enumerable: true, - configurable: true, - writable: true, - value: 1 -}); -Object.defineProperty(C, "b", { - enumerable: true, - configurable: true, - writable: true, - value: C.a + 1 -}); -class D extends C { -} -Object.defineProperty(D, "c", { - enumerable: true, - configurable: true, - writable: true, - value: 2 -}); -Object.defineProperty(D, "d", { - enumerable: true, - configurable: true, - writable: true, - value: D.c + 1 -}); -Object.defineProperty(D, "e", { - enumerable: true, - configurable: true, - writable: true, - value: C.a + D.c + 1 -}); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols deleted file mode 100644 index 90e4f31f37107..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).symbols +++ /dev/null @@ -1,37 +0,0 @@ -=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === -class C { ->C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) - - static a = 1; ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) - - static b = this.a + 1; ->b : Symbol(C.b, Decl(typeOfThisInStaticMembers4.ts, 1, 17)) ->this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) ->this : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) -} - -class D extends C { ->D : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) ->C : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) - - static c = 2; ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) - - static d = this.c + 1; ->d : Symbol(D.d, Decl(typeOfThisInStaticMembers4.ts, 6, 17)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) - - static e = super.a + this.c + 1; ->e : Symbol(D.e, Decl(typeOfThisInStaticMembers4.ts, 7, 26)) ->super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) ->super : Symbol(C, Decl(typeOfThisInStaticMembers4.ts, 0, 0)) ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers4.ts, 0, 9)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers4.ts, 3, 1)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers4.ts, 5, 19)) -} - diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt deleted file mode 100644 index 0afb551e2138b..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt +++ /dev/null @@ -1,26 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (4 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).errors.txt deleted file mode 100644 index 15b3154124300..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=esnext).errors.txt +++ /dev/null @@ -1,17 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,16): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (1 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - } - - class D extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js new file mode 100644 index 0000000000000..fdd6879b6fd26 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js @@ -0,0 +1,18 @@ +//// [typeOfThisInStaticMembers5.ts] +class C { + static create = () => new this("yep") + + constructor (private foo: string) { + + } +} + + +//// [typeOfThisInStaticMembers5.js] +var C = /** @class */ (function () { + function C(foo) { + this.foo = foo; + } + C.create = function () { return new C("yep"); }; + return C; +}()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).symbols new file mode 100644 index 0000000000000..cb65daa136c32 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).symbols @@ -0,0 +1,14 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers5.ts, 0, 0)) + + static create = () => new this("yep") +>create : Symbol(C.create, Decl(typeOfThisInStaticMembers5.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers5.ts, 0, 0)) + + constructor (private foo: string) { +>foo : Symbol(C.foo, Decl(typeOfThisInStaticMembers5.ts, 3, 17)) + + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).types new file mode 100644 index 0000000000000..63650b490ca90 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).types @@ -0,0 +1,17 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts === +class C { +>C : C + + static create = () => new this("yep") +>create : () => C +>() => new this("yep") : () => C +>new this("yep") : C +>this : typeof C +>"yep" : "yep" + + constructor (private foo: string) { +>foo : string + + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js new file mode 100644 index 0000000000000..8f14d05a7b76b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js @@ -0,0 +1,17 @@ +//// [typeOfThisInStaticMembers5.ts] +class C { + static create = () => new this("yep") + + constructor (private foo: string) { + + } +} + + +//// [typeOfThisInStaticMembers5.js] +class C { + constructor(foo) { + this.foo = foo; + } +} +C.create = () => new C("yep"); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).symbols new file mode 100644 index 0000000000000..cb65daa136c32 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).symbols @@ -0,0 +1,14 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers5.ts, 0, 0)) + + static create = () => new this("yep") +>create : Symbol(C.create, Decl(typeOfThisInStaticMembers5.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers5.ts, 0, 0)) + + constructor (private foo: string) { +>foo : Symbol(C.foo, Decl(typeOfThisInStaticMembers5.ts, 3, 17)) + + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).types new file mode 100644 index 0000000000000..63650b490ca90 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).types @@ -0,0 +1,17 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts === +class C { +>C : C + + static create = () => new this("yep") +>create : () => C +>() => new this("yep") : () => C +>new this("yep") : C +>this : typeof C +>"yep" : "yep" + + constructor (private foo: string) { +>foo : string + + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).js new file mode 100644 index 0000000000000..8f14d05a7b76b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).js @@ -0,0 +1,17 @@ +//// [typeOfThisInStaticMembers5.ts] +class C { + static create = () => new this("yep") + + constructor (private foo: string) { + + } +} + + +//// [typeOfThisInStaticMembers5.js] +class C { + constructor(foo) { + this.foo = foo; + } +} +C.create = () => new C("yep"); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).symbols new file mode 100644 index 0000000000000..cb65daa136c32 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).symbols @@ -0,0 +1,14 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers5.ts, 0, 0)) + + static create = () => new this("yep") +>create : Symbol(C.create, Decl(typeOfThisInStaticMembers5.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers5.ts, 0, 0)) + + constructor (private foo: string) { +>foo : Symbol(C.foo, Decl(typeOfThisInStaticMembers5.ts, 3, 17)) + + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).types new file mode 100644 index 0000000000000..63650b490ca90 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).types @@ -0,0 +1,17 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts === +class C { +>C : C + + static create = () => new this("yep") +>create : () => C +>() => new this("yep") : () => C +>new this("yep") : C +>this : typeof C +>"yep" : "yep" + + constructor (private foo: string) { +>foo : string + + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers6.errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers6.errors.txt new file mode 100644 index 0000000000000..b97b0b47d0ac5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers6.errors.txt @@ -0,0 +1,14 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts(6,16): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts (1 errors) ==== + class C { + static f = 1 + } + + class D extends C { + static c = super(); + ~~~~~ +!!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers6.js b/tests/baselines/reference/typeOfThisInStaticMembers6.js new file mode 100644 index 0000000000000..17d63989991d1 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers6.js @@ -0,0 +1,40 @@ +//// [typeOfThisInStaticMembers6.ts] +class C { + static f = 1 +} + +class D extends C { + static c = super(); +} + + +//// [typeOfThisInStaticMembers6.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var C = /** @class */ (function () { + function C() { + } + C.f = 1; + return C; +}()); +var D = /** @class */ (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + D.c = _this = _super.call(this) || this; + return D; +}(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers6.symbols b/tests/baselines/reference/typeOfThisInStaticMembers6.symbols new file mode 100644 index 0000000000000..8a3ac7e8b0743 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers6.symbols @@ -0,0 +1,16 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers6.ts, 0, 0)) + + static f = 1 +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers6.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers6.ts, 2, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers6.ts, 0, 0)) + + static c = super(); +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers6.ts, 4, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers6.types b/tests/baselines/reference/typeOfThisInStaticMembers6.types new file mode 100644 index 0000000000000..bee48163310b2 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers6.types @@ -0,0 +1,19 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts === +class C { +>C : C + + static f = 1 +>f : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = super(); +>c : void +>super() : void +>super : any +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt new file mode 100644 index 0000000000000..54de1238f9098 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(9,27): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts (1 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + } + + class D extends C { + static c = 2; + static d = this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js new file mode 100644 index 0000000000000..cef83b33e9c85 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js @@ -0,0 +1,46 @@ +//// [typeOfThisInStaticMembers7.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; +} + + +//// [typeOfThisInStaticMembers7.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var C = /** @class */ (function () { + function C() { + } + C.a = 1; + C.b = C.a + 1; + return C; +}()); +var D = /** @class */ (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + D.c = 2; + D.d = D.c + 1; + D.e = 1 + (_super.a) + (D.c + 1) + 1; + return D; +}(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).symbols new file mode 100644 index 0000000000000..dfc319293d7ac --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).symbols @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers7.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers7.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) + + static e = 1 + (super.a) + (this.c + 1) + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers7.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).types similarity index 62% rename from tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types rename to tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).types index 547768640b1e9..23f7b690e1d51 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es2020).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts === +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts === class C { >C : C @@ -31,16 +31,22 @@ class D extends C { >c : number >1 : 1 - static e = super.a + this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; >e : number ->super.a + this.c + 1 : number ->super.a + this.c : number +>1 + (super.a) + (this.c + 1) + 1 : number +>1 + (super.a) + (this.c + 1) : number +>1 + (super.a) : number +>1 : 1 +>(super.a) : number >super.a : number >super : typeof C >a : number +>(this.c + 1) : number +>this.c + 1 : number >this.c : number >this : typeof D >c : number >1 : 1 +>1 : 1 } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js similarity index 55% rename from tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js rename to tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js index b789f68f55f4b..59581b2082621 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js @@ -1,4 +1,4 @@ -//// [typeOfThisInStaticMembers3.ts] +//// [typeOfThisInStaticMembers7.ts] class C { static a = 1; static b = this.a + 1; @@ -7,11 +7,11 @@ class C { class D extends C { static c = 2; static d = this.c + 1; - static e = super.a + this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; } -//// [typeOfThisInStaticMembers3.js] +//// [typeOfThisInStaticMembers7.js] class C { } C.a = 1; @@ -20,4 +20,4 @@ class D extends C { } D.c = 2; D.d = D.c + 1; -D.e = C.a + D.c + 1; +D.e = 1 + (C.a) + (D.c + 1) + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).symbols new file mode 100644 index 0000000000000..dfc319293d7ac --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).symbols @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers7.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers7.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) + + static e = 1 + (super.a) + (this.c + 1) + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers7.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).types similarity index 62% rename from tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types rename to tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).types index 9af87449fff5c..23f7b690e1d51 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es2020).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts === +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts === class C { >C : C @@ -31,16 +31,22 @@ class D extends C { >c : number >1 : 1 - static e = super.a + this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; >e : number ->super.a + this.c + 1 : number ->super.a + this.c : number +>1 + (super.a) + (this.c + 1) + 1 : number +>1 + (super.a) + (this.c + 1) : number +>1 + (super.a) : number +>1 : 1 +>(super.a) : number >super.a : number >super : typeof C >a : number +>(this.c + 1) : number +>this.c + 1 : number >this.c : number >this : typeof D >c : number >1 : 1 +>1 : 1 } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).js new file mode 100644 index 0000000000000..59581b2082621 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).js @@ -0,0 +1,23 @@ +//// [typeOfThisInStaticMembers7.ts] +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; +} + + +//// [typeOfThisInStaticMembers7.js] +class C { +} +C.a = 1; +C.b = C.a + 1; +class D extends C { +} +D.c = 2; +D.d = D.c + 1; +D.e = 1 + (C.a) + (D.c + 1) + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).symbols new file mode 100644 index 0000000000000..dfc319293d7ac --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).symbols @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers7.ts, 1, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers7.ts, 6, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) + + static e = 1 + (super.a) + (this.c + 1) + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers7.ts, 7, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers7.ts, 0, 0)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers7.ts, 0, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers7.ts, 3, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers7.ts, 5, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).types new file mode 100644 index 0000000000000..23f7b690e1d51 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).types @@ -0,0 +1,52 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts === +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = 1 + (super.a) + (this.c + 1) + 1; +>e : number +>1 + (super.a) + (this.c + 1) + 1 : number +>1 + (super.a) + (this.c + 1) : number +>1 + (super.a) : number +>1 : 1 +>(super.a) : number +>super.a : number +>super : typeof C +>a : number +>(this.c + 1) : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt new file mode 100644 index 0000000000000..072f38100cfc6 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt @@ -0,0 +1,30 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(5,49): error TS2339: Property 'f' does not exist on type '(Anonymous class)'. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(11,22): error TS2339: Property 'f' does not exist on type 'CC'. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(13,29): error TS2339: Property 'f' does not exist on type 'CC'. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (3 errors) ==== + class C { + static f = 1; + static arrowFunctionBoundary = () => this.f + 1; + static functionExprBoundary = function () { return this.f + 2 }; + static classExprBoundary = class { a = this.f + 3 }; + ~ +!!! error TS2339: Property 'f' does not exist on type '(Anonymous class)'. + static functionAndClassDeclBoundary = (() => { + function foo () { + return this.f + 4 + } + class CC { + a = this.f + 5 + ~ +!!! error TS2339: Property 'f' does not exist on type 'CC'. + method () { + return this.f + 6 + ~ +!!! error TS2339: Property 'f' does not exist on type 'CC'. + } + } + })(); + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js new file mode 100644 index 0000000000000..8bb6f23c922c9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js @@ -0,0 +1,49 @@ +//// [typeOfThisInStaticMembers8.ts] +class C { + static f = 1; + static arrowFunctionBoundary = () => this.f + 1; + static functionExprBoundary = function () { return this.f + 2 }; + static classExprBoundary = class { a = this.f + 3 }; + static functionAndClassDeclBoundary = (() => { + function foo () { + return this.f + 4 + } + class CC { + a = this.f + 5 + method () { + return this.f + 6 + } + } + })(); +} + + +//// [typeOfThisInStaticMembers8.js] +var C = /** @class */ (function () { + function C() { + } + C.f = 1; + C.arrowFunctionBoundary = function () { return C.f + 1; }; + C.functionExprBoundary = function () { return this.f + 2; }; + C.classExprBoundary = /** @class */ (function () { + function class_1() { + this.a = this.f + 3; + } + return class_1; + }()); + C.functionAndClassDeclBoundary = (function () { + function foo() { + return this.f + 4; + } + var CC = /** @class */ (function () { + function CC() { + this.a = this.f + 5; + } + CC.prototype.method = function () { + return this.f + 6; + }; + return CC; + }()); + })(); + return C; +}()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).symbols new file mode 100644 index 0000000000000..6579e0eac2ab4 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).symbols @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers8.ts, 0, 0)) + + static f = 1; +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) + + static arrowFunctionBoundary = () => this.f + 1; +>arrowFunctionBoundary : Symbol(C.arrowFunctionBoundary, Decl(typeOfThisInStaticMembers8.ts, 1, 17)) +>this.f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers8.ts, 0, 0)) +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) + + static functionExprBoundary = function () { return this.f + 2 }; +>functionExprBoundary : Symbol(C.functionExprBoundary, Decl(typeOfThisInStaticMembers8.ts, 2, 52)) + + static classExprBoundary = class { a = this.f + 3 }; +>classExprBoundary : Symbol(C.classExprBoundary, Decl(typeOfThisInStaticMembers8.ts, 3, 68)) +>a : Symbol((Anonymous class).a, Decl(typeOfThisInStaticMembers8.ts, 4, 38)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers8.ts, 4, 30)) + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : Symbol(C.functionAndClassDeclBoundary, Decl(typeOfThisInStaticMembers8.ts, 4, 56)) + + function foo () { +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers8.ts, 5, 50)) + + return this.f + 4 + } + class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + + a = this.f + 5 +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers8.ts, 9, 18)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + + method () { +>method : Symbol(CC.method, Decl(typeOfThisInStaticMembers8.ts, 10, 26)) + + return this.f + 6 +>this : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).types new file mode 100644 index 0000000000000..08873785a925c --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).types @@ -0,0 +1,77 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts === +class C { +>C : C + + static f = 1; +>f : number +>1 : 1 + + static arrowFunctionBoundary = () => this.f + 1; +>arrowFunctionBoundary : () => number +>() => this.f + 1 : () => number +>this.f + 1 : number +>this.f : number +>this : typeof C +>f : number +>1 : 1 + + static functionExprBoundary = function () { return this.f + 2 }; +>functionExprBoundary : () => any +>function () { return this.f + 2 } : () => any +>this.f + 2 : any +>this.f : any +>this : any +>f : any +>2 : 2 + + static classExprBoundary = class { a = this.f + 3 }; +>classExprBoundary : typeof (Anonymous class) +>class { a = this.f + 3 } : typeof (Anonymous class) +>a : any +>this.f + 3 : any +>this.f : any +>this : this +>f : any +>3 : 3 + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : void +>(() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } })() : void +>(() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } }) : () => void +>() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } } : () => void + + function foo () { +>foo : () => any + + return this.f + 4 +>this.f + 4 : any +>this.f : any +>this : any +>f : any +>4 : 4 + } + class CC { +>CC : CC + + a = this.f + 5 +>a : any +>this.f + 5 : any +>this.f : any +>this : this +>f : any +>5 : 5 + + method () { +>method : () => any + + return this.f + 6 +>this.f + 6 : any +>this.f : any +>this : this +>f : any +>6 : 6 + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt new file mode 100644 index 0000000000000..072f38100cfc6 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt @@ -0,0 +1,30 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(5,49): error TS2339: Property 'f' does not exist on type '(Anonymous class)'. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(11,22): error TS2339: Property 'f' does not exist on type 'CC'. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(13,29): error TS2339: Property 'f' does not exist on type 'CC'. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (3 errors) ==== + class C { + static f = 1; + static arrowFunctionBoundary = () => this.f + 1; + static functionExprBoundary = function () { return this.f + 2 }; + static classExprBoundary = class { a = this.f + 3 }; + ~ +!!! error TS2339: Property 'f' does not exist on type '(Anonymous class)'. + static functionAndClassDeclBoundary = (() => { + function foo () { + return this.f + 4 + } + class CC { + a = this.f + 5 + ~ +!!! error TS2339: Property 'f' does not exist on type 'CC'. + method () { + return this.f + 6 + ~ +!!! error TS2339: Property 'f' does not exist on type 'CC'. + } + } + })(); + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js new file mode 100644 index 0000000000000..90f3276bb5e18 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js @@ -0,0 +1,44 @@ +//// [typeOfThisInStaticMembers8.ts] +class C { + static f = 1; + static arrowFunctionBoundary = () => this.f + 1; + static functionExprBoundary = function () { return this.f + 2 }; + static classExprBoundary = class { a = this.f + 3 }; + static functionAndClassDeclBoundary = (() => { + function foo () { + return this.f + 4 + } + class CC { + a = this.f + 5 + method () { + return this.f + 6 + } + } + })(); +} + + +//// [typeOfThisInStaticMembers8.js] +class C { +} +C.f = 1; +C.arrowFunctionBoundary = () => C.f + 1; +C.functionExprBoundary = function () { return this.f + 2; }; +C.classExprBoundary = class { + constructor() { + this.a = this.f + 3; + } +}; +C.functionAndClassDeclBoundary = (() => { + function foo() { + return this.f + 4; + } + class CC { + constructor() { + this.a = this.f + 5; + } + method() { + return this.f + 6; + } + } +})(); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).symbols new file mode 100644 index 0000000000000..6579e0eac2ab4 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).symbols @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers8.ts, 0, 0)) + + static f = 1; +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) + + static arrowFunctionBoundary = () => this.f + 1; +>arrowFunctionBoundary : Symbol(C.arrowFunctionBoundary, Decl(typeOfThisInStaticMembers8.ts, 1, 17)) +>this.f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers8.ts, 0, 0)) +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) + + static functionExprBoundary = function () { return this.f + 2 }; +>functionExprBoundary : Symbol(C.functionExprBoundary, Decl(typeOfThisInStaticMembers8.ts, 2, 52)) + + static classExprBoundary = class { a = this.f + 3 }; +>classExprBoundary : Symbol(C.classExprBoundary, Decl(typeOfThisInStaticMembers8.ts, 3, 68)) +>a : Symbol((Anonymous class).a, Decl(typeOfThisInStaticMembers8.ts, 4, 38)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers8.ts, 4, 30)) + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : Symbol(C.functionAndClassDeclBoundary, Decl(typeOfThisInStaticMembers8.ts, 4, 56)) + + function foo () { +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers8.ts, 5, 50)) + + return this.f + 4 + } + class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + + a = this.f + 5 +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers8.ts, 9, 18)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + + method () { +>method : Symbol(CC.method, Decl(typeOfThisInStaticMembers8.ts, 10, 26)) + + return this.f + 6 +>this : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).types new file mode 100644 index 0000000000000..08873785a925c --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).types @@ -0,0 +1,77 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts === +class C { +>C : C + + static f = 1; +>f : number +>1 : 1 + + static arrowFunctionBoundary = () => this.f + 1; +>arrowFunctionBoundary : () => number +>() => this.f + 1 : () => number +>this.f + 1 : number +>this.f : number +>this : typeof C +>f : number +>1 : 1 + + static functionExprBoundary = function () { return this.f + 2 }; +>functionExprBoundary : () => any +>function () { return this.f + 2 } : () => any +>this.f + 2 : any +>this.f : any +>this : any +>f : any +>2 : 2 + + static classExprBoundary = class { a = this.f + 3 }; +>classExprBoundary : typeof (Anonymous class) +>class { a = this.f + 3 } : typeof (Anonymous class) +>a : any +>this.f + 3 : any +>this.f : any +>this : this +>f : any +>3 : 3 + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : void +>(() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } })() : void +>(() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } }) : () => void +>() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } } : () => void + + function foo () { +>foo : () => any + + return this.f + 4 +>this.f + 4 : any +>this.f : any +>this : any +>f : any +>4 : 4 + } + class CC { +>CC : CC + + a = this.f + 5 +>a : any +>this.f + 5 : any +>this.f : any +>this : this +>f : any +>5 : 5 + + method () { +>method : () => any + + return this.f + 6 +>this.f + 6 : any +>this.f : any +>this : this +>f : any +>6 : 6 + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).errors.txt new file mode 100644 index 0000000000000..072f38100cfc6 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).errors.txt @@ -0,0 +1,30 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(5,49): error TS2339: Property 'f' does not exist on type '(Anonymous class)'. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(11,22): error TS2339: Property 'f' does not exist on type 'CC'. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(13,29): error TS2339: Property 'f' does not exist on type 'CC'. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (3 errors) ==== + class C { + static f = 1; + static arrowFunctionBoundary = () => this.f + 1; + static functionExprBoundary = function () { return this.f + 2 }; + static classExprBoundary = class { a = this.f + 3 }; + ~ +!!! error TS2339: Property 'f' does not exist on type '(Anonymous class)'. + static functionAndClassDeclBoundary = (() => { + function foo () { + return this.f + 4 + } + class CC { + a = this.f + 5 + ~ +!!! error TS2339: Property 'f' does not exist on type 'CC'. + method () { + return this.f + 6 + ~ +!!! error TS2339: Property 'f' does not exist on type 'CC'. + } + } + })(); + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).js new file mode 100644 index 0000000000000..90f3276bb5e18 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).js @@ -0,0 +1,44 @@ +//// [typeOfThisInStaticMembers8.ts] +class C { + static f = 1; + static arrowFunctionBoundary = () => this.f + 1; + static functionExprBoundary = function () { return this.f + 2 }; + static classExprBoundary = class { a = this.f + 3 }; + static functionAndClassDeclBoundary = (() => { + function foo () { + return this.f + 4 + } + class CC { + a = this.f + 5 + method () { + return this.f + 6 + } + } + })(); +} + + +//// [typeOfThisInStaticMembers8.js] +class C { +} +C.f = 1; +C.arrowFunctionBoundary = () => C.f + 1; +C.functionExprBoundary = function () { return this.f + 2; }; +C.classExprBoundary = class { + constructor() { + this.a = this.f + 3; + } +}; +C.functionAndClassDeclBoundary = (() => { + function foo() { + return this.f + 4; + } + class CC { + constructor() { + this.a = this.f + 5; + } + method() { + return this.f + 6; + } + } +})(); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).symbols new file mode 100644 index 0000000000000..6579e0eac2ab4 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).symbols @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers8.ts, 0, 0)) + + static f = 1; +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) + + static arrowFunctionBoundary = () => this.f + 1; +>arrowFunctionBoundary : Symbol(C.arrowFunctionBoundary, Decl(typeOfThisInStaticMembers8.ts, 1, 17)) +>this.f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers8.ts, 0, 0)) +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers8.ts, 0, 9)) + + static functionExprBoundary = function () { return this.f + 2 }; +>functionExprBoundary : Symbol(C.functionExprBoundary, Decl(typeOfThisInStaticMembers8.ts, 2, 52)) + + static classExprBoundary = class { a = this.f + 3 }; +>classExprBoundary : Symbol(C.classExprBoundary, Decl(typeOfThisInStaticMembers8.ts, 3, 68)) +>a : Symbol((Anonymous class).a, Decl(typeOfThisInStaticMembers8.ts, 4, 38)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers8.ts, 4, 30)) + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : Symbol(C.functionAndClassDeclBoundary, Decl(typeOfThisInStaticMembers8.ts, 4, 56)) + + function foo () { +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers8.ts, 5, 50)) + + return this.f + 4 + } + class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + + a = this.f + 5 +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers8.ts, 9, 18)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + + method () { +>method : Symbol(CC.method, Decl(typeOfThisInStaticMembers8.ts, 10, 26)) + + return this.f + 6 +>this : Symbol(CC, Decl(typeOfThisInStaticMembers8.ts, 8, 9)) + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).types new file mode 100644 index 0000000000000..08873785a925c --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).types @@ -0,0 +1,77 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts === +class C { +>C : C + + static f = 1; +>f : number +>1 : 1 + + static arrowFunctionBoundary = () => this.f + 1; +>arrowFunctionBoundary : () => number +>() => this.f + 1 : () => number +>this.f + 1 : number +>this.f : number +>this : typeof C +>f : number +>1 : 1 + + static functionExprBoundary = function () { return this.f + 2 }; +>functionExprBoundary : () => any +>function () { return this.f + 2 } : () => any +>this.f + 2 : any +>this.f : any +>this : any +>f : any +>2 : 2 + + static classExprBoundary = class { a = this.f + 3 }; +>classExprBoundary : typeof (Anonymous class) +>class { a = this.f + 3 } : typeof (Anonymous class) +>a : any +>this.f + 3 : any +>this.f : any +>this : this +>f : any +>3 : 3 + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : void +>(() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } })() : void +>(() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } }) : () => void +>() => { function foo () { return this.f + 4 } class CC { a = this.f + 5 method () { return this.f + 6 } } } : () => void + + function foo () { +>foo : () => any + + return this.f + 4 +>this.f + 4 : any +>this.f : any +>this : any +>f : any +>4 : 4 + } + class CC { +>CC : CC + + a = this.f + 5 +>a : any +>this.f + 5 : any +>this.f : any +>this : this +>f : any +>5 : 5 + + method () { +>method : () => any + + return this.f + 6 +>this.f + 6 : any +>this.f : any +>this : this +>f : any +>6 : 6 + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt new file mode 100644 index 0000000000000..dfe85e64c8ff4 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt @@ -0,0 +1,42 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(6,48): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(7,56): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(8,44): error TS2335: 'super' can only be referenced in a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(11,20): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(14,17): error TS2335: 'super' can only be referenced in a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(16,24): error TS2335: 'super' can only be referenced in a derived class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts (6 errors) ==== + class C { + static f = 1 + } + + class D extends C { + static arrowFunctionBoundary = () => super.f + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + static functionExprBoundary = function () { return super.f + 2 }; + ~~~~~ +!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. + static classExprBoundary = class { a = super.f + 3 }; + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + static functionAndClassDeclBoundary = (() => { + function foo () { + return super.f + 4 + ~~~~~ +!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. + } + class C { + a = super.f + 5 + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + method () { + return super.f +6 + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + } + } + })(); + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js new file mode 100644 index 0000000000000..f086499266b31 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js @@ -0,0 +1,74 @@ +//// [typeOfThisInStaticMembers9.ts] +class C { + static f = 1 +} + +class D extends C { + static arrowFunctionBoundary = () => super.f + 1; + static functionExprBoundary = function () { return super.f + 2 }; + static classExprBoundary = class { a = super.f + 3 }; + static functionAndClassDeclBoundary = (() => { + function foo () { + return super.f + 4 + } + class C { + a = super.f + 5 + method () { + return super.f +6 + } + } + })(); +} + + +//// [typeOfThisInStaticMembers9.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var C = /** @class */ (function () { + function C() { + } + C.f = 1; + return C; +}()); +var D = /** @class */ (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + D.arrowFunctionBoundary = function () { return _super.f + 1; }; + D.functionExprBoundary = function () { return _super.f + 2; }; + D.classExprBoundary = /** @class */ (function () { + function class_1() { + this.a = _super.prototype.f + 3; + } + return class_1; + }()); + D.functionAndClassDeclBoundary = (function () { + function foo() { + return _super.f + 4; + } + var C = /** @class */ (function () { + function C() { + this.a = _super.prototype.f + 5; + } + C.prototype.method = function () { + return _super.prototype.f + 6; + }; + return C; + }()); + })(); + return D; +}(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).symbols new file mode 100644 index 0000000000000..15dd3c13164c8 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).symbols @@ -0,0 +1,48 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) + + static f = 1 +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers9.ts, 2, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) + + static arrowFunctionBoundary = () => super.f + 1; +>arrowFunctionBoundary : Symbol(D.arrowFunctionBoundary, Decl(typeOfThisInStaticMembers9.ts, 4, 19)) +>super.f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) + + static functionExprBoundary = function () { return super.f + 2 }; +>functionExprBoundary : Symbol(D.functionExprBoundary, Decl(typeOfThisInStaticMembers9.ts, 5, 53)) + + static classExprBoundary = class { a = super.f + 3 }; +>classExprBoundary : Symbol(D.classExprBoundary, Decl(typeOfThisInStaticMembers9.ts, 6, 69)) +>a : Symbol((Anonymous class).a, Decl(typeOfThisInStaticMembers9.ts, 7, 38)) + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : Symbol(D.functionAndClassDeclBoundary, Decl(typeOfThisInStaticMembers9.ts, 7, 57)) + + function foo () { +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers9.ts, 8, 50)) + + return super.f + 4 + } + class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 11, 9)) + + a = super.f + 5 +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers9.ts, 12, 17)) + + method () { +>method : Symbol(C.method, Decl(typeOfThisInStaticMembers9.ts, 13, 27)) + + return super.f +6 + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).types new file mode 100644 index 0000000000000..03f49b98d4c0a --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).types @@ -0,0 +1,82 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts === +class C { +>C : C + + static f = 1 +>f : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static arrowFunctionBoundary = () => super.f + 1; +>arrowFunctionBoundary : () => number +>() => super.f + 1 : () => number +>super.f + 1 : number +>super.f : number +>super : typeof C +>f : number +>1 : 1 + + static functionExprBoundary = function () { return super.f + 2 }; +>functionExprBoundary : () => any +>function () { return super.f + 2 } : () => any +>super.f + 2 : any +>super.f : any +>super : any +>f : any +>2 : 2 + + static classExprBoundary = class { a = super.f + 3 }; +>classExprBoundary : typeof (Anonymous class) +>class { a = super.f + 3 } : typeof (Anonymous class) +>a : any +>super.f + 3 : any +>super.f : any +>super : any +>f : any +>3 : 3 + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : void +>(() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } })() : void +>(() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } }) : () => void +>() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } } : () => void + + function foo () { +>foo : () => any + + return super.f + 4 +>super.f + 4 : any +>super.f : any +>super : any +>f : any +>4 : 4 + } + class C { +>C : C + + a = super.f + 5 +>a : any +>super.f + 5 : any +>super.f : any +>super : any +>f : any +>5 : 5 + + method () { +>method : () => any + + return super.f +6 +>super.f +6 : any +>super.f : any +>super : any +>f : any +>6 : 6 + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).errors.txt new file mode 100644 index 0000000000000..7bf89ab8b3f97 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).errors.txt @@ -0,0 +1,39 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(7,56): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(8,44): error TS2335: 'super' can only be referenced in a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(11,20): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(14,17): error TS2335: 'super' can only be referenced in a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(16,24): error TS2335: 'super' can only be referenced in a derived class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts (5 errors) ==== + class C { + static f = 1 + } + + class D extends C { + static arrowFunctionBoundary = () => super.f + 1; + static functionExprBoundary = function () { return super.f + 2 }; + ~~~~~ +!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. + static classExprBoundary = class { a = super.f + 3 }; + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + static functionAndClassDeclBoundary = (() => { + function foo () { + return super.f + 4 + ~~~~~ +!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. + } + class C { + a = super.f + 5 + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + method () { + return super.f +6 + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + } + } + })(); + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js new file mode 100644 index 0000000000000..2a2c813709639 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js @@ -0,0 +1,49 @@ +//// [typeOfThisInStaticMembers9.ts] +class C { + static f = 1 +} + +class D extends C { + static arrowFunctionBoundary = () => super.f + 1; + static functionExprBoundary = function () { return super.f + 2 }; + static classExprBoundary = class { a = super.f + 3 }; + static functionAndClassDeclBoundary = (() => { + function foo () { + return super.f + 4 + } + class C { + a = super.f + 5 + method () { + return super.f +6 + } + } + })(); +} + + +//// [typeOfThisInStaticMembers9.js] +class C { +} +C.f = 1; +class D extends C { +} +D.arrowFunctionBoundary = () => C.f + 1; +D.functionExprBoundary = function () { return super.f + 2; }; +D.classExprBoundary = class { + constructor() { + this.a = super.f + 3; + } +}; +D.functionAndClassDeclBoundary = (() => { + function foo() { + return super.f + 4; + } + class C { + constructor() { + this.a = super.f + 5; + } + method() { + return super.f + 6; + } + } +})(); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).symbols new file mode 100644 index 0000000000000..15dd3c13164c8 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).symbols @@ -0,0 +1,48 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) + + static f = 1 +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers9.ts, 2, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) + + static arrowFunctionBoundary = () => super.f + 1; +>arrowFunctionBoundary : Symbol(D.arrowFunctionBoundary, Decl(typeOfThisInStaticMembers9.ts, 4, 19)) +>super.f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) + + static functionExprBoundary = function () { return super.f + 2 }; +>functionExprBoundary : Symbol(D.functionExprBoundary, Decl(typeOfThisInStaticMembers9.ts, 5, 53)) + + static classExprBoundary = class { a = super.f + 3 }; +>classExprBoundary : Symbol(D.classExprBoundary, Decl(typeOfThisInStaticMembers9.ts, 6, 69)) +>a : Symbol((Anonymous class).a, Decl(typeOfThisInStaticMembers9.ts, 7, 38)) + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : Symbol(D.functionAndClassDeclBoundary, Decl(typeOfThisInStaticMembers9.ts, 7, 57)) + + function foo () { +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers9.ts, 8, 50)) + + return super.f + 4 + } + class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 11, 9)) + + a = super.f + 5 +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers9.ts, 12, 17)) + + method () { +>method : Symbol(C.method, Decl(typeOfThisInStaticMembers9.ts, 13, 27)) + + return super.f +6 + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).types new file mode 100644 index 0000000000000..03f49b98d4c0a --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).types @@ -0,0 +1,82 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts === +class C { +>C : C + + static f = 1 +>f : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static arrowFunctionBoundary = () => super.f + 1; +>arrowFunctionBoundary : () => number +>() => super.f + 1 : () => number +>super.f + 1 : number +>super.f : number +>super : typeof C +>f : number +>1 : 1 + + static functionExprBoundary = function () { return super.f + 2 }; +>functionExprBoundary : () => any +>function () { return super.f + 2 } : () => any +>super.f + 2 : any +>super.f : any +>super : any +>f : any +>2 : 2 + + static classExprBoundary = class { a = super.f + 3 }; +>classExprBoundary : typeof (Anonymous class) +>class { a = super.f + 3 } : typeof (Anonymous class) +>a : any +>super.f + 3 : any +>super.f : any +>super : any +>f : any +>3 : 3 + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : void +>(() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } })() : void +>(() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } }) : () => void +>() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } } : () => void + + function foo () { +>foo : () => any + + return super.f + 4 +>super.f + 4 : any +>super.f : any +>super : any +>f : any +>4 : 4 + } + class C { +>C : C + + a = super.f + 5 +>a : any +>super.f + 5 : any +>super.f : any +>super : any +>f : any +>5 : 5 + + method () { +>method : () => any + + return super.f +6 +>super.f +6 : any +>super.f : any +>super : any +>f : any +>6 : 6 + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).errors.txt new file mode 100644 index 0000000000000..7bf89ab8b3f97 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).errors.txt @@ -0,0 +1,39 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(7,56): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(8,44): error TS2335: 'super' can only be referenced in a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(11,20): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(14,17): error TS2335: 'super' can only be referenced in a derived class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(16,24): error TS2335: 'super' can only be referenced in a derived class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts (5 errors) ==== + class C { + static f = 1 + } + + class D extends C { + static arrowFunctionBoundary = () => super.f + 1; + static functionExprBoundary = function () { return super.f + 2 }; + ~~~~~ +!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. + static classExprBoundary = class { a = super.f + 3 }; + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + static functionAndClassDeclBoundary = (() => { + function foo () { + return super.f + 4 + ~~~~~ +!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. + } + class C { + a = super.f + 5 + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + method () { + return super.f +6 + ~~~~~ +!!! error TS2335: 'super' can only be referenced in a derived class. + } + } + })(); + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).js new file mode 100644 index 0000000000000..2a2c813709639 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).js @@ -0,0 +1,49 @@ +//// [typeOfThisInStaticMembers9.ts] +class C { + static f = 1 +} + +class D extends C { + static arrowFunctionBoundary = () => super.f + 1; + static functionExprBoundary = function () { return super.f + 2 }; + static classExprBoundary = class { a = super.f + 3 }; + static functionAndClassDeclBoundary = (() => { + function foo () { + return super.f + 4 + } + class C { + a = super.f + 5 + method () { + return super.f +6 + } + } + })(); +} + + +//// [typeOfThisInStaticMembers9.js] +class C { +} +C.f = 1; +class D extends C { +} +D.arrowFunctionBoundary = () => C.f + 1; +D.functionExprBoundary = function () { return super.f + 2; }; +D.classExprBoundary = class { + constructor() { + this.a = super.f + 3; + } +}; +D.functionAndClassDeclBoundary = (() => { + function foo() { + return super.f + 4; + } + class C { + constructor() { + this.a = super.f + 5; + } + method() { + return super.f + 6; + } + } +})(); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).symbols new file mode 100644 index 0000000000000..15dd3c13164c8 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).symbols @@ -0,0 +1,48 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) + + static f = 1 +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) +} + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers9.ts, 2, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) + + static arrowFunctionBoundary = () => super.f + 1; +>arrowFunctionBoundary : Symbol(D.arrowFunctionBoundary, Decl(typeOfThisInStaticMembers9.ts, 4, 19)) +>super.f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 0, 0)) +>f : Symbol(C.f, Decl(typeOfThisInStaticMembers9.ts, 0, 9)) + + static functionExprBoundary = function () { return super.f + 2 }; +>functionExprBoundary : Symbol(D.functionExprBoundary, Decl(typeOfThisInStaticMembers9.ts, 5, 53)) + + static classExprBoundary = class { a = super.f + 3 }; +>classExprBoundary : Symbol(D.classExprBoundary, Decl(typeOfThisInStaticMembers9.ts, 6, 69)) +>a : Symbol((Anonymous class).a, Decl(typeOfThisInStaticMembers9.ts, 7, 38)) + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : Symbol(D.functionAndClassDeclBoundary, Decl(typeOfThisInStaticMembers9.ts, 7, 57)) + + function foo () { +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers9.ts, 8, 50)) + + return super.f + 4 + } + class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers9.ts, 11, 9)) + + a = super.f + 5 +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers9.ts, 12, 17)) + + method () { +>method : Symbol(C.method, Decl(typeOfThisInStaticMembers9.ts, 13, 27)) + + return super.f +6 + } + } + })(); +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).types new file mode 100644 index 0000000000000..03f49b98d4c0a --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).types @@ -0,0 +1,82 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts === +class C { +>C : C + + static f = 1 +>f : number +>1 : 1 +} + +class D extends C { +>D : D +>C : C + + static arrowFunctionBoundary = () => super.f + 1; +>arrowFunctionBoundary : () => number +>() => super.f + 1 : () => number +>super.f + 1 : number +>super.f : number +>super : typeof C +>f : number +>1 : 1 + + static functionExprBoundary = function () { return super.f + 2 }; +>functionExprBoundary : () => any +>function () { return super.f + 2 } : () => any +>super.f + 2 : any +>super.f : any +>super : any +>f : any +>2 : 2 + + static classExprBoundary = class { a = super.f + 3 }; +>classExprBoundary : typeof (Anonymous class) +>class { a = super.f + 3 } : typeof (Anonymous class) +>a : any +>super.f + 3 : any +>super.f : any +>super : any +>f : any +>3 : 3 + + static functionAndClassDeclBoundary = (() => { +>functionAndClassDeclBoundary : void +>(() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } })() : void +>(() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } }) : () => void +>() => { function foo () { return super.f + 4 } class C { a = super.f + 5 method () { return super.f +6 } } } : () => void + + function foo () { +>foo : () => any + + return super.f + 4 +>super.f + 4 : any +>super.f : any +>super : any +>f : any +>4 : 4 + } + class C { +>C : C + + a = super.f + 5 +>a : any +>super.f + 5 : any +>super.f : any +>super : any +>f : any +>5 : 5 + + method () { +>method : () => any + + return super.f +6 +>super.f +6 : any +>super.f : any +>super : any +>f : any +>6 : 6 + } + } + })(); +} + diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts index 53202e9bf802f..27541ce361dbd 100644 --- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts @@ -1,4 +1,4 @@ -// @target: esnext, es2020, es6, es5 +// @target: esnext, es6, es5 // @useDefineForClassFields: false class C { static a = 1; diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts index c0ed5ec3907e7..0d08423bb9ce1 100644 --- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts @@ -1,4 +1,4 @@ -// @target: esnext, es2020, es6, es5 +// @target: esnext, es6, es5 // @useDefineForClassFields: true class C { static a = 1; diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts new file mode 100644 index 0000000000000..db6e8a76c6499 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts @@ -0,0 +1,9 @@ +// @target: esnext, es6, es5 + +class C { + static create = () => new this("yep") + + constructor (private foo: string) { + + } +} diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts new file mode 100644 index 0000000000000..b27d0855a2d8d --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers6.ts @@ -0,0 +1,7 @@ +class C { + static f = 1 +} + +class D extends C { + static c = super(); +} diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts new file mode 100644 index 0000000000000..1a2d9cd2e20eb --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts @@ -0,0 +1,12 @@ +// @target: esnext, es6, es5 + +class C { + static a = 1; + static b = this.a + 1; +} + +class D extends C { + static c = 2; + static d = this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; +} diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts new file mode 100644 index 0000000000000..8b26476f143cf --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts @@ -0,0 +1,19 @@ +// @target: esnext, es6, es5 + +class C { + static f = 1; + static arrowFunctionBoundary = () => this.f + 1; + static functionExprBoundary = function () { return this.f + 2 }; + static classExprBoundary = class { a = this.f + 3 }; + static functionAndClassDeclBoundary = (() => { + function foo () { + return this.f + 4 + } + class CC { + a = this.f + 5 + method () { + return this.f + 6 + } + } + })(); +} diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts new file mode 100644 index 0000000000000..0a648d2fa08a1 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts @@ -0,0 +1,22 @@ +// @target: esnext, es6, es5 + +class C { + static f = 1 +} + +class D extends C { + static arrowFunctionBoundary = () => super.f + 1; + static functionExprBoundary = function () { return super.f + 2 }; + static classExprBoundary = class { a = super.f + 3 }; + static functionAndClassDeclBoundary = (() => { + function foo () { + return super.f + 4 + } + class C { + a = super.f + 5 + method () { + return super.f +6 + } + } + })(); +} From f70cbfd777a6e15c5c3141cc0e4eac12e262dfed Mon Sep 17 00:00:00 2001 From: kingwl Date: Sun, 7 Mar 2021 00:58:11 +0800 Subject: [PATCH 07/33] Avoid errors --- src/compiler/checker.ts | 7 ++++++- ...fThisInStaticMembers3(target=es5).errors.txt | 17 ----------------- ...fThisInStaticMembers4(target=es5).errors.txt | 17 ----------------- ...fThisInStaticMembers7(target=es5).errors.txt | 17 ----------------- ...fThisInStaticMembers9(target=es5).errors.txt | 5 +---- 5 files changed, 7 insertions(+), 56 deletions(-) delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3b5cd58c8295e..620c0d7169777 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26434,7 +26434,8 @@ namespace ts { // (March 2021): // - All static class member can be access via super. if (languageVersion < ScriptTarget.ES2015) { - if (symbolHasNonMethodDeclaration(prop)) { + const isStatic = flags & ModifierFlags.Static; + if (isStatic ? symbolHasNonClassMemberDeclaration(prop) : symbolHasNonMethodDeclaration(prop)) { error(errorNode, Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); return false; } @@ -26533,6 +26534,10 @@ namespace ts { return !!forEachProperty(symbol, prop => !(prop.flags & SymbolFlags.Method)); } + function symbolHasNonClassMemberDeclaration(symbol: Symbol) { + return !!forEachProperty(symbol, prop => !(prop.flags & SymbolFlags.ClassMember)); + } + function checkNonNullExpression(node: Expression | QualifiedName) { return checkNonNullType(checkExpression(node), node); } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt deleted file mode 100644 index da38e0eb95920..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt +++ /dev/null @@ -1,17 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (1 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - } - - class D extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - ~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt deleted file mode 100644 index 2502ce9dd53be..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt +++ /dev/null @@ -1,17 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (1 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - } - - class D extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - ~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt deleted file mode 100644 index 54de1238f9098..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt +++ /dev/null @@ -1,17 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(9,27): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts (1 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - } - - class D extends C { - static c = 2; - static d = this.c + 1; - static e = 1 + (super.a) + (this.c + 1) + 1; - ~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt index dfe85e64c8ff4..7bf89ab8b3f97 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(6,48): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(7,56): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(8,44): error TS2335: 'super' can only be referenced in a derived class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(11,20): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. @@ -6,15 +5,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(16,24): error TS2335: 'super' can only be referenced in a derived class. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts (6 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts (5 errors) ==== class C { static f = 1 } class D extends C { static arrowFunctionBoundary = () => super.f + 1; - ~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. static functionExprBoundary = function () { return super.f + 2 }; ~~~~~ !!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. From 3ce5cd476082e0809f0ae2d98daeeb2a98a7676d Mon Sep 17 00:00:00 2001 From: kingwl Date: Sun, 7 Mar 2021 01:15:32 +0800 Subject: [PATCH 08/33] Accept baseline --- .../errorSuperPropertyAccess.errors.txt | 23 +++++--------- ...ringClassMembersFromAssignments.errors.txt | 8 +---- ...opertyAccessibleWithinSubclass2.errors.txt | 30 ------------------- .../reference/superAccess2.errors.txt | 5 +--- .../baselines/reference/superAccess2.symbols | 1 + tests/baselines/reference/superAccess2.types | 2 +- ...rowFunctionInStaticInitializer1.errors.txt | 14 --------- .../thisInConstructorParameter2.errors.txt | 5 +--- .../thisInInvalidContexts.errors.txt | 5 +--- ...InInvalidContextsExternalModule.errors.txt | 5 +--- .../reference/thisInOuterClassBody.errors.txt | 5 +--- 11 files changed, 15 insertions(+), 88 deletions(-) delete mode 100644 tests/baselines/reference/protectedStaticClassPropertyAccessibleWithinSubclass2.errors.txt delete mode 100644 tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt diff --git a/tests/baselines/reference/errorSuperPropertyAccess.errors.txt b/tests/baselines/reference/errorSuperPropertyAccess.errors.txt index 7fd6e467eafdc..0aea34345f187 100644 --- a/tests/baselines/reference/errorSuperPropertyAccess.errors.txt +++ b/tests/baselines/reference/errorSuperPropertyAccess.errors.txt @@ -23,22 +23,19 @@ tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(95,23): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(98,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(99,19): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(109,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(110,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(110,15): error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(111,15): error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(113,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(114,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(115,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(115,15): error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(116,15): error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(119,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(120,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(121,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(121,15): error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(122,15): error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(127,16): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(127,30): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. -==== tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts (38 errors) ==== +==== tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts (35 errors) ==== //super property access in constructor of class with no base type //super property access in instance member function of class with no base type //super property access in instance member accessor(get and set) of class with no base type @@ -198,11 +195,9 @@ tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess class SomeDerived3 extends SomeBase { static fn() { super.publicStaticMember = 3; - ~~~~~~~~~~~~~~~~~~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticMember = 3; ~~~~~~~~~~~~~~~~~~~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +!!! error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. super.privateStaticFunc(); ~~~~~~~~~~~~~~~~~ !!! error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. @@ -211,11 +206,9 @@ tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super.publicStaticMember = 3; - ~~~~~~~~~~~~~~~~~~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticMember = 3; ~~~~~~~~~~~~~~~~~~~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +!!! error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. super.privateStaticFunc(); ~~~~~~~~~~~~~~~~~ !!! error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. @@ -225,11 +218,9 @@ tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super.publicStaticMember = 3; - ~~~~~~~~~~~~~~~~~~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticMember = 3; ~~~~~~~~~~~~~~~~~~~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +!!! error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. super.privateStaticFunc(); ~~~~~~~~~~~~~~~~~ !!! error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. diff --git a/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt b/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt index 379d3f018c2c1..44ab30d997aae 100644 --- a/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt +++ b/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt @@ -1,11 +1,9 @@ tests/cases/conformance/salsa/a.js(14,13): error TS7008: Member 'inMethodNullable' implicitly has an 'any' type. tests/cases/conformance/salsa/a.js(20,9): error TS2322: Type 'string' is not assignable to type 'number'. tests/cases/conformance/salsa/a.js(39,9): error TS2322: Type 'boolean' is not assignable to type 'number'. -tests/cases/conformance/salsa/a.js(93,13): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/salsa/a.js(96,13): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/salsa/a.js (5 errors) ==== +==== tests/cases/conformance/salsa/a.js (3 errors) ==== class C { constructor() { if (Math.random()) { @@ -105,13 +103,9 @@ tests/cases/conformance/salsa/a.js(96,13): error TS2334: 'this' cannot be refere static prop = () => { if (Math.random()) { this.inStaticPropertyDeclaration = 0; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } else { this.inStaticPropertyDeclaration = "string" - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } } } diff --git a/tests/baselines/reference/protectedStaticClassPropertyAccessibleWithinSubclass2.errors.txt b/tests/baselines/reference/protectedStaticClassPropertyAccessibleWithinSubclass2.errors.txt deleted file mode 100644 index b6fa239f2910f..0000000000000 --- a/tests/baselines/reference/protectedStaticClassPropertyAccessibleWithinSubclass2.errors.txt +++ /dev/null @@ -1,30 +0,0 @@ -tests/cases/conformance/classes/members/accessibility/protectedStaticClassPropertyAccessibleWithinSubclass2.ts(11,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/classes/members/accessibility/protectedStaticClassPropertyAccessibleWithinSubclass2.ts(19,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - - -==== tests/cases/conformance/classes/members/accessibility/protectedStaticClassPropertyAccessibleWithinSubclass2.ts (2 errors) ==== - class Base { - protected static x: string; - static staticMethod() { - this.x; // OK, accessed within their declaring class - } - } - - class Derived1 extends Base { - static staticMethod1() { - this.x; // OK, accessed within a class derived from their declaring class - super.x; // Error, x is not public - ~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - } - } - - class Derived2 extends Derived1 { - protected static x: string; - static staticMethod3() { - this.x; // OK, accessed within a class derived from their declaring class - super.x; // Error, x is not public - ~ -!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. - } - } \ No newline at end of file diff --git a/tests/baselines/reference/superAccess2.errors.txt b/tests/baselines/reference/superAccess2.errors.txt index 264d39402d0c2..29ebbb7363f30 100644 --- a/tests/baselines/reference/superAccess2.errors.txt +++ b/tests/baselines/reference/superAccess2.errors.txt @@ -1,5 +1,4 @@ tests/cases/compiler/superAccess2.ts(7,15): error TS1034: 'super' must be followed by an argument list or member access. -tests/cases/compiler/superAccess2.ts(8,17): error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. tests/cases/compiler/superAccess2.ts(8,22): error TS1034: 'super' must be followed by an argument list or member access. tests/cases/compiler/superAccess2.ts(11,28): error TS2336: 'super' cannot be referenced in constructor arguments. tests/cases/compiler/superAccess2.ts(11,28): error TS17011: 'super' must be called before accessing a property of 'super' in the constructor of a derived class. @@ -14,7 +13,7 @@ tests/cases/compiler/superAccess2.ts(20,26): error TS1034: 'super' must be follo tests/cases/compiler/superAccess2.ts(21,15): error TS2339: Property 'x' does not exist on type 'typeof P'. -==== tests/cases/compiler/superAccess2.ts (14 errors) ==== +==== tests/cases/compiler/superAccess2.ts (13 errors) ==== class P { x() { } static y() { } @@ -25,8 +24,6 @@ tests/cases/compiler/superAccess2.ts(21,15): error TS2339: Property 'x' does not ~ !!! error TS1034: 'super' must be followed by an argument list or member access. static yy = super; // error for static initializer accessing super - ~~~~~ -!!! error TS2338: 'super' property access is permitted only in a constructor, member function, or member accessor of a derived class. ~ !!! error TS1034: 'super' must be followed by an argument list or member access. diff --git a/tests/baselines/reference/superAccess2.symbols b/tests/baselines/reference/superAccess2.symbols index abb3385b9705a..06611a440af92 100644 --- a/tests/baselines/reference/superAccess2.symbols +++ b/tests/baselines/reference/superAccess2.symbols @@ -19,6 +19,7 @@ class Q extends P { static yy = super; // error for static initializer accessing super >yy : Symbol(Q.yy, Decl(superAccess2.ts, 6, 15)) +>super : Symbol(P, Decl(superAccess2.ts, 0, 0)) // Super is not allowed in constructor args constructor(public z = super, zz = super, zzz = () => super) { diff --git a/tests/baselines/reference/superAccess2.types b/tests/baselines/reference/superAccess2.types index 00ae91bf4c321..c7ec9b178e5d8 100644 --- a/tests/baselines/reference/superAccess2.types +++ b/tests/baselines/reference/superAccess2.types @@ -22,7 +22,7 @@ class Q extends P { static yy = super; // error for static initializer accessing super >yy : any >super : any ->super : any +>super : typeof P > : any // Super is not allowed in constructor args diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt deleted file mode 100644 index f62b80655a6c8..0000000000000 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt +++ /dev/null @@ -1,14 +0,0 @@ -tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts(6,7): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts (1 errors) ==== - function log(a) { } - - class Vector { - static foo = () => { - // 'this' should not be available in a static initializer. - log(this); - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - } \ No newline at end of file diff --git a/tests/baselines/reference/thisInConstructorParameter2.errors.txt b/tests/baselines/reference/thisInConstructorParameter2.errors.txt index 2b6ed8017c26b..b577fe5dbd483 100644 --- a/tests/baselines/reference/thisInConstructorParameter2.errors.txt +++ b/tests/baselines/reference/thisInConstructorParameter2.errors.txt @@ -1,14 +1,11 @@ -tests/cases/compiler/thisInConstructorParameter2.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/compiler/thisInConstructorParameter2.ts(5,28): error TS2333: 'this' cannot be referenced in constructor arguments. tests/cases/compiler/thisInConstructorParameter2.ts(5,39): error TS2333: 'this' cannot be referenced in constructor arguments. -==== tests/cases/compiler/thisInConstructorParameter2.ts (3 errors) ==== +==== tests/cases/compiler/thisInConstructorParameter2.ts (2 errors) ==== class P { x = this; static y = this; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. constructor(public z = this, zz = this, zzz = (p = this) => this) { ~~~~ diff --git a/tests/baselines/reference/thisInInvalidContexts.errors.txt b/tests/baselines/reference/thisInInvalidContexts.errors.txt index 7a357e1327ea5..9ed732644757a 100644 --- a/tests/baselines/reference/thisInInvalidContexts.errors.txt +++ b/tests/baselines/reference/thisInInvalidContexts.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(14,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(22,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. @@ -8,12 +7,10 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(44,9): tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(45,9): error TS2332: 'this' cannot be referenced in current location. -==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts (8 errors) ==== +==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts (7 errors) ==== //'this' in static member initializer class ErrClass1 { static t = this; // Error - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class BaseErrClass { diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt index 18f0e314a8ae7..35872f7d95dd5 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(14,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(22,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. @@ -8,12 +7,10 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalMod tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(45,9): error TS2332: 'this' cannot be referenced in current location. -==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts (8 errors) ==== +==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts (7 errors) ==== //'this' in static member initializer class ErrClass1 { static t = this; // Error - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class BaseErrClass { diff --git a/tests/baselines/reference/thisInOuterClassBody.errors.txt b/tests/baselines/reference/thisInOuterClassBody.errors.txt index 1eeabf22e2917..e002e87900faf 100644 --- a/tests/baselines/reference/thisInOuterClassBody.errors.txt +++ b/tests/baselines/reference/thisInOuterClassBody.errors.txt @@ -1,16 +1,13 @@ -tests/cases/compiler/thisInOuterClassBody.ts(5,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/compiler/thisInOuterClassBody.ts(12,22): error TS2576: Property 'y' does not exist on type 'Foo'. Did you mean to access the static member 'Foo.y' instead? tests/cases/compiler/thisInOuterClassBody.ts(18,22): error TS2339: Property 'x' does not exist on type 'typeof Foo'. -==== tests/cases/compiler/thisInOuterClassBody.ts (3 errors) ==== +==== tests/cases/compiler/thisInOuterClassBody.ts (2 errors) ==== class Foo { x = this; static y = this; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. bar() { From 006ec9f114afb5c21a7a6a400b016815ab20c172 Mon Sep 17 00:00:00 2001 From: kingwl Date: Sun, 7 Mar 2021 17:59:21 +0800 Subject: [PATCH 09/33] Accept baseline --- tests/cases/fourslash/codeFixAddMissingMember7.ts | 2 +- .../cases/fourslash/completionListStaticProtectedMembers2.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/cases/fourslash/codeFixAddMissingMember7.ts b/tests/cases/fourslash/codeFixAddMissingMember7.ts index 95fbb4be18cba..cdb389ceaeb6d 100644 --- a/tests/cases/fourslash/codeFixAddMissingMember7.ts +++ b/tests/cases/fourslash/codeFixAddMissingMember7.ts @@ -10,7 +10,7 @@ verify.codeFix({ description: "Initialize static property 'foo'", - index: 2, + index: 0, newFileContent: `class C { static p = ()=>{ this.foo === 10 }; } diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers2.ts b/tests/cases/fourslash/completionListStaticProtectedMembers2.ts index e3ab6a57f4369..b71092da572ec 100644 --- a/tests/cases/fourslash/completionListStaticProtectedMembers2.ts +++ b/tests/cases/fourslash/completionListStaticProtectedMembers2.ts @@ -59,9 +59,13 @@ verify.completions( // only public and protected methods of the base class are accessible through super marker: "4", exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, { name: "protectedMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedProperty", sortText: completion.SortText.LocalDeclarationPriority }, { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicProperty", sortText: completion.SortText.LocalDeclarationPriority }, { name: "protectedOverriddenMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedOverriddenProperty", sortText: completion.SortText.LocalDeclarationPriority }, { name: "apply", sortText: completion.SortText.LocationPriority }, { name: "call", sortText: completion.SortText.LocationPriority }, { name: "bind", sortText: completion.SortText.LocationPriority }, From a5824eac5c4e22e2ca082d68d11cf48f226e372a Mon Sep 17 00:00:00 2001 From: kingwl Date: Mon, 22 Mar 2021 17:44:58 +0800 Subject: [PATCH 10/33] Add decorated classes test --- ...typeOfThisInStaticMembers10(target=es5).js | 62 +++++++++++++++++++ ...fThisInStaticMembers10(target=es5).symbols | 46 ++++++++++++++ ...eOfThisInStaticMembers10(target=es5).types | 55 ++++++++++++++++ ...typeOfThisInStaticMembers10(target=es6).js | 39 ++++++++++++ ...fThisInStaticMembers10(target=es6).symbols | 46 ++++++++++++++ ...eOfThisInStaticMembers10(target=es6).types | 55 ++++++++++++++++ ...eOfThisInStaticMembers10(target=esnext).js | 39 ++++++++++++ ...isInStaticMembers10(target=esnext).symbols | 46 ++++++++++++++ ...ThisInStaticMembers10(target=esnext).types | 55 ++++++++++++++++ .../typeOfThisInStaticMembers10.ts | 18 ++++++ 10 files changed, 461 insertions(+) create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).types create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js new file mode 100644 index 0000000000000..4493373c97af5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js @@ -0,0 +1,62 @@ +//// [typeOfThisInStaticMembers10.ts] +declare const foo: any; + +@foo +class C { + static a = 1; + static b = this.a + 1; +} + +@foo +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers10.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var C = /** @class */ (function () { + function C() { + } + C.a = 1; + C.b = C.a + 1; + C = __decorate([ + foo + ], C); + return C; +}()); +var D = /** @class */ (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + D.c = 2; + D.d = D.c + 1; + D.e = _super.a + D.c + 1; + D = __decorate([ + foo + ], D); + return D; +}(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).symbols new file mode 100644 index 0000000000000..4bd636f83b206 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).symbols @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts === +declare const foo: any; +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers10.ts, 4, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +} + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers10.ts, 10, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers10.ts, 11, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).types new file mode 100644 index 0000000000000..e60f1a0b5dabb --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).types @@ -0,0 +1,55 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts === +declare const foo: any; +>foo : any + +@foo +>foo : any + +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +@foo +>foo : any + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js new file mode 100644 index 0000000000000..c1284cd33521b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js @@ -0,0 +1,39 @@ +//// [typeOfThisInStaticMembers10.ts] +declare const foo: any; + +@foo +class C { + static a = 1; + static b = this.a + 1; +} + +@foo +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers10.js] +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +let C = class C { +}; +C.a = 1; +C.b = C.a + 1; +C = __decorate([ + foo +], C); +let D = class D extends C { +}; +D.c = 2; +D.d = D.c + 1; +D.e = C.a + D.c + 1; +D = __decorate([ + foo +], D); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).symbols new file mode 100644 index 0000000000000..4bd636f83b206 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).symbols @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts === +declare const foo: any; +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers10.ts, 4, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +} + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers10.ts, 10, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers10.ts, 11, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).types new file mode 100644 index 0000000000000..e60f1a0b5dabb --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).types @@ -0,0 +1,55 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts === +declare const foo: any; +>foo : any + +@foo +>foo : any + +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +@foo +>foo : any + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js new file mode 100644 index 0000000000000..c1284cd33521b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js @@ -0,0 +1,39 @@ +//// [typeOfThisInStaticMembers10.ts] +declare const foo: any; + +@foo +class C { + static a = 1; + static b = this.a + 1; +} + +@foo +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} + + +//// [typeOfThisInStaticMembers10.js] +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +let C = class C { +}; +C.a = 1; +C.b = C.a + 1; +C = __decorate([ + foo +], C); +let D = class D extends C { +}; +D.c = 2; +D.d = D.c + 1; +D.e = C.a + D.c + 1; +D = __decorate([ + foo +], D); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).symbols new file mode 100644 index 0000000000000..4bd636f83b206 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).symbols @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts === +declare const foo: any; +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers10.ts, 4, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +} + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers10.ts, 0, 13)) + +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers10.ts, 10, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers10.ts, 11, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers10.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers10.ts, 3, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).types new file mode 100644 index 0000000000000..e60f1a0b5dabb --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).types @@ -0,0 +1,55 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts === +declare const foo: any; +>foo : any + +@foo +>foo : any + +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +@foo +>foo : any + +class D extends C { +>D : D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 +} + diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts new file mode 100644 index 0000000000000..0743ff0af9c82 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts @@ -0,0 +1,18 @@ +// @target: esnext, es6, es5 +// @useDefineForClassFields: false +// @experimentalDecorators: true + +declare const foo: any; + +@foo +class C { + static a = 1; + static b = this.a + 1; +} + +@foo +class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; +} From 0f807eeda367de72c12dc68c474c45f194a283de Mon Sep 17 00:00:00 2001 From: kingwl Date: Thu, 25 Mar 2021 13:01:09 +0800 Subject: [PATCH 11/33] Add errors --- src/compiler/checker.ts | 8 + src/compiler/diagnosticMessages.json | 4 + ...isInStaticMembers10(target=es5).errors.txt | 63 ++++++++ ...typeOfThisInStaticMembers10(target=es5).js | 80 ++++++++++ ...fThisInStaticMembers10(target=es5).symbols | 108 +++++++++++++ ...eOfThisInStaticMembers10(target=es5).types | 149 ++++++++++++++++++ ...isInStaticMembers10(target=es6).errors.txt | 63 ++++++++ ...typeOfThisInStaticMembers10(target=es6).js | 64 ++++++++ ...fThisInStaticMembers10(target=es6).symbols | 108 +++++++++++++ ...eOfThisInStaticMembers10(target=es6).types | 149 ++++++++++++++++++ ...nStaticMembers10(target=esnext).errors.txt | 63 ++++++++ ...eOfThisInStaticMembers10(target=esnext).js | 64 ++++++++ ...isInStaticMembers10(target=esnext).symbols | 108 +++++++++++++ ...ThisInStaticMembers10(target=esnext).types | 149 ++++++++++++++++++ .../typeOfThisInStaticMembers10.ts | 33 ++++ 15 files changed, 1213 insertions(+) create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d1a5d9e8e9ff3..9bd18e635dba1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24023,6 +24023,13 @@ namespace ts { } } + function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression: Node, container: Node) { + if (isPropertyDeclaration(container) && hasStaticModifier(container) && + container.initializer && textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && length(container.parent.decorators)) { + error(thisExpression, Diagnostics.Cannot_use_this_in_static_property_initializer_in_a_decorated_class); + } + } + function checkThisExpression(node: Node): Type { // Stop at the first arrow function so that we can // tell whether 'this' needs to be captured. @@ -24039,6 +24046,7 @@ namespace ts { capturedByArrowFunction = true; } + checkThisInStaticClassFieldInitializerInDecoratedClass(node, container); switch (container.kind) { case SyntaxKind.ModuleDeclaration: error(node, Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index e204c9ee09720..179101b42aaef 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3308,6 +3308,10 @@ "category": "Error", "code": 2807 }, + "Cannot use 'this' in static property initializer in a decorated class.": { + "category": "Error", + "code": 2808 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt new file mode 100644 index 0000000000000..b8c239603a7f5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt @@ -0,0 +1,63 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== + declare const foo: any; + + @foo + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + } + + @foo + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static e = super.a + this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static f = () => this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } + + class CC { + static a = 1; + static b = this.a + 1; + } + + class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js index 4493373c97af5..53d8cf764a8e8 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js @@ -12,6 +12,39 @@ class D extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } +} + +class CC { + static a = 1; + static b = this.a + 1; +} + +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } } @@ -52,11 +85,58 @@ var D = /** @class */ (function (_super) { function D() { return _super !== null && _super.apply(this, arguments) || this; } + D.foo = function () { + return this.c + 1; + }; + Object.defineProperty(D, "fa", { + get: function () { + return this.c + 1; + }, + set: function (v) { + this.c = v + 1; + }, + enumerable: false, + configurable: true + }); D.c = 2; D.d = D.c + 1; D.e = _super.a + D.c + 1; + D.f = function () { return D.c + 1; }; + D.ff = function () { this.c + 1; }; D = __decorate([ foo ], D); return D; }(C)); +var CC = /** @class */ (function () { + function CC() { + } + CC.a = 1; + CC.b = CC.a + 1; + return CC; +}()); +var DD = /** @class */ (function (_super) { + __extends(DD, _super); + function DD() { + return _super !== null && _super.apply(this, arguments) || this; + } + DD.foo = function () { + return this.c + 1; + }; + Object.defineProperty(DD, "fa", { + get: function () { + return this.c + 1; + }, + set: function (v) { + this.c = v + 1; + }, + enumerable: false, + configurable: true + }); + DD.c = 2; + DD.d = DD.c + 1; + DD.e = _super.a + DD.c + 1; + DD.f = function () { return DD.c + 1; }; + DD.ff = function () { this.c + 1; }; + return DD; +}(CC)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).symbols index 4bd636f83b206..32b2ea3fd4926 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).symbols @@ -42,5 +42,113 @@ class D extends C { >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static f = () => this.c + 1; +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers10.ts, 12, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static ff = function () { this.c + 1 } +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers10.ts, 13, 32)) + + static foo () { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers10.ts, 14, 42)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + } + static get fa () { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers10.ts, 17, 5), Decl(typeOfThisInStaticMembers10.ts, 20, 5)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + } + static set fa (v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers10.ts, 17, 5), Decl(typeOfThisInStaticMembers10.ts, 20, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 21, 19)) + + this.c = v + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 21, 19)) + } +} + +class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) + + static a = 1; +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) + + static b = this.a + 1; +>b : Symbol(CC.b, Decl(typeOfThisInStaticMembers10.ts, 27, 17)) +>this.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +} + +class DD extends CC { +>DD : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) + + static c = 2; +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static d = this.c + 1; +>d : Symbol(DD.d, Decl(typeOfThisInStaticMembers10.ts, 32, 17)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static e = super.a + this.c + 1; +>e : Symbol(DD.e, Decl(typeOfThisInStaticMembers10.ts, 33, 26)) +>super.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>super : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static f = () => this.c + 1; +>f : Symbol(DD.f, Decl(typeOfThisInStaticMembers10.ts, 34, 36)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static ff = function () { this.c + 1 } +>ff : Symbol(DD.ff, Decl(typeOfThisInStaticMembers10.ts, 35, 32)) + + static foo () { +>foo : Symbol(DD.foo, Decl(typeOfThisInStaticMembers10.ts, 36, 42)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + } + static get fa () { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers10.ts, 39, 5), Decl(typeOfThisInStaticMembers10.ts, 42, 5)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + } + static set fa (v: number) { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers10.ts, 39, 5), Decl(typeOfThisInStaticMembers10.ts, 42, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 43, 19)) + + this.c = v + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 43, 19)) + } } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).types index e60f1a0b5dabb..824241e883d28 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).types @@ -51,5 +51,154 @@ class D extends C { >this : typeof D >c : number >1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static foo () { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static get fa () { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static set fa (v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof D +>c : number +>v + 1 : number +>v : number +>1 : 1 + } +} + +class CC { +>CC : CC + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof CC +>a : number +>1 : 1 +} + +class DD extends CC { +>DD : DD +>CC : CC + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof CC +>a : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static foo () { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + } + static get fa () { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + } + static set fa (v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof DD +>c : number +>v + 1 : number +>v : number +>1 : 1 + } } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt new file mode 100644 index 0000000000000..b8c239603a7f5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt @@ -0,0 +1,63 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== + declare const foo: any; + + @foo + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + } + + @foo + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static e = super.a + this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static f = () => this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } + + class CC { + static a = 1; + static b = this.a + 1; + } + + class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js index c1284cd33521b..d3a167979f2ff 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js @@ -12,6 +12,39 @@ class D extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } +} + +class CC { + static a = 1; + static b = this.a + 1; +} + +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } } @@ -30,10 +63,41 @@ C = __decorate([ foo ], C); let D = class D extends C { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } }; D.c = 2; D.d = D.c + 1; D.e = C.a + D.c + 1; +D.f = () => D.c + 1; +D.ff = function () { this.c + 1; }; D = __decorate([ foo ], D); +class CC { +} +CC.a = 1; +CC.b = CC.a + 1; +class DD extends CC { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } +} +DD.c = 2; +DD.d = DD.c + 1; +DD.e = CC.a + DD.c + 1; +DD.f = () => DD.c + 1; +DD.ff = function () { this.c + 1; }; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).symbols index 4bd636f83b206..32b2ea3fd4926 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).symbols @@ -42,5 +42,113 @@ class D extends C { >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static f = () => this.c + 1; +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers10.ts, 12, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static ff = function () { this.c + 1 } +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers10.ts, 13, 32)) + + static foo () { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers10.ts, 14, 42)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + } + static get fa () { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers10.ts, 17, 5), Decl(typeOfThisInStaticMembers10.ts, 20, 5)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + } + static set fa (v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers10.ts, 17, 5), Decl(typeOfThisInStaticMembers10.ts, 20, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 21, 19)) + + this.c = v + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 21, 19)) + } +} + +class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) + + static a = 1; +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) + + static b = this.a + 1; +>b : Symbol(CC.b, Decl(typeOfThisInStaticMembers10.ts, 27, 17)) +>this.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +} + +class DD extends CC { +>DD : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) + + static c = 2; +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static d = this.c + 1; +>d : Symbol(DD.d, Decl(typeOfThisInStaticMembers10.ts, 32, 17)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static e = super.a + this.c + 1; +>e : Symbol(DD.e, Decl(typeOfThisInStaticMembers10.ts, 33, 26)) +>super.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>super : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static f = () => this.c + 1; +>f : Symbol(DD.f, Decl(typeOfThisInStaticMembers10.ts, 34, 36)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static ff = function () { this.c + 1 } +>ff : Symbol(DD.ff, Decl(typeOfThisInStaticMembers10.ts, 35, 32)) + + static foo () { +>foo : Symbol(DD.foo, Decl(typeOfThisInStaticMembers10.ts, 36, 42)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + } + static get fa () { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers10.ts, 39, 5), Decl(typeOfThisInStaticMembers10.ts, 42, 5)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + } + static set fa (v: number) { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers10.ts, 39, 5), Decl(typeOfThisInStaticMembers10.ts, 42, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 43, 19)) + + this.c = v + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 43, 19)) + } } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).types index e60f1a0b5dabb..824241e883d28 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).types @@ -51,5 +51,154 @@ class D extends C { >this : typeof D >c : number >1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static foo () { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static get fa () { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static set fa (v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof D +>c : number +>v + 1 : number +>v : number +>1 : 1 + } +} + +class CC { +>CC : CC + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof CC +>a : number +>1 : 1 +} + +class DD extends CC { +>DD : DD +>CC : CC + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof CC +>a : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static foo () { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + } + static get fa () { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + } + static set fa (v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof DD +>c : number +>v + 1 : number +>v : number +>1 : 1 + } } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt new file mode 100644 index 0000000000000..b8c239603a7f5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt @@ -0,0 +1,63 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== + declare const foo: any; + + @foo + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + } + + @foo + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static e = super.a + this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static f = () => this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } + + class CC { + static a = 1; + static b = this.a + 1; + } + + class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js index c1284cd33521b..d3a167979f2ff 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js @@ -12,6 +12,39 @@ class D extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } +} + +class CC { + static a = 1; + static b = this.a + 1; +} + +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } } @@ -30,10 +63,41 @@ C = __decorate([ foo ], C); let D = class D extends C { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } }; D.c = 2; D.d = D.c + 1; D.e = C.a + D.c + 1; +D.f = () => D.c + 1; +D.ff = function () { this.c + 1; }; D = __decorate([ foo ], D); +class CC { +} +CC.a = 1; +CC.b = CC.a + 1; +class DD extends CC { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } +} +DD.c = 2; +DD.d = DD.c + 1; +DD.e = CC.a + DD.c + 1; +DD.f = () => DD.c + 1; +DD.ff = function () { this.c + 1; }; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).symbols index 4bd636f83b206..32b2ea3fd4926 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).symbols @@ -42,5 +42,113 @@ class D extends C { >this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) >this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) >c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static f = () => this.c + 1; +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers10.ts, 12, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + + static ff = function () { this.c + 1 } +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers10.ts, 13, 32)) + + static foo () { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers10.ts, 14, 42)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + } + static get fa () { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers10.ts, 17, 5), Decl(typeOfThisInStaticMembers10.ts, 20, 5)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) + } + static set fa (v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers10.ts, 17, 5), Decl(typeOfThisInStaticMembers10.ts, 20, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 21, 19)) + + this.c = v + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers10.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers10.ts, 9, 19)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 21, 19)) + } +} + +class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) + + static a = 1; +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) + + static b = this.a + 1; +>b : Symbol(CC.b, Decl(typeOfThisInStaticMembers10.ts, 27, 17)) +>this.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +} + +class DD extends CC { +>DD : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) + + static c = 2; +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static d = this.c + 1; +>d : Symbol(DD.d, Decl(typeOfThisInStaticMembers10.ts, 32, 17)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static e = super.a + this.c + 1; +>e : Symbol(DD.e, Decl(typeOfThisInStaticMembers10.ts, 33, 26)) +>super.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>super : Symbol(CC, Decl(typeOfThisInStaticMembers10.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers10.ts, 26, 10)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static f = () => this.c + 1; +>f : Symbol(DD.f, Decl(typeOfThisInStaticMembers10.ts, 34, 36)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + + static ff = function () { this.c + 1 } +>ff : Symbol(DD.ff, Decl(typeOfThisInStaticMembers10.ts, 35, 32)) + + static foo () { +>foo : Symbol(DD.foo, Decl(typeOfThisInStaticMembers10.ts, 36, 42)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + } + static get fa () { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers10.ts, 39, 5), Decl(typeOfThisInStaticMembers10.ts, 42, 5)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) + } + static set fa (v: number) { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers10.ts, 39, 5), Decl(typeOfThisInStaticMembers10.ts, 42, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 43, 19)) + + this.c = v + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers10.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers10.ts, 31, 21)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers10.ts, 43, 19)) + } } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).types index e60f1a0b5dabb..824241e883d28 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).types @@ -51,5 +51,154 @@ class D extends C { >this : typeof D >c : number >1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static foo () { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static get fa () { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static set fa (v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof D +>c : number +>v + 1 : number +>v : number +>1 : 1 + } +} + +class CC { +>CC : CC + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof CC +>a : number +>1 : 1 +} + +class DD extends CC { +>DD : DD +>CC : CC + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof CC +>a : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static foo () { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + } + static get fa () { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof DD +>c : number +>1 : 1 + } + static set fa (v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof DD +>c : number +>v + 1 : number +>v : number +>1 : 1 + } } diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts index 0743ff0af9c82..ea97cc9a93484 100644 --- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts @@ -15,4 +15,37 @@ class D extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } +} + +class CC { + static a = 1; + static b = this.a + 1; +} + +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } } From 23ebf10cc547cd0ec9cdbdf7264e7fe9c238393e Mon Sep 17 00:00:00 2001 From: kingwl Date: Thu, 25 Mar 2021 13:37:41 +0800 Subject: [PATCH 12/33] Avoid this in emitter --- src/compiler/transformers/classFields.ts | 28 ++++++++++++------- ...typeOfThisInStaticMembers10(target=es5).js | 8 +++--- ...typeOfThisInStaticMembers10(target=es6).js | 8 +++--- ...eOfThisInStaticMembers10(target=esnext).js | 8 +++--- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 7dddc29fc5a6a..feef65671c727 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -189,7 +189,7 @@ namespace ts { } } - function visitorThisOrSuperInStaticFieldContext(receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined) { + function visitorThisOrSuperInStaticFieldContext(receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined) { const shouldCareAboutSuper = baseClass && languageVersion >= ScriptTarget.ES2015; return function staticFieldThisOrSuperVisitor(node: Node): Node { if (!(node.transformFlags & (TransformFlags.ContainsLexicalThis | (shouldCareAboutSuper ? TransformFlags.ContainsLexicalSuper : TransformFlags.None)))) { @@ -202,9 +202,15 @@ namespace ts { } if (node.kind === SyntaxKind.ThisKeyword) { + if (hasClassDecorators) { + return factory.createParenthesizedExpression(factory.createVoidZero()) + } return nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver); } else if (baseClass && shouldCareAboutSuper && node.kind === SyntaxKind.SuperKeyword) { + if (hasClassDecorators) { + return factory.createParenthesizedExpression(factory.createVoidZero()); + } return nodeIsSynthesized(baseClass) ? baseClass : factory.cloneNode(baseClass); } @@ -716,7 +722,7 @@ namespace ts { // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. if (some(staticProperties)) { - addPropertyStatements(statements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression); + addPropertyStatements(statements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression, !!length(node.original?.decorators)); } return statements; @@ -763,6 +769,8 @@ namespace ts { visitNodes(node.heritageClauses, visitor, isHeritageClause), transformClassMembers(node, isDerivedClass) ); + + const hasClassDecorators = !!length(node.original?.decorators); const hasTransformableStatics = some(staticProperties, p => !!p.initializer || (shouldTransformPrivateElements && isPrivateIdentifier(p.name))); if (hasTransformableStatics || some(pendingExpressions)) { if (isDecoratedClassDeclaration) { @@ -774,7 +782,7 @@ namespace ts { } if (pendingStatements && some(staticProperties)) { - addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression); + addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression, hasClassDecorators); } if (temp) { return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]); @@ -798,7 +806,7 @@ namespace ts { expressions.push(startOnNewLine(factory.createAssignment(temp, classExpression))); // Add any pending expressions leftover from elided or relocated computed property names addRange(expressions, map(pendingExpressions, startOnNewLine)); - addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp, extendsClauseElement?.expression)); + addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp, extendsClauseElement?.expression, hasClassDecorators)); expressions.push(startOnNewLine(temp)); return factory.inlineExpressions(expressions); @@ -977,9 +985,9 @@ namespace ts { * @param properties An array of property declarations to transform. * @param receiver The receiver on which each property should be assigned. */ - function addPropertyStatements(statements: Statement[], properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression, baseClass?: LeftHandSideExpression) { + function addPropertyStatements(statements: Statement[], properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression, baseClass?: LeftHandSideExpression, hasClassDecorators?: boolean) { for (const property of properties) { - const expression = transformProperty(property, receiver, baseClass); + const expression = transformProperty(property, receiver, baseClass, hasClassDecorators); if (!expression) { continue; } @@ -997,10 +1005,10 @@ namespace ts { * @param properties An array of property declarations to transform. * @param receiver The receiver on which each property should be assigned. */ - function generateInitializedPropertyExpressions(properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined) { + function generateInitializedPropertyExpressions(properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined) { const expressions: Expression[] = []; for (const property of properties) { - const expression = transformProperty(property, receiver, baseClass); + const expression = transformProperty(property, receiver, baseClass, hasClassDecorators); if (!expression) { continue; } @@ -1020,7 +1028,7 @@ namespace ts { * @param property The property declaration. * @param receiver The object receiving the property assignment. */ - function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined) { + function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined) { // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name) const emitAssignment = !context.getCompilerOptions().useDefineForClassFields; const propertyName = isComputedPropertyName(property.name) && !isSimpleInlineableExpression(property.name.expression) @@ -1063,7 +1071,7 @@ namespace ts { } const initializer = property.initializer || emitAssignment ? visitNode( - hasStaticModifier(property) ? visitNode(property.initializer, visitorThisOrSuperInStaticFieldContext(receiver, baseClass), isExpression) : property.initializer, + hasStaticModifier(property) ? visitNode(property.initializer, visitorThisOrSuperInStaticFieldContext(receiver, baseClass, hasClassDecorators), isExpression) : property.initializer, visitor, isExpression ) ?? factory.createVoidZero() diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js index 53d8cf764a8e8..5aa719c3d288a 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js @@ -74,7 +74,7 @@ var C = /** @class */ (function () { function C() { } C.a = 1; - C.b = C.a + 1; + C.b = (void 0).a + 1; C = __decorate([ foo ], C); @@ -99,9 +99,9 @@ var D = /** @class */ (function (_super) { configurable: true }); D.c = 2; - D.d = D.c + 1; - D.e = _super.a + D.c + 1; - D.f = function () { return D.c + 1; }; + D.d = (void 0).c + 1; + D.e = _super.a + (void 0).c + 1; + D.f = function () { return (void 0).c + 1; }; D.ff = function () { this.c + 1; }; D = __decorate([ foo diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js index d3a167979f2ff..74a6f9d87b52e 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js @@ -58,7 +58,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, let C = class C { }; C.a = 1; -C.b = C.a + 1; +C.b = (void 0).a + 1; C = __decorate([ foo ], C); @@ -74,9 +74,9 @@ let D = class D extends C { } }; D.c = 2; -D.d = D.c + 1; -D.e = C.a + D.c + 1; -D.f = () => D.c + 1; +D.d = (void 0).c + 1; +D.e = (void 0).a + (void 0).c + 1; +D.f = () => (void 0).c + 1; D.ff = function () { this.c + 1; }; D = __decorate([ foo diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js index d3a167979f2ff..74a6f9d87b52e 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js @@ -58,7 +58,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, let C = class C { }; C.a = 1; -C.b = C.a + 1; +C.b = (void 0).a + 1; C = __decorate([ foo ], C); @@ -74,9 +74,9 @@ let D = class D extends C { } }; D.c = 2; -D.d = D.c + 1; -D.e = C.a + D.c + 1; -D.f = () => D.c + 1; +D.d = (void 0).c + 1; +D.e = (void 0).a + (void 0).c + 1; +D.f = () => (void 0).c + 1; D.ff = function () { this.c + 1; }; D = __decorate([ foo From fbb617e4d304e7e24be1d38a2cce0dd8b858e5de Mon Sep 17 00:00:00 2001 From: kingwl Date: Thu, 25 Mar 2021 14:23:13 +0800 Subject: [PATCH 13/33] make lint happy --- src/compiler/transformers/classFields.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index feef65671c727..a750c31aa95a3 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -203,7 +203,7 @@ namespace ts { if (node.kind === SyntaxKind.ThisKeyword) { if (hasClassDecorators) { - return factory.createParenthesizedExpression(factory.createVoidZero()) + return factory.createParenthesizedExpression(factory.createVoidZero()); } return nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver); } From 40af136427123683e0bc2c98e5537517bd22ee7a Mon Sep 17 00:00:00 2001 From: kingwl Date: Thu, 25 Mar 2021 15:10:20 +0800 Subject: [PATCH 14/33] Add class expression tests --- .../typeOfThisInStaticMembers11.ts | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts new file mode 100644 index 0000000000000..d8fc9b02de159 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts @@ -0,0 +1,49 @@ +// @target: esnext, es6, es5 +// @useDefineForClassFields: false +// @experimentalDecorators: true + +declare const foo: any; + +@foo +class C { + static a = 1; + static b = this.a + 1; +} + +const D = class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } +} + +function ret () { + return class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } +} + From 2630d0731ae88c784b8734c8db62d1b13aca45c2 Mon Sep 17 00:00:00 2001 From: kingwl Date: Thu, 25 Mar 2021 15:13:56 +0800 Subject: [PATCH 15/33] Add computed name test --- ...isInStaticMembers11(target=es5).errors.txt | 55 +++++ ...typeOfThisInStaticMembers11(target=es5).js | 144 ++++++++++++ ...fThisInStaticMembers11(target=es5).symbols | 153 +++++++++++++ ...eOfThisInStaticMembers11(target=es5).types | 205 ++++++++++++++++++ ...isInStaticMembers11(target=es6).errors.txt | 55 +++++ ...typeOfThisInStaticMembers11(target=es6).js | 108 +++++++++ ...fThisInStaticMembers11(target=es6).symbols | 153 +++++++++++++ ...eOfThisInStaticMembers11(target=es6).types | 205 ++++++++++++++++++ ...nStaticMembers11(target=esnext).errors.txt | 55 +++++ ...eOfThisInStaticMembers11(target=esnext).js | 108 +++++++++ ...isInStaticMembers11(target=esnext).symbols | 153 +++++++++++++ ...ThisInStaticMembers11(target=esnext).types | 205 ++++++++++++++++++ .../typeOfThisInStaticMembers11.ts | 39 ++-- 13 files changed, 1620 insertions(+), 18 deletions(-) create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).types diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt new file mode 100644 index 0000000000000..ad6261665fa2b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt @@ -0,0 +1,55 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (1 errors) ==== + declare const foo: any; + + @foo + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + } + + const classComputedName = "classComputedName" + + const D = class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } + + function ret() { + return class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } + } + + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js new file mode 100644 index 0000000000000..11188b8828efb --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js @@ -0,0 +1,144 @@ +//// [typeOfThisInStaticMembers11.ts] +declare const foo: any; + +@foo +class C { + static a = 1; + static b = this.a + 1; +} + +const classComputedName = "classComputedName" + +const D = class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } +} + +function ret() { + return class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } +} + + + +//// [typeOfThisInStaticMembers11.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var _a, _b; +var C = /** @class */ (function () { + function C() { + } + C.a = 1; + C.b = (void 0).a + 1; + C = __decorate([ + foo + ], C); + return C; +}()); +var classComputedName = "classComputedName"; +var D = (_b = /** @class */ (function (_super) { + __extends(class_1, _super); + function class_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + class_1.foo = function () { + return this.c + 1; + }; + Object.defineProperty(class_1, "fa", { + get: function () { + return this.c + 1; + }, + set: function (v) { + this.c = v + 1; + }, + enumerable: false, + configurable: true + }); + return class_1; + }(C)), + _a = classComputedName, + _b.c = 2, + _b.d = _b.c + 1, + _b.e = _super.a + _b.c + 1, + _b.f = function () { return _b.c + 1; }, + _b.ff = function () { this.c + 1; }, + _b[_a] = 1, + _b); +function ret() { + var _b, _c; + return _c = /** @class */ (function (_super) { + __extends(class_2, _super); + function class_2() { + return _super !== null && _super.apply(this, arguments) || this; + } + class_2.foo = function () { + return this.c + 1; + }; + Object.defineProperty(class_2, "fa", { + get: function () { + return this.c + 1; + }, + set: function (v) { + this.c = v + 1; + }, + enumerable: false, + configurable: true + }); + return class_2; + }(C)), + _b = classComputedName, + _c.c = 2, + _c.d = _c.c + 1, + _c.e = _super.a + _c.c + 1, + _c.f = function () { return _c.c + 1; }, + _c.ff = function () { this.c + 1; }, + _c[_b] = 1, + _c; +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).symbols new file mode 100644 index 0000000000000..fc4ebfdd7704e --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).symbols @@ -0,0 +1,153 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts === +declare const foo: any; +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) + +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers11.ts, 4, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +} + +const classComputedName = "classComputedName" +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + +const D = class extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 5)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 11, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 12, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static f = () => this.c + 1; +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 13, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static ff = function () { this.c + 1 } +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 14, 32)) + + static [classComputedName] = 1; +>[classComputedName] : Symbol(D[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 15, 42)) +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + + static foo() { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 16, 35)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + } + static get fa() { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + } + static set fa(v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + + this.c = v + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + } +} + +function ret() { +>ret : Symbol(ret, Decl(typeOfThisInStaticMembers11.ts, 26, 1)) + + return class extends C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static c = 2; +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static d = this.c + 1; +>d : Symbol((Anonymous class).d, Decl(typeOfThisInStaticMembers11.ts, 30, 21)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static e = super.a + this.c + 1; +>e : Symbol((Anonymous class).e, Decl(typeOfThisInStaticMembers11.ts, 31, 30)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static f = () => this.c + 1; +>f : Symbol((Anonymous class).f, Decl(typeOfThisInStaticMembers11.ts, 32, 40)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static ff = function () { this.c + 1 } +>ff : Symbol((Anonymous class).ff, Decl(typeOfThisInStaticMembers11.ts, 33, 36)) + + static [classComputedName] = 1; +>[classComputedName] : Symbol((Anonymous class)[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 34, 46)) +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + + static foo() { +>foo : Symbol((Anonymous class).foo, Decl(typeOfThisInStaticMembers11.ts, 35, 39)) + + return this.c + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + } + static get fa() { +>fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) + + return this.c + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + } + static set fa(v: number) { +>fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) + + this.c = v + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) + } + } +} + + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).types new file mode 100644 index 0000000000000..8c216abaae9f5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).types @@ -0,0 +1,205 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts === +declare const foo: any; +>foo : any + +@foo +>foo : any + +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +const classComputedName = "classComputedName" +>classComputedName : "classComputedName" +>"classComputedName" : "classComputedName" + +const D = class extends C { +>D : typeof D +>class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; }} : typeof D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static [classComputedName] = 1; +>[classComputedName] : number +>classComputedName : "classComputedName" +>1 : 1 + + static foo() { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static get fa() { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static set fa(v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof D +>c : number +>v + 1 : number +>v : number +>1 : 1 + } +} + +function ret() { +>ret : () => typeof (Anonymous class) + + return class extends C { +>class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; } } : typeof (Anonymous class) +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static [classComputedName] = 1; +>[classComputedName] : number +>classComputedName : "classComputedName" +>1 : 1 + + static foo() { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + } + static get fa() { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + } + static set fa(v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>v + 1 : number +>v : number +>1 : 1 + } + } +} + + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt new file mode 100644 index 0000000000000..ad6261665fa2b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt @@ -0,0 +1,55 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (1 errors) ==== + declare const foo: any; + + @foo + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + } + + const classComputedName = "classComputedName" + + const D = class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } + + function ret() { + return class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } + } + + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js new file mode 100644 index 0000000000000..94a9794242ae2 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js @@ -0,0 +1,108 @@ +//// [typeOfThisInStaticMembers11.ts] +declare const foo: any; + +@foo +class C { + static a = 1; + static b = this.a + 1; +} + +const classComputedName = "classComputedName" + +const D = class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } +} + +function ret() { + return class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } +} + + + +//// [typeOfThisInStaticMembers11.js] +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var _a, _b; +let C = class C { +}; +C.a = 1; +C.b = (void 0).a + 1; +C = __decorate([ + foo +], C); +const classComputedName = "classComputedName"; +const D = (_b = class extends C { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } + }, + _a = classComputedName, + _b.c = 2, + _b.d = _b.c + 1, + _b.e = C.a + _b.c + 1, + _b.f = () => _b.c + 1, + _b.ff = function () { this.c + 1; }, + _b[_a] = 1, + _b); +function ret() { + var _b, _c; + return _c = class extends C { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } + }, + _b = classComputedName, + _c.c = 2, + _c.d = _c.c + 1, + _c.e = C.a + _c.c + 1, + _c.f = () => _c.c + 1, + _c.ff = function () { this.c + 1; }, + _c[_b] = 1, + _c; +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).symbols new file mode 100644 index 0000000000000..fc4ebfdd7704e --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).symbols @@ -0,0 +1,153 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts === +declare const foo: any; +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) + +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers11.ts, 4, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +} + +const classComputedName = "classComputedName" +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + +const D = class extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 5)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 11, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 12, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static f = () => this.c + 1; +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 13, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static ff = function () { this.c + 1 } +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 14, 32)) + + static [classComputedName] = 1; +>[classComputedName] : Symbol(D[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 15, 42)) +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + + static foo() { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 16, 35)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + } + static get fa() { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + } + static set fa(v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + + this.c = v + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + } +} + +function ret() { +>ret : Symbol(ret, Decl(typeOfThisInStaticMembers11.ts, 26, 1)) + + return class extends C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static c = 2; +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static d = this.c + 1; +>d : Symbol((Anonymous class).d, Decl(typeOfThisInStaticMembers11.ts, 30, 21)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static e = super.a + this.c + 1; +>e : Symbol((Anonymous class).e, Decl(typeOfThisInStaticMembers11.ts, 31, 30)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static f = () => this.c + 1; +>f : Symbol((Anonymous class).f, Decl(typeOfThisInStaticMembers11.ts, 32, 40)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static ff = function () { this.c + 1 } +>ff : Symbol((Anonymous class).ff, Decl(typeOfThisInStaticMembers11.ts, 33, 36)) + + static [classComputedName] = 1; +>[classComputedName] : Symbol((Anonymous class)[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 34, 46)) +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + + static foo() { +>foo : Symbol((Anonymous class).foo, Decl(typeOfThisInStaticMembers11.ts, 35, 39)) + + return this.c + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + } + static get fa() { +>fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) + + return this.c + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + } + static set fa(v: number) { +>fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) + + this.c = v + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) + } + } +} + + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).types new file mode 100644 index 0000000000000..8c216abaae9f5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).types @@ -0,0 +1,205 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts === +declare const foo: any; +>foo : any + +@foo +>foo : any + +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +const classComputedName = "classComputedName" +>classComputedName : "classComputedName" +>"classComputedName" : "classComputedName" + +const D = class extends C { +>D : typeof D +>class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; }} : typeof D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static [classComputedName] = 1; +>[classComputedName] : number +>classComputedName : "classComputedName" +>1 : 1 + + static foo() { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static get fa() { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static set fa(v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof D +>c : number +>v + 1 : number +>v : number +>1 : 1 + } +} + +function ret() { +>ret : () => typeof (Anonymous class) + + return class extends C { +>class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; } } : typeof (Anonymous class) +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static [classComputedName] = 1; +>[classComputedName] : number +>classComputedName : "classComputedName" +>1 : 1 + + static foo() { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + } + static get fa() { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + } + static set fa(v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>v + 1 : number +>v : number +>1 : 1 + } + } +} + + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt new file mode 100644 index 0000000000000..ad6261665fa2b --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt @@ -0,0 +1,55 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (1 errors) ==== + declare const foo: any; + + @foo + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. + } + + const classComputedName = "classComputedName" + + const D = class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } + + function ret() { + return class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } + } + + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).js new file mode 100644 index 0000000000000..94a9794242ae2 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).js @@ -0,0 +1,108 @@ +//// [typeOfThisInStaticMembers11.ts] +declare const foo: any; + +@foo +class C { + static a = 1; + static b = this.a + 1; +} + +const classComputedName = "classComputedName" + +const D = class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } +} + +function ret() { + return class extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; + } + } +} + + + +//// [typeOfThisInStaticMembers11.js] +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var _a, _b; +let C = class C { +}; +C.a = 1; +C.b = (void 0).a + 1; +C = __decorate([ + foo +], C); +const classComputedName = "classComputedName"; +const D = (_b = class extends C { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } + }, + _a = classComputedName, + _b.c = 2, + _b.d = _b.c + 1, + _b.e = C.a + _b.c + 1, + _b.f = () => _b.c + 1, + _b.ff = function () { this.c + 1; }, + _b[_a] = 1, + _b); +function ret() { + var _b, _c; + return _c = class extends C { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } + }, + _b = classComputedName, + _c.c = 2, + _c.d = _c.c + 1, + _c.e = C.a + _c.c + 1, + _c.f = () => _c.c + 1, + _c.ff = function () { this.c + 1; }, + _c[_b] = 1, + _c; +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).symbols new file mode 100644 index 0000000000000..fc4ebfdd7704e --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).symbols @@ -0,0 +1,153 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts === +declare const foo: any; +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) + +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) + +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static a = 1; +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) + + static b = this.a + 1; +>b : Symbol(C.b, Decl(typeOfThisInStaticMembers11.ts, 4, 17)) +>this.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +} + +const classComputedName = "classComputedName" +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + +const D = class extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 5)) +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static c = 2; +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static d = this.c + 1; +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 11, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static e = super.a + this.c + 1; +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 12, 26)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static f = () => this.c + 1; +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 13, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + + static ff = function () { this.c + 1 } +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 14, 32)) + + static [classComputedName] = 1; +>[classComputedName] : Symbol(D[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 15, 42)) +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + + static foo() { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 16, 35)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + } + static get fa() { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) + + return this.c + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) + } + static set fa(v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + + this.c = v + 1; +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + } +} + +function ret() { +>ret : Symbol(ret, Decl(typeOfThisInStaticMembers11.ts, 26, 1)) + + return class extends C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + + static c = 2; +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static d = this.c + 1; +>d : Symbol((Anonymous class).d, Decl(typeOfThisInStaticMembers11.ts, 30, 21)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static e = super.a + this.c + 1; +>e : Symbol((Anonymous class).e, Decl(typeOfThisInStaticMembers11.ts, 31, 30)) +>super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) +>a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static f = () => this.c + 1; +>f : Symbol((Anonymous class).f, Decl(typeOfThisInStaticMembers11.ts, 32, 40)) +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + + static ff = function () { this.c + 1 } +>ff : Symbol((Anonymous class).ff, Decl(typeOfThisInStaticMembers11.ts, 33, 36)) + + static [classComputedName] = 1; +>[classComputedName] : Symbol((Anonymous class)[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 34, 46)) +>classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) + + static foo() { +>foo : Symbol((Anonymous class).foo, Decl(typeOfThisInStaticMembers11.ts, 35, 39)) + + return this.c + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + } + static get fa() { +>fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) + + return this.c + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + } + static set fa(v: number) { +>fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) + + this.c = v + 1; +>this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) +>c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) + } + } +} + + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).types new file mode 100644 index 0000000000000..8c216abaae9f5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).types @@ -0,0 +1,205 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts === +declare const foo: any; +>foo : any + +@foo +>foo : any + +class C { +>C : C + + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof C +>a : number +>1 : 1 +} + +const classComputedName = "classComputedName" +>classComputedName : "classComputedName" +>"classComputedName" : "classComputedName" + +const D = class extends C { +>D : typeof D +>class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; }} : typeof D +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static [classComputedName] = 1; +>[classComputedName] : number +>classComputedName : "classComputedName" +>1 : 1 + + static foo() { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static get fa() { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof D +>c : number +>1 : 1 + } + static set fa(v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof D +>c : number +>v + 1 : number +>v : number +>1 : 1 + } +} + +function ret() { +>ret : () => typeof (Anonymous class) + + return class extends C { +>class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; } } : typeof (Anonymous class) +>C : C + + static c = 2; +>c : number +>2 : 2 + + static d = this.c + 1; +>d : number +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static e = super.a + this.c + 1; +>e : number +>super.a + this.c + 1 : number +>super.a + this.c : number +>super.a : number +>super : typeof C +>a : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static f = () => this.c + 1; +>f : () => number +>() => this.c + 1 : () => number +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + + static ff = function () { this.c + 1 } +>ff : () => void +>function () { this.c + 1 } : () => void +>this.c + 1 : any +>this.c : any +>this : any +>c : any +>1 : 1 + + static [classComputedName] = 1; +>[classComputedName] : number +>classComputedName : "classComputedName" +>1 : 1 + + static foo() { +>foo : () => number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + } + static get fa() { +>fa : number + + return this.c + 1; +>this.c + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>1 : 1 + } + static set fa(v: number) { +>fa : number +>v : number + + this.c = v + 1; +>this.c = v + 1 : number +>this.c : number +>this : typeof (Anonymous class) +>c : number +>v + 1 : number +>v : number +>1 : 1 + } + } +} + + diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts index d8fc9b02de159..c1f29204980f3 100644 --- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts @@ -10,38 +10,41 @@ class C { static b = this.a + 1; } +const classComputedName = "classComputedName" + const D = class extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - static f = () => this.c + 1; - static ff = function () { this.c + 1 } - static foo () { - return this.c + 1; - } - static get fa () { - return this.c + 1; - } - static set fa (v: number) { - this.c = v + 1; - } + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static [classComputedName] = 1; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v: number) { + this.c = v + 1; } } -function ret () { +function ret() { return class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } - static foo () { + static [classComputedName] = 1; + static foo() { return this.c + 1; } - static get fa () { + static get fa() { return this.c + 1; } - static set fa (v: number) { + static set fa(v: number) { this.c = v + 1; } } From f5299db4019d9d223f8dc2b7d199abf90e79e335 Mon Sep 17 00:00:00 2001 From: kingwl Date: Fri, 26 Mar 2021 13:05:18 +0800 Subject: [PATCH 16/33] Avoid super if target below es6 --- src/compiler/transformers/classFields.ts | 41 ++++++++++++------- ...typeOfThisInStaticMembers10(target=es5).js | 2 +- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index a750c31aa95a3..ec5f7f6f710e4 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -190,28 +190,41 @@ namespace ts { } function visitorThisOrSuperInStaticFieldContext(receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined) { - const shouldCareAboutSuper = baseClass && languageVersion >= ScriptTarget.ES2015; + const shouldRewriteSuper = baseClass && languageVersion >= ScriptTarget.ES2015; + const shouldAvoidThisOrSuper = hasClassDecorators; + const shouldCareAboutSuper = shouldRewriteSuper || shouldAvoidThisOrSuper; return function staticFieldThisOrSuperVisitor(node: Node): Node { if (!(node.transformFlags & (TransformFlags.ContainsLexicalThis | (shouldCareAboutSuper ? TransformFlags.ContainsLexicalSuper : TransformFlags.None)))) { return node; } - // `This` access in static field cannot cross function or class boundary. + // `This` access in static field cannot cross function boundary. if (isClassLike(node) || isFunctionDeclaration(node) || isFunctionExpression(node)) { return node; } - if (node.kind === SyntaxKind.ThisKeyword) { - if (hasClassDecorators) { - return factory.createParenthesizedExpression(factory.createVoidZero()); - } - return nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver); + const originalNode = getOriginalNode(node); + if (originalNode.kind === SyntaxKind.ThisKeyword) { + return setTextRange( + setOriginalNode( + shouldAvoidThisOrSuper ? + factory.createParenthesizedExpression(factory.createVoidZero()) : + factory.cloneNode(receiver), + node, + ), + node + ); } - else if (baseClass && shouldCareAboutSuper && node.kind === SyntaxKind.SuperKeyword) { - if (hasClassDecorators) { - return factory.createParenthesizedExpression(factory.createVoidZero()); - } - return nodeIsSynthesized(baseClass) ? baseClass : factory.cloneNode(baseClass); + else if (baseClass && shouldCareAboutSuper && originalNode.kind === SyntaxKind.SuperKeyword) { + return setTextRange( + setOriginalNode( + shouldAvoidThisOrSuper ? + factory.createParenthesizedExpression(factory.createVoidZero()) : + factory.cloneNode(baseClass), + node + ), + node + ); } return visitEachChild(node, staticFieldThisOrSuperVisitor, context); @@ -722,7 +735,7 @@ namespace ts { // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. if (some(staticProperties)) { - addPropertyStatements(statements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression, !!length(node.original?.decorators)); + addPropertyStatements(statements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression, !!length(getOriginalNode(node).decorators)); } return statements; @@ -770,7 +783,7 @@ namespace ts { transformClassMembers(node, isDerivedClass) ); - const hasClassDecorators = !!length(node.original?.decorators); + const hasClassDecorators = !!length(getOriginalNode(node).decorators); const hasTransformableStatics = some(staticProperties, p => !!p.initializer || (shouldTransformPrivateElements && isPrivateIdentifier(p.name))); if (hasTransformableStatics || some(pendingExpressions)) { if (isDecoratedClassDeclaration) { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js index 5aa719c3d288a..e7ff1bbff0ae7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js @@ -100,7 +100,7 @@ var D = /** @class */ (function (_super) { }); D.c = 2; D.d = (void 0).c + 1; - D.e = _super.a + (void 0).c + 1; + D.e = (void 0).a + (void 0).c + 1; D.f = function () { return (void 0).c + 1; }; D.ff = function () { this.c + 1; }; D = __decorate([ From 52b53cdd04caf9f83a0d9489ebd2dd1400df56d6 Mon Sep 17 00:00:00 2001 From: kingwl Date: Fri, 26 Mar 2021 14:34:58 +0800 Subject: [PATCH 17/33] Adjust function boundary --- src/compiler/transformers/classFields.ts | 11 +- src/compiler/utilitiesPublic.ts | 24 ++ ...isInStaticMembers11(target=es5).errors.txt | 60 +++-- ...typeOfThisInStaticMembers11(target=es5).js | 250 ++++++++++++------ ...fThisInStaticMembers11(target=es5).symbols | 199 +++++++------- ...eOfThisInStaticMembers11(target=es5).types | 91 ++++--- ...isInStaticMembers11(target=es6).errors.txt | 60 +++-- ...typeOfThisInStaticMembers11(target=es6).js | 203 +++++++++----- ...fThisInStaticMembers11(target=es6).symbols | 199 +++++++------- ...eOfThisInStaticMembers11(target=es6).types | 91 ++++--- ...nStaticMembers11(target=esnext).errors.txt | 60 +++-- ...eOfThisInStaticMembers11(target=esnext).js | 133 +++++----- ...isInStaticMembers11(target=esnext).symbols | 199 +++++++------- ...ThisInStaticMembers11(target=esnext).types | 91 ++++--- ...isInStaticMembers12(target=es5).errors.txt | 23 ++ ...typeOfThisInStaticMembers12(target=es5).js | 28 ++ ...fThisInStaticMembers12(target=es5).symbols | 19 ++ ...eOfThisInStaticMembers12(target=es5).types | 29 ++ ...isInStaticMembers12(target=es6).errors.txt | 23 ++ ...typeOfThisInStaticMembers12(target=es6).js | 24 ++ ...fThisInStaticMembers12(target=es6).symbols | 19 ++ ...eOfThisInStaticMembers12(target=es6).types | 29 ++ ...nStaticMembers12(target=esnext).errors.txt | 23 ++ ...eOfThisInStaticMembers12(target=esnext).js | 24 ++ ...isInStaticMembers12(target=esnext).symbols | 19 ++ ...ThisInStaticMembers12(target=esnext).types | 29 ++ ...isInStaticMembers13(target=es5).errors.txt | 23 ++ ...typeOfThisInStaticMembers13(target=es5).js | 48 ++++ ...fThisInStaticMembers13(target=es5).symbols | 19 ++ ...eOfThisInStaticMembers13(target=es5).types | 29 ++ ...isInStaticMembers13(target=es6).errors.txt | 23 ++ ...typeOfThisInStaticMembers13(target=es6).js | 44 +++ ...fThisInStaticMembers13(target=es6).symbols | 19 ++ ...eOfThisInStaticMembers13(target=es6).types | 29 ++ ...nStaticMembers13(target=esnext).errors.txt | 23 ++ ...eOfThisInStaticMembers13(target=esnext).js | 18 ++ ...isInStaticMembers13(target=esnext).symbols | 19 ++ ...ThisInStaticMembers13(target=esnext).types | 29 ++ .../typeOfThisInStaticMembers10.ts | 2 +- .../typeOfThisInStaticMembers11.ts | 51 ++-- .../typeOfThisInStaticMembers12.ts | 10 + .../typeOfThisInStaticMembers13.ts | 10 + 42 files changed, 1588 insertions(+), 768 deletions(-) create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).types create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).js create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).symbols create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).types create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index ec5f7f6f710e4..2e1d73ee112d0 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -189,17 +189,18 @@ namespace ts { } } - function visitorThisOrSuperInStaticFieldContext(receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined) { + function visitorThisOrSuperInStaticFieldContext(root: Expression | undefined, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined): Expression | undefined { const shouldRewriteSuper = baseClass && languageVersion >= ScriptTarget.ES2015; const shouldAvoidThisOrSuper = hasClassDecorators; const shouldCareAboutSuper = shouldRewriteSuper || shouldAvoidThisOrSuper; - return function staticFieldThisOrSuperVisitor(node: Node): Node { + + function staticFieldThisOrSuperVisitor(node: Expression): Expression { if (!(node.transformFlags & (TransformFlags.ContainsLexicalThis | (shouldCareAboutSuper ? TransformFlags.ContainsLexicalSuper : TransformFlags.None)))) { return node; } // `This` access in static field cannot cross function boundary. - if (isClassLike(node) || isFunctionDeclaration(node) || isFunctionExpression(node)) { + if (isThisOrSuperInStaticFieldBoundary(node, node !== root ? node.parent : undefined)) { return node; } @@ -229,6 +230,8 @@ namespace ts { return visitEachChild(node, staticFieldThisOrSuperVisitor, context); }; + + return visitNode(root, staticFieldThisOrSuperVisitor, isExpression); } /** @@ -1084,7 +1087,7 @@ namespace ts { } const initializer = property.initializer || emitAssignment ? visitNode( - hasStaticModifier(property) ? visitNode(property.initializer, visitorThisOrSuperInStaticFieldContext(receiver, baseClass, hasClassDecorators), isExpression) : property.initializer, + hasStaticModifier(property) ? visitorThisOrSuperInStaticFieldContext(property.initializer, receiver, baseClass, hasClassDecorators) : property.initializer, visitor, isExpression ) ?? factory.createVoidZero() diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 8285699d08753..0b8ca73336493 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1241,6 +1241,30 @@ namespace ts { } } + export function isThisOrSuperInStaticFieldBoundary(node: Node, parent: Node | undefined): boolean { + switch (node.kind) { + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + case SyntaxKind.Constructor: + return true; + } + + if (parent) { + switch (parent.kind) { + case SyntaxKind.PropertyDeclaration: + Debug.type(parent); + return node === parent.initializer; + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.MethodDeclaration: + Debug.type(parent); + return node !== parent.name; + } + } + + return false; + } + /* @internal */ export function isFunctionLikeKind(kind: SyntaxKind): boolean { switch (kind) { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt index ad6261665fa2b..eec33887e96bc 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt @@ -1,7 +1,10 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (1 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== declare const foo: any; @foo @@ -12,44 +15,49 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta !!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. } - const classComputedName = "classComputedName" - - const D = class extends C { + @foo + class D extends C { static c = 2; static d = this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static e = super.a + this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static f = () => this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { + static foo () { return this.c + 1; } - static get fa() { + static get fa () { return this.c + 1; } - static set fa(v: number) { + static set fa (v: number) { this.c = v + 1; } } - function ret() { - return class extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - static f = () => this.c + 1; - static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v: number) { - this.c = v + 1; - } - } + class CC { + static a = 1; + static b = this.a + 1; } + class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js index 11188b8828efb..89775f2d6f2b0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js @@ -7,46 +7,45 @@ class C { static b = this.a + 1; } -const classComputedName = "classComputedName" - -const D = class extends C { +@foo +class D extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { + static foo () { return this.c + 1; } - static get fa() { + static get fa () { return this.c + 1; } - static set fa(v: number) { + static set fa (v: number) { this.c = v + 1; } } -function ret() { - return class extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - static f = () => this.c + 1; - static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v: number) { - this.c = v + 1; - } - } +class CC { + static a = 1; + static b = this.a + 1; } +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } +} //// [typeOfThisInStaticMembers11.js] @@ -71,74 +70,153 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var _a, _b; var C = /** @class */ (function () { function C() { } - C.a = 1; - C.b = (void 0).a + 1; + Object.defineProperty(C, "a", { + enumerable: true, + configurable: true, + writable: true, + value: 1 + }); + Object.defineProperty(C, "b", { + enumerable: true, + configurable: true, + writable: true, + value: (void 0).a + 1 + }); C = __decorate([ foo ], C); return C; }()); -var classComputedName = "classComputedName"; -var D = (_b = /** @class */ (function (_super) { - __extends(class_1, _super); - function class_1() { - return _super !== null && _super.apply(this, arguments) || this; +var D = /** @class */ (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(D, "foo", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + return this.c + 1; + } + }); + Object.defineProperty(D, "fa", { + get: function () { + return this.c + 1; + }, + set: function (v) { + this.c = v + 1; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(D, "c", { + enumerable: true, + configurable: true, + writable: true, + value: 2 + }); + Object.defineProperty(D, "d", { + enumerable: true, + configurable: true, + writable: true, + value: (void 0).c + 1 + }); + Object.defineProperty(D, "e", { + enumerable: true, + configurable: true, + writable: true, + value: (void 0).a + (void 0).c + 1 + }); + Object.defineProperty(D, "f", { + enumerable: true, + configurable: true, + writable: true, + value: function () { return (void 0).c + 1; } + }); + Object.defineProperty(D, "ff", { + enumerable: true, + configurable: true, + writable: true, + value: function () { this.c + 1; } + }); + D = __decorate([ + foo + ], D); + return D; +}(C)); +var CC = /** @class */ (function () { + function CC() { + } + Object.defineProperty(CC, "a", { + enumerable: true, + configurable: true, + writable: true, + value: 1 + }); + Object.defineProperty(CC, "b", { + enumerable: true, + configurable: true, + writable: true, + value: CC.a + 1 + }); + return CC; +}()); +var DD = /** @class */ (function (_super) { + __extends(DD, _super); + function DD() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(DD, "foo", { + enumerable: false, + configurable: true, + writable: true, + value: function () { + return this.c + 1; } - class_1.foo = function () { + }); + Object.defineProperty(DD, "fa", { + get: function () { return this.c + 1; - }; - Object.defineProperty(class_1, "fa", { - get: function () { - return this.c + 1; - }, - set: function (v) { - this.c = v + 1; - }, - enumerable: false, - configurable: true - }); - return class_1; - }(C)), - _a = classComputedName, - _b.c = 2, - _b.d = _b.c + 1, - _b.e = _super.a + _b.c + 1, - _b.f = function () { return _b.c + 1; }, - _b.ff = function () { this.c + 1; }, - _b[_a] = 1, - _b); -function ret() { - var _b, _c; - return _c = /** @class */ (function (_super) { - __extends(class_2, _super); - function class_2() { - return _super !== null && _super.apply(this, arguments) || this; - } - class_2.foo = function () { - return this.c + 1; - }; - Object.defineProperty(class_2, "fa", { - get: function () { - return this.c + 1; - }, - set: function (v) { - this.c = v + 1; - }, - enumerable: false, - configurable: true - }); - return class_2; - }(C)), - _b = classComputedName, - _c.c = 2, - _c.d = _c.c + 1, - _c.e = _super.a + _c.c + 1, - _c.f = function () { return _c.c + 1; }, - _c.ff = function () { this.c + 1; }, - _c[_b] = 1, - _c; -} + }, + set: function (v) { + this.c = v + 1; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(DD, "c", { + enumerable: true, + configurable: true, + writable: true, + value: 2 + }); + Object.defineProperty(DD, "d", { + enumerable: true, + configurable: true, + writable: true, + value: DD.c + 1 + }); + Object.defineProperty(DD, "e", { + enumerable: true, + configurable: true, + writable: true, + value: _super.a + DD.c + 1 + }); + Object.defineProperty(DD, "f", { + enumerable: true, + configurable: true, + writable: true, + value: function () { return DD.c + 1; } + }); + Object.defineProperty(DD, "ff", { + enumerable: true, + configurable: true, + writable: true, + value: function () { this.c + 1; } + }); + return DD; +}(CC)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).symbols index fc4ebfdd7704e..d1df5efc4080b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).symbols @@ -18,136 +18,137 @@ class C { >a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) } -const classComputedName = "classComputedName" ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) -const D = class extends C { ->D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 5)) +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) >C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) static c = 2; ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static d = this.c + 1; ->d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 11, 17)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 10, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static e = super.a + this.c + 1; ->e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 12, 26)) +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 11, 26)) >super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) >super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) >a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static f = () => this.c + 1; ->f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 13, 36)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 12, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static ff = function () { this.c + 1 } ->ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 14, 32)) +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 13, 32)) - static [classComputedName] = 1; ->[classComputedName] : Symbol(D[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 15, 42)) ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) - - static foo() { ->foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 16, 35)) + static foo () { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 14, 42)) return this.c + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) } - static get fa() { ->fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) + static get fa () { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 17, 5), Decl(typeOfThisInStaticMembers11.ts, 20, 5)) return this.c + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) } - static set fa(v: number) { ->fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + static set fa (v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 17, 5), Decl(typeOfThisInStaticMembers11.ts, 20, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 21, 19)) this.c = v + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 21, 19)) } } -function ret() { ->ret : Symbol(ret, Decl(typeOfThisInStaticMembers11.ts, 26, 1)) +class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) - return class extends C { ->C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + static a = 1; +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) - static c = 2; ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + static b = this.a + 1; +>b : Symbol(CC.b, Decl(typeOfThisInStaticMembers11.ts, 27, 17)) +>this.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +} - static d = this.c + 1; ->d : Symbol((Anonymous class).d, Decl(typeOfThisInStaticMembers11.ts, 30, 21)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +class DD extends CC { +>DD : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) - static e = super.a + this.c + 1; ->e : Symbol((Anonymous class).e, Decl(typeOfThisInStaticMembers11.ts, 31, 30)) ->super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - - static f = () => this.c + 1; ->f : Symbol((Anonymous class).f, Decl(typeOfThisInStaticMembers11.ts, 32, 40)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - - static ff = function () { this.c + 1 } ->ff : Symbol((Anonymous class).ff, Decl(typeOfThisInStaticMembers11.ts, 33, 36)) - - static [classComputedName] = 1; ->[classComputedName] : Symbol((Anonymous class)[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 34, 46)) ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) - - static foo() { ->foo : Symbol((Anonymous class).foo, Decl(typeOfThisInStaticMembers11.ts, 35, 39)) - - return this.c + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - } - static get fa() { ->fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) - - return this.c + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - } - static set fa(v: number) { ->fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) - - this.c = v + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) - } + static c = 2; +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static d = this.c + 1; +>d : Symbol(DD.d, Decl(typeOfThisInStaticMembers11.ts, 32, 17)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static e = super.a + this.c + 1; +>e : Symbol(DD.e, Decl(typeOfThisInStaticMembers11.ts, 33, 26)) +>super.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>super : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static f = () => this.c + 1; +>f : Symbol(DD.f, Decl(typeOfThisInStaticMembers11.ts, 34, 36)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static ff = function () { this.c + 1 } +>ff : Symbol(DD.ff, Decl(typeOfThisInStaticMembers11.ts, 35, 32)) + + static foo () { +>foo : Symbol(DD.foo, Decl(typeOfThisInStaticMembers11.ts, 36, 42)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) } -} + static get fa () { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers11.ts, 39, 5), Decl(typeOfThisInStaticMembers11.ts, 42, 5)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + } + static set fa (v: number) { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers11.ts, 39, 5), Decl(typeOfThisInStaticMembers11.ts, 42, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 43, 19)) + this.c = v + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 43, 19)) + } +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).types index 8c216abaae9f5..44ad35960ec92 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).types @@ -21,13 +21,11 @@ class C { >1 : 1 } -const classComputedName = "classComputedName" ->classComputedName : "classComputedName" ->"classComputedName" : "classComputedName" +@foo +>foo : any -const D = class extends C { ->D : typeof D ->class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; }} : typeof D +class D extends C { +>D : D >C : C static c = 2; @@ -72,12 +70,7 @@ const D = class extends C { >c : any >1 : 1 - static [classComputedName] = 1; ->[classComputedName] : number ->classComputedName : "classComputedName" ->1 : 1 - - static foo() { + static foo () { >foo : () => number return this.c + 1; @@ -87,7 +80,7 @@ const D = class extends C { >c : number >1 : 1 } - static get fa() { + static get fa () { >fa : number return this.c + 1; @@ -97,7 +90,7 @@ const D = class extends C { >c : number >1 : 1 } - static set fa(v: number) { + static set fa (v: number) { >fa : number >v : number @@ -112,47 +105,60 @@ const D = class extends C { } } -function ret() { ->ret : () => typeof (Anonymous class) +class CC { +>CC : CC - return class extends C { ->class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; } } : typeof (Anonymous class) ->C : C + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof CC +>a : number +>1 : 1 +} - static c = 2; +class DD extends CC { +>DD : DD +>CC : CC + + static c = 2; >c : number >2 : 2 - static d = this.c + 1; + static d = this.c + 1; >d : number >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static e = super.a + this.c + 1; + static e = super.a + this.c + 1; >e : number >super.a + this.c + 1 : number >super.a + this.c : number >super.a : number ->super : typeof C +>super : typeof CC >a : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static f = () => this.c + 1; + static f = () => this.c + 1; >f : () => number >() => this.c + 1 : () => number >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static ff = function () { this.c + 1 } + static ff = function () { this.c + 1 } >ff : () => void >function () { this.c + 1 } : () => void >this.c + 1 : any @@ -161,45 +167,38 @@ function ret() { >c : any >1 : 1 - static [classComputedName] = 1; ->[classComputedName] : number ->classComputedName : "classComputedName" ->1 : 1 - - static foo() { + static foo () { >foo : () => number - return this.c + 1; + return this.c + 1; >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - } - static get fa() { + } + static get fa () { >fa : number - return this.c + 1; + return this.c + 1; >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - } - static set fa(v: number) { + } + static set fa (v: number) { >fa : number >v : number - this.c = v + 1; + this.c = v + 1; >this.c = v + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >v + 1 : number >v : number >1 : 1 - } } } - diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt index ad6261665fa2b..eec33887e96bc 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt @@ -1,7 +1,10 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (1 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== declare const foo: any; @foo @@ -12,44 +15,49 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta !!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. } - const classComputedName = "classComputedName" - - const D = class extends C { + @foo + class D extends C { static c = 2; static d = this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static e = super.a + this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static f = () => this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { + static foo () { return this.c + 1; } - static get fa() { + static get fa () { return this.c + 1; } - static set fa(v: number) { + static set fa (v: number) { this.c = v + 1; } } - function ret() { - return class extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - static f = () => this.c + 1; - static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v: number) { - this.c = v + 1; - } - } + class CC { + static a = 1; + static b = this.a + 1; } + class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js index 94a9794242ae2..3fea1512b8cbd 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js @@ -7,46 +7,45 @@ class C { static b = this.a + 1; } -const classComputedName = "classComputedName" - -const D = class extends C { +@foo +class D extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { + static foo () { return this.c + 1; } - static get fa() { + static get fa () { return this.c + 1; } - static set fa(v: number) { + static set fa (v: number) { this.c = v + 1; } } -function ret() { - return class extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - static f = () => this.c + 1; - static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v: number) { - this.c = v + 1; - } - } +class CC { + static a = 1; + static b = this.a + 1; } +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } +} //// [typeOfThisInStaticMembers11.js] @@ -56,53 +55,119 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var _a, _b; let C = class C { }; -C.a = 1; -C.b = (void 0).a + 1; +Object.defineProperty(C, "a", { + enumerable: true, + configurable: true, + writable: true, + value: 1 +}); +Object.defineProperty(C, "b", { + enumerable: true, + configurable: true, + writable: true, + value: (void 0).a + 1 +}); C = __decorate([ foo ], C); -const classComputedName = "classComputedName"; -const D = (_b = class extends C { - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v) { - this.c = v + 1; - } - }, - _a = classComputedName, - _b.c = 2, - _b.d = _b.c + 1, - _b.e = C.a + _b.c + 1, - _b.f = () => _b.c + 1, - _b.ff = function () { this.c + 1; }, - _b[_a] = 1, - _b); -function ret() { - var _b, _c; - return _c = class extends C { - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v) { - this.c = v + 1; - } - }, - _b = classComputedName, - _c.c = 2, - _c.d = _c.c + 1, - _c.e = C.a + _c.c + 1, - _c.f = () => _c.c + 1, - _c.ff = function () { this.c + 1; }, - _c[_b] = 1, - _c; +let D = class D extends C { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } +}; +Object.defineProperty(D, "c", { + enumerable: true, + configurable: true, + writable: true, + value: 2 +}); +Object.defineProperty(D, "d", { + enumerable: true, + configurable: true, + writable: true, + value: (void 0).c + 1 +}); +Object.defineProperty(D, "e", { + enumerable: true, + configurable: true, + writable: true, + value: (void 0).a + (void 0).c + 1 +}); +Object.defineProperty(D, "f", { + enumerable: true, + configurable: true, + writable: true, + value: () => (void 0).c + 1 +}); +Object.defineProperty(D, "ff", { + enumerable: true, + configurable: true, + writable: true, + value: function () { this.c + 1; } +}); +D = __decorate([ + foo +], D); +class CC { +} +Object.defineProperty(CC, "a", { + enumerable: true, + configurable: true, + writable: true, + value: 1 +}); +Object.defineProperty(CC, "b", { + enumerable: true, + configurable: true, + writable: true, + value: CC.a + 1 +}); +class DD extends CC { + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } } +Object.defineProperty(DD, "c", { + enumerable: true, + configurable: true, + writable: true, + value: 2 +}); +Object.defineProperty(DD, "d", { + enumerable: true, + configurable: true, + writable: true, + value: DD.c + 1 +}); +Object.defineProperty(DD, "e", { + enumerable: true, + configurable: true, + writable: true, + value: CC.a + DD.c + 1 +}); +Object.defineProperty(DD, "f", { + enumerable: true, + configurable: true, + writable: true, + value: () => DD.c + 1 +}); +Object.defineProperty(DD, "ff", { + enumerable: true, + configurable: true, + writable: true, + value: function () { this.c + 1; } +}); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).symbols index fc4ebfdd7704e..d1df5efc4080b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).symbols @@ -18,136 +18,137 @@ class C { >a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) } -const classComputedName = "classComputedName" ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) -const D = class extends C { ->D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 5)) +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) >C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) static c = 2; ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static d = this.c + 1; ->d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 11, 17)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 10, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static e = super.a + this.c + 1; ->e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 12, 26)) +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 11, 26)) >super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) >super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) >a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static f = () => this.c + 1; ->f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 13, 36)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 12, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static ff = function () { this.c + 1 } ->ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 14, 32)) +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 13, 32)) - static [classComputedName] = 1; ->[classComputedName] : Symbol(D[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 15, 42)) ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) - - static foo() { ->foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 16, 35)) + static foo () { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 14, 42)) return this.c + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) } - static get fa() { ->fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) + static get fa () { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 17, 5), Decl(typeOfThisInStaticMembers11.ts, 20, 5)) return this.c + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) } - static set fa(v: number) { ->fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + static set fa (v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 17, 5), Decl(typeOfThisInStaticMembers11.ts, 20, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 21, 19)) this.c = v + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 21, 19)) } } -function ret() { ->ret : Symbol(ret, Decl(typeOfThisInStaticMembers11.ts, 26, 1)) +class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) - return class extends C { ->C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + static a = 1; +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) - static c = 2; ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + static b = this.a + 1; +>b : Symbol(CC.b, Decl(typeOfThisInStaticMembers11.ts, 27, 17)) +>this.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +} - static d = this.c + 1; ->d : Symbol((Anonymous class).d, Decl(typeOfThisInStaticMembers11.ts, 30, 21)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +class DD extends CC { +>DD : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) - static e = super.a + this.c + 1; ->e : Symbol((Anonymous class).e, Decl(typeOfThisInStaticMembers11.ts, 31, 30)) ->super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - - static f = () => this.c + 1; ->f : Symbol((Anonymous class).f, Decl(typeOfThisInStaticMembers11.ts, 32, 40)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - - static ff = function () { this.c + 1 } ->ff : Symbol((Anonymous class).ff, Decl(typeOfThisInStaticMembers11.ts, 33, 36)) - - static [classComputedName] = 1; ->[classComputedName] : Symbol((Anonymous class)[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 34, 46)) ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) - - static foo() { ->foo : Symbol((Anonymous class).foo, Decl(typeOfThisInStaticMembers11.ts, 35, 39)) - - return this.c + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - } - static get fa() { ->fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) - - return this.c + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - } - static set fa(v: number) { ->fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) - - this.c = v + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) - } + static c = 2; +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static d = this.c + 1; +>d : Symbol(DD.d, Decl(typeOfThisInStaticMembers11.ts, 32, 17)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static e = super.a + this.c + 1; +>e : Symbol(DD.e, Decl(typeOfThisInStaticMembers11.ts, 33, 26)) +>super.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>super : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static f = () => this.c + 1; +>f : Symbol(DD.f, Decl(typeOfThisInStaticMembers11.ts, 34, 36)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static ff = function () { this.c + 1 } +>ff : Symbol(DD.ff, Decl(typeOfThisInStaticMembers11.ts, 35, 32)) + + static foo () { +>foo : Symbol(DD.foo, Decl(typeOfThisInStaticMembers11.ts, 36, 42)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) } -} + static get fa () { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers11.ts, 39, 5), Decl(typeOfThisInStaticMembers11.ts, 42, 5)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + } + static set fa (v: number) { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers11.ts, 39, 5), Decl(typeOfThisInStaticMembers11.ts, 42, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 43, 19)) + this.c = v + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 43, 19)) + } +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).types index 8c216abaae9f5..44ad35960ec92 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).types @@ -21,13 +21,11 @@ class C { >1 : 1 } -const classComputedName = "classComputedName" ->classComputedName : "classComputedName" ->"classComputedName" : "classComputedName" +@foo +>foo : any -const D = class extends C { ->D : typeof D ->class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; }} : typeof D +class D extends C { +>D : D >C : C static c = 2; @@ -72,12 +70,7 @@ const D = class extends C { >c : any >1 : 1 - static [classComputedName] = 1; ->[classComputedName] : number ->classComputedName : "classComputedName" ->1 : 1 - - static foo() { + static foo () { >foo : () => number return this.c + 1; @@ -87,7 +80,7 @@ const D = class extends C { >c : number >1 : 1 } - static get fa() { + static get fa () { >fa : number return this.c + 1; @@ -97,7 +90,7 @@ const D = class extends C { >c : number >1 : 1 } - static set fa(v: number) { + static set fa (v: number) { >fa : number >v : number @@ -112,47 +105,60 @@ const D = class extends C { } } -function ret() { ->ret : () => typeof (Anonymous class) +class CC { +>CC : CC - return class extends C { ->class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; } } : typeof (Anonymous class) ->C : C + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof CC +>a : number +>1 : 1 +} - static c = 2; +class DD extends CC { +>DD : DD +>CC : CC + + static c = 2; >c : number >2 : 2 - static d = this.c + 1; + static d = this.c + 1; >d : number >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static e = super.a + this.c + 1; + static e = super.a + this.c + 1; >e : number >super.a + this.c + 1 : number >super.a + this.c : number >super.a : number ->super : typeof C +>super : typeof CC >a : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static f = () => this.c + 1; + static f = () => this.c + 1; >f : () => number >() => this.c + 1 : () => number >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static ff = function () { this.c + 1 } + static ff = function () { this.c + 1 } >ff : () => void >function () { this.c + 1 } : () => void >this.c + 1 : any @@ -161,45 +167,38 @@ function ret() { >c : any >1 : 1 - static [classComputedName] = 1; ->[classComputedName] : number ->classComputedName : "classComputedName" ->1 : 1 - - static foo() { + static foo () { >foo : () => number - return this.c + 1; + return this.c + 1; >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - } - static get fa() { + } + static get fa () { >fa : number - return this.c + 1; + return this.c + 1; >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - } - static set fa(v: number) { + } + static set fa (v: number) { >fa : number >v : number - this.c = v + 1; + this.c = v + 1; >this.c = v + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >v + 1 : number >v : number >1 : 1 - } } } - diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt index ad6261665fa2b..eec33887e96bc 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt @@ -1,7 +1,10 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (1 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== declare const foo: any; @foo @@ -12,44 +15,49 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta !!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. } - const classComputedName = "classComputedName" - - const D = class extends C { + @foo + class D extends C { static c = 2; static d = this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static e = super.a + this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static f = () => this.c + 1; + ~~~~ +!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { + static foo () { return this.c + 1; } - static get fa() { + static get fa () { return this.c + 1; } - static set fa(v: number) { + static set fa (v: number) { this.c = v + 1; } } - function ret() { - return class extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - static f = () => this.c + 1; - static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v: number) { - this.c = v + 1; - } - } + class CC { + static a = 1; + static b = this.a + 1; } + class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).js index 94a9794242ae2..3e3c578c3dde8 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).js @@ -7,46 +7,45 @@ class C { static b = this.a + 1; } -const classComputedName = "classComputedName" - -const D = class extends C { +@foo +class D extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { + static foo () { return this.c + 1; } - static get fa() { + static get fa () { return this.c + 1; } - static set fa(v: number) { + static set fa (v: number) { this.c = v + 1; } } -function ret() { - return class extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - static f = () => this.c + 1; - static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v: number) { - this.c = v + 1; - } - } +class CC { + static a = 1; + static b = this.a + 1; } +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } +} //// [typeOfThisInStaticMembers11.js] @@ -56,53 +55,49 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var _a, _b; let C = class C { + static a = 1; + static b = this.a + 1; }; -C.a = 1; -C.b = (void 0).a + 1; C = __decorate([ foo ], C); -const classComputedName = "classComputedName"; -const D = (_b = class extends C { - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v) { - this.c = v + 1; - } - }, - _a = classComputedName, - _b.c = 2, - _b.d = _b.c + 1, - _b.e = C.a + _b.c + 1, - _b.f = () => _b.c + 1, - _b.ff = function () { this.c + 1; }, - _b[_a] = 1, - _b); -function ret() { - var _b, _c; - return _c = class extends C { - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v) { - this.c = v + 1; - } - }, - _b = classComputedName, - _c.c = 2, - _c.d = _c.c + 1, - _c.e = C.a + _c.c + 1, - _c.f = () => _c.c + 1, - _c.ff = function () { this.c + 1; }, - _c[_b] = 1, - _c; +let D = class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1; }; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } +}; +D = __decorate([ + foo +], D); +class CC { + static a = 1; + static b = this.a + 1; +} +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1; }; + static foo() { + return this.c + 1; + } + static get fa() { + return this.c + 1; + } + static set fa(v) { + this.c = v + 1; + } } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).symbols index fc4ebfdd7704e..d1df5efc4080b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).symbols @@ -18,136 +18,137 @@ class C { >a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) } -const classComputedName = "classComputedName" ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) +@foo +>foo : Symbol(foo, Decl(typeOfThisInStaticMembers11.ts, 0, 13)) -const D = class extends C { ->D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 5)) +class D extends C { +>D : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) >C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) static c = 2; ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static d = this.c + 1; ->d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 11, 17)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>d : Symbol(D.d, Decl(typeOfThisInStaticMembers11.ts, 10, 17)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static e = super.a + this.c + 1; ->e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 12, 26)) +>e : Symbol(D.e, Decl(typeOfThisInStaticMembers11.ts, 11, 26)) >super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) >super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) >a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static f = () => this.c + 1; ->f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 13, 36)) ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>f : Symbol(D.f, Decl(typeOfThisInStaticMembers11.ts, 12, 36)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) static ff = function () { this.c + 1 } ->ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 14, 32)) +>ff : Symbol(D.ff, Decl(typeOfThisInStaticMembers11.ts, 13, 32)) - static [classComputedName] = 1; ->[classComputedName] : Symbol(D[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 15, 42)) ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) - - static foo() { ->foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 16, 35)) + static foo () { +>foo : Symbol(D.foo, Decl(typeOfThisInStaticMembers11.ts, 14, 42)) return this.c + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) } - static get fa() { ->fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) + static get fa () { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 17, 5), Decl(typeOfThisInStaticMembers11.ts, 20, 5)) return this.c + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) } - static set fa(v: number) { ->fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 19, 5), Decl(typeOfThisInStaticMembers11.ts, 22, 5)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) + static set fa (v: number) { +>fa : Symbol(D.fa, Decl(typeOfThisInStaticMembers11.ts, 17, 5), Decl(typeOfThisInStaticMembers11.ts, 20, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 21, 19)) this.c = v + 1; ->this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 10, 9)) ->c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 10, 27)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 23, 18)) +>this.c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>this : Symbol(D, Decl(typeOfThisInStaticMembers11.ts, 6, 1)) +>c : Symbol(D.c, Decl(typeOfThisInStaticMembers11.ts, 9, 19)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 21, 19)) } } -function ret() { ->ret : Symbol(ret, Decl(typeOfThisInStaticMembers11.ts, 26, 1)) +class CC { +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) - return class extends C { ->C : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) + static a = 1; +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) - static c = 2; ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) + static b = this.a + 1; +>b : Symbol(CC.b, Decl(typeOfThisInStaticMembers11.ts, 27, 17)) +>this.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>this : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +} - static d = this.c + 1; ->d : Symbol((Anonymous class).d, Decl(typeOfThisInStaticMembers11.ts, 30, 21)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) +class DD extends CC { +>DD : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>CC : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) - static e = super.a + this.c + 1; ->e : Symbol((Anonymous class).e, Decl(typeOfThisInStaticMembers11.ts, 31, 30)) ->super.a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->super : Symbol(C, Decl(typeOfThisInStaticMembers11.ts, 0, 23)) ->a : Symbol(C.a, Decl(typeOfThisInStaticMembers11.ts, 3, 9)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - - static f = () => this.c + 1; ->f : Symbol((Anonymous class).f, Decl(typeOfThisInStaticMembers11.ts, 32, 40)) ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - - static ff = function () { this.c + 1 } ->ff : Symbol((Anonymous class).ff, Decl(typeOfThisInStaticMembers11.ts, 33, 36)) - - static [classComputedName] = 1; ->[classComputedName] : Symbol((Anonymous class)[classComputedName], Decl(typeOfThisInStaticMembers11.ts, 34, 46)) ->classComputedName : Symbol(classComputedName, Decl(typeOfThisInStaticMembers11.ts, 8, 5)) - - static foo() { ->foo : Symbol((Anonymous class).foo, Decl(typeOfThisInStaticMembers11.ts, 35, 39)) - - return this.c + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - } - static get fa() { ->fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) - - return this.c + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) - } - static set fa(v: number) { ->fa : Symbol((Anonymous class).fa, Decl(typeOfThisInStaticMembers11.ts, 38, 9), Decl(typeOfThisInStaticMembers11.ts, 41, 9)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) - - this.c = v + 1; ->this.c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->this : Symbol((Anonymous class), Decl(typeOfThisInStaticMembers11.ts, 29, 10)) ->c : Symbol((Anonymous class).c, Decl(typeOfThisInStaticMembers11.ts, 29, 28)) ->v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 42, 22)) - } + static c = 2; +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static d = this.c + 1; +>d : Symbol(DD.d, Decl(typeOfThisInStaticMembers11.ts, 32, 17)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static e = super.a + this.c + 1; +>e : Symbol(DD.e, Decl(typeOfThisInStaticMembers11.ts, 33, 26)) +>super.a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>super : Symbol(CC, Decl(typeOfThisInStaticMembers11.ts, 24, 1)) +>a : Symbol(CC.a, Decl(typeOfThisInStaticMembers11.ts, 26, 10)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static f = () => this.c + 1; +>f : Symbol(DD.f, Decl(typeOfThisInStaticMembers11.ts, 34, 36)) +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + + static ff = function () { this.c + 1 } +>ff : Symbol(DD.ff, Decl(typeOfThisInStaticMembers11.ts, 35, 32)) + + static foo () { +>foo : Symbol(DD.foo, Decl(typeOfThisInStaticMembers11.ts, 36, 42)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) } -} + static get fa () { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers11.ts, 39, 5), Decl(typeOfThisInStaticMembers11.ts, 42, 5)) + + return this.c + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) + } + static set fa (v: number) { +>fa : Symbol(DD.fa, Decl(typeOfThisInStaticMembers11.ts, 39, 5), Decl(typeOfThisInStaticMembers11.ts, 42, 5)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 43, 19)) + this.c = v + 1; +>this.c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>this : Symbol(DD, Decl(typeOfThisInStaticMembers11.ts, 29, 1)) +>c : Symbol(DD.c, Decl(typeOfThisInStaticMembers11.ts, 31, 21)) +>v : Symbol(v, Decl(typeOfThisInStaticMembers11.ts, 43, 19)) + } +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).types index 8c216abaae9f5..44ad35960ec92 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).types +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).types @@ -21,13 +21,11 @@ class C { >1 : 1 } -const classComputedName = "classComputedName" ->classComputedName : "classComputedName" ->"classComputedName" : "classComputedName" +@foo +>foo : any -const D = class extends C { ->D : typeof D ->class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; }} : typeof D +class D extends C { +>D : D >C : C static c = 2; @@ -72,12 +70,7 @@ const D = class extends C { >c : any >1 : 1 - static [classComputedName] = 1; ->[classComputedName] : number ->classComputedName : "classComputedName" ->1 : 1 - - static foo() { + static foo () { >foo : () => number return this.c + 1; @@ -87,7 +80,7 @@ const D = class extends C { >c : number >1 : 1 } - static get fa() { + static get fa () { >fa : number return this.c + 1; @@ -97,7 +90,7 @@ const D = class extends C { >c : number >1 : 1 } - static set fa(v: number) { + static set fa (v: number) { >fa : number >v : number @@ -112,47 +105,60 @@ const D = class extends C { } } -function ret() { ->ret : () => typeof (Anonymous class) +class CC { +>CC : CC - return class extends C { ->class extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } static [classComputedName] = 1; static foo() { return this.c + 1; } static get fa() { return this.c + 1; } static set fa(v: number) { this.c = v + 1; } } : typeof (Anonymous class) ->C : C + static a = 1; +>a : number +>1 : 1 + + static b = this.a + 1; +>b : number +>this.a + 1 : number +>this.a : number +>this : typeof CC +>a : number +>1 : 1 +} - static c = 2; +class DD extends CC { +>DD : DD +>CC : CC + + static c = 2; >c : number >2 : 2 - static d = this.c + 1; + static d = this.c + 1; >d : number >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static e = super.a + this.c + 1; + static e = super.a + this.c + 1; >e : number >super.a + this.c + 1 : number >super.a + this.c : number >super.a : number ->super : typeof C +>super : typeof CC >a : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static f = () => this.c + 1; + static f = () => this.c + 1; >f : () => number >() => this.c + 1 : () => number >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - static ff = function () { this.c + 1 } + static ff = function () { this.c + 1 } >ff : () => void >function () { this.c + 1 } : () => void >this.c + 1 : any @@ -161,45 +167,38 @@ function ret() { >c : any >1 : 1 - static [classComputedName] = 1; ->[classComputedName] : number ->classComputedName : "classComputedName" ->1 : 1 - - static foo() { + static foo () { >foo : () => number - return this.c + 1; + return this.c + 1; >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - } - static get fa() { + } + static get fa () { >fa : number - return this.c + 1; + return this.c + 1; >this.c + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >1 : 1 - } - static set fa(v: number) { + } + static set fa (v: number) { >fa : number >v : number - this.c = v + 1; + this.c = v + 1; >this.c = v + 1 : number >this.c : number ->this : typeof (Anonymous class) +>this : typeof DD >c : number >v + 1 : number >v : number >1 : 1 - } } } - diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).errors.txt new file mode 100644 index 0000000000000..3855b2ee7b651 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(4,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(4,17): error TS2465: 'this' cannot be referenced in a computed property name. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(5,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(5,10): error TS2465: 'this' cannot be referenced in a computed property name. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts (4 errors) ==== + class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js new file mode 100644 index 0000000000000..157ae8e129dd5 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js @@ -0,0 +1,28 @@ +//// [typeOfThisInStaticMembers12.ts] +class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + } +} + + +//// [typeOfThisInStaticMembers12.js] +var C = /** @class */ (function () { + function C() { + } + var _a, _b, _c; + C.c = "foo"; + C.bar = (_c = /** @class */ (function () { + function Inner() { + this[_b] = 123; + } + return Inner; + }()), + _a = C.c, + _b = C.c, + _c[_a] = 123, + _c); + return C; +}()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).symbols new file mode 100644 index 0000000000000..16ad5c64fd0df --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers12.ts, 0, 0)) + + static readonly c: "foo" = "foo" +>c : Symbol(C.c, Decl(typeOfThisInStaticMembers12.ts, 0, 9)) + + static bar = class Inner { +>bar : Symbol(C.bar, Decl(typeOfThisInStaticMembers12.ts, 1, 36)) +>Inner : Symbol(Inner, Decl(typeOfThisInStaticMembers12.ts, 2, 16)) + + static [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers12.ts, 2, 31)) + + [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers12.ts, 3, 30)) + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).types new file mode 100644 index 0000000000000..ca37b9e4e200e --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts === +class C { +>C : C + + static readonly c: "foo" = "foo" +>c : "foo" +>"foo" : "foo" + + static bar = class Inner { +>bar : typeof Inner +>class Inner { static [this.c] = 123; [this.c] = 123; } : typeof Inner +>Inner : typeof Inner + + static [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + + [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).errors.txt new file mode 100644 index 0000000000000..3855b2ee7b651 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(4,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(4,17): error TS2465: 'this' cannot be referenced in a computed property name. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(5,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(5,10): error TS2465: 'this' cannot be referenced in a computed property name. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts (4 errors) ==== + class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js new file mode 100644 index 0000000000000..a6c055499ebeb --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js @@ -0,0 +1,24 @@ +//// [typeOfThisInStaticMembers12.ts] +class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + } +} + + +//// [typeOfThisInStaticMembers12.js] +var _a, _b, _c; +class C { +} +C.c = "foo"; +C.bar = (_c = class Inner { + constructor() { + this[_b] = 123; + } + }, + _a = C.c, + _b = C.c, + _c[_a] = 123, + _c); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).symbols new file mode 100644 index 0000000000000..16ad5c64fd0df --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers12.ts, 0, 0)) + + static readonly c: "foo" = "foo" +>c : Symbol(C.c, Decl(typeOfThisInStaticMembers12.ts, 0, 9)) + + static bar = class Inner { +>bar : Symbol(C.bar, Decl(typeOfThisInStaticMembers12.ts, 1, 36)) +>Inner : Symbol(Inner, Decl(typeOfThisInStaticMembers12.ts, 2, 16)) + + static [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers12.ts, 2, 31)) + + [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers12.ts, 3, 30)) + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).types new file mode 100644 index 0000000000000..ca37b9e4e200e --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts === +class C { +>C : C + + static readonly c: "foo" = "foo" +>c : "foo" +>"foo" : "foo" + + static bar = class Inner { +>bar : typeof Inner +>class Inner { static [this.c] = 123; [this.c] = 123; } : typeof Inner +>Inner : typeof Inner + + static [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + + [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).errors.txt new file mode 100644 index 0000000000000..3855b2ee7b651 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(4,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(4,17): error TS2465: 'this' cannot be referenced in a computed property name. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(5,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts(5,10): error TS2465: 'this' cannot be referenced in a computed property name. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts (4 errors) ==== + class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js new file mode 100644 index 0000000000000..a6c055499ebeb --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js @@ -0,0 +1,24 @@ +//// [typeOfThisInStaticMembers12.ts] +class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + } +} + + +//// [typeOfThisInStaticMembers12.js] +var _a, _b, _c; +class C { +} +C.c = "foo"; +C.bar = (_c = class Inner { + constructor() { + this[_b] = 123; + } + }, + _a = C.c, + _b = C.c, + _c[_a] = 123, + _c); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).symbols new file mode 100644 index 0000000000000..16ad5c64fd0df --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers12.ts, 0, 0)) + + static readonly c: "foo" = "foo" +>c : Symbol(C.c, Decl(typeOfThisInStaticMembers12.ts, 0, 9)) + + static bar = class Inner { +>bar : Symbol(C.bar, Decl(typeOfThisInStaticMembers12.ts, 1, 36)) +>Inner : Symbol(Inner, Decl(typeOfThisInStaticMembers12.ts, 2, 16)) + + static [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers12.ts, 2, 31)) + + [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers12.ts, 3, 30)) + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).types new file mode 100644 index 0000000000000..ca37b9e4e200e --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts === +class C { +>C : C + + static readonly c: "foo" = "foo" +>c : "foo" +>"foo" : "foo" + + static bar = class Inner { +>bar : typeof Inner +>class Inner { static [this.c] = 123; [this.c] = 123; } : typeof Inner +>Inner : typeof Inner + + static [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + + [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).errors.txt new file mode 100644 index 0000000000000..804765ba1290d --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(4,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(4,17): error TS2465: 'this' cannot be referenced in a computed property name. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(5,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(5,10): error TS2465: 'this' cannot be referenced in a computed property name. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts (4 errors) ==== + class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js new file mode 100644 index 0000000000000..43e6c217b60f1 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js @@ -0,0 +1,48 @@ +//// [typeOfThisInStaticMembers13.ts] +class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + } +} + + +//// [typeOfThisInStaticMembers13.js] +var C = /** @class */ (function () { + function C() { + } + var _a, _b, _c; + Object.defineProperty(C, "c", { + enumerable: true, + configurable: true, + writable: true, + value: "foo" + }); + Object.defineProperty(C, "bar", { + enumerable: true, + configurable: true, + writable: true, + value: (_c = /** @class */ (function () { + function Inner() { + Object.defineProperty(this, _b, { + enumerable: true, + configurable: true, + writable: true, + value: 123 + }); + } + return Inner; + }()), + _a = C.c, + _b = C.c, + Object.defineProperty(_c, _a, { + enumerable: true, + configurable: true, + writable: true, + value: 123 + }), + _c) + }); + return C; +}()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).symbols b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).symbols new file mode 100644 index 0000000000000..806a34350b5b9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers13.ts, 0, 0)) + + static readonly c: "foo" = "foo" +>c : Symbol(C.c, Decl(typeOfThisInStaticMembers13.ts, 0, 9)) + + static bar = class Inner { +>bar : Symbol(C.bar, Decl(typeOfThisInStaticMembers13.ts, 1, 36)) +>Inner : Symbol(Inner, Decl(typeOfThisInStaticMembers13.ts, 2, 16)) + + static [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers13.ts, 2, 31)) + + [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers13.ts, 3, 30)) + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).types b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).types new file mode 100644 index 0000000000000..bb274c6f556e7 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts === +class C { +>C : C + + static readonly c: "foo" = "foo" +>c : "foo" +>"foo" : "foo" + + static bar = class Inner { +>bar : typeof Inner +>class Inner { static [this.c] = 123; [this.c] = 123; } : typeof Inner +>Inner : typeof Inner + + static [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + + [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).errors.txt new file mode 100644 index 0000000000000..804765ba1290d --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(4,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(4,17): error TS2465: 'this' cannot be referenced in a computed property name. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(5,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(5,10): error TS2465: 'this' cannot be referenced in a computed property name. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts (4 errors) ==== + class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js new file mode 100644 index 0000000000000..b45a0491893ce --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js @@ -0,0 +1,44 @@ +//// [typeOfThisInStaticMembers13.ts] +class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + } +} + + +//// [typeOfThisInStaticMembers13.js] +var _a, _b, _c; +class C { +} +Object.defineProperty(C, "c", { + enumerable: true, + configurable: true, + writable: true, + value: "foo" +}); +Object.defineProperty(C, "bar", { + enumerable: true, + configurable: true, + writable: true, + value: (_c = class Inner { + constructor() { + Object.defineProperty(this, _b, { + enumerable: true, + configurable: true, + writable: true, + value: 123 + }); + } + }, + _a = C.c, + _b = C.c, + Object.defineProperty(_c, _a, { + enumerable: true, + configurable: true, + writable: true, + value: 123 + }), + _c) +}); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).symbols b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).symbols new file mode 100644 index 0000000000000..806a34350b5b9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers13.ts, 0, 0)) + + static readonly c: "foo" = "foo" +>c : Symbol(C.c, Decl(typeOfThisInStaticMembers13.ts, 0, 9)) + + static bar = class Inner { +>bar : Symbol(C.bar, Decl(typeOfThisInStaticMembers13.ts, 1, 36)) +>Inner : Symbol(Inner, Decl(typeOfThisInStaticMembers13.ts, 2, 16)) + + static [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers13.ts, 2, 31)) + + [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers13.ts, 3, 30)) + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).types b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).types new file mode 100644 index 0000000000000..bb274c6f556e7 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts === +class C { +>C : C + + static readonly c: "foo" = "foo" +>c : "foo" +>"foo" : "foo" + + static bar = class Inner { +>bar : typeof Inner +>class Inner { static [this.c] = 123; [this.c] = 123; } : typeof Inner +>Inner : typeof Inner + + static [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + + [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).errors.txt new file mode 100644 index 0000000000000..804765ba1290d --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(4,16): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(4,17): error TS2465: 'this' cannot be referenced in a computed property name. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(5,9): error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts(5,10): error TS2465: 'this' cannot be referenced in a computed property name. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts (4 errors) ==== + class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + [this.c] = 123; + ~~~~~~~~ +!!! error TS1166: A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type. + ~~~~ +!!! error TS2465: 'this' cannot be referenced in a computed property name. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).js new file mode 100644 index 0000000000000..400f037855480 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).js @@ -0,0 +1,18 @@ +//// [typeOfThisInStaticMembers13.ts] +class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + } +} + + +//// [typeOfThisInStaticMembers13.js] +class C { + static c = "foo"; + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + }; +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).symbols b/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).symbols new file mode 100644 index 0000000000000..806a34350b5b9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts === +class C { +>C : Symbol(C, Decl(typeOfThisInStaticMembers13.ts, 0, 0)) + + static readonly c: "foo" = "foo" +>c : Symbol(C.c, Decl(typeOfThisInStaticMembers13.ts, 0, 9)) + + static bar = class Inner { +>bar : Symbol(C.bar, Decl(typeOfThisInStaticMembers13.ts, 1, 36)) +>Inner : Symbol(Inner, Decl(typeOfThisInStaticMembers13.ts, 2, 16)) + + static [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers13.ts, 2, 31)) + + [this.c] = 123; +>[this.c] : Symbol(Inner[this.c], Decl(typeOfThisInStaticMembers13.ts, 3, 30)) + } +} + diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).types b/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).types new file mode 100644 index 0000000000000..bb274c6f556e7 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=esnext).types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts === +class C { +>C : C + + static readonly c: "foo" = "foo" +>c : "foo" +>"foo" : "foo" + + static bar = class Inner { +>bar : typeof Inner +>class Inner { static [this.c] = 123; [this.c] = 123; } : typeof Inner +>Inner : typeof Inner + + static [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + + [this.c] = 123; +>[this.c] : number +>this.c : any +>this : any +>c : any +>123 : 123 + } +} + diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts index ea97cc9a93484..bb458c87d29a1 100644 --- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts @@ -1,6 +1,6 @@ // @target: esnext, es6, es5 -// @useDefineForClassFields: false // @experimentalDecorators: true +// @useDefineForClassFields: false declare const foo: any; diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts index c1f29204980f3..6c4025bc4707e 100644 --- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts @@ -1,6 +1,6 @@ // @target: esnext, es6, es5 -// @useDefineForClassFields: false // @experimentalDecorators: true +// @useDefineForClassFields: true declare const foo: any; @@ -10,43 +10,42 @@ class C { static b = this.a + 1; } -const classComputedName = "classComputedName" - -const D = class extends C { +@foo +class D extends C { static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; static f = () => this.c + 1; static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { + static foo () { return this.c + 1; } - static get fa() { + static get fa () { return this.c + 1; } - static set fa(v: number) { + static set fa (v: number) { this.c = v + 1; } } -function ret() { - return class extends C { - static c = 2; - static d = this.c + 1; - static e = super.a + this.c + 1; - static f = () => this.c + 1; - static ff = function () { this.c + 1 } - static [classComputedName] = 1; - static foo() { - return this.c + 1; - } - static get fa() { - return this.c + 1; - } - static set fa(v: number) { - this.c = v + 1; - } - } +class CC { + static a = 1; + static b = this.a + 1; } +class DD extends CC { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + static f = () => this.c + 1; + static ff = function () { this.c + 1 } + static foo () { + return this.c + 1; + } + static get fa () { + return this.c + 1; + } + static set fa (v: number) { + this.c = v + 1; + } +} diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts new file mode 100644 index 0000000000000..041089512bfa8 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers12.ts @@ -0,0 +1,10 @@ +// @target: esnext, es6, es5 +// @useDefineForClassFields: false + +class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + } +} diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts new file mode 100644 index 0000000000000..6c965e0e2d55f --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers13.ts @@ -0,0 +1,10 @@ +// @target: esnext, es6, es5 +// @useDefineForClassFields: true + +class C { + static readonly c: "foo" = "foo" + static bar = class Inner { + static [this.c] = 123; + [this.c] = 123; + } +} From d3bb4fa7e11792c74b4877041a761d2e7c440338 Mon Sep 17 00:00:00 2001 From: kingwl Date: Fri, 26 Mar 2021 14:42:46 +0800 Subject: [PATCH 18/33] Add internal --- src/compiler/utilitiesPublic.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 0b8ca73336493..01326260681ed 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1241,6 +1241,7 @@ namespace ts { } } + /* @internal */ export function isThisOrSuperInStaticFieldBoundary(node: Node, parent: Node | undefined): boolean { switch (node.kind) { case SyntaxKind.FunctionDeclaration: From f605ad755a17b8dd83d2e693a038b85f479f43d2 Mon Sep 17 00:00:00 2001 From: kingwl Date: Tue, 30 Mar 2021 14:53:35 +0800 Subject: [PATCH 19/33] Fix minor CR issues --- src/compiler/checker.ts | 6 +----- src/compiler/diagnosticMessages.json | 2 +- src/compiler/factory/nodeFactory.ts | 2 +- src/compiler/transformers/classFields.ts | 2 +- src/compiler/types.ts | 14 +++++++------- ...fThisInStaticMembers10(target=es5).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers10(target=es6).errors.txt | 16 ++++++++-------- ...isInStaticMembers10(target=esnext).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers11(target=es5).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers11(target=es6).errors.txt | 16 ++++++++-------- ...isInStaticMembers11(target=esnext).errors.txt | 16 ++++++++-------- .../typeOfThisInStaticMembers9(target=es5).js | 1 + 12 files changed, 60 insertions(+), 63 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a22997a456876..dabd1543dd2e1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24093,7 +24093,7 @@ namespace ts { function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression: Node, container: Node) { if (isPropertyDeclaration(container) && hasStaticModifier(container) && container.initializer && textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && length(container.parent.decorators)) { - error(thisExpression, Diagnostics.Cannot_use_this_in_static_property_initializer_in_a_decorated_class); + error(thisExpression, Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class); } } @@ -24471,8 +24471,6 @@ namespace ts { // 'super' property access is allowed // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance // - In a static member function or static member accessor - // (March 2021) - // - In a static property declaration // topmost container must be something that is directly nested in the class declaration\object literal expression if (isClassLike(container.parent) || container.parent.kind === SyntaxKind.ObjectLiteralExpression) { @@ -26637,8 +26635,6 @@ namespace ts { // - In a static member function or static member accessor // where this references the constructor function object of a derived class, // a super property access is permitted and must specify a public static member function of the base class. - // (March 2021): - // - All static class member can be access via super. if (languageVersion < ScriptTarget.ES2015) { const isStatic = flags & ModifierFlags.Static; if (isStatic ? symbolHasNonClassMemberDeclaration(prop) : symbolHasNonMethodDeclaration(prop)) { diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 7a6bab572db2d..50cf83635ea0c 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3308,7 +3308,7 @@ "category": "Error", "code": 2808 }, - "Cannot use 'this' in static property initializer in a decorated class.": { + "Cannot use 'this' in a static property initializer of a decorated class.": { "category": "Error", "code": 2809 }, diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index 61888b0bc300b..03ca8b22edbba 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -977,7 +977,7 @@ namespace ts { transformFlags = TransformFlags.ContainsTypeScript; break; case SyntaxKind.SuperKeyword: - transformFlags = TransformFlags.ContainsLexicalSuper | TransformFlags.ContainsES2015; + transformFlags = TransformFlags.ContainsLexicalThis | TransformFlags.ContainsES2015; break; case SyntaxKind.StaticKeyword: transformFlags = TransformFlags.ContainsES2015; diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index d9b88d0f08323..fc78a993b837f 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -195,7 +195,7 @@ namespace ts { const shouldCareAboutSuper = shouldRewriteSuper || shouldAvoidThisOrSuper; function staticFieldThisOrSuperVisitor(node: Expression): Expression { - if (!(node.transformFlags & (TransformFlags.ContainsLexicalThis | (shouldCareAboutSuper ? TransformFlags.ContainsLexicalSuper : TransformFlags.None)))) { + if (!(node.transformFlags & TransformFlags.ContainsLexicalThis)) { return node; } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 4e9decf724f32..5fce7438ab1b6 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -6515,7 +6515,6 @@ namespace ts { ContainsDynamicImport = 1 << 22, ContainsClassFields = 1 << 23, ContainsPossibleTopLevelAwait = 1 << 24, - ContainsLexicalSuper = 1 << 25, // Please leave this as 1 << 29. // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system. @@ -6544,12 +6543,12 @@ namespace ts { PropertyAccessExcludes = OuterExpressionExcludes, NodeExcludes = PropertyAccessExcludes, ArrowFunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - FunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - ConstructorExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - MethodOrAccessorExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread, - PropertyExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper, + FunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, + ConstructorExcludes = NodeExcludes | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, + MethodOrAccessorExcludes = NodeExcludes | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread, + PropertyExcludes = NodeExcludes | ContainsLexicalThis, ClassExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsComputedPropertyName, - ModuleExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsHoistedDeclarationOrCompletion | ContainsPossibleTopLevelAwait, + ModuleExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsHoistedDeclarationOrCompletion | ContainsPossibleTopLevelAwait, TypeExcludes = ~ContainsTypeScript, ObjectLiteralExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsComputedPropertyName | ContainsObjectRestOrSpread, ArrayLiteralOrCallOrNewExcludes = NodeExcludes | ContainsRestOrSpread, @@ -6560,7 +6559,7 @@ namespace ts { // Propagating flags // - Bitmasks for flags that should propagate from a child - PropertyNamePropagatingFlags = ContainsLexicalThis | ContainsLexicalSuper, + PropertyNamePropagatingFlags = ContainsLexicalThis, // Masks // - Additional bitmasks @@ -7685,6 +7684,7 @@ namespace ts { /** * A function that accepts and possibly transforms a node. */ + export type Visitor = (node: Node) => VisitResult; export interface NodeVisitor { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt index b8c239603a7f5..3ff50fe4e2817 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt index b8c239603a7f5..3ff50fe4e2817 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt index b8c239603a7f5..3ff50fe4e2817 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt index eec33887e96bc..1dcb84e64126f 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt index eec33887e96bc..1dcb84e64126f 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt index eec33887e96bc..1dcb84e64126f 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2808: Cannot use 'this' in static property initializer in a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2808: Cannot use 'this' in static property initializer in a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2808: Cannot use 'this' in static property initializer in a decorated class. +!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js index f086499266b31..b9d429a9e3619 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js @@ -37,6 +37,7 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); +var _this = this; var C = /** @class */ (function () { function C() { } From 3513104129ba195c95d9ba8490afc985ae2479b7 Mon Sep 17 00:00:00 2001 From: kingwl Date: Tue, 13 Apr 2021 11:20:10 +0800 Subject: [PATCH 20/33] accept baseline --- .../amdDeclarationEmitNoExtraDeclare.js | 3 +- .../anonClassDeclarationEmitIsAnon.js | 3 +- .../reference/assignmentCompatability45.js | 3 +- tests/baselines/reference/baseCheck.js | 6 ++- .../reference/checkForObjectTooStrict.js | 6 ++- .../reference/classSideInheritance2.js | 3 +- .../reference/classSideInheritance3.js | 3 +- tests/baselines/reference/classUpdateTests.js | 3 +- .../reference/collisionSuperAndParameter.js | 3 +- ...perAndPropertyNameAsConstuctorParameter.js | 6 ++- .../reference/commentsInheritance.js | 3 +- ...ctorFunctionTypeIsAssignableToBaseType2.js | 3 +- .../reference/constructorOverloads2.js | 3 +- .../reference/declFileGenericType2.js | 3 +- .../reference/decoratorOnClassConstructor2.js | 3 +- .../reference/decoratorOnClassConstructor3.js | 3 +- .../derivedClassOverridesPrivateFunction1.js | 3 +- .../derivedClassOverridesProtectedMembers.js | 3 +- .../derivedClassOverridesProtectedMembers2.js | 3 +- .../derivedClassOverridesProtectedMembers3.js | 30 ++++++++----- .../derivedClassOverridesPublicMembers.js | 3 +- .../destructuringParameterDeclaration5.js | 6 ++- tests/baselines/reference/es6ClassTest2.js | 3 +- ...cClassPropertyInheritanceSpecialization.js | 3 +- ...genericConstraintOnExtendedBuiltinTypes.js | 3 +- ...enericConstraintOnExtendedBuiltinTypes2.js | 3 +- .../reference/genericTypeConstraints.js | 3 +- .../reference/importNotElidedWhenNotFound.js | 6 ++- ...ringClassMembersFromAssignments.errors.txt | 8 +++- .../jsDeclarationsExportedClassAliases.js | 3 +- ...bclassWithExplicitNoArgumentConstructor.js | 3 +- .../missingPropertiesOfClassExpression.js | 3 +- .../reference/mixinPrivateAndProtected.js | 3 +- .../reference/optionalParamArgsTest.js | 3 +- tests/baselines/reference/override5.js | 3 +- tests/baselines/reference/override7.js | 3 +- .../baselines/reference/parserRealSource11.js | 21 ++++++---- tests/baselines/reference/parserharness.js | 3 +- .../reference/strictModeInConstructor.js | 3 +- ...allFromClassThatDerivesFromGenericType1.js | 3 +- ...allFromClassThatDerivesFromGenericType2.js | 3 +- ...eButWithIncorrectNumberOfTypeArguments1.js | 3 +- ...sFromGenericTypeButWithNoTypeArguments1.js | 3 +- ...ivesNonGenericTypeButWithTypeArguments1.js | 3 +- .../superCallInsideClassDeclaration.js | 3 +- .../superCallInsideClassExpression.js | 3 +- .../superCallParameterContextualTyping1.js | 3 +- .../superCallParameterContextualTyping2.js | 3 +- .../reference/superCallWithCommentEmit01.js | 4 +- tests/baselines/reference/superErrors.js | 12 +++++- tests/baselines/reference/superInLambdas.js | 2 + ...opertyElementNoUnusedLexicalThisCapture.js | 5 ++- .../superWithGenericSpecialization.js | 3 +- .../baselines/reference/superWithGenerics.js | 3 +- .../reference/superWithTypeArgument.js | 3 +- .../reference/superWithTypeArgument2.js | 3 +- .../reference/superWithTypeArgument3.js | 3 +- .../reference/targetTypeBaseCalls.js | 3 +- ...rowFunctionInStaticInitializer1.errors.txt | 14 +++++++ .../thisInConstructorParameter2.errors.txt | 5 ++- .../thisInInvalidContexts.errors.txt | 5 ++- ...InInvalidContextsExternalModule.errors.txt | 5 ++- .../reference/thisInOuterClassBody.errors.txt | 5 ++- ...isInStaticMembers10(target=es5).errors.txt | 42 +++++++++++++++---- ...isInStaticMembers10(target=es6).errors.txt | 42 +++++++++++++++---- ...nStaticMembers10(target=esnext).errors.txt | 42 +++++++++++++++---- ...isInStaticMembers11(target=es5).errors.txt | 42 +++++++++++++++---- ...isInStaticMembers11(target=es6).errors.txt | 42 +++++++++++++++---- ...nStaticMembers11(target=esnext).errors.txt | 16 +++---- .../typeOfThisInStaticMembers2.errors.txt | 16 +++++++ ...hisInStaticMembers3(target=es5).errors.txt | 23 ++++++++++ ...hisInStaticMembers3(target=es6).errors.txt | 23 ++++++++++ ...InStaticMembers3(target=esnext).errors.txt | 23 ++++++++++ ...hisInStaticMembers4(target=es5).errors.txt | 23 ++++++++++ ...hisInStaticMembers4(target=es6).errors.txt | 23 ++++++++++ ...hisInStaticMembers5(target=es5).errors.txt | 14 +++++++ ...hisInStaticMembers5(target=es6).errors.txt | 14 +++++++ ...peOfThisInStaticMembers5(target=esnext).js | 3 +- ...hisInStaticMembers7(target=es5).errors.txt | 23 ++++++++++ ...hisInStaticMembers7(target=es6).errors.txt | 23 ++++++++++ ...peOfThisInStaticMembers7(target=esnext).js | 10 ++--- ...hisInStaticMembers8(target=es5).errors.txt | 5 ++- ...hisInStaticMembers8(target=es6).errors.txt | 5 ++- ...peOfThisInStaticMembers8(target=esnext).js | 36 +++++++--------- ...peOfThisInStaticMembers9(target=esnext).js | 36 +++++++--------- tests/baselines/reference/unknownSymbols1.js | 3 +- 86 files changed, 629 insertions(+), 184 deletions(-) create mode 100644 tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).errors.txt diff --git a/tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js b/tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js index eb140e5a33fff..21598da516959 100644 --- a/tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js +++ b/tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js @@ -49,7 +49,8 @@ define("Configurable", ["require", "exports"], function (require, exports) { for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } - return _super.apply(this, args) || this; + var _this = _super.apply(this, args) || this; + return _this; } return class_1; }(base)); diff --git a/tests/baselines/reference/anonClassDeclarationEmitIsAnon.js b/tests/baselines/reference/anonClassDeclarationEmitIsAnon.js index 2c7ccdcccb8e0..68015100f701d 100644 --- a/tests/baselines/reference/anonClassDeclarationEmitIsAnon.js +++ b/tests/baselines/reference/anonClassDeclarationEmitIsAnon.js @@ -109,7 +109,8 @@ exports.User = User; var TimestampedUser = /** @class */ (function (_super) { __extends(TimestampedUser, _super); function TimestampedUser() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return TimestampedUser; }((0, wrapClass_1.Timestamped)(User))); diff --git a/tests/baselines/reference/assignmentCompatability45.js b/tests/baselines/reference/assignmentCompatability45.js index f5ac5b1f4ce2f..a212dd26596dc 100644 --- a/tests/baselines/reference/assignmentCompatability45.js +++ b/tests/baselines/reference/assignmentCompatability45.js @@ -32,7 +32,8 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B(x) { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return B; }(A)); diff --git a/tests/baselines/reference/baseCheck.js b/tests/baselines/reference/baseCheck.js index 9071dd0f11065..311ca693c77e0 100644 --- a/tests/baselines/reference/baseCheck.js +++ b/tests/baselines/reference/baseCheck.js @@ -53,14 +53,16 @@ var C = /** @class */ (function () { var ELoc = /** @class */ (function (_super) { __extends(ELoc, _super); function ELoc(x) { - return _super.call(this, 0, x) || this; + var _this = _super.call(this, 0, x) || this; + return _this; } return ELoc; }(C)); var ELocVar = /** @class */ (function (_super) { __extends(ELocVar, _super); function ELocVar(x) { - return _super.call(this, 0, loc) || this; + var _this = _super.call(this, 0, loc) || this; + return _this; } ELocVar.prototype.m = function () { var loc = 10; diff --git a/tests/baselines/reference/checkForObjectTooStrict.js b/tests/baselines/reference/checkForObjectTooStrict.js index 3410b421a7825..80730386330ce 100644 --- a/tests/baselines/reference/checkForObjectTooStrict.js +++ b/tests/baselines/reference/checkForObjectTooStrict.js @@ -59,14 +59,16 @@ var Foo; var Bar = /** @class */ (function (_super) { __extends(Bar, _super); function Bar() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return Bar; }(Foo.Object)); var Baz = /** @class */ (function (_super) { __extends(Baz, _super); function Baz() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return Baz; }(Object)); diff --git a/tests/baselines/reference/classSideInheritance2.js b/tests/baselines/reference/classSideInheritance2.js index b179eb5f4a52d..d6112ca0479f1 100644 --- a/tests/baselines/reference/classSideInheritance2.js +++ b/tests/baselines/reference/classSideInheritance2.js @@ -39,7 +39,8 @@ var __extends = (this && this.__extends) || (function () { var SubText = /** @class */ (function (_super) { __extends(SubText, _super); function SubText(text, span) { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return SubText; }(TextBase)); diff --git a/tests/baselines/reference/classSideInheritance3.js b/tests/baselines/reference/classSideInheritance3.js index 8f4ba095e5832..2834f4a5f325f 100644 --- a/tests/baselines/reference/classSideInheritance3.js +++ b/tests/baselines/reference/classSideInheritance3.js @@ -52,7 +52,8 @@ var B = /** @class */ (function (_super) { var C = /** @class */ (function (_super) { __extends(C, _super); function C(x) { - return _super.call(this, x) || this; + var _this = _super.call(this, x) || this; + return _this; } return C; }(A)); diff --git a/tests/baselines/reference/classUpdateTests.js b/tests/baselines/reference/classUpdateTests.js index 325f4ef87f166..6b2e8bb0921d1 100644 --- a/tests/baselines/reference/classUpdateTests.js +++ b/tests/baselines/reference/classUpdateTests.js @@ -199,7 +199,8 @@ var H = /** @class */ (function () { var I = /** @class */ (function (_super) { __extends(I, _super); function I() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } // ERROR - no super call allowed return I; }(Object)); diff --git a/tests/baselines/reference/collisionSuperAndParameter.js b/tests/baselines/reference/collisionSuperAndParameter.js index bf76b22bf7666..4d33df508e2ec 100644 --- a/tests/baselines/reference/collisionSuperAndParameter.js +++ b/tests/baselines/reference/collisionSuperAndParameter.js @@ -134,7 +134,8 @@ var Foo2 = /** @class */ (function (_super_1) { var Foo4 = /** @class */ (function (_super_1) { __extends(Foo4, _super_1); function Foo4(_super) { - return _super_1.call(this) || this; + var _this = _super_1.call(this) || this; + return _this; } Foo4.prototype.y = function (_super) { var _this = this; diff --git a/tests/baselines/reference/collisionSuperAndPropertyNameAsConstuctorParameter.js b/tests/baselines/reference/collisionSuperAndPropertyNameAsConstuctorParameter.js index 64e1984d7659e..a53421683260e 100644 --- a/tests/baselines/reference/collisionSuperAndPropertyNameAsConstuctorParameter.js +++ b/tests/baselines/reference/collisionSuperAndPropertyNameAsConstuctorParameter.js @@ -54,7 +54,8 @@ var a = /** @class */ (function () { var b1 = /** @class */ (function (_super_1) { __extends(b1, _super_1); function b1(_super) { - return _super_1.call(this) || this; + var _this = _super_1.call(this) || this; + return _this; } return b1; }(a)); @@ -70,7 +71,8 @@ var b2 = /** @class */ (function (_super_1) { var b3 = /** @class */ (function (_super_1) { __extends(b3, _super_1); function b3(_super) { - return _super_1.call(this) || this; + var _this = _super_1.call(this) || this; + return _this; } return b3; }(a)); diff --git a/tests/baselines/reference/commentsInheritance.js b/tests/baselines/reference/commentsInheritance.js index 680bde5845853..8ecd8c19675e5 100644 --- a/tests/baselines/reference/commentsInheritance.js +++ b/tests/baselines/reference/commentsInheritance.js @@ -236,7 +236,8 @@ var c2 = /** @class */ (function () { var c3 = /** @class */ (function (_super) { __extends(c3, _super); function c3() { - return _super.call(this, 10) || this; + var _this = _super.call(this, 10) || this; + return _this; } /** c3 f1*/ c3.prototype.f1 = function () { diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js index 73bc4c753585c..e1feb18b2800a 100644 --- a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js @@ -57,7 +57,8 @@ var Base = /** @class */ (function () { var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived(x) { - return _super.call(this, x) || this; + var _this = _super.call(this, x) || this; + return _this; } return Derived; }(Base)); diff --git a/tests/baselines/reference/constructorOverloads2.js b/tests/baselines/reference/constructorOverloads2.js index 5332b0142caed..369a7e6dac9e3 100644 --- a/tests/baselines/reference/constructorOverloads2.js +++ b/tests/baselines/reference/constructorOverloads2.js @@ -50,7 +50,8 @@ var FooBase = /** @class */ (function () { var Foo = /** @class */ (function (_super) { __extends(Foo, _super); function Foo(x, y) { - return _super.call(this, x) || this; + var _this = _super.call(this, x) || this; + return _this; } Foo.prototype.bar1 = function () { }; return Foo; diff --git a/tests/baselines/reference/declFileGenericType2.js b/tests/baselines/reference/declFileGenericType2.js index d1b5e33467bc9..46848acc5de77 100644 --- a/tests/baselines/reference/declFileGenericType2.js +++ b/tests/baselines/reference/declFileGenericType2.js @@ -67,7 +67,8 @@ var templa; var AbstractElementController = /** @class */ (function (_super) { __extends(AbstractElementController, _super); function AbstractElementController() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return AbstractElementController; }(templa.mvc.AbstractController)); diff --git a/tests/baselines/reference/decoratorOnClassConstructor2.js b/tests/baselines/reference/decoratorOnClassConstructor2.js index 23dbbf69036da..e993037826876 100644 --- a/tests/baselines/reference/decoratorOnClassConstructor2.js +++ b/tests/baselines/reference/decoratorOnClassConstructor2.js @@ -58,7 +58,8 @@ var _0_ts_2 = require("./0.ts"); var C = /** @class */ (function (_super) { __extends(C, _super); function C(prop) { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } C = __decorate([ __param(0, _0_ts_2.foo) diff --git a/tests/baselines/reference/decoratorOnClassConstructor3.js b/tests/baselines/reference/decoratorOnClassConstructor3.js index ff584adb5f043..78d1955d142a4 100644 --- a/tests/baselines/reference/decoratorOnClassConstructor3.js +++ b/tests/baselines/reference/decoratorOnClassConstructor3.js @@ -61,7 +61,8 @@ var _0_2 = require("./0"); var C = /** @class */ (function (_super) { __extends(C, _super); function C(prop) { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } C = __decorate([ __param(0, _0_2.foo) diff --git a/tests/baselines/reference/derivedClassOverridesPrivateFunction1.js b/tests/baselines/reference/derivedClassOverridesPrivateFunction1.js index d102983620740..aa61badeafec6 100644 --- a/tests/baselines/reference/derivedClassOverridesPrivateFunction1.js +++ b/tests/baselines/reference/derivedClassOverridesPrivateFunction1.js @@ -42,7 +42,8 @@ var BaseClass = /** @class */ (function () { var DerivedClass = /** @class */ (function (_super) { __extends(DerivedClass, _super); function DerivedClass() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } DerivedClass.prototype._init = function () { }; diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers.js b/tests/baselines/reference/derivedClassOverridesProtectedMembers.js index 812f272f7ad45..6847397d3bb99 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers.js +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers.js @@ -75,7 +75,8 @@ var Base = /** @class */ (function () { var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived(a) { - return _super.call(this, x) || this; + var _this = _super.call(this, x) || this; + return _this; } Derived.prototype.b = function (a) { }; Object.defineProperty(Derived.prototype, "c", { diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers2.js b/tests/baselines/reference/derivedClassOverridesProtectedMembers2.js index dc18ddcc9ded3..89bcef418d0ca 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers2.js +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers2.js @@ -104,7 +104,8 @@ var Base = /** @class */ (function () { var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } Derived.prototype.b = function (a) { }; Object.defineProperty(Derived.prototype, "c", { diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers3.js b/tests/baselines/reference/derivedClassOverridesProtectedMembers3.js index 7c873b6830575..c0d577e4121a1 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers3.js +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers3.js @@ -112,14 +112,16 @@ var Base = /** @class */ (function () { var Derived1 = /** @class */ (function (_super) { __extends(Derived1, _super); function Derived1(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } return Derived1; }(Base)); var Derived2 = /** @class */ (function (_super) { __extends(Derived2, _super); function Derived2(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } Derived2.prototype.b = function (a) { }; return Derived2; @@ -127,7 +129,8 @@ var Derived2 = /** @class */ (function (_super) { var Derived3 = /** @class */ (function (_super) { __extends(Derived3, _super); function Derived3(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } Object.defineProperty(Derived3.prototype, "c", { get: function () { return x; }, @@ -139,7 +142,8 @@ var Derived3 = /** @class */ (function (_super) { var Derived4 = /** @class */ (function (_super) { __extends(Derived4, _super); function Derived4(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } Object.defineProperty(Derived4.prototype, "c", { set: function (v) { }, @@ -151,21 +155,24 @@ var Derived4 = /** @class */ (function (_super) { var Derived5 = /** @class */ (function (_super) { __extends(Derived5, _super); function Derived5(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } return Derived5; }(Base)); var Derived6 = /** @class */ (function (_super) { __extends(Derived6, _super); function Derived6(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } return Derived6; }(Base)); var Derived7 = /** @class */ (function (_super) { __extends(Derived7, _super); function Derived7(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } Derived7.s = function (a) { }; return Derived7; @@ -173,7 +180,8 @@ var Derived7 = /** @class */ (function (_super) { var Derived8 = /** @class */ (function (_super) { __extends(Derived8, _super); function Derived8(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } Object.defineProperty(Derived8, "t", { get: function () { return x; }, @@ -185,7 +193,8 @@ var Derived8 = /** @class */ (function (_super) { var Derived9 = /** @class */ (function (_super) { __extends(Derived9, _super); function Derived9(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } Object.defineProperty(Derived9, "t", { set: function (v) { }, @@ -197,7 +206,8 @@ var Derived9 = /** @class */ (function (_super) { var Derived10 = /** @class */ (function (_super) { __extends(Derived10, _super); function Derived10(a) { - return _super.call(this, a) || this; + var _this = _super.call(this, a) || this; + return _this; } return Derived10; }(Base)); diff --git a/tests/baselines/reference/derivedClassOverridesPublicMembers.js b/tests/baselines/reference/derivedClassOverridesPublicMembers.js index 5c1f5fd42e69d..87b0ffc8547ab 100644 --- a/tests/baselines/reference/derivedClassOverridesPublicMembers.js +++ b/tests/baselines/reference/derivedClassOverridesPublicMembers.js @@ -102,7 +102,8 @@ var Base = /** @class */ (function () { var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived(a) { - return _super.call(this, x) || this; + var _this = _super.call(this, x) || this; + return _this; } Derived.prototype.b = function (a) { }; Object.defineProperty(Derived.prototype, "c", { diff --git a/tests/baselines/reference/destructuringParameterDeclaration5.js b/tests/baselines/reference/destructuringParameterDeclaration5.js index 9a647ae2bac31..87ff4c0543d54 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration5.js +++ b/tests/baselines/reference/destructuringParameterDeclaration5.js @@ -75,7 +75,8 @@ var Class = /** @class */ (function () { var SubClass = /** @class */ (function (_super) { __extends(SubClass, _super); function SubClass() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return SubClass; }(Class)); @@ -87,7 +88,8 @@ var D = /** @class */ (function () { var SubD = /** @class */ (function (_super) { __extends(SubD, _super); function SubD() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return SubD; }(D)); diff --git a/tests/baselines/reference/es6ClassTest2.js b/tests/baselines/reference/es6ClassTest2.js index 7ec8cd45f52fa..3c13b3a84ff7c 100644 --- a/tests/baselines/reference/es6ClassTest2.js +++ b/tests/baselines/reference/es6ClassTest2.js @@ -277,7 +277,8 @@ var SuperParent = /** @class */ (function () { var SuperChild = /** @class */ (function (_super) { __extends(SuperChild, _super); function SuperChild() { - return _super.call(this, 1) || this; + var _this = _super.call(this, 1) || this; + return _this; } SuperChild.prototype.b = function () { _super.prototype.b.call(this, 'str'); diff --git a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.js b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.js index bd9c99e5b117a..bfd99dcb960d0 100644 --- a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.js +++ b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.js @@ -119,7 +119,8 @@ var PortalFx; var Validator = /** @class */ (function (_super) { __extends(Validator, _super); function Validator(message) { - return _super.call(this, message) || this; + var _this = _super.call(this, message) || this; + return _this; } return Validator; }(Portal.Controls.Validators.Validator)); diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.js b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.js index bafecf8f5948f..4bc0b14713b89 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.js +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.js @@ -61,7 +61,8 @@ var EndGate; var NumberTween = /** @class */ (function (_super) { __extends(NumberTween, _super); function NumberTween(from) { - return _super.call(this, from) || this; + var _this = _super.call(this, from) || this; + return _this; } return NumberTween; }(Tweening.Tween)); diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.js b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.js index 329b9ac6ec810..1c4024586047e 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.js +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.js @@ -60,7 +60,8 @@ var EndGate; var NumberTween = /** @class */ (function (_super) { __extends(NumberTween, _super); function NumberTween(from) { - return _super.call(this, from) || this; + var _this = _super.call(this, from) || this; + return _this; } return NumberTween; }(Tweening.Tween)); diff --git a/tests/baselines/reference/genericTypeConstraints.js b/tests/baselines/reference/genericTypeConstraints.js index 3ca500cf7572c..6758b6fc02d10 100644 --- a/tests/baselines/reference/genericTypeConstraints.js +++ b/tests/baselines/reference/genericTypeConstraints.js @@ -48,7 +48,8 @@ var Bar = /** @class */ (function () { var BarExtended = /** @class */ (function (_super) { __extends(BarExtended, _super); function BarExtended() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return BarExtended; }(Bar)); diff --git a/tests/baselines/reference/importNotElidedWhenNotFound.js b/tests/baselines/reference/importNotElidedWhenNotFound.js index 2b50496e619f6..868adc4214249 100644 --- a/tests/baselines/reference/importNotElidedWhenNotFound.js +++ b/tests/baselines/reference/importNotElidedWhenNotFound.js @@ -40,7 +40,8 @@ var other_file_1 = require("other_file"); var Y = /** @class */ (function (_super) { __extends(Y, _super); function Y() { - return _super.call(this, file_1["default"]) || this; + var _this = _super.call(this, file_1["default"]) || this; + return _this; } return Y; }(other_file_1["default"])); @@ -49,7 +50,8 @@ var file3_1 = require("file3"); var Q = /** @class */ (function (_super) { __extends(Q, _super); function Q() { - return _super.call(this, file2_1["default"], file3_1["default"]) || this; + var _this = _super.call(this, file2_1["default"], file3_1["default"]) || this; + return _this; } return Q; }(other_file_1["default"])); diff --git a/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt b/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt index 44ab30d997aae..379d3f018c2c1 100644 --- a/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt +++ b/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt @@ -1,9 +1,11 @@ tests/cases/conformance/salsa/a.js(14,13): error TS7008: Member 'inMethodNullable' implicitly has an 'any' type. tests/cases/conformance/salsa/a.js(20,9): error TS2322: Type 'string' is not assignable to type 'number'. tests/cases/conformance/salsa/a.js(39,9): error TS2322: Type 'boolean' is not assignable to type 'number'. +tests/cases/conformance/salsa/a.js(93,13): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/salsa/a.js(96,13): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/salsa/a.js (3 errors) ==== +==== tests/cases/conformance/salsa/a.js (5 errors) ==== class C { constructor() { if (Math.random()) { @@ -103,9 +105,13 @@ tests/cases/conformance/salsa/a.js(39,9): error TS2322: Type 'boolean' is not as static prop = () => { if (Math.random()) { this.inStaticPropertyDeclaration = 0; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } else { this.inStaticPropertyDeclaration = "string" + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } } } diff --git a/tests/baselines/reference/jsDeclarationsExportedClassAliases.js b/tests/baselines/reference/jsDeclarationsExportedClassAliases.js index aaf4bf08165bd..618c8c253adb1 100644 --- a/tests/baselines/reference/jsDeclarationsExportedClassAliases.js +++ b/tests/baselines/reference/jsDeclarationsExportedClassAliases.js @@ -38,7 +38,8 @@ var __extends = (this && this.__extends) || (function () { var FancyError = /** @class */ (function (_super) { __extends(FancyError, _super); function FancyError(status) { - return _super.call(this, "error with status " + status) || this; + var _this = _super.call(this, "error with status " + status) || this; + return _this; } return FancyError; }(Error)); diff --git a/tests/baselines/reference/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.js b/tests/baselines/reference/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.js index 8abe7764586b0..5d82297094c4b 100644 --- a/tests/baselines/reference/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.js +++ b/tests/baselines/reference/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.js @@ -45,7 +45,8 @@ exports.Super = Super; var Sub = /** @class */ (function (_super) { __extends(Sub, _super); function Sub() { - return _super.call(this, 'first', 'second') || this; + var _this = _super.call(this, 'first', 'second') || this; + return _this; } return Sub; }(Super)); diff --git a/tests/baselines/reference/missingPropertiesOfClassExpression.js b/tests/baselines/reference/missingPropertiesOfClassExpression.js index e43e5840b94c4..31c5bb246c0ee 100644 --- a/tests/baselines/reference/missingPropertiesOfClassExpression.js +++ b/tests/baselines/reference/missingPropertiesOfClassExpression.js @@ -25,7 +25,8 @@ var __extends = (this && this.__extends) || (function () { var George = /** @class */ (function (_super) { __extends(George, _super); function George() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return George; }(/** @class */ (function () { diff --git a/tests/baselines/reference/mixinPrivateAndProtected.js b/tests/baselines/reference/mixinPrivateAndProtected.js index e140dce3b4acb..73ba4bb0c9f82 100644 --- a/tests/baselines/reference/mixinPrivateAndProtected.js +++ b/tests/baselines/reference/mixinPrivateAndProtected.js @@ -182,7 +182,8 @@ function PersonMixin(Base) { for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } - return _super.apply(this, args) || this; + var _this = _super.apply(this, args) || this; + return _this; } class_4.prototype.myProtectedFunction = function () { _super.prototype.myProtectedFunction.call(this); diff --git a/tests/baselines/reference/optionalParamArgsTest.js b/tests/baselines/reference/optionalParamArgsTest.js index 03929dc552ff6..6874fe64ca4da 100644 --- a/tests/baselines/reference/optionalParamArgsTest.js +++ b/tests/baselines/reference/optionalParamArgsTest.js @@ -172,7 +172,8 @@ var C2 = /** @class */ (function (_super) { __extends(C2, _super); function C2(v2) { if (v2 === void 0) { v2 = 6; } - return _super.call(this, v2) || this; + var _this = _super.call(this, v2) || this; + return _this; } return C2; }(C1)); diff --git a/tests/baselines/reference/override5.js b/tests/baselines/reference/override5.js index 3ab9d96d52f6b..3e8df80a3fbb4 100644 --- a/tests/baselines/reference/override5.js +++ b/tests/baselines/reference/override5.js @@ -84,7 +84,8 @@ var B = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(B)); diff --git a/tests/baselines/reference/override7.js b/tests/baselines/reference/override7.js index 36108f2359ed8..4c122fdd3c786 100644 --- a/tests/baselines/reference/override7.js +++ b/tests/baselines/reference/override7.js @@ -81,7 +81,8 @@ var B = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(B)); diff --git a/tests/baselines/reference/parserRealSource11.js b/tests/baselines/reference/parserRealSource11.js index 1b6b688ec93b8..90ad40fc32134 100644 --- a/tests/baselines/reference/parserRealSource11.js +++ b/tests/baselines/reference/parserRealSource11.js @@ -2677,7 +2677,8 @@ var TypeScript; var MissingIdentifier = /** @class */ (function (_super) { __extends(MissingIdentifier, _super); function MissingIdentifier() { - return _super.call(this, "__missing") || this; + var _this = _super.call(this, "__missing") || this; + return _this; } MissingIdentifier.prototype.isMissing = function () { return true; @@ -2716,7 +2717,8 @@ var TypeScript; var Expression = /** @class */ (function (_super) { __extends(Expression, _super); function Expression(nodeType) { - return _super.call(this, nodeType) || this; + var _this = _super.call(this, nodeType) || this; + return _this; } Expression.prototype.isExpression = function () { return true; }; Expression.prototype.isStatementOrExpression = function () { return true; }; @@ -3173,7 +3175,8 @@ var TypeScript; var ModuleElement = /** @class */ (function (_super) { __extends(ModuleElement, _super); function ModuleElement(nodeType) { - return _super.call(this, nodeType) || this; + var _this = _super.call(this, nodeType) || this; + return _this; } return ModuleElement; }(AST)); @@ -3266,7 +3269,8 @@ var TypeScript; var VarDecl = /** @class */ (function (_super) { __extends(VarDecl, _super); function VarDecl(id, nest) { - return _super.call(this, id, NodeType.VarDecl, nest) || this; + var _this = _super.call(this, id, NodeType.VarDecl, nest) || this; + return _this; } VarDecl.prototype.isAmbient = function () { return hasFlag(this.varFlags, VarFlags.Ambient); }; VarDecl.prototype.isExported = function () { return hasFlag(this.varFlags, VarFlags.Exported); }; @@ -3603,7 +3607,8 @@ var TypeScript; var InterfaceDeclaration = /** @class */ (function (_super) { __extends(InterfaceDeclaration, _super); function InterfaceDeclaration(name, members, extendsList, implementsList) { - return _super.call(this, NodeType.InterfaceDeclaration, name, extendsList, implementsList, members) || this; + var _this = _super.call(this, NodeType.InterfaceDeclaration, name, extendsList, implementsList, members) || this; + return _this; } InterfaceDeclaration.prototype.typeCheck = function (typeFlow) { return typeFlow.typeCheckInterface(this); @@ -3997,7 +4002,8 @@ var TypeScript; var EndCode = /** @class */ (function (_super) { __extends(EndCode, _super); function EndCode() { - return _super.call(this, NodeType.EndCode) || this; + var _this = _super.call(this, NodeType.EndCode) || this; + return _this; } return EndCode; }(AST)); @@ -4654,7 +4660,8 @@ var TypeScript; var DebuggerStatement = /** @class */ (function (_super) { __extends(DebuggerStatement, _super); function DebuggerStatement() { - return _super.call(this, NodeType.Debugger) || this; + var _this = _super.call(this, NodeType.Debugger) || this; + return _this; } DebuggerStatement.prototype.emit = function (emitter, tokenId, startLine) { emitter.emitParensAndCommentsInPlace(this, true); diff --git a/tests/baselines/reference/parserharness.js b/tests/baselines/reference/parserharness.js index 6fe11051dc7bf..f888ff070d488 100644 --- a/tests/baselines/reference/parserharness.js +++ b/tests/baselines/reference/parserharness.js @@ -2481,7 +2481,8 @@ var Harness; var Run = /** @class */ (function (_super) { __extends(Run, _super); function Run() { - return _super.call(this, 'Test Run', null) || this; + var _this = _super.call(this, 'Test Run', null) || this; + return _this; } Run.prototype.run = function () { emitLog('start'); diff --git a/tests/baselines/reference/strictModeInConstructor.js b/tests/baselines/reference/strictModeInConstructor.js index 85d5d3eecbfd5..abfd427a53108 100644 --- a/tests/baselines/reference/strictModeInConstructor.js +++ b/tests/baselines/reference/strictModeInConstructor.js @@ -117,7 +117,8 @@ var Bs = /** @class */ (function (_super) { __extends(Bs, _super); function Bs() { "use strict"; // No error - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } Bs.s = 9; return Bs; diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.js b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.js index e76639c1a8288..e12ddc2e0bc78 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.js @@ -30,7 +30,8 @@ var __extends = (this && this.__extends) || (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(B)); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.js b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.js index ced02033b494a..7a264865aac74 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.js @@ -29,7 +29,8 @@ var __extends = (this && this.__extends) || (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(B)); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithIncorrectNumberOfTypeArguments1.js b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithIncorrectNumberOfTypeArguments1.js index 8654d208a52d3..1070a781cfe00 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithIncorrectNumberOfTypeArguments1.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithIncorrectNumberOfTypeArguments1.js @@ -34,7 +34,8 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B() { - return _super.call(this, function (value) { return String(value); }) || this; + var _this = _super.call(this, function (value) { return String(value); }) || this; + return _this; } return B; }(A)); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithNoTypeArguments1.js b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithNoTypeArguments1.js index c1420e7a49be6..5d91db395b4cb 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithNoTypeArguments1.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithNoTypeArguments1.js @@ -34,7 +34,8 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B() { - return _super.call(this, function (value) { return String(value); }) || this; + var _this = _super.call(this, function (value) { return String(value); }) || this; + return _this; } return B; }(A)); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesNonGenericTypeButWithTypeArguments1.js b/tests/baselines/reference/superCallFromClassThatDerivesNonGenericTypeButWithTypeArguments1.js index d8480c4e5f325..662b4735115f1 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesNonGenericTypeButWithTypeArguments1.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesNonGenericTypeButWithTypeArguments1.js @@ -34,7 +34,8 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B() { - return _super.call(this, function (value) { return String(value); }) || this; + var _this = _super.call(this, function (value) { return String(value); }) || this; + return _this; } return B; }(A)); diff --git a/tests/baselines/reference/superCallInsideClassDeclaration.js b/tests/baselines/reference/superCallInsideClassDeclaration.js index 05ee3b31b3749..b73f2bad69028 100644 --- a/tests/baselines/reference/superCallInsideClassDeclaration.js +++ b/tests/baselines/reference/superCallInsideClassDeclaration.js @@ -49,7 +49,8 @@ var B = /** @class */ (function (_super) { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(C)); diff --git a/tests/baselines/reference/superCallInsideClassExpression.js b/tests/baselines/reference/superCallInsideClassExpression.js index 5eb276957b40c..c8c4f9d05760a 100644 --- a/tests/baselines/reference/superCallInsideClassExpression.js +++ b/tests/baselines/reference/superCallInsideClassExpression.js @@ -49,7 +49,8 @@ var B = /** @class */ (function (_super) { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(C)); diff --git a/tests/baselines/reference/superCallParameterContextualTyping1.js b/tests/baselines/reference/superCallParameterContextualTyping1.js index 65c52ace1612f..5db17772052a0 100644 --- a/tests/baselines/reference/superCallParameterContextualTyping1.js +++ b/tests/baselines/reference/superCallParameterContextualTyping1.js @@ -37,7 +37,8 @@ var B = /** @class */ (function (_super) { __extends(B, _super); // Ensure 'value' is of type 'number (and not '{}') by using its 'toExponential()' method. function B() { - return _super.call(this, function (value) { return String(value.toExponential()); }) || this; + var _this = _super.call(this, function (value) { return String(value.toExponential()); }) || this; + return _this; } return B; }(A)); diff --git a/tests/baselines/reference/superCallParameterContextualTyping2.js b/tests/baselines/reference/superCallParameterContextualTyping2.js index 096f2aee06e09..8039d3fc69896 100644 --- a/tests/baselines/reference/superCallParameterContextualTyping2.js +++ b/tests/baselines/reference/superCallParameterContextualTyping2.js @@ -36,7 +36,8 @@ var C = /** @class */ (function (_super) { __extends(C, _super); // Ensure 'value' is not of type 'any' by invoking it with type arguments. function C() { - return _super.call(this, function (value) { return String(value()); }) || this; + var _this = _super.call(this, function (value) { return String(value()); }) || this; + return _this; } return C; }(A)); diff --git a/tests/baselines/reference/superCallWithCommentEmit01.js b/tests/baselines/reference/superCallWithCommentEmit01.js index 4ca25eaad55fd..f5b5aab981cc8 100644 --- a/tests/baselines/reference/superCallWithCommentEmit01.js +++ b/tests/baselines/reference/superCallWithCommentEmit01.js @@ -35,8 +35,10 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B(text) { + var _this = // this is subclass constructor - return _super.call(this, text) || this; + _super.call(this, text) || this; + return _this; } return B; }(A)); diff --git a/tests/baselines/reference/superErrors.js b/tests/baselines/reference/superErrors.js index 5ab2f69aaecd1..14cf6bd3a88f6 100644 --- a/tests/baselines/reference/superErrors.js +++ b/tests/baselines/reference/superErrors.js @@ -68,6 +68,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); function foo() { + var _this = this; // super in a non class context var x = _super.; var y = function () { return _super.; }; @@ -97,7 +98,10 @@ var RegisteredUser = /** @class */ (function (_super) { var x = function () { return _super.sayHello.call(_this); }; } // super call in a lambda in a function expression in a constructor - (function () { return function () { return _super.; }; })(); + (function () { + var _this = this; + return function () { return _super.; }; + })(); return _this; } RegisteredUser.prototype.sayHello = function () { @@ -109,9 +113,13 @@ var RegisteredUser = /** @class */ (function (_super) { var x = function () { return _super.sayHello.call(_this); }; } // super call in a lambda in a function expression in a constructor - (function () { return function () { return _super.; }; })(); + (function () { + var _this = this; + return function () { return _super.; }; + })(); }; RegisteredUser.staticFunction = function () { + var _this = this; // super in static functions var s = _super.; var x = function () { return _super.; }; diff --git a/tests/baselines/reference/superInLambdas.js b/tests/baselines/reference/superInLambdas.js index 1104ced8658f1..3bb5e354121f0 100644 --- a/tests/baselines/reference/superInLambdas.js +++ b/tests/baselines/reference/superInLambdas.js @@ -138,6 +138,7 @@ var RegisteredUser3 = /** @class */ (function (_super) { return _this; } RegisteredUser3.prototype.sayHello = function () { + var _this = this; // super property in a nested lambda in a method var superName = function () { return function () { return function () { return _super.prototype.name; }; }; }; }; @@ -153,6 +154,7 @@ var RegisteredUser4 = /** @class */ (function (_super) { return _this; } RegisteredUser4.prototype.sayHello = function () { + var _this = this; // super in a nested lambda in a method var x = function () { return function () { return _super.prototype.; }; }; }; diff --git a/tests/baselines/reference/superPropertyElementNoUnusedLexicalThisCapture.js b/tests/baselines/reference/superPropertyElementNoUnusedLexicalThisCapture.js index faa6ba0a58808..741393552b298 100644 --- a/tests/baselines/reference/superPropertyElementNoUnusedLexicalThisCapture.js +++ b/tests/baselines/reference/superPropertyElementNoUnusedLexicalThisCapture.js @@ -42,14 +42,17 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } B.prototype.foo = function () { + var _this = this; return function () { _super.prototype.x; }; }; B.prototype.bar = function () { + var _this = this; return function () { _super.prototype["x"]; }; diff --git a/tests/baselines/reference/superWithGenericSpecialization.js b/tests/baselines/reference/superWithGenericSpecialization.js index 26e34be38ab9c..1315aa5ccec4e 100644 --- a/tests/baselines/reference/superWithGenericSpecialization.js +++ b/tests/baselines/reference/superWithGenericSpecialization.js @@ -38,7 +38,8 @@ var C = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(C)); diff --git a/tests/baselines/reference/superWithGenerics.js b/tests/baselines/reference/superWithGenerics.js index 24cd2744bc215..efed69ed291f3 100644 --- a/tests/baselines/reference/superWithGenerics.js +++ b/tests/baselines/reference/superWithGenerics.js @@ -30,7 +30,8 @@ var __extends = (this && this.__extends) || (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(B)); diff --git a/tests/baselines/reference/superWithTypeArgument.js b/tests/baselines/reference/superWithTypeArgument.js index 5fbfc5dc7b263..d696f79efe95a 100644 --- a/tests/baselines/reference/superWithTypeArgument.js +++ b/tests/baselines/reference/superWithTypeArgument.js @@ -33,7 +33,8 @@ var C = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } return D; }(C)); diff --git a/tests/baselines/reference/superWithTypeArgument2.js b/tests/baselines/reference/superWithTypeArgument2.js index dfbaa09528e04..ee4387c1ff71e 100644 --- a/tests/baselines/reference/superWithTypeArgument2.js +++ b/tests/baselines/reference/superWithTypeArgument2.js @@ -33,7 +33,8 @@ var C = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D(x) { - return _super.call(this, x) || this; + var _this = _super.call(this, x) || this; + return _this; } return D; }(C)); diff --git a/tests/baselines/reference/superWithTypeArgument3.js b/tests/baselines/reference/superWithTypeArgument3.js index aefd7152b1e84..049718c54162a 100644 --- a/tests/baselines/reference/superWithTypeArgument3.js +++ b/tests/baselines/reference/superWithTypeArgument3.js @@ -38,7 +38,8 @@ var C = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + return _this; } D.prototype.bar = function () { _super.prototype.bar.call(this, null); diff --git a/tests/baselines/reference/targetTypeBaseCalls.js b/tests/baselines/reference/targetTypeBaseCalls.js index 2ae1e1adf6763..7e34f211aa08d 100644 --- a/tests/baselines/reference/targetTypeBaseCalls.js +++ b/tests/baselines/reference/targetTypeBaseCalls.js @@ -45,7 +45,8 @@ new Foo(function (s) { s = 5; }); // error, if types are applied correctly var Bar = /** @class */ (function (_super) { __extends(Bar, _super); function Bar() { - return _super.call(this, function (s) { s = 5; }) || this; + var _this = _super.call(this, function (s) { s = 5; }) || this; + return _this; } return Bar; }(Foo)); // error, if types are applied correctly diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt new file mode 100644 index 0000000000000..f62b80655a6c8 --- /dev/null +++ b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts(6,7): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts (1 errors) ==== + function log(a) { } + + class Vector { + static foo = () => { + // 'this' should not be available in a static initializer. + log(this); + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/thisInConstructorParameter2.errors.txt b/tests/baselines/reference/thisInConstructorParameter2.errors.txt index b577fe5dbd483..2b6ed8017c26b 100644 --- a/tests/baselines/reference/thisInConstructorParameter2.errors.txt +++ b/tests/baselines/reference/thisInConstructorParameter2.errors.txt @@ -1,11 +1,14 @@ +tests/cases/compiler/thisInConstructorParameter2.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/compiler/thisInConstructorParameter2.ts(5,28): error TS2333: 'this' cannot be referenced in constructor arguments. tests/cases/compiler/thisInConstructorParameter2.ts(5,39): error TS2333: 'this' cannot be referenced in constructor arguments. -==== tests/cases/compiler/thisInConstructorParameter2.ts (2 errors) ==== +==== tests/cases/compiler/thisInConstructorParameter2.ts (3 errors) ==== class P { x = this; static y = this; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. constructor(public z = this, zz = this, zzz = (p = this) => this) { ~~~~ diff --git a/tests/baselines/reference/thisInInvalidContexts.errors.txt b/tests/baselines/reference/thisInInvalidContexts.errors.txt index 9ed732644757a..7a357e1327ea5 100644 --- a/tests/baselines/reference/thisInInvalidContexts.errors.txt +++ b/tests/baselines/reference/thisInInvalidContexts.errors.txt @@ -1,3 +1,4 @@ +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(14,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(22,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. @@ -7,10 +8,12 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(44,9): tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(45,9): error TS2332: 'this' cannot be referenced in current location. -==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts (7 errors) ==== +==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts (8 errors) ==== //'this' in static member initializer class ErrClass1 { static t = this; // Error + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class BaseErrClass { diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt index 35872f7d95dd5..18f0e314a8ae7 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt @@ -1,3 +1,4 @@ +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(14,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(22,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. @@ -7,10 +8,12 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalMod tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(45,9): error TS2332: 'this' cannot be referenced in current location. -==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts (7 errors) ==== +==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts (8 errors) ==== //'this' in static member initializer class ErrClass1 { static t = this; // Error + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class BaseErrClass { diff --git a/tests/baselines/reference/thisInOuterClassBody.errors.txt b/tests/baselines/reference/thisInOuterClassBody.errors.txt index e002e87900faf..1eeabf22e2917 100644 --- a/tests/baselines/reference/thisInOuterClassBody.errors.txt +++ b/tests/baselines/reference/thisInOuterClassBody.errors.txt @@ -1,13 +1,16 @@ +tests/cases/compiler/thisInOuterClassBody.ts(5,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/compiler/thisInOuterClassBody.ts(12,22): error TS2576: Property 'y' does not exist on type 'Foo'. Did you mean to access the static member 'Foo.y' instead? tests/cases/compiler/thisInOuterClassBody.ts(18,22): error TS2339: Property 'x' does not exist on type 'typeof Foo'. -==== tests/cases/compiler/thisInOuterClassBody.ts (2 errors) ==== +==== tests/cases/compiler/thisInOuterClassBody.ts (3 errors) ==== class Foo { x = this; static y = this; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. bar() { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt index 3ff50fe4e2817..0411a42e2dc39 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt @@ -1,10 +1,18 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (12 errors) ==== declare const foo: any; @foo @@ -12,7 +20,9 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +30,19 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; @@ -42,13 +58,21 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt index 3ff50fe4e2817..0411a42e2dc39 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt @@ -1,10 +1,18 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (12 errors) ==== declare const foo: any; @foo @@ -12,7 +20,9 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +30,19 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; @@ -42,13 +58,21 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt index 3ff50fe4e2817..0411a42e2dc39 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt @@ -1,10 +1,18 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (12 errors) ==== declare const foo: any; @foo @@ -12,7 +20,9 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +30,19 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; @@ -42,13 +58,21 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt index 1dcb84e64126f..5e571a7363a67 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt @@ -1,10 +1,18 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (12 errors) ==== declare const foo: any; @foo @@ -12,7 +20,9 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +30,19 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; @@ -42,13 +58,21 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt index 1dcb84e64126f..5e571a7363a67 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt @@ -1,10 +1,18 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (12 errors) ==== declare const foo: any; @foo @@ -12,7 +20,9 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +30,19 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + ~~~~ +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; @@ -42,13 +58,21 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt index 1dcb84e64126f..e2be2fefcecef 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2809: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt new file mode 100644 index 0000000000000..9fd14cc57193a --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts(2,18): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts(6,18): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts (2 errors) ==== + class C { + static foo = this; // error + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class C2 { + static foo = this; // error + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt new file mode 100644 index 0000000000000..a776b2b8b78f7 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (3 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt new file mode 100644 index 0000000000000..a776b2b8b78f7 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (3 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt new file mode 100644 index 0000000000000..a776b2b8b78f7 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (3 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt new file mode 100644 index 0000000000000..666d39f3f433a --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (3 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt new file mode 100644 index 0000000000000..666d39f3f433a --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (3 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = super.a + this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).errors.txt new file mode 100644 index 0000000000000..2e1fca54b7fb7 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).errors.txt @@ -0,0 +1,14 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts(2,31): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts (1 errors) ==== + class C { + static create = () => new this("yep") + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + + constructor (private foo: string) { + + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).errors.txt new file mode 100644 index 0000000000000..2e1fca54b7fb7 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).errors.txt @@ -0,0 +1,14 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts(2,31): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts (1 errors) ==== + class C { + static create = () => new this("yep") + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + + constructor (private foo: string) { + + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).js index 8f14d05a7b76b..3c08a270550a6 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=esnext).js @@ -10,8 +10,9 @@ class C { //// [typeOfThisInStaticMembers5.js] class C { + foo; + static create = () => new this("yep"); constructor(foo) { this.foo = foo; } } -C.create = () => new C("yep"); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt new file mode 100644 index 0000000000000..2ca20146e4832 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(9,33): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts (3 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = 1 + (super.a) + (this.c + 1) + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).errors.txt new file mode 100644 index 0000000000000..2ca20146e4832 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(9,33): error TS2334: 'this' cannot be referenced in a static property initializer. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts (3 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + + class D extends C { + static c = 2; + static d = this.c + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + static e = 1 + (super.a) + (this.c + 1) + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).js index 59581b2082621..7e5d0bc0f819c 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=esnext).js @@ -13,11 +13,11 @@ class D extends C { //// [typeOfThisInStaticMembers7.js] class C { + static a = 1; + static b = this.a + 1; } -C.a = 1; -C.b = C.a + 1; class D extends C { + static c = 2; + static d = this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; } -D.c = 2; -D.d = D.c + 1; -D.e = 1 + (C.a) + (D.c + 1) + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt index 072f38100cfc6..361e4fc399be0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt @@ -1,12 +1,15 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(3,42): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(5,49): error TS2339: Property 'f' does not exist on type '(Anonymous class)'. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(11,22): error TS2339: Property 'f' does not exist on type 'CC'. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(13,29): error TS2339: Property 'f' does not exist on type 'CC'. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (3 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (4 errors) ==== class C { static f = 1; static arrowFunctionBoundary = () => this.f + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static functionExprBoundary = function () { return this.f + 2 }; static classExprBoundary = class { a = this.f + 3 }; ~ diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt index 072f38100cfc6..361e4fc399be0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt @@ -1,12 +1,15 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(3,42): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(5,49): error TS2339: Property 'f' does not exist on type '(Anonymous class)'. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(11,22): error TS2339: Property 'f' does not exist on type 'CC'. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(13,29): error TS2339: Property 'f' does not exist on type 'CC'. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (3 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (4 errors) ==== class C { static f = 1; static arrowFunctionBoundary = () => this.f + 1; + ~~~~ +!!! error TS2334: 'this' cannot be referenced in a static property initializer. static functionExprBoundary = function () { return this.f + 2 }; static classExprBoundary = class { a = this.f + 3 }; ~ diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).js index 90f3276bb5e18..6d0e04fe18c71 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=esnext).js @@ -20,25 +20,21 @@ class C { //// [typeOfThisInStaticMembers8.js] class C { -} -C.f = 1; -C.arrowFunctionBoundary = () => C.f + 1; -C.functionExprBoundary = function () { return this.f + 2; }; -C.classExprBoundary = class { - constructor() { - this.a = this.f + 3; - } -}; -C.functionAndClassDeclBoundary = (() => { - function foo() { - return this.f + 4; - } - class CC { - constructor() { - this.a = this.f + 5; + static f = 1; + static arrowFunctionBoundary = () => this.f + 1; + static functionExprBoundary = function () { return this.f + 2; }; + static classExprBoundary = class { + a = this.f + 3; + }; + static functionAndClassDeclBoundary = (() => { + function foo() { + return this.f + 4; } - method() { - return this.f + 6; + class CC { + a = this.f + 5; + method() { + return this.f + 6; + } } - } -})(); + })(); +} diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).js index 2a2c813709639..861937ac70d39 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=esnext).js @@ -23,27 +23,23 @@ class D extends C { //// [typeOfThisInStaticMembers9.js] class C { + static f = 1; } -C.f = 1; class D extends C { -} -D.arrowFunctionBoundary = () => C.f + 1; -D.functionExprBoundary = function () { return super.f + 2; }; -D.classExprBoundary = class { - constructor() { - this.a = super.f + 3; - } -}; -D.functionAndClassDeclBoundary = (() => { - function foo() { - return super.f + 4; - } - class C { - constructor() { - this.a = super.f + 5; + static arrowFunctionBoundary = () => super.f + 1; + static functionExprBoundary = function () { return super.f + 2; }; + static classExprBoundary = class { + a = super.f + 3; + }; + static functionAndClassDeclBoundary = (() => { + function foo() { + return super.f + 4; } - method() { - return super.f + 6; + class C { + a = super.f + 5; + method() { + return super.f + 6; + } } - } -})(); + })(); +} diff --git a/tests/baselines/reference/unknownSymbols1.js b/tests/baselines/reference/unknownSymbols1.js index 022a738d91711..faea64abf683c 100644 --- a/tests/baselines/reference/unknownSymbols1.js +++ b/tests/baselines/reference/unknownSymbols1.js @@ -73,7 +73,8 @@ var C3 = /** @class */ (function () { var C4 = /** @class */ (function (_super) { __extends(C4, _super); function C4() { - return _super.call(this, asdf) || this; + var _this = _super.call(this, asdf) || this; + return _this; } return C4; }(C3)); From df592435de13cb55ab01ce2746ce0a0b9c29be5b Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 14 Apr 2021 14:04:22 +0800 Subject: [PATCH 21/33] Update behavior --- src/compiler/factory/nodeFactory.ts | 2 - src/compiler/transformers/classFields.ts | 134 ++++++++++++------ src/compiler/utilitiesPublic.ts | 2 +- .../amdDeclarationEmitNoExtraDeclare.js | 3 +- .../anonClassDeclarationEmitIsAnon.js | 3 +- .../reference/assignmentCompatability45.js | 3 +- tests/baselines/reference/baseCheck.js | 6 +- .../reference/checkForObjectTooStrict.js | 6 +- .../reference/classSideInheritance2.js | 3 +- .../reference/classSideInheritance3.js | 3 +- tests/baselines/reference/classUpdateTests.js | 3 +- .../reference/collisionSuperAndParameter.js | 3 +- ...perAndPropertyNameAsConstuctorParameter.js | 6 +- .../reference/commentsInheritance.js | 3 +- ...ctorFunctionTypeIsAssignableToBaseType2.js | 3 +- .../reference/constructorOverloads2.js | 3 +- .../reference/declFileGenericType2.js | 3 +- .../reference/decoratorOnClassConstructor2.js | 3 +- .../reference/decoratorOnClassConstructor3.js | 3 +- .../derivedClassOverridesPrivateFunction1.js | 3 +- .../derivedClassOverridesProtectedMembers.js | 3 +- .../derivedClassOverridesProtectedMembers2.js | 3 +- .../derivedClassOverridesProtectedMembers3.js | 30 ++-- .../derivedClassOverridesPublicMembers.js | 3 +- .../destructuringParameterDeclaration5.js | 6 +- tests/baselines/reference/es6ClassTest2.js | 3 +- ...cClassPropertyInheritanceSpecialization.js | 3 +- ...genericConstraintOnExtendedBuiltinTypes.js | 3 +- ...enericConstraintOnExtendedBuiltinTypes2.js | 3 +- .../reference/genericTypeConstraints.js | 3 +- .../reference/importNotElidedWhenNotFound.js | 6 +- .../inferringClassMembersFromAssignments.js | 5 +- .../jsDeclarationsExportedClassAliases.js | 3 +- ...bclassWithExplicitNoArgumentConstructor.js | 3 +- .../missingPropertiesOfClassExpression.js | 3 +- .../reference/mixinPrivateAndProtected.js | 3 +- .../reference/optionalParamArgsTest.js | 3 +- tests/baselines/reference/override5.js | 3 +- tests/baselines/reference/override7.js | 3 +- .../baselines/reference/parserRealSource11.js | 21 +-- tests/baselines/reference/parserharness.js | 3 +- .../reference/strictModeInConstructor.js | 3 +- ...allFromClassThatDerivesFromGenericType1.js | 3 +- ...allFromClassThatDerivesFromGenericType2.js | 3 +- ...eButWithIncorrectNumberOfTypeArguments1.js | 3 +- ...sFromGenericTypeButWithNoTypeArguments1.js | 3 +- ...ivesNonGenericTypeButWithTypeArguments1.js | 3 +- .../superCallInsideClassDeclaration.js | 3 +- .../superCallInsideClassExpression.js | 3 +- .../superCallParameterContextualTyping1.js | 3 +- .../superCallParameterContextualTyping2.js | 3 +- .../reference/superCallWithCommentEmit01.js | 4 +- tests/baselines/reference/superErrors.js | 12 +- tests/baselines/reference/superInLambdas.js | 2 - ...opertyElementNoUnusedLexicalThisCapture.js | 5 +- .../superWithGenericSpecialization.js | 3 +- .../baselines/reference/superWithGenerics.js | 3 +- .../reference/superWithTypeArgument.js | 3 +- .../reference/superWithTypeArgument2.js | 3 +- .../reference/superWithTypeArgument3.js | 3 +- .../reference/targetTypeBaseCalls.js | 3 +- ...thisInArrowFunctionInStaticInitializer1.js | 3 +- .../reference/thisInConstructorParameter2.js | 2 +- .../reference/thisInInvalidContexts.js | 2 +- .../thisInInvalidContextsExternalModule.js | 2 +- .../reference/thisInOuterClassBody.js | 2 +- ...typeOfThisInStaticMembers10(target=es5).js | 17 +-- ...typeOfThisInStaticMembers10(target=es6).js | 16 +-- ...eOfThisInStaticMembers10(target=esnext).js | 16 +-- ...typeOfThisInStaticMembers11(target=es5).js | 17 +-- ...typeOfThisInStaticMembers11(target=es6).js | 16 +-- ...typeOfThisInStaticMembers12(target=es5).js | 4 +- ...typeOfThisInStaticMembers12(target=es6).js | 4 +- ...eOfThisInStaticMembers12(target=esnext).js | 4 +- ...typeOfThisInStaticMembers13(target=es5).js | 4 +- ...typeOfThisInStaticMembers13(target=es6).js | 4 +- .../reference/typeOfThisInStaticMembers2.js | 4 +- .../typeOfThisInStaticMembers3(target=es5).js | 6 +- .../typeOfThisInStaticMembers3(target=es6).js | 6 +- ...peOfThisInStaticMembers3(target=esnext).js | 6 +- .../typeOfThisInStaticMembers4(target=es5).js | 6 +- .../typeOfThisInStaticMembers4(target=es6).js | 6 +- .../typeOfThisInStaticMembers5(target=es5).js | 3 +- .../typeOfThisInStaticMembers5(target=es6).js | 2 +- .../typeOfThisInStaticMembers7(target=es5).js | 6 +- .../typeOfThisInStaticMembers7(target=es6).js | 6 +- .../typeOfThisInStaticMembers8(target=es5).js | 3 +- .../typeOfThisInStaticMembers8(target=es6).js | 2 +- .../typeOfThisInStaticMembers9(target=es5).js | 1 - .../typeOfThisInStaticMembers9(target=es6).js | 2 +- tests/baselines/reference/unknownSymbols1.js | 3 +- 91 files changed, 258 insertions(+), 302 deletions(-) diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index a6e5f9b266733..ecda1ab7b817e 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -978,8 +978,6 @@ namespace ts { transformFlags = TransformFlags.ContainsTypeScript; break; case SyntaxKind.SuperKeyword: - transformFlags = TransformFlags.ContainsLexicalThis | TransformFlags.ContainsES2015; - break; case SyntaxKind.StaticKeyword: transformFlags = TransformFlags.ContainsES2015; break; diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 5c1d84766e86c..c3e82e5ce2056 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -90,6 +90,12 @@ namespace ts { identifiers: UnderscoreEscapedMap } + interface StaticClassFieldsInitializeContext { + receiver: LeftHandSideExpression + baseClass: LeftHandSideExpression | undefined + classHasDecorators: boolean | undefined + } + /** * Transforms ECMAScript Class Syntax. * TypeScript parameter property syntax is transformed in the TypeScript transformer. @@ -134,6 +140,8 @@ namespace ts { const privateIdentifierEnvironmentStack: (PrivateIdentifierEnvironment | undefined)[] = []; let currentPrivateIdentifierEnvironment: PrivateIdentifierEnvironment | undefined; + let staticFieldInitializerContext: StaticClassFieldsInitializeContext | undefined; + return chainBundle(context, transformSourceFile); function transformSourceFile(node: SourceFile) { @@ -147,7 +155,7 @@ namespace ts { return visited; } - function visitor(node: Node): VisitResult { + function visitor (node: Node): VisitResult { if (!(node.transformFlags & TransformFlags.ContainsClassFields)) return node; switch (node.kind) { @@ -176,51 +184,70 @@ namespace ts { return visitForStatement(node as ForStatement); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node as TaggedTemplateExpression); + case SyntaxKind.ThisKeyword: + return visitThisExpression(node as ThisExpression); + case SyntaxKind.SuperKeyword: + return visitSuperExpression(node as SuperExpression); + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + case SyntaxKind.Constructor: + return visitNonStaticBoundaryFunction(node as FunctionDeclaration | FunctionExpression | ConstructorDeclaration); + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.MethodDeclaration: + return visitNameInStaticBoundaryFunction(node as AccessorDeclaration | MethodDeclaration); } return visitEachChild(node, visitor, context); } - function visitorDestructuringTarget(node: Node): VisitResult { - switch (node.kind) { - case SyntaxKind.ObjectLiteralExpression: - case SyntaxKind.ArrayLiteralExpression: - return visitAssignmentPattern(node as AssignmentPattern); - default: - return visitor(node); + function visitNameInStaticBoundaryFunction(node: AccessorDeclaration | MethodDeclaration) { + function nameInContextVisitor (n: Node): Node { + if (node.name === n) { + return visitNode(n, visitor) + } + + const savedStaticFieldInitializerContext = staticFieldInitializerContext; + staticFieldInitializerContext = undefined; + const result = visitNode(n, visitor) + staticFieldInitializerContext = savedStaticFieldInitializerContext; + return result; } + return visitEachChild(node, nameInContextVisitor, context); } - function visitorThisOrSuperInStaticFieldContext(root: Expression | undefined, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined): Expression | undefined { - const shouldRewriteSuper = baseClass && languageVersion >= ScriptTarget.ES2015; - const shouldAvoidThisOrSuper = hasClassDecorators; - const shouldCareAboutSuper = shouldRewriteSuper || shouldAvoidThisOrSuper; + function visitNonStaticBoundaryFunction (node: FunctionDeclaration | FunctionExpression | ConstructorDeclaration) { + const savedStaticFieldInitializerContext = staticFieldInitializerContext; + staticFieldInitializerContext = undefined; + const result = visitEachChild(node, visitor, context); + staticFieldInitializerContext = savedStaticFieldInitializerContext; + return result; + } - function staticFieldThisOrSuperVisitor(node: Expression): Expression { - if (!(node.transformFlags & TransformFlags.ContainsLexicalThis)) { - return node; - } + function visitThisExpression(node: ThisExpression): Expression { + if (!staticFieldInitializerContext) { + return visitEachChild(node, visitor, context) + } - // `This` access in static field cannot cross function boundary. - if (isThisOrSuperInStaticFieldBoundary(node, node !== root ? node.parent : undefined)) { - return node; - } + const { receiver, classHasDecorators } = staticFieldInitializerContext; + return setTextRange( + setOriginalNode( + classHasDecorators ? + factory.createParenthesizedExpression(factory.createVoidZero()) : + factory.cloneNode(receiver), + node, + ), + node + ); + } - const originalNode = getOriginalNode(node); - if (originalNode.kind === SyntaxKind.ThisKeyword) { + function visitSuperExpression(node: SuperExpression): Expression { + if (staticFieldInitializerContext) { + const shouldRewriteSuper = languageVersion >= ScriptTarget.ES2015; + const { baseClass, classHasDecorators } = staticFieldInitializerContext; + if (baseClass && (shouldRewriteSuper || classHasDecorators)) { return setTextRange( setOriginalNode( - shouldAvoidThisOrSuper ? - factory.createParenthesizedExpression(factory.createVoidZero()) : - factory.cloneNode(receiver), - node, - ), - node - ); - } - else if (baseClass && shouldCareAboutSuper && originalNode.kind === SyntaxKind.SuperKeyword) { - return setTextRange( - setOriginalNode( - shouldAvoidThisOrSuper ? + classHasDecorators ? factory.createParenthesizedExpression(factory.createVoidZero()) : factory.cloneNode(baseClass), node @@ -228,11 +255,18 @@ namespace ts { node ); } + } + return visitEachChild(node, visitor, context); + } - return visitEachChild(node, staticFieldThisOrSuperVisitor, context); - }; - - return visitNode(root, staticFieldThisOrSuperVisitor, isExpression); + function visitorDestructuringTarget(node: Node): VisitResult { + switch (node.kind) { + case SyntaxKind.ObjectLiteralExpression: + case SyntaxKind.ArrayLiteralExpression: + return visitAssignmentPattern(node as AssignmentPattern); + default: + return visitor(node); + } } /** @@ -1038,13 +1072,25 @@ namespace ts { return expressions; } + function visitPropertyDeclarationInContext (property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, classHasDecorators: boolean | undefined) { + const savedStaticFieldInitializerContext = staticFieldInitializerContext; + staticFieldInitializerContext = hasStaticModifier(property) ? { + receiver, + baseClass, + classHasDecorators + } : undefined; + const result = visitNode(property.initializer, visitor, isExpression) + staticFieldInitializerContext = savedStaticFieldInitializerContext; + return result; + } + /** * Transforms a property initializer into an assignment statement. * * @param property The property declaration. * @param receiver The object receiving the property assignment. */ - function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined) { + function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, classHasDecorators: boolean | undefined) { // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name) const emitAssignment = !useDefineForClassFields; const propertyName = isComputedPropertyName(property.name) && !isSimpleInlineableExpression(property.name.expression) @@ -1058,14 +1104,14 @@ namespace ts { if (!privateIdentifierInfo.isStatic) { return createPrivateInstanceFieldInitializer( receiver, - visitNode(property.initializer, visitor, isExpression), + visitPropertyDeclarationInContext(property, receiver, baseClass, classHasDecorators), privateIdentifierInfo.brandCheckIdentifier ); } else { return createPrivateStaticFieldInitializer( privateIdentifierInfo.variableName, - visitNode(property.initializer, visitor, isExpression) + visitPropertyDeclarationInContext(property, receiver, baseClass, classHasDecorators) ); } } @@ -1086,11 +1132,7 @@ namespace ts { return undefined; } - const initializer = property.initializer || emitAssignment ? visitNode( - hasStaticModifier(property) ? visitorThisOrSuperInStaticFieldContext(property.initializer, receiver, baseClass, hasClassDecorators) : property.initializer, - visitor, - isExpression - ) ?? factory.createVoidZero() + const initializer = property.initializer || emitAssignment ? visitPropertyDeclarationInContext(property, receiver, baseClass, classHasDecorators) ?? factory.createVoidZero() : isParameterPropertyDeclaration(propertyOriginalNode, propertyOriginalNode.parent) && isIdentifier(propertyName) ? propertyName : factory.createVoidZero(); diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 4630730db95c1..7337c28383fbf 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1247,7 +1247,7 @@ namespace ts { } /* @internal */ - export function isThisOrSuperInStaticFieldBoundary(node: Node, parent: Node | undefined): boolean { + export function isFunctionBoundary(node: Node, parent: Node | undefined): boolean { switch (node.kind) { case SyntaxKind.FunctionDeclaration: case SyntaxKind.FunctionExpression: diff --git a/tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js b/tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js index 21598da516959..eb140e5a33fff 100644 --- a/tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js +++ b/tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js @@ -49,8 +49,7 @@ define("Configurable", ["require", "exports"], function (require, exports) { for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } - var _this = _super.apply(this, args) || this; - return _this; + return _super.apply(this, args) || this; } return class_1; }(base)); diff --git a/tests/baselines/reference/anonClassDeclarationEmitIsAnon.js b/tests/baselines/reference/anonClassDeclarationEmitIsAnon.js index 68015100f701d..2c7ccdcccb8e0 100644 --- a/tests/baselines/reference/anonClassDeclarationEmitIsAnon.js +++ b/tests/baselines/reference/anonClassDeclarationEmitIsAnon.js @@ -109,8 +109,7 @@ exports.User = User; var TimestampedUser = /** @class */ (function (_super) { __extends(TimestampedUser, _super); function TimestampedUser() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return TimestampedUser; }((0, wrapClass_1.Timestamped)(User))); diff --git a/tests/baselines/reference/assignmentCompatability45.js b/tests/baselines/reference/assignmentCompatability45.js index a212dd26596dc..f5ac5b1f4ce2f 100644 --- a/tests/baselines/reference/assignmentCompatability45.js +++ b/tests/baselines/reference/assignmentCompatability45.js @@ -32,8 +32,7 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B(x) { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return B; }(A)); diff --git a/tests/baselines/reference/baseCheck.js b/tests/baselines/reference/baseCheck.js index 311ca693c77e0..9071dd0f11065 100644 --- a/tests/baselines/reference/baseCheck.js +++ b/tests/baselines/reference/baseCheck.js @@ -53,16 +53,14 @@ var C = /** @class */ (function () { var ELoc = /** @class */ (function (_super) { __extends(ELoc, _super); function ELoc(x) { - var _this = _super.call(this, 0, x) || this; - return _this; + return _super.call(this, 0, x) || this; } return ELoc; }(C)); var ELocVar = /** @class */ (function (_super) { __extends(ELocVar, _super); function ELocVar(x) { - var _this = _super.call(this, 0, loc) || this; - return _this; + return _super.call(this, 0, loc) || this; } ELocVar.prototype.m = function () { var loc = 10; diff --git a/tests/baselines/reference/checkForObjectTooStrict.js b/tests/baselines/reference/checkForObjectTooStrict.js index 80730386330ce..3410b421a7825 100644 --- a/tests/baselines/reference/checkForObjectTooStrict.js +++ b/tests/baselines/reference/checkForObjectTooStrict.js @@ -59,16 +59,14 @@ var Foo; var Bar = /** @class */ (function (_super) { __extends(Bar, _super); function Bar() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return Bar; }(Foo.Object)); var Baz = /** @class */ (function (_super) { __extends(Baz, _super); function Baz() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return Baz; }(Object)); diff --git a/tests/baselines/reference/classSideInheritance2.js b/tests/baselines/reference/classSideInheritance2.js index d6112ca0479f1..b179eb5f4a52d 100644 --- a/tests/baselines/reference/classSideInheritance2.js +++ b/tests/baselines/reference/classSideInheritance2.js @@ -39,8 +39,7 @@ var __extends = (this && this.__extends) || (function () { var SubText = /** @class */ (function (_super) { __extends(SubText, _super); function SubText(text, span) { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return SubText; }(TextBase)); diff --git a/tests/baselines/reference/classSideInheritance3.js b/tests/baselines/reference/classSideInheritance3.js index 2834f4a5f325f..8f4ba095e5832 100644 --- a/tests/baselines/reference/classSideInheritance3.js +++ b/tests/baselines/reference/classSideInheritance3.js @@ -52,8 +52,7 @@ var B = /** @class */ (function (_super) { var C = /** @class */ (function (_super) { __extends(C, _super); function C(x) { - var _this = _super.call(this, x) || this; - return _this; + return _super.call(this, x) || this; } return C; }(A)); diff --git a/tests/baselines/reference/classUpdateTests.js b/tests/baselines/reference/classUpdateTests.js index 6b2e8bb0921d1..325f4ef87f166 100644 --- a/tests/baselines/reference/classUpdateTests.js +++ b/tests/baselines/reference/classUpdateTests.js @@ -199,8 +199,7 @@ var H = /** @class */ (function () { var I = /** @class */ (function (_super) { __extends(I, _super); function I() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } // ERROR - no super call allowed return I; }(Object)); diff --git a/tests/baselines/reference/collisionSuperAndParameter.js b/tests/baselines/reference/collisionSuperAndParameter.js index 4d33df508e2ec..bf76b22bf7666 100644 --- a/tests/baselines/reference/collisionSuperAndParameter.js +++ b/tests/baselines/reference/collisionSuperAndParameter.js @@ -134,8 +134,7 @@ var Foo2 = /** @class */ (function (_super_1) { var Foo4 = /** @class */ (function (_super_1) { __extends(Foo4, _super_1); function Foo4(_super) { - var _this = _super_1.call(this) || this; - return _this; + return _super_1.call(this) || this; } Foo4.prototype.y = function (_super) { var _this = this; diff --git a/tests/baselines/reference/collisionSuperAndPropertyNameAsConstuctorParameter.js b/tests/baselines/reference/collisionSuperAndPropertyNameAsConstuctorParameter.js index a53421683260e..64e1984d7659e 100644 --- a/tests/baselines/reference/collisionSuperAndPropertyNameAsConstuctorParameter.js +++ b/tests/baselines/reference/collisionSuperAndPropertyNameAsConstuctorParameter.js @@ -54,8 +54,7 @@ var a = /** @class */ (function () { var b1 = /** @class */ (function (_super_1) { __extends(b1, _super_1); function b1(_super) { - var _this = _super_1.call(this) || this; - return _this; + return _super_1.call(this) || this; } return b1; }(a)); @@ -71,8 +70,7 @@ var b2 = /** @class */ (function (_super_1) { var b3 = /** @class */ (function (_super_1) { __extends(b3, _super_1); function b3(_super) { - var _this = _super_1.call(this) || this; - return _this; + return _super_1.call(this) || this; } return b3; }(a)); diff --git a/tests/baselines/reference/commentsInheritance.js b/tests/baselines/reference/commentsInheritance.js index 8ecd8c19675e5..680bde5845853 100644 --- a/tests/baselines/reference/commentsInheritance.js +++ b/tests/baselines/reference/commentsInheritance.js @@ -236,8 +236,7 @@ var c2 = /** @class */ (function () { var c3 = /** @class */ (function (_super) { __extends(c3, _super); function c3() { - var _this = _super.call(this, 10) || this; - return _this; + return _super.call(this, 10) || this; } /** c3 f1*/ c3.prototype.f1 = function () { diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js index e1feb18b2800a..73bc4c753585c 100644 --- a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js @@ -57,8 +57,7 @@ var Base = /** @class */ (function () { var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived(x) { - var _this = _super.call(this, x) || this; - return _this; + return _super.call(this, x) || this; } return Derived; }(Base)); diff --git a/tests/baselines/reference/constructorOverloads2.js b/tests/baselines/reference/constructorOverloads2.js index 369a7e6dac9e3..5332b0142caed 100644 --- a/tests/baselines/reference/constructorOverloads2.js +++ b/tests/baselines/reference/constructorOverloads2.js @@ -50,8 +50,7 @@ var FooBase = /** @class */ (function () { var Foo = /** @class */ (function (_super) { __extends(Foo, _super); function Foo(x, y) { - var _this = _super.call(this, x) || this; - return _this; + return _super.call(this, x) || this; } Foo.prototype.bar1 = function () { }; return Foo; diff --git a/tests/baselines/reference/declFileGenericType2.js b/tests/baselines/reference/declFileGenericType2.js index 46848acc5de77..d1b5e33467bc9 100644 --- a/tests/baselines/reference/declFileGenericType2.js +++ b/tests/baselines/reference/declFileGenericType2.js @@ -67,8 +67,7 @@ var templa; var AbstractElementController = /** @class */ (function (_super) { __extends(AbstractElementController, _super); function AbstractElementController() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return AbstractElementController; }(templa.mvc.AbstractController)); diff --git a/tests/baselines/reference/decoratorOnClassConstructor2.js b/tests/baselines/reference/decoratorOnClassConstructor2.js index e993037826876..23dbbf69036da 100644 --- a/tests/baselines/reference/decoratorOnClassConstructor2.js +++ b/tests/baselines/reference/decoratorOnClassConstructor2.js @@ -58,8 +58,7 @@ var _0_ts_2 = require("./0.ts"); var C = /** @class */ (function (_super) { __extends(C, _super); function C(prop) { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } C = __decorate([ __param(0, _0_ts_2.foo) diff --git a/tests/baselines/reference/decoratorOnClassConstructor3.js b/tests/baselines/reference/decoratorOnClassConstructor3.js index 78d1955d142a4..ff584adb5f043 100644 --- a/tests/baselines/reference/decoratorOnClassConstructor3.js +++ b/tests/baselines/reference/decoratorOnClassConstructor3.js @@ -61,8 +61,7 @@ var _0_2 = require("./0"); var C = /** @class */ (function (_super) { __extends(C, _super); function C(prop) { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } C = __decorate([ __param(0, _0_2.foo) diff --git a/tests/baselines/reference/derivedClassOverridesPrivateFunction1.js b/tests/baselines/reference/derivedClassOverridesPrivateFunction1.js index aa61badeafec6..d102983620740 100644 --- a/tests/baselines/reference/derivedClassOverridesPrivateFunction1.js +++ b/tests/baselines/reference/derivedClassOverridesPrivateFunction1.js @@ -42,8 +42,7 @@ var BaseClass = /** @class */ (function () { var DerivedClass = /** @class */ (function (_super) { __extends(DerivedClass, _super); function DerivedClass() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } DerivedClass.prototype._init = function () { }; diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers.js b/tests/baselines/reference/derivedClassOverridesProtectedMembers.js index 6847397d3bb99..812f272f7ad45 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers.js +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers.js @@ -75,8 +75,7 @@ var Base = /** @class */ (function () { var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived(a) { - var _this = _super.call(this, x) || this; - return _this; + return _super.call(this, x) || this; } Derived.prototype.b = function (a) { }; Object.defineProperty(Derived.prototype, "c", { diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers2.js b/tests/baselines/reference/derivedClassOverridesProtectedMembers2.js index 89bcef418d0ca..dc18ddcc9ded3 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers2.js +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers2.js @@ -104,8 +104,7 @@ var Base = /** @class */ (function () { var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } Derived.prototype.b = function (a) { }; Object.defineProperty(Derived.prototype, "c", { diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers3.js b/tests/baselines/reference/derivedClassOverridesProtectedMembers3.js index c0d577e4121a1..7c873b6830575 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers3.js +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers3.js @@ -112,16 +112,14 @@ var Base = /** @class */ (function () { var Derived1 = /** @class */ (function (_super) { __extends(Derived1, _super); function Derived1(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } return Derived1; }(Base)); var Derived2 = /** @class */ (function (_super) { __extends(Derived2, _super); function Derived2(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } Derived2.prototype.b = function (a) { }; return Derived2; @@ -129,8 +127,7 @@ var Derived2 = /** @class */ (function (_super) { var Derived3 = /** @class */ (function (_super) { __extends(Derived3, _super); function Derived3(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } Object.defineProperty(Derived3.prototype, "c", { get: function () { return x; }, @@ -142,8 +139,7 @@ var Derived3 = /** @class */ (function (_super) { var Derived4 = /** @class */ (function (_super) { __extends(Derived4, _super); function Derived4(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } Object.defineProperty(Derived4.prototype, "c", { set: function (v) { }, @@ -155,24 +151,21 @@ var Derived4 = /** @class */ (function (_super) { var Derived5 = /** @class */ (function (_super) { __extends(Derived5, _super); function Derived5(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } return Derived5; }(Base)); var Derived6 = /** @class */ (function (_super) { __extends(Derived6, _super); function Derived6(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } return Derived6; }(Base)); var Derived7 = /** @class */ (function (_super) { __extends(Derived7, _super); function Derived7(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } Derived7.s = function (a) { }; return Derived7; @@ -180,8 +173,7 @@ var Derived7 = /** @class */ (function (_super) { var Derived8 = /** @class */ (function (_super) { __extends(Derived8, _super); function Derived8(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } Object.defineProperty(Derived8, "t", { get: function () { return x; }, @@ -193,8 +185,7 @@ var Derived8 = /** @class */ (function (_super) { var Derived9 = /** @class */ (function (_super) { __extends(Derived9, _super); function Derived9(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } Object.defineProperty(Derived9, "t", { set: function (v) { }, @@ -206,8 +197,7 @@ var Derived9 = /** @class */ (function (_super) { var Derived10 = /** @class */ (function (_super) { __extends(Derived10, _super); function Derived10(a) { - var _this = _super.call(this, a) || this; - return _this; + return _super.call(this, a) || this; } return Derived10; }(Base)); diff --git a/tests/baselines/reference/derivedClassOverridesPublicMembers.js b/tests/baselines/reference/derivedClassOverridesPublicMembers.js index 87b0ffc8547ab..5c1f5fd42e69d 100644 --- a/tests/baselines/reference/derivedClassOverridesPublicMembers.js +++ b/tests/baselines/reference/derivedClassOverridesPublicMembers.js @@ -102,8 +102,7 @@ var Base = /** @class */ (function () { var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived(a) { - var _this = _super.call(this, x) || this; - return _this; + return _super.call(this, x) || this; } Derived.prototype.b = function (a) { }; Object.defineProperty(Derived.prototype, "c", { diff --git a/tests/baselines/reference/destructuringParameterDeclaration5.js b/tests/baselines/reference/destructuringParameterDeclaration5.js index 87ff4c0543d54..9a647ae2bac31 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration5.js +++ b/tests/baselines/reference/destructuringParameterDeclaration5.js @@ -75,8 +75,7 @@ var Class = /** @class */ (function () { var SubClass = /** @class */ (function (_super) { __extends(SubClass, _super); function SubClass() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return SubClass; }(Class)); @@ -88,8 +87,7 @@ var D = /** @class */ (function () { var SubD = /** @class */ (function (_super) { __extends(SubD, _super); function SubD() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return SubD; }(D)); diff --git a/tests/baselines/reference/es6ClassTest2.js b/tests/baselines/reference/es6ClassTest2.js index 3c13b3a84ff7c..7ec8cd45f52fa 100644 --- a/tests/baselines/reference/es6ClassTest2.js +++ b/tests/baselines/reference/es6ClassTest2.js @@ -277,8 +277,7 @@ var SuperParent = /** @class */ (function () { var SuperChild = /** @class */ (function (_super) { __extends(SuperChild, _super); function SuperChild() { - var _this = _super.call(this, 1) || this; - return _this; + return _super.call(this, 1) || this; } SuperChild.prototype.b = function () { _super.prototype.b.call(this, 'str'); diff --git a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.js b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.js index bfd99dcb960d0..bd9c99e5b117a 100644 --- a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.js +++ b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.js @@ -119,8 +119,7 @@ var PortalFx; var Validator = /** @class */ (function (_super) { __extends(Validator, _super); function Validator(message) { - var _this = _super.call(this, message) || this; - return _this; + return _super.call(this, message) || this; } return Validator; }(Portal.Controls.Validators.Validator)); diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.js b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.js index 4bc0b14713b89..bafecf8f5948f 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.js +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.js @@ -61,8 +61,7 @@ var EndGate; var NumberTween = /** @class */ (function (_super) { __extends(NumberTween, _super); function NumberTween(from) { - var _this = _super.call(this, from) || this; - return _this; + return _super.call(this, from) || this; } return NumberTween; }(Tweening.Tween)); diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.js b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.js index 1c4024586047e..329b9ac6ec810 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.js +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.js @@ -60,8 +60,7 @@ var EndGate; var NumberTween = /** @class */ (function (_super) { __extends(NumberTween, _super); function NumberTween(from) { - var _this = _super.call(this, from) || this; - return _this; + return _super.call(this, from) || this; } return NumberTween; }(Tweening.Tween)); diff --git a/tests/baselines/reference/genericTypeConstraints.js b/tests/baselines/reference/genericTypeConstraints.js index 6758b6fc02d10..3ca500cf7572c 100644 --- a/tests/baselines/reference/genericTypeConstraints.js +++ b/tests/baselines/reference/genericTypeConstraints.js @@ -48,8 +48,7 @@ var Bar = /** @class */ (function () { var BarExtended = /** @class */ (function (_super) { __extends(BarExtended, _super); function BarExtended() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return BarExtended; }(Bar)); diff --git a/tests/baselines/reference/importNotElidedWhenNotFound.js b/tests/baselines/reference/importNotElidedWhenNotFound.js index 868adc4214249..2b50496e619f6 100644 --- a/tests/baselines/reference/importNotElidedWhenNotFound.js +++ b/tests/baselines/reference/importNotElidedWhenNotFound.js @@ -40,8 +40,7 @@ var other_file_1 = require("other_file"); var Y = /** @class */ (function (_super) { __extends(Y, _super); function Y() { - var _this = _super.call(this, file_1["default"]) || this; - return _this; + return _super.call(this, file_1["default"]) || this; } return Y; }(other_file_1["default"])); @@ -50,8 +49,7 @@ var file3_1 = require("file3"); var Q = /** @class */ (function (_super) { __extends(Q, _super); function Q() { - var _this = _super.call(this, file2_1["default"], file3_1["default"]) || this; - return _this; + return _super.call(this, file2_1["default"], file3_1["default"]) || this; } return Q; }(other_file_1["default"])); diff --git a/tests/baselines/reference/inferringClassMembersFromAssignments.js b/tests/baselines/reference/inferringClassMembersFromAssignments.js index f46fe6fdc305c..e8d25a917dd47 100644 --- a/tests/baselines/reference/inferringClassMembersFromAssignments.js +++ b/tests/baselines/reference/inferringClassMembersFromAssignments.js @@ -133,6 +133,7 @@ var stringOrNumberOrUndefined = C.inStaticNestedArrowFunction; //// [output.js] +var _this = this; var C = /** @class */ (function () { function C() { var _this = this; @@ -226,10 +227,10 @@ var C = /** @class */ (function () { }; C.prop = function () { if (Math.random()) { - C.inStaticPropertyDeclaration = 0; + _this.inStaticPropertyDeclaration = 0; } else { - C.inStaticPropertyDeclaration = "string"; + _this.inStaticPropertyDeclaration = "string"; } }; return C; diff --git a/tests/baselines/reference/jsDeclarationsExportedClassAliases.js b/tests/baselines/reference/jsDeclarationsExportedClassAliases.js index 618c8c253adb1..aaf4bf08165bd 100644 --- a/tests/baselines/reference/jsDeclarationsExportedClassAliases.js +++ b/tests/baselines/reference/jsDeclarationsExportedClassAliases.js @@ -38,8 +38,7 @@ var __extends = (this && this.__extends) || (function () { var FancyError = /** @class */ (function (_super) { __extends(FancyError, _super); function FancyError(status) { - var _this = _super.call(this, "error with status " + status) || this; - return _this; + return _super.call(this, "error with status " + status) || this; } return FancyError; }(Error)); diff --git a/tests/baselines/reference/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.js b/tests/baselines/reference/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.js index 5d82297094c4b..8abe7764586b0 100644 --- a/tests/baselines/reference/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.js +++ b/tests/baselines/reference/jsDeclarationsSubclassWithExplicitNoArgumentConstructor.js @@ -45,8 +45,7 @@ exports.Super = Super; var Sub = /** @class */ (function (_super) { __extends(Sub, _super); function Sub() { - var _this = _super.call(this, 'first', 'second') || this; - return _this; + return _super.call(this, 'first', 'second') || this; } return Sub; }(Super)); diff --git a/tests/baselines/reference/missingPropertiesOfClassExpression.js b/tests/baselines/reference/missingPropertiesOfClassExpression.js index 31c5bb246c0ee..e43e5840b94c4 100644 --- a/tests/baselines/reference/missingPropertiesOfClassExpression.js +++ b/tests/baselines/reference/missingPropertiesOfClassExpression.js @@ -25,8 +25,7 @@ var __extends = (this && this.__extends) || (function () { var George = /** @class */ (function (_super) { __extends(George, _super); function George() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return George; }(/** @class */ (function () { diff --git a/tests/baselines/reference/mixinPrivateAndProtected.js b/tests/baselines/reference/mixinPrivateAndProtected.js index 73ba4bb0c9f82..e140dce3b4acb 100644 --- a/tests/baselines/reference/mixinPrivateAndProtected.js +++ b/tests/baselines/reference/mixinPrivateAndProtected.js @@ -182,8 +182,7 @@ function PersonMixin(Base) { for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } - var _this = _super.apply(this, args) || this; - return _this; + return _super.apply(this, args) || this; } class_4.prototype.myProtectedFunction = function () { _super.prototype.myProtectedFunction.call(this); diff --git a/tests/baselines/reference/optionalParamArgsTest.js b/tests/baselines/reference/optionalParamArgsTest.js index 6874fe64ca4da..03929dc552ff6 100644 --- a/tests/baselines/reference/optionalParamArgsTest.js +++ b/tests/baselines/reference/optionalParamArgsTest.js @@ -172,8 +172,7 @@ var C2 = /** @class */ (function (_super) { __extends(C2, _super); function C2(v2) { if (v2 === void 0) { v2 = 6; } - var _this = _super.call(this, v2) || this; - return _this; + return _super.call(this, v2) || this; } return C2; }(C1)); diff --git a/tests/baselines/reference/override5.js b/tests/baselines/reference/override5.js index 3e8df80a3fbb4..3ab9d96d52f6b 100644 --- a/tests/baselines/reference/override5.js +++ b/tests/baselines/reference/override5.js @@ -84,8 +84,7 @@ var B = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(B)); diff --git a/tests/baselines/reference/override7.js b/tests/baselines/reference/override7.js index 4c122fdd3c786..36108f2359ed8 100644 --- a/tests/baselines/reference/override7.js +++ b/tests/baselines/reference/override7.js @@ -81,8 +81,7 @@ var B = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(B)); diff --git a/tests/baselines/reference/parserRealSource11.js b/tests/baselines/reference/parserRealSource11.js index 90ad40fc32134..1b6b688ec93b8 100644 --- a/tests/baselines/reference/parserRealSource11.js +++ b/tests/baselines/reference/parserRealSource11.js @@ -2677,8 +2677,7 @@ var TypeScript; var MissingIdentifier = /** @class */ (function (_super) { __extends(MissingIdentifier, _super); function MissingIdentifier() { - var _this = _super.call(this, "__missing") || this; - return _this; + return _super.call(this, "__missing") || this; } MissingIdentifier.prototype.isMissing = function () { return true; @@ -2717,8 +2716,7 @@ var TypeScript; var Expression = /** @class */ (function (_super) { __extends(Expression, _super); function Expression(nodeType) { - var _this = _super.call(this, nodeType) || this; - return _this; + return _super.call(this, nodeType) || this; } Expression.prototype.isExpression = function () { return true; }; Expression.prototype.isStatementOrExpression = function () { return true; }; @@ -3175,8 +3173,7 @@ var TypeScript; var ModuleElement = /** @class */ (function (_super) { __extends(ModuleElement, _super); function ModuleElement(nodeType) { - var _this = _super.call(this, nodeType) || this; - return _this; + return _super.call(this, nodeType) || this; } return ModuleElement; }(AST)); @@ -3269,8 +3266,7 @@ var TypeScript; var VarDecl = /** @class */ (function (_super) { __extends(VarDecl, _super); function VarDecl(id, nest) { - var _this = _super.call(this, id, NodeType.VarDecl, nest) || this; - return _this; + return _super.call(this, id, NodeType.VarDecl, nest) || this; } VarDecl.prototype.isAmbient = function () { return hasFlag(this.varFlags, VarFlags.Ambient); }; VarDecl.prototype.isExported = function () { return hasFlag(this.varFlags, VarFlags.Exported); }; @@ -3607,8 +3603,7 @@ var TypeScript; var InterfaceDeclaration = /** @class */ (function (_super) { __extends(InterfaceDeclaration, _super); function InterfaceDeclaration(name, members, extendsList, implementsList) { - var _this = _super.call(this, NodeType.InterfaceDeclaration, name, extendsList, implementsList, members) || this; - return _this; + return _super.call(this, NodeType.InterfaceDeclaration, name, extendsList, implementsList, members) || this; } InterfaceDeclaration.prototype.typeCheck = function (typeFlow) { return typeFlow.typeCheckInterface(this); @@ -4002,8 +3997,7 @@ var TypeScript; var EndCode = /** @class */ (function (_super) { __extends(EndCode, _super); function EndCode() { - var _this = _super.call(this, NodeType.EndCode) || this; - return _this; + return _super.call(this, NodeType.EndCode) || this; } return EndCode; }(AST)); @@ -4660,8 +4654,7 @@ var TypeScript; var DebuggerStatement = /** @class */ (function (_super) { __extends(DebuggerStatement, _super); function DebuggerStatement() { - var _this = _super.call(this, NodeType.Debugger) || this; - return _this; + return _super.call(this, NodeType.Debugger) || this; } DebuggerStatement.prototype.emit = function (emitter, tokenId, startLine) { emitter.emitParensAndCommentsInPlace(this, true); diff --git a/tests/baselines/reference/parserharness.js b/tests/baselines/reference/parserharness.js index f888ff070d488..6fe11051dc7bf 100644 --- a/tests/baselines/reference/parserharness.js +++ b/tests/baselines/reference/parserharness.js @@ -2481,8 +2481,7 @@ var Harness; var Run = /** @class */ (function (_super) { __extends(Run, _super); function Run() { - var _this = _super.call(this, 'Test Run', null) || this; - return _this; + return _super.call(this, 'Test Run', null) || this; } Run.prototype.run = function () { emitLog('start'); diff --git a/tests/baselines/reference/strictModeInConstructor.js b/tests/baselines/reference/strictModeInConstructor.js index abfd427a53108..85d5d3eecbfd5 100644 --- a/tests/baselines/reference/strictModeInConstructor.js +++ b/tests/baselines/reference/strictModeInConstructor.js @@ -117,8 +117,7 @@ var Bs = /** @class */ (function (_super) { __extends(Bs, _super); function Bs() { "use strict"; // No error - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } Bs.s = 9; return Bs; diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.js b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.js index e12ddc2e0bc78..e76639c1a8288 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.js @@ -30,8 +30,7 @@ var __extends = (this && this.__extends) || (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(B)); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.js b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.js index 7a264865aac74..ced02033b494a 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.js @@ -29,8 +29,7 @@ var __extends = (this && this.__extends) || (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(B)); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithIncorrectNumberOfTypeArguments1.js b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithIncorrectNumberOfTypeArguments1.js index 1070a781cfe00..8654d208a52d3 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithIncorrectNumberOfTypeArguments1.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithIncorrectNumberOfTypeArguments1.js @@ -34,8 +34,7 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B() { - var _this = _super.call(this, function (value) { return String(value); }) || this; - return _this; + return _super.call(this, function (value) { return String(value); }) || this; } return B; }(A)); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithNoTypeArguments1.js b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithNoTypeArguments1.js index 5d91db395b4cb..c1420e7a49be6 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithNoTypeArguments1.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericTypeButWithNoTypeArguments1.js @@ -34,8 +34,7 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B() { - var _this = _super.call(this, function (value) { return String(value); }) || this; - return _this; + return _super.call(this, function (value) { return String(value); }) || this; } return B; }(A)); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesNonGenericTypeButWithTypeArguments1.js b/tests/baselines/reference/superCallFromClassThatDerivesNonGenericTypeButWithTypeArguments1.js index 662b4735115f1..d8480c4e5f325 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesNonGenericTypeButWithTypeArguments1.js +++ b/tests/baselines/reference/superCallFromClassThatDerivesNonGenericTypeButWithTypeArguments1.js @@ -34,8 +34,7 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B() { - var _this = _super.call(this, function (value) { return String(value); }) || this; - return _this; + return _super.call(this, function (value) { return String(value); }) || this; } return B; }(A)); diff --git a/tests/baselines/reference/superCallInsideClassDeclaration.js b/tests/baselines/reference/superCallInsideClassDeclaration.js index b73f2bad69028..05ee3b31b3749 100644 --- a/tests/baselines/reference/superCallInsideClassDeclaration.js +++ b/tests/baselines/reference/superCallInsideClassDeclaration.js @@ -49,8 +49,7 @@ var B = /** @class */ (function (_super) { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(C)); diff --git a/tests/baselines/reference/superCallInsideClassExpression.js b/tests/baselines/reference/superCallInsideClassExpression.js index c8c4f9d05760a..5eb276957b40c 100644 --- a/tests/baselines/reference/superCallInsideClassExpression.js +++ b/tests/baselines/reference/superCallInsideClassExpression.js @@ -49,8 +49,7 @@ var B = /** @class */ (function (_super) { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(C)); diff --git a/tests/baselines/reference/superCallParameterContextualTyping1.js b/tests/baselines/reference/superCallParameterContextualTyping1.js index 5db17772052a0..65c52ace1612f 100644 --- a/tests/baselines/reference/superCallParameterContextualTyping1.js +++ b/tests/baselines/reference/superCallParameterContextualTyping1.js @@ -37,8 +37,7 @@ var B = /** @class */ (function (_super) { __extends(B, _super); // Ensure 'value' is of type 'number (and not '{}') by using its 'toExponential()' method. function B() { - var _this = _super.call(this, function (value) { return String(value.toExponential()); }) || this; - return _this; + return _super.call(this, function (value) { return String(value.toExponential()); }) || this; } return B; }(A)); diff --git a/tests/baselines/reference/superCallParameterContextualTyping2.js b/tests/baselines/reference/superCallParameterContextualTyping2.js index 8039d3fc69896..096f2aee06e09 100644 --- a/tests/baselines/reference/superCallParameterContextualTyping2.js +++ b/tests/baselines/reference/superCallParameterContextualTyping2.js @@ -36,8 +36,7 @@ var C = /** @class */ (function (_super) { __extends(C, _super); // Ensure 'value' is not of type 'any' by invoking it with type arguments. function C() { - var _this = _super.call(this, function (value) { return String(value()); }) || this; - return _this; + return _super.call(this, function (value) { return String(value()); }) || this; } return C; }(A)); diff --git a/tests/baselines/reference/superCallWithCommentEmit01.js b/tests/baselines/reference/superCallWithCommentEmit01.js index f5b5aab981cc8..4ca25eaad55fd 100644 --- a/tests/baselines/reference/superCallWithCommentEmit01.js +++ b/tests/baselines/reference/superCallWithCommentEmit01.js @@ -35,10 +35,8 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B(text) { - var _this = // this is subclass constructor - _super.call(this, text) || this; - return _this; + return _super.call(this, text) || this; } return B; }(A)); diff --git a/tests/baselines/reference/superErrors.js b/tests/baselines/reference/superErrors.js index 14cf6bd3a88f6..5ab2f69aaecd1 100644 --- a/tests/baselines/reference/superErrors.js +++ b/tests/baselines/reference/superErrors.js @@ -68,7 +68,6 @@ var __extends = (this && this.__extends) || (function () { }; })(); function foo() { - var _this = this; // super in a non class context var x = _super.; var y = function () { return _super.; }; @@ -98,10 +97,7 @@ var RegisteredUser = /** @class */ (function (_super) { var x = function () { return _super.sayHello.call(_this); }; } // super call in a lambda in a function expression in a constructor - (function () { - var _this = this; - return function () { return _super.; }; - })(); + (function () { return function () { return _super.; }; })(); return _this; } RegisteredUser.prototype.sayHello = function () { @@ -113,13 +109,9 @@ var RegisteredUser = /** @class */ (function (_super) { var x = function () { return _super.sayHello.call(_this); }; } // super call in a lambda in a function expression in a constructor - (function () { - var _this = this; - return function () { return _super.; }; - })(); + (function () { return function () { return _super.; }; })(); }; RegisteredUser.staticFunction = function () { - var _this = this; // super in static functions var s = _super.; var x = function () { return _super.; }; diff --git a/tests/baselines/reference/superInLambdas.js b/tests/baselines/reference/superInLambdas.js index 3bb5e354121f0..1104ced8658f1 100644 --- a/tests/baselines/reference/superInLambdas.js +++ b/tests/baselines/reference/superInLambdas.js @@ -138,7 +138,6 @@ var RegisteredUser3 = /** @class */ (function (_super) { return _this; } RegisteredUser3.prototype.sayHello = function () { - var _this = this; // super property in a nested lambda in a method var superName = function () { return function () { return function () { return _super.prototype.name; }; }; }; }; @@ -154,7 +153,6 @@ var RegisteredUser4 = /** @class */ (function (_super) { return _this; } RegisteredUser4.prototype.sayHello = function () { - var _this = this; // super in a nested lambda in a method var x = function () { return function () { return _super.prototype.; }; }; }; diff --git a/tests/baselines/reference/superPropertyElementNoUnusedLexicalThisCapture.js b/tests/baselines/reference/superPropertyElementNoUnusedLexicalThisCapture.js index 741393552b298..faa6ba0a58808 100644 --- a/tests/baselines/reference/superPropertyElementNoUnusedLexicalThisCapture.js +++ b/tests/baselines/reference/superPropertyElementNoUnusedLexicalThisCapture.js @@ -42,17 +42,14 @@ var A = /** @class */ (function () { var B = /** @class */ (function (_super) { __extends(B, _super); function B() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } B.prototype.foo = function () { - var _this = this; return function () { _super.prototype.x; }; }; B.prototype.bar = function () { - var _this = this; return function () { _super.prototype["x"]; }; diff --git a/tests/baselines/reference/superWithGenericSpecialization.js b/tests/baselines/reference/superWithGenericSpecialization.js index 1315aa5ccec4e..26e34be38ab9c 100644 --- a/tests/baselines/reference/superWithGenericSpecialization.js +++ b/tests/baselines/reference/superWithGenericSpecialization.js @@ -38,8 +38,7 @@ var C = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(C)); diff --git a/tests/baselines/reference/superWithGenerics.js b/tests/baselines/reference/superWithGenerics.js index efed69ed291f3..24cd2744bc215 100644 --- a/tests/baselines/reference/superWithGenerics.js +++ b/tests/baselines/reference/superWithGenerics.js @@ -30,8 +30,7 @@ var __extends = (this && this.__extends) || (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(B)); diff --git a/tests/baselines/reference/superWithTypeArgument.js b/tests/baselines/reference/superWithTypeArgument.js index d696f79efe95a..5fbfc5dc7b263 100644 --- a/tests/baselines/reference/superWithTypeArgument.js +++ b/tests/baselines/reference/superWithTypeArgument.js @@ -33,8 +33,7 @@ var C = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } return D; }(C)); diff --git a/tests/baselines/reference/superWithTypeArgument2.js b/tests/baselines/reference/superWithTypeArgument2.js index ee4387c1ff71e..dfbaa09528e04 100644 --- a/tests/baselines/reference/superWithTypeArgument2.js +++ b/tests/baselines/reference/superWithTypeArgument2.js @@ -33,8 +33,7 @@ var C = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D(x) { - var _this = _super.call(this, x) || this; - return _this; + return _super.call(this, x) || this; } return D; }(C)); diff --git a/tests/baselines/reference/superWithTypeArgument3.js b/tests/baselines/reference/superWithTypeArgument3.js index 049718c54162a..aefd7152b1e84 100644 --- a/tests/baselines/reference/superWithTypeArgument3.js +++ b/tests/baselines/reference/superWithTypeArgument3.js @@ -38,8 +38,7 @@ var C = /** @class */ (function () { var D = /** @class */ (function (_super) { __extends(D, _super); function D() { - var _this = _super.call(this) || this; - return _this; + return _super.call(this) || this; } D.prototype.bar = function () { _super.prototype.bar.call(this, null); diff --git a/tests/baselines/reference/targetTypeBaseCalls.js b/tests/baselines/reference/targetTypeBaseCalls.js index 7e34f211aa08d..2ae1e1adf6763 100644 --- a/tests/baselines/reference/targetTypeBaseCalls.js +++ b/tests/baselines/reference/targetTypeBaseCalls.js @@ -45,8 +45,7 @@ new Foo(function (s) { s = 5; }); // error, if types are applied correctly var Bar = /** @class */ (function (_super) { __extends(Bar, _super); function Bar() { - var _this = _super.call(this, function (s) { s = 5; }) || this; - return _this; + return _super.call(this, function (s) { s = 5; }) || this; } return Bar; }(Foo)); // error, if types are applied correctly diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js index b0bb52bc4fed0..2d58fd455ac4a 100644 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js +++ b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js @@ -9,13 +9,14 @@ class Vector { } //// [thisInArrowFunctionInStaticInitializer1.js] +var _this = this; function log(a) { } var Vector = /** @class */ (function () { function Vector() { } Vector.foo = function () { // 'this' should not be available in a static initializer. - log(Vector); + log(_this); }; return Vector; }()); diff --git a/tests/baselines/reference/thisInConstructorParameter2.js b/tests/baselines/reference/thisInConstructorParameter2.js index 1ab5ed4851922..df2f22b8ae7bd 100644 --- a/tests/baselines/reference/thisInConstructorParameter2.js +++ b/tests/baselines/reference/thisInConstructorParameter2.js @@ -36,6 +36,6 @@ var P = /** @class */ (function () { if (zz === void 0) { zz = this; } zz.y; }; - P.y = P; + P.y = this; return P; }()); diff --git a/tests/baselines/reference/thisInInvalidContexts.js b/tests/baselines/reference/thisInInvalidContexts.js index 8b4b8b92ef74e..7e6db52458631 100644 --- a/tests/baselines/reference/thisInInvalidContexts.js +++ b/tests/baselines/reference/thisInInvalidContexts.js @@ -68,7 +68,7 @@ var __extends = (this && this.__extends) || (function () { var ErrClass1 = /** @class */ (function () { function ErrClass1() { } - ErrClass1.t = ErrClass1; // Error + ErrClass1.t = this; // Error return ErrClass1; }()); var BaseErrClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.js b/tests/baselines/reference/thisInInvalidContextsExternalModule.js index a8fa318db83e3..ef18f01edda0c 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.js +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.js @@ -69,7 +69,7 @@ var __extends = (this && this.__extends) || (function () { var ErrClass1 = /** @class */ (function () { function ErrClass1() { } - ErrClass1.t = ErrClass1; // Error + ErrClass1.t = this; // Error return ErrClass1; }()); var BaseErrClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisInOuterClassBody.js b/tests/baselines/reference/thisInOuterClassBody.js index a23c2b1be22d6..2b4e3a1aabdb6 100644 --- a/tests/baselines/reference/thisInOuterClassBody.js +++ b/tests/baselines/reference/thisInOuterClassBody.js @@ -36,6 +36,6 @@ var Foo = /** @class */ (function () { var a = this.y; var b = this.x; }; - Foo.y = Foo; + Foo.y = this; return Foo; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js index e7ff1bbff0ae7..2a5b0d531e4f5 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js @@ -70,11 +70,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var _this = this; var C = /** @class */ (function () { function C() { } C.a = 1; - C.b = (void 0).a + 1; + C.b = this.a + 1; C = __decorate([ foo ], C); @@ -99,9 +100,9 @@ var D = /** @class */ (function (_super) { configurable: true }); D.c = 2; - D.d = (void 0).c + 1; - D.e = (void 0).a + (void 0).c + 1; - D.f = function () { return (void 0).c + 1; }; + D.d = this.c + 1; + D.e = _super.a + this.c + 1; + D.f = function () { return _this.c + 1; }; D.ff = function () { this.c + 1; }; D = __decorate([ foo @@ -112,7 +113,7 @@ var CC = /** @class */ (function () { function CC() { } CC.a = 1; - CC.b = CC.a + 1; + CC.b = this.a + 1; return CC; }()); var DD = /** @class */ (function (_super) { @@ -134,9 +135,9 @@ var DD = /** @class */ (function (_super) { configurable: true }); DD.c = 2; - DD.d = DD.c + 1; - DD.e = _super.a + DD.c + 1; - DD.f = function () { return DD.c + 1; }; + DD.d = this.c + 1; + DD.e = _super.a + this.c + 1; + DD.f = function () { return _this.c + 1; }; DD.ff = function () { this.c + 1; }; return DD; }(CC)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js index 74a6f9d87b52e..4b2cc9e81dbc9 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js @@ -58,7 +58,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, let C = class C { }; C.a = 1; -C.b = (void 0).a + 1; +C.b = this.a + 1; C = __decorate([ foo ], C); @@ -74,9 +74,9 @@ let D = class D extends C { } }; D.c = 2; -D.d = (void 0).c + 1; -D.e = (void 0).a + (void 0).c + 1; -D.f = () => (void 0).c + 1; +D.d = this.c + 1; +D.e = super.a + this.c + 1; +D.f = () => this.c + 1; D.ff = function () { this.c + 1; }; D = __decorate([ foo @@ -84,7 +84,7 @@ D = __decorate([ class CC { } CC.a = 1; -CC.b = CC.a + 1; +CC.b = this.a + 1; class DD extends CC { static foo() { return this.c + 1; @@ -97,7 +97,7 @@ class DD extends CC { } } DD.c = 2; -DD.d = DD.c + 1; -DD.e = CC.a + DD.c + 1; -DD.f = () => DD.c + 1; +DD.d = this.c + 1; +DD.e = super.a + this.c + 1; +DD.f = () => this.c + 1; DD.ff = function () { this.c + 1; }; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js index 74a6f9d87b52e..4b2cc9e81dbc9 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js @@ -58,7 +58,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, let C = class C { }; C.a = 1; -C.b = (void 0).a + 1; +C.b = this.a + 1; C = __decorate([ foo ], C); @@ -74,9 +74,9 @@ let D = class D extends C { } }; D.c = 2; -D.d = (void 0).c + 1; -D.e = (void 0).a + (void 0).c + 1; -D.f = () => (void 0).c + 1; +D.d = this.c + 1; +D.e = super.a + this.c + 1; +D.f = () => this.c + 1; D.ff = function () { this.c + 1; }; D = __decorate([ foo @@ -84,7 +84,7 @@ D = __decorate([ class CC { } CC.a = 1; -CC.b = CC.a + 1; +CC.b = this.a + 1; class DD extends CC { static foo() { return this.c + 1; @@ -97,7 +97,7 @@ class DD extends CC { } } DD.c = 2; -DD.d = DD.c + 1; -DD.e = CC.a + DD.c + 1; -DD.f = () => DD.c + 1; +DD.d = this.c + 1; +DD.e = super.a + this.c + 1; +DD.f = () => this.c + 1; DD.ff = function () { this.c + 1; }; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js index 89775f2d6f2b0..9a4e38f9a7ab8 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js @@ -70,6 +70,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var _this = this; var C = /** @class */ (function () { function C() { } @@ -83,7 +84,7 @@ var C = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: (void 0).a + 1 + value: this.a + 1 }); C = __decorate([ foo @@ -123,19 +124,19 @@ var D = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: (void 0).c + 1 + value: this.c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: (void 0).a + (void 0).c + 1 + value: _super.a + this.c + 1 }); Object.defineProperty(D, "f", { enumerable: true, configurable: true, writable: true, - value: function () { return (void 0).c + 1; } + value: function () { return _this.c + 1; } }); Object.defineProperty(D, "ff", { enumerable: true, @@ -161,7 +162,7 @@ var CC = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: CC.a + 1 + value: this.a + 1 }); return CC; }()); @@ -198,19 +199,19 @@ var DD = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: DD.c + 1 + value: this.c + 1 }); Object.defineProperty(DD, "e", { enumerable: true, configurable: true, writable: true, - value: _super.a + DD.c + 1 + value: _super.a + this.c + 1 }); Object.defineProperty(DD, "f", { enumerable: true, configurable: true, writable: true, - value: function () { return DD.c + 1; } + value: function () { return _this.c + 1; } }); Object.defineProperty(DD, "ff", { enumerable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js index 3fea1512b8cbd..e49203c3ab3b7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js @@ -67,7 +67,7 @@ Object.defineProperty(C, "b", { enumerable: true, configurable: true, writable: true, - value: (void 0).a + 1 + value: this.a + 1 }); C = __decorate([ foo @@ -93,19 +93,19 @@ Object.defineProperty(D, "d", { enumerable: true, configurable: true, writable: true, - value: (void 0).c + 1 + value: this.c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: (void 0).a + (void 0).c + 1 + value: super.a + this.c + 1 }); Object.defineProperty(D, "f", { enumerable: true, configurable: true, writable: true, - value: () => (void 0).c + 1 + value: () => this.c + 1 }); Object.defineProperty(D, "ff", { enumerable: true, @@ -128,7 +128,7 @@ Object.defineProperty(CC, "b", { enumerable: true, configurable: true, writable: true, - value: CC.a + 1 + value: this.a + 1 }); class DD extends CC { static foo() { @@ -151,19 +151,19 @@ Object.defineProperty(DD, "d", { enumerable: true, configurable: true, writable: true, - value: DD.c + 1 + value: this.c + 1 }); Object.defineProperty(DD, "e", { enumerable: true, configurable: true, writable: true, - value: CC.a + DD.c + 1 + value: super.a + this.c + 1 }); Object.defineProperty(DD, "f", { enumerable: true, configurable: true, writable: true, - value: () => DD.c + 1 + value: () => this.c + 1 }); Object.defineProperty(DD, "ff", { enumerable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js index 157ae8e129dd5..d54fa7fbba4db 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js @@ -20,8 +20,8 @@ var C = /** @class */ (function () { } return Inner; }()), - _a = C.c, - _b = C.c, + _a = this.c, + _b = this.c, _c[_a] = 123, _c); return C; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js index a6c055499ebeb..52cfaa6f3f3b0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js @@ -18,7 +18,7 @@ C.bar = (_c = class Inner { this[_b] = 123; } }, - _a = C.c, - _b = C.c, + _a = this.c, + _b = this.c, _c[_a] = 123, _c); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js index a6c055499ebeb..52cfaa6f3f3b0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js @@ -18,7 +18,7 @@ C.bar = (_c = class Inner { this[_b] = 123; } }, - _a = C.c, - _b = C.c, + _a = this.c, + _b = this.c, _c[_a] = 123, _c); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js index 43e6c217b60f1..ea43788794045 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js @@ -34,8 +34,8 @@ var C = /** @class */ (function () { } return Inner; }()), - _a = C.c, - _b = C.c, + _a = this.c, + _b = this.c, Object.defineProperty(_c, _a, { enumerable: true, configurable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js index b45a0491893ce..e64aa9e150f0a 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js @@ -32,8 +32,8 @@ Object.defineProperty(C, "bar", { }); } }, - _a = C.c, - _b = C.c, + _a = this.c, + _b = this.c, Object.defineProperty(_c, _a, { enumerable: true, configurable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.js b/tests/baselines/reference/typeOfThisInStaticMembers2.js index f851ff93be001..72243cdd3e619 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.js +++ b/tests/baselines/reference/typeOfThisInStaticMembers2.js @@ -11,12 +11,12 @@ class C2 { var C = /** @class */ (function () { function C() { } - C.foo = C; // error + C.foo = this; // error return C; }()); var C2 = /** @class */ (function () { function C2() { } - C2.foo = C2; // error + C2.foo = this; // error return C2; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js index 2d74f4822d30a..d016975ed5a2a 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js @@ -31,7 +31,7 @@ var C = /** @class */ (function () { function C() { } C.a = 1; - C.b = C.a + 1; + C.b = this.a + 1; return C; }()); var D = /** @class */ (function (_super) { @@ -40,7 +40,7 @@ var D = /** @class */ (function (_super) { return _super !== null && _super.apply(this, arguments) || this; } D.c = 2; - D.d = D.c + 1; - D.e = _super.a + D.c + 1; + D.d = this.c + 1; + D.e = _super.a + this.c + 1; return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js index b789f68f55f4b..f979d7e82e864 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js @@ -15,9 +15,9 @@ class D extends C { class C { } C.a = 1; -C.b = C.a + 1; +C.b = this.a + 1; class D extends C { } D.c = 2; -D.d = D.c + 1; -D.e = C.a + D.c + 1; +D.d = this.c + 1; +D.e = super.a + this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js index b789f68f55f4b..f979d7e82e864 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js @@ -15,9 +15,9 @@ class D extends C { class C { } C.a = 1; -C.b = C.a + 1; +C.b = this.a + 1; class D extends C { } D.c = 2; -D.d = D.c + 1; -D.e = C.a + D.c + 1; +D.d = this.c + 1; +D.e = super.a + this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js index 138f2f2c41338..e48014d858457 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js @@ -40,7 +40,7 @@ var C = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: C.a + 1 + value: this.a + 1 }); return C; }()); @@ -59,13 +59,13 @@ var D = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: D.c + 1 + value: this.c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: _super.a + D.c + 1 + value: _super.a + this.c + 1 }); return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js index 4fc7476c94eac..d5261f98d2684 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js @@ -24,7 +24,7 @@ Object.defineProperty(C, "b", { enumerable: true, configurable: true, writable: true, - value: C.a + 1 + value: this.a + 1 }); class D extends C { } @@ -38,11 +38,11 @@ Object.defineProperty(D, "d", { enumerable: true, configurable: true, writable: true, - value: D.c + 1 + value: this.c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: C.a + D.c + 1 + value: super.a + this.c + 1 }); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js index fdd6879b6fd26..2cb2426bf2057 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js @@ -9,10 +9,11 @@ class C { //// [typeOfThisInStaticMembers5.js] +var _this = this; var C = /** @class */ (function () { function C(foo) { this.foo = foo; } - C.create = function () { return new C("yep"); }; + C.create = function () { return new _this("yep"); }; return C; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js index 8f14d05a7b76b..584a090b8cd42 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js @@ -14,4 +14,4 @@ class C { this.foo = foo; } } -C.create = () => new C("yep"); +C.create = () => new this("yep"); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js index cef83b33e9c85..2f37b3f88e44f 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js @@ -31,7 +31,7 @@ var C = /** @class */ (function () { function C() { } C.a = 1; - C.b = C.a + 1; + C.b = this.a + 1; return C; }()); var D = /** @class */ (function (_super) { @@ -40,7 +40,7 @@ var D = /** @class */ (function (_super) { return _super !== null && _super.apply(this, arguments) || this; } D.c = 2; - D.d = D.c + 1; - D.e = 1 + (_super.a) + (D.c + 1) + 1; + D.d = this.c + 1; + D.e = 1 + (_super.a) + (this.c + 1) + 1; return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js index 59581b2082621..2045c3a2ee5bd 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js @@ -15,9 +15,9 @@ class D extends C { class C { } C.a = 1; -C.b = C.a + 1; +C.b = this.a + 1; class D extends C { } D.c = 2; -D.d = D.c + 1; -D.e = 1 + (C.a) + (D.c + 1) + 1; +D.d = this.c + 1; +D.e = 1 + (super.a) + (this.c + 1) + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js index 8bb6f23c922c9..05f8b6a8c5cb3 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js @@ -19,11 +19,12 @@ class C { //// [typeOfThisInStaticMembers8.js] +var _this = this; var C = /** @class */ (function () { function C() { } C.f = 1; - C.arrowFunctionBoundary = function () { return C.f + 1; }; + C.arrowFunctionBoundary = function () { return _this.f + 1; }; C.functionExprBoundary = function () { return this.f + 2; }; C.classExprBoundary = /** @class */ (function () { function class_1() { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js index 90f3276bb5e18..9f82b29886151 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js @@ -22,7 +22,7 @@ class C { class C { } C.f = 1; -C.arrowFunctionBoundary = () => C.f + 1; +C.arrowFunctionBoundary = () => this.f + 1; C.functionExprBoundary = function () { return this.f + 2; }; C.classExprBoundary = class { constructor() { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js index b9d429a9e3619..f086499266b31 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).js @@ -37,7 +37,6 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -var _this = this; var C = /** @class */ (function () { function C() { } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js index 2a2c813709639..95c49e7e08d50 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js @@ -27,7 +27,7 @@ class C { C.f = 1; class D extends C { } -D.arrowFunctionBoundary = () => C.f + 1; +D.arrowFunctionBoundary = () => super.f + 1; D.functionExprBoundary = function () { return super.f + 2; }; D.classExprBoundary = class { constructor() { diff --git a/tests/baselines/reference/unknownSymbols1.js b/tests/baselines/reference/unknownSymbols1.js index faea64abf683c..022a738d91711 100644 --- a/tests/baselines/reference/unknownSymbols1.js +++ b/tests/baselines/reference/unknownSymbols1.js @@ -73,8 +73,7 @@ var C3 = /** @class */ (function () { var C4 = /** @class */ (function (_super) { __extends(C4, _super); function C4() { - var _this = _super.call(this, asdf) || this; - return _this; + return _super.call(this, asdf) || this; } return C4; }(C3)); From 39c2fcbdeace8824a1979c38dc26dc3e625518b6 Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 14 Apr 2021 14:06:21 +0800 Subject: [PATCH 22/33] Avoid spaces --- src/compiler/factory/nodeFactory.ts | 2 +- src/compiler/transformers/classFields.ts | 2 +- src/compiler/types.ts | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index ecda1ab7b817e..7138f8d4c9f49 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -977,8 +977,8 @@ namespace ts { case SyntaxKind.UndefinedKeyword: // `undefined` is an Identifier in the expression case. transformFlags = TransformFlags.ContainsTypeScript; break; - case SyntaxKind.SuperKeyword: case SyntaxKind.StaticKeyword: + case SyntaxKind.SuperKeyword: transformFlags = TransformFlags.ContainsES2015; break; case SyntaxKind.ThisKeyword: diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index c3e82e5ce2056..c2e76e1a826c7 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -155,7 +155,7 @@ namespace ts { return visited; } - function visitor (node: Node): VisitResult { + function visitor(node: Node): VisitResult { if (!(node.transformFlags & TransformFlags.ContainsClassFields)) return node; switch (node.kind) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 34f0f25fe28e3..63b20f49139a6 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -7691,7 +7691,6 @@ namespace ts { /** * A function that accepts and possibly transforms a node. */ - export type Visitor = (node: Node) => VisitResult; export interface NodeVisitor { From 38a44b6f3be259b2b68ae0b02a3cc5d22d1e1415 Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 14 Apr 2021 14:21:24 +0800 Subject: [PATCH 23/33] Make lint happy --- src/compiler/transformers/classFields.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index c2e76e1a826c7..067946dc5c326 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -201,21 +201,21 @@ namespace ts { } function visitNameInStaticBoundaryFunction(node: AccessorDeclaration | MethodDeclaration) { - function nameInContextVisitor (n: Node): Node { + function nameInContextVisitor(n: Node): Node { if (node.name === n) { - return visitNode(n, visitor) + return visitNode(n, visitor); } const savedStaticFieldInitializerContext = staticFieldInitializerContext; staticFieldInitializerContext = undefined; - const result = visitNode(n, visitor) + const result = visitNode(n, visitor); staticFieldInitializerContext = savedStaticFieldInitializerContext; return result; } return visitEachChild(node, nameInContextVisitor, context); } - function visitNonStaticBoundaryFunction (node: FunctionDeclaration | FunctionExpression | ConstructorDeclaration) { + function visitNonStaticBoundaryFunction(node: FunctionDeclaration | FunctionExpression | ConstructorDeclaration) { const savedStaticFieldInitializerContext = staticFieldInitializerContext; staticFieldInitializerContext = undefined; const result = visitEachChild(node, visitor, context); @@ -225,7 +225,7 @@ namespace ts { function visitThisExpression(node: ThisExpression): Expression { if (!staticFieldInitializerContext) { - return visitEachChild(node, visitor, context) + return visitEachChild(node, visitor, context); } const { receiver, classHasDecorators } = staticFieldInitializerContext; @@ -1072,14 +1072,14 @@ namespace ts { return expressions; } - function visitPropertyDeclarationInContext (property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, classHasDecorators: boolean | undefined) { + function visitPropertyDeclarationInContext(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, classHasDecorators: boolean | undefined) { const savedStaticFieldInitializerContext = staticFieldInitializerContext; staticFieldInitializerContext = hasStaticModifier(property) ? { receiver, baseClass, classHasDecorators } : undefined; - const result = visitNode(property.initializer, visitor, isExpression) + const result = visitNode(property.initializer, visitor, isExpression); staticFieldInitializerContext = savedStaticFieldInitializerContext; return result; } From 73c9bacb3966a47b065c81057f60eab5b8babaa4 Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 14 Apr 2021 14:35:37 +0800 Subject: [PATCH 24/33] Avoid function boundary utils --- src/compiler/utilitiesPublic.ts | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 7337c28383fbf..6bec2e5f07e86 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1246,31 +1246,6 @@ namespace ts { } } - /* @internal */ - export function isFunctionBoundary(node: Node, parent: Node | undefined): boolean { - switch (node.kind) { - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.FunctionExpression: - case SyntaxKind.Constructor: - return true; - } - - if (parent) { - switch (parent.kind) { - case SyntaxKind.PropertyDeclaration: - Debug.type(parent); - return node === parent.initializer; - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - case SyntaxKind.MethodDeclaration: - Debug.type(parent); - return node !== parent.name; - } - } - - return false; - } - /* @internal */ export function isFunctionLikeKind(kind: SyntaxKind): boolean { switch (kind) { From 08703704d27ef2b653f82a9072f419bc1e20a268 Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 14 Apr 2021 14:56:08 +0800 Subject: [PATCH 25/33] Update baseline --- src/compiler/factory/nodeFactory.ts | 4 +++- src/compiler/transformers/classFields.ts | 2 +- src/compiler/types.ts | 15 ++++++++------- .../inferringClassMembersFromAssignments.js | 5 ++--- .../thisInArrowFunctionInStaticInitializer1.js | 3 +-- .../reference/thisInConstructorParameter2.js | 2 +- .../reference/thisInInvalidContexts.js | 2 +- .../thisInInvalidContextsExternalModule.js | 2 +- .../baselines/reference/thisInOuterClassBody.js | 2 +- .../typeOfThisInStaticMembers10(target=es5).js | 17 ++++++++--------- .../typeOfThisInStaticMembers10(target=es6).js | 16 ++++++++-------- ...ypeOfThisInStaticMembers10(target=esnext).js | 16 ++++++++-------- .../typeOfThisInStaticMembers11(target=es5).js | 17 ++++++++--------- .../typeOfThisInStaticMembers11(target=es6).js | 16 ++++++++-------- .../typeOfThisInStaticMembers12(target=es5).js | 4 ++-- .../typeOfThisInStaticMembers12(target=es6).js | 4 ++-- ...ypeOfThisInStaticMembers12(target=esnext).js | 4 ++-- .../typeOfThisInStaticMembers13(target=es5).js | 4 ++-- .../typeOfThisInStaticMembers13(target=es6).js | 4 ++-- .../reference/typeOfThisInStaticMembers2.js | 4 ++-- .../typeOfThisInStaticMembers3(target=es5).js | 6 +++--- .../typeOfThisInStaticMembers3(target=es6).js | 6 +++--- ...typeOfThisInStaticMembers3(target=esnext).js | 6 +++--- .../typeOfThisInStaticMembers4(target=es5).js | 6 +++--- .../typeOfThisInStaticMembers4(target=es6).js | 6 +++--- .../typeOfThisInStaticMembers5(target=es5).js | 3 +-- .../typeOfThisInStaticMembers5(target=es6).js | 2 +- .../typeOfThisInStaticMembers7(target=es5).js | 6 +++--- .../typeOfThisInStaticMembers7(target=es6).js | 6 +++--- .../typeOfThisInStaticMembers8(target=es5).js | 5 ++--- .../typeOfThisInStaticMembers8(target=es6).js | 4 ++-- .../typeOfThisInStaticMembers9(target=es6).js | 4 ++-- .../cases/fourslash/codeFixAddMissingMember7.ts | 2 +- 33 files changed, 101 insertions(+), 104 deletions(-) diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index 7138f8d4c9f49..cd2faede614e6 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -977,8 +977,10 @@ namespace ts { case SyntaxKind.UndefinedKeyword: // `undefined` is an Identifier in the expression case. transformFlags = TransformFlags.ContainsTypeScript; break; - case SyntaxKind.StaticKeyword: case SyntaxKind.SuperKeyword: + transformFlags = TransformFlags.ContainsES2015 | TransformFlags.ContainsLexicalSuper; + break; + case SyntaxKind.StaticKeyword: transformFlags = TransformFlags.ContainsES2015; break; case SyntaxKind.ThisKeyword: diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 067946dc5c326..741beb50b8786 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -156,7 +156,7 @@ namespace ts { } function visitor(node: Node): VisitResult { - if (!(node.transformFlags & TransformFlags.ContainsClassFields)) return node; + if (!(node.transformFlags & (TransformFlags.ContainsClassFields | TransformFlags.ContainsLexicalThisOrSuper))) return node; switch (node.kind) { case SyntaxKind.ClassExpression: diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 63b20f49139a6..09c54cbdf8ad8 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -6522,7 +6522,7 @@ namespace ts { ContainsDynamicImport = 1 << 22, ContainsClassFields = 1 << 23, ContainsPossibleTopLevelAwait = 1 << 24, - + ContainsLexicalSuper = 1 << 25, // Please leave this as 1 << 29. // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system. // It is a good reminder of how much room we have left @@ -6550,12 +6550,12 @@ namespace ts { PropertyAccessExcludes = OuterExpressionExcludes, NodeExcludes = PropertyAccessExcludes, ArrowFunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - FunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - ConstructorExcludes = NodeExcludes | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, - MethodOrAccessorExcludes = NodeExcludes | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread, - PropertyExcludes = NodeExcludes | ContainsLexicalThis, + FunctionExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, + ConstructorExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread | ContainsPossibleTopLevelAwait, + MethodOrAccessorExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsYield | ContainsAwait | ContainsHoistedDeclarationOrCompletion | ContainsBindingPattern | ContainsObjectRestOrSpread, + PropertyExcludes = NodeExcludes | ContainsLexicalThis | ContainsLexicalSuper, ClassExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsComputedPropertyName, - ModuleExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsBlockScopedBinding | ContainsHoistedDeclarationOrCompletion | ContainsPossibleTopLevelAwait, + ModuleExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsLexicalThis | ContainsLexicalSuper | ContainsBlockScopedBinding | ContainsHoistedDeclarationOrCompletion | ContainsPossibleTopLevelAwait, TypeExcludes = ~ContainsTypeScript, ObjectLiteralExcludes = NodeExcludes | ContainsTypeScriptClassSyntax | ContainsComputedPropertyName | ContainsObjectRestOrSpread, ArrayLiteralOrCallOrNewExcludes = NodeExcludes | ContainsRestOrSpread, @@ -6563,10 +6563,11 @@ namespace ts { ParameterExcludes = NodeExcludes, CatchClauseExcludes = NodeExcludes | ContainsObjectRestOrSpread, BindingPatternExcludes = NodeExcludes | ContainsRestOrSpread, + ContainsLexicalThisOrSuper = ContainsLexicalThis | ContainsLexicalSuper, // Propagating flags // - Bitmasks for flags that should propagate from a child - PropertyNamePropagatingFlags = ContainsLexicalThis, + PropertyNamePropagatingFlags = ContainsLexicalThis | ContainsLexicalSuper, // Masks // - Additional bitmasks diff --git a/tests/baselines/reference/inferringClassMembersFromAssignments.js b/tests/baselines/reference/inferringClassMembersFromAssignments.js index e8d25a917dd47..f46fe6fdc305c 100644 --- a/tests/baselines/reference/inferringClassMembersFromAssignments.js +++ b/tests/baselines/reference/inferringClassMembersFromAssignments.js @@ -133,7 +133,6 @@ var stringOrNumberOrUndefined = C.inStaticNestedArrowFunction; //// [output.js] -var _this = this; var C = /** @class */ (function () { function C() { var _this = this; @@ -227,10 +226,10 @@ var C = /** @class */ (function () { }; C.prop = function () { if (Math.random()) { - _this.inStaticPropertyDeclaration = 0; + C.inStaticPropertyDeclaration = 0; } else { - _this.inStaticPropertyDeclaration = "string"; + C.inStaticPropertyDeclaration = "string"; } }; return C; diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js index 2d58fd455ac4a..b0bb52bc4fed0 100644 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js +++ b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js @@ -9,14 +9,13 @@ class Vector { } //// [thisInArrowFunctionInStaticInitializer1.js] -var _this = this; function log(a) { } var Vector = /** @class */ (function () { function Vector() { } Vector.foo = function () { // 'this' should not be available in a static initializer. - log(_this); + log(Vector); }; return Vector; }()); diff --git a/tests/baselines/reference/thisInConstructorParameter2.js b/tests/baselines/reference/thisInConstructorParameter2.js index df2f22b8ae7bd..1ab5ed4851922 100644 --- a/tests/baselines/reference/thisInConstructorParameter2.js +++ b/tests/baselines/reference/thisInConstructorParameter2.js @@ -36,6 +36,6 @@ var P = /** @class */ (function () { if (zz === void 0) { zz = this; } zz.y; }; - P.y = this; + P.y = P; return P; }()); diff --git a/tests/baselines/reference/thisInInvalidContexts.js b/tests/baselines/reference/thisInInvalidContexts.js index 7e6db52458631..8b4b8b92ef74e 100644 --- a/tests/baselines/reference/thisInInvalidContexts.js +++ b/tests/baselines/reference/thisInInvalidContexts.js @@ -68,7 +68,7 @@ var __extends = (this && this.__extends) || (function () { var ErrClass1 = /** @class */ (function () { function ErrClass1() { } - ErrClass1.t = this; // Error + ErrClass1.t = ErrClass1; // Error return ErrClass1; }()); var BaseErrClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.js b/tests/baselines/reference/thisInInvalidContextsExternalModule.js index ef18f01edda0c..a8fa318db83e3 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.js +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.js @@ -69,7 +69,7 @@ var __extends = (this && this.__extends) || (function () { var ErrClass1 = /** @class */ (function () { function ErrClass1() { } - ErrClass1.t = this; // Error + ErrClass1.t = ErrClass1; // Error return ErrClass1; }()); var BaseErrClass = /** @class */ (function () { diff --git a/tests/baselines/reference/thisInOuterClassBody.js b/tests/baselines/reference/thisInOuterClassBody.js index 2b4e3a1aabdb6..a23c2b1be22d6 100644 --- a/tests/baselines/reference/thisInOuterClassBody.js +++ b/tests/baselines/reference/thisInOuterClassBody.js @@ -36,6 +36,6 @@ var Foo = /** @class */ (function () { var a = this.y; var b = this.x; }; - Foo.y = this; + Foo.y = Foo; return Foo; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js index 2a5b0d531e4f5..e7ff1bbff0ae7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js @@ -70,12 +70,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var _this = this; var C = /** @class */ (function () { function C() { } C.a = 1; - C.b = this.a + 1; + C.b = (void 0).a + 1; C = __decorate([ foo ], C); @@ -100,9 +99,9 @@ var D = /** @class */ (function (_super) { configurable: true }); D.c = 2; - D.d = this.c + 1; - D.e = _super.a + this.c + 1; - D.f = function () { return _this.c + 1; }; + D.d = (void 0).c + 1; + D.e = (void 0).a + (void 0).c + 1; + D.f = function () { return (void 0).c + 1; }; D.ff = function () { this.c + 1; }; D = __decorate([ foo @@ -113,7 +112,7 @@ var CC = /** @class */ (function () { function CC() { } CC.a = 1; - CC.b = this.a + 1; + CC.b = CC.a + 1; return CC; }()); var DD = /** @class */ (function (_super) { @@ -135,9 +134,9 @@ var DD = /** @class */ (function (_super) { configurable: true }); DD.c = 2; - DD.d = this.c + 1; - DD.e = _super.a + this.c + 1; - DD.f = function () { return _this.c + 1; }; + DD.d = DD.c + 1; + DD.e = _super.a + DD.c + 1; + DD.f = function () { return DD.c + 1; }; DD.ff = function () { this.c + 1; }; return DD; }(CC)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js index 4b2cc9e81dbc9..74a6f9d87b52e 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js @@ -58,7 +58,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, let C = class C { }; C.a = 1; -C.b = this.a + 1; +C.b = (void 0).a + 1; C = __decorate([ foo ], C); @@ -74,9 +74,9 @@ let D = class D extends C { } }; D.c = 2; -D.d = this.c + 1; -D.e = super.a + this.c + 1; -D.f = () => this.c + 1; +D.d = (void 0).c + 1; +D.e = (void 0).a + (void 0).c + 1; +D.f = () => (void 0).c + 1; D.ff = function () { this.c + 1; }; D = __decorate([ foo @@ -84,7 +84,7 @@ D = __decorate([ class CC { } CC.a = 1; -CC.b = this.a + 1; +CC.b = CC.a + 1; class DD extends CC { static foo() { return this.c + 1; @@ -97,7 +97,7 @@ class DD extends CC { } } DD.c = 2; -DD.d = this.c + 1; -DD.e = super.a + this.c + 1; -DD.f = () => this.c + 1; +DD.d = DD.c + 1; +DD.e = CC.a + DD.c + 1; +DD.f = () => DD.c + 1; DD.ff = function () { this.c + 1; }; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js index 4b2cc9e81dbc9..74a6f9d87b52e 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js @@ -58,7 +58,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, let C = class C { }; C.a = 1; -C.b = this.a + 1; +C.b = (void 0).a + 1; C = __decorate([ foo ], C); @@ -74,9 +74,9 @@ let D = class D extends C { } }; D.c = 2; -D.d = this.c + 1; -D.e = super.a + this.c + 1; -D.f = () => this.c + 1; +D.d = (void 0).c + 1; +D.e = (void 0).a + (void 0).c + 1; +D.f = () => (void 0).c + 1; D.ff = function () { this.c + 1; }; D = __decorate([ foo @@ -84,7 +84,7 @@ D = __decorate([ class CC { } CC.a = 1; -CC.b = this.a + 1; +CC.b = CC.a + 1; class DD extends CC { static foo() { return this.c + 1; @@ -97,7 +97,7 @@ class DD extends CC { } } DD.c = 2; -DD.d = this.c + 1; -DD.e = super.a + this.c + 1; -DD.f = () => this.c + 1; +DD.d = DD.c + 1; +DD.e = CC.a + DD.c + 1; +DD.f = () => DD.c + 1; DD.ff = function () { this.c + 1; }; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js index 9a4e38f9a7ab8..89775f2d6f2b0 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js @@ -70,7 +70,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var _this = this; var C = /** @class */ (function () { function C() { } @@ -84,7 +83,7 @@ var C = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: this.a + 1 + value: (void 0).a + 1 }); C = __decorate([ foo @@ -124,19 +123,19 @@ var D = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: this.c + 1 + value: (void 0).c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: _super.a + this.c + 1 + value: (void 0).a + (void 0).c + 1 }); Object.defineProperty(D, "f", { enumerable: true, configurable: true, writable: true, - value: function () { return _this.c + 1; } + value: function () { return (void 0).c + 1; } }); Object.defineProperty(D, "ff", { enumerable: true, @@ -162,7 +161,7 @@ var CC = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: this.a + 1 + value: CC.a + 1 }); return CC; }()); @@ -199,19 +198,19 @@ var DD = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: this.c + 1 + value: DD.c + 1 }); Object.defineProperty(DD, "e", { enumerable: true, configurable: true, writable: true, - value: _super.a + this.c + 1 + value: _super.a + DD.c + 1 }); Object.defineProperty(DD, "f", { enumerable: true, configurable: true, writable: true, - value: function () { return _this.c + 1; } + value: function () { return DD.c + 1; } }); Object.defineProperty(DD, "ff", { enumerable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js index e49203c3ab3b7..3fea1512b8cbd 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js @@ -67,7 +67,7 @@ Object.defineProperty(C, "b", { enumerable: true, configurable: true, writable: true, - value: this.a + 1 + value: (void 0).a + 1 }); C = __decorate([ foo @@ -93,19 +93,19 @@ Object.defineProperty(D, "d", { enumerable: true, configurable: true, writable: true, - value: this.c + 1 + value: (void 0).c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: super.a + this.c + 1 + value: (void 0).a + (void 0).c + 1 }); Object.defineProperty(D, "f", { enumerable: true, configurable: true, writable: true, - value: () => this.c + 1 + value: () => (void 0).c + 1 }); Object.defineProperty(D, "ff", { enumerable: true, @@ -128,7 +128,7 @@ Object.defineProperty(CC, "b", { enumerable: true, configurable: true, writable: true, - value: this.a + 1 + value: CC.a + 1 }); class DD extends CC { static foo() { @@ -151,19 +151,19 @@ Object.defineProperty(DD, "d", { enumerable: true, configurable: true, writable: true, - value: this.c + 1 + value: DD.c + 1 }); Object.defineProperty(DD, "e", { enumerable: true, configurable: true, writable: true, - value: super.a + this.c + 1 + value: CC.a + DD.c + 1 }); Object.defineProperty(DD, "f", { enumerable: true, configurable: true, writable: true, - value: () => this.c + 1 + value: () => DD.c + 1 }); Object.defineProperty(DD, "ff", { enumerable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js index d54fa7fbba4db..157ae8e129dd5 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js @@ -20,8 +20,8 @@ var C = /** @class */ (function () { } return Inner; }()), - _a = this.c, - _b = this.c, + _a = C.c, + _b = C.c, _c[_a] = 123, _c); return C; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js index 52cfaa6f3f3b0..a6c055499ebeb 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js @@ -18,7 +18,7 @@ C.bar = (_c = class Inner { this[_b] = 123; } }, - _a = this.c, - _b = this.c, + _a = C.c, + _b = C.c, _c[_a] = 123, _c); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js index 52cfaa6f3f3b0..a6c055499ebeb 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js @@ -18,7 +18,7 @@ C.bar = (_c = class Inner { this[_b] = 123; } }, - _a = this.c, - _b = this.c, + _a = C.c, + _b = C.c, _c[_a] = 123, _c); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js index ea43788794045..43e6c217b60f1 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js @@ -34,8 +34,8 @@ var C = /** @class */ (function () { } return Inner; }()), - _a = this.c, - _b = this.c, + _a = C.c, + _b = C.c, Object.defineProperty(_c, _a, { enumerable: true, configurable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js index e64aa9e150f0a..b45a0491893ce 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js @@ -32,8 +32,8 @@ Object.defineProperty(C, "bar", { }); } }, - _a = this.c, - _b = this.c, + _a = C.c, + _b = C.c, Object.defineProperty(_c, _a, { enumerable: true, configurable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.js b/tests/baselines/reference/typeOfThisInStaticMembers2.js index 72243cdd3e619..f851ff93be001 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.js +++ b/tests/baselines/reference/typeOfThisInStaticMembers2.js @@ -11,12 +11,12 @@ class C2 { var C = /** @class */ (function () { function C() { } - C.foo = this; // error + C.foo = C; // error return C; }()); var C2 = /** @class */ (function () { function C2() { } - C2.foo = this; // error + C2.foo = C2; // error return C2; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js index d016975ed5a2a..2d74f4822d30a 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js @@ -31,7 +31,7 @@ var C = /** @class */ (function () { function C() { } C.a = 1; - C.b = this.a + 1; + C.b = C.a + 1; return C; }()); var D = /** @class */ (function (_super) { @@ -40,7 +40,7 @@ var D = /** @class */ (function (_super) { return _super !== null && _super.apply(this, arguments) || this; } D.c = 2; - D.d = this.c + 1; - D.e = _super.a + this.c + 1; + D.d = D.c + 1; + D.e = _super.a + D.c + 1; return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js index f979d7e82e864..b789f68f55f4b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js @@ -15,9 +15,9 @@ class D extends C { class C { } C.a = 1; -C.b = this.a + 1; +C.b = C.a + 1; class D extends C { } D.c = 2; -D.d = this.c + 1; -D.e = super.a + this.c + 1; +D.d = D.c + 1; +D.e = C.a + D.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js index f979d7e82e864..b789f68f55f4b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js @@ -15,9 +15,9 @@ class D extends C { class C { } C.a = 1; -C.b = this.a + 1; +C.b = C.a + 1; class D extends C { } D.c = 2; -D.d = this.c + 1; -D.e = super.a + this.c + 1; +D.d = D.c + 1; +D.e = C.a + D.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js index e48014d858457..138f2f2c41338 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js @@ -40,7 +40,7 @@ var C = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: this.a + 1 + value: C.a + 1 }); return C; }()); @@ -59,13 +59,13 @@ var D = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: this.c + 1 + value: D.c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: _super.a + this.c + 1 + value: _super.a + D.c + 1 }); return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js index d5261f98d2684..4fc7476c94eac 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js @@ -24,7 +24,7 @@ Object.defineProperty(C, "b", { enumerable: true, configurable: true, writable: true, - value: this.a + 1 + value: C.a + 1 }); class D extends C { } @@ -38,11 +38,11 @@ Object.defineProperty(D, "d", { enumerable: true, configurable: true, writable: true, - value: this.c + 1 + value: D.c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: super.a + this.c + 1 + value: C.a + D.c + 1 }); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js index 2cb2426bf2057..fdd6879b6fd26 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js @@ -9,11 +9,10 @@ class C { //// [typeOfThisInStaticMembers5.js] -var _this = this; var C = /** @class */ (function () { function C(foo) { this.foo = foo; } - C.create = function () { return new _this("yep"); }; + C.create = function () { return new C("yep"); }; return C; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js index 584a090b8cd42..8f14d05a7b76b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js @@ -14,4 +14,4 @@ class C { this.foo = foo; } } -C.create = () => new this("yep"); +C.create = () => new C("yep"); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js index 2f37b3f88e44f..cef83b33e9c85 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js @@ -31,7 +31,7 @@ var C = /** @class */ (function () { function C() { } C.a = 1; - C.b = this.a + 1; + C.b = C.a + 1; return C; }()); var D = /** @class */ (function (_super) { @@ -40,7 +40,7 @@ var D = /** @class */ (function (_super) { return _super !== null && _super.apply(this, arguments) || this; } D.c = 2; - D.d = this.c + 1; - D.e = 1 + (_super.a) + (this.c + 1) + 1; + D.d = D.c + 1; + D.e = 1 + (_super.a) + (D.c + 1) + 1; return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js index 2045c3a2ee5bd..59581b2082621 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js @@ -15,9 +15,9 @@ class D extends C { class C { } C.a = 1; -C.b = this.a + 1; +C.b = C.a + 1; class D extends C { } D.c = 2; -D.d = this.c + 1; -D.e = 1 + (super.a) + (this.c + 1) + 1; +D.d = D.c + 1; +D.e = 1 + (C.a) + (D.c + 1) + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js index 05f8b6a8c5cb3..ac4e67b646ff8 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js @@ -19,12 +19,11 @@ class C { //// [typeOfThisInStaticMembers8.js] -var _this = this; var C = /** @class */ (function () { function C() { } C.f = 1; - C.arrowFunctionBoundary = function () { return _this.f + 1; }; + C.arrowFunctionBoundary = function () { return C.f + 1; }; C.functionExprBoundary = function () { return this.f + 2; }; C.classExprBoundary = /** @class */ (function () { function class_1() { @@ -41,7 +40,7 @@ var C = /** @class */ (function () { this.a = this.f + 5; } CC.prototype.method = function () { - return this.f + 6; + return C.f + 6; }; return CC; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js index 9f82b29886151..7b364b68b3d5e 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js @@ -22,7 +22,7 @@ class C { class C { } C.f = 1; -C.arrowFunctionBoundary = () => this.f + 1; +C.arrowFunctionBoundary = () => C.f + 1; C.functionExprBoundary = function () { return this.f + 2; }; C.classExprBoundary = class { constructor() { @@ -38,7 +38,7 @@ C.functionAndClassDeclBoundary = (() => { this.a = this.f + 5; } method() { - return this.f + 6; + return C.f + 6; } } })(); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js index 95c49e7e08d50..0f79d1f815d08 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js @@ -27,7 +27,7 @@ class C { C.f = 1; class D extends C { } -D.arrowFunctionBoundary = () => super.f + 1; +D.arrowFunctionBoundary = () => C.f + 1; D.functionExprBoundary = function () { return super.f + 2; }; D.classExprBoundary = class { constructor() { @@ -43,7 +43,7 @@ D.functionAndClassDeclBoundary = (() => { this.a = super.f + 5; } method() { - return super.f + 6; + return C.f + 6; } } })(); diff --git a/tests/cases/fourslash/codeFixAddMissingMember7.ts b/tests/cases/fourslash/codeFixAddMissingMember7.ts index cdb389ceaeb6d..95fbb4be18cba 100644 --- a/tests/cases/fourslash/codeFixAddMissingMember7.ts +++ b/tests/cases/fourslash/codeFixAddMissingMember7.ts @@ -10,7 +10,7 @@ verify.codeFix({ description: "Initialize static property 'foo'", - index: 0, + index: 2, newFileContent: `class C { static p = ()=>{ this.foo === 10 }; } From 3de52b3e134ec94e77a01c78ad259d8a31bdf28d Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 14 Apr 2021 15:20:55 +0800 Subject: [PATCH 26/33] Avoid errors --- src/compiler/checker.ts | 7 ----- ...ringClassMembersFromAssignments.errors.txt | 8 +----- ...rowFunctionInStaticInitializer1.errors.txt | 14 ---------- .../thisInConstructorParameter2.errors.txt | 5 +--- .../thisInInvalidContexts.errors.txt | 5 +--- ...InInvalidContextsExternalModule.errors.txt | 5 +--- .../reference/thisInOuterClassBody.errors.txt | 5 +--- ...isInStaticMembers10(target=es5).errors.txt | 26 +------------------ ...isInStaticMembers10(target=es6).errors.txt | 26 +------------------ ...nStaticMembers10(target=esnext).errors.txt | 26 +------------------ ...isInStaticMembers11(target=es5).errors.txt | 26 +------------------ ...isInStaticMembers11(target=es6).errors.txt | 26 +------------------ .../typeOfThisInStaticMembers2.errors.txt | 16 ------------ ...hisInStaticMembers3(target=es5).errors.txt | 23 ---------------- ...hisInStaticMembers3(target=es6).errors.txt | 23 ---------------- ...InStaticMembers3(target=esnext).errors.txt | 23 ---------------- ...hisInStaticMembers4(target=es5).errors.txt | 23 ---------------- ...hisInStaticMembers4(target=es6).errors.txt | 23 ---------------- ...hisInStaticMembers5(target=es5).errors.txt | 14 ---------- ...hisInStaticMembers5(target=es6).errors.txt | 14 ---------- ...hisInStaticMembers7(target=es5).errors.txt | 23 ---------------- ...hisInStaticMembers7(target=es6).errors.txt | 23 ---------------- ...hisInStaticMembers8(target=es5).errors.txt | 5 +--- ...hisInStaticMembers8(target=es6).errors.txt | 5 +--- .../fourslash/codeFixAddMissingMember7.ts | 2 +- 25 files changed, 13 insertions(+), 383 deletions(-) delete mode 100644 tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt delete mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 02b280037dc78..998e697655f87 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24274,13 +24274,6 @@ namespace ts { // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks } break; - case SyntaxKind.PropertyDeclaration: - case SyntaxKind.PropertySignature: - if (hasSyntacticModifier(container, ModifierFlags.Static) && !(compilerOptions.target === ScriptTarget.ESNext && useDefineForClassFields)) { - error(node, Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); - // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks - } - break; case SyntaxKind.ComputedPropertyName: error(node, Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; diff --git a/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt b/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt index 379d3f018c2c1..44ab30d997aae 100644 --- a/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt +++ b/tests/baselines/reference/inferringClassMembersFromAssignments.errors.txt @@ -1,11 +1,9 @@ tests/cases/conformance/salsa/a.js(14,13): error TS7008: Member 'inMethodNullable' implicitly has an 'any' type. tests/cases/conformance/salsa/a.js(20,9): error TS2322: Type 'string' is not assignable to type 'number'. tests/cases/conformance/salsa/a.js(39,9): error TS2322: Type 'boolean' is not assignable to type 'number'. -tests/cases/conformance/salsa/a.js(93,13): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/salsa/a.js(96,13): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/salsa/a.js (5 errors) ==== +==== tests/cases/conformance/salsa/a.js (3 errors) ==== class C { constructor() { if (Math.random()) { @@ -105,13 +103,9 @@ tests/cases/conformance/salsa/a.js(96,13): error TS2334: 'this' cannot be refere static prop = () => { if (Math.random()) { this.inStaticPropertyDeclaration = 0; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } else { this.inStaticPropertyDeclaration = "string" - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } } } diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt deleted file mode 100644 index f62b80655a6c8..0000000000000 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.errors.txt +++ /dev/null @@ -1,14 +0,0 @@ -tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts(6,7): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts (1 errors) ==== - function log(a) { } - - class Vector { - static foo = () => { - // 'this' should not be available in a static initializer. - log(this); - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - } \ No newline at end of file diff --git a/tests/baselines/reference/thisInConstructorParameter2.errors.txt b/tests/baselines/reference/thisInConstructorParameter2.errors.txt index 2b6ed8017c26b..b577fe5dbd483 100644 --- a/tests/baselines/reference/thisInConstructorParameter2.errors.txt +++ b/tests/baselines/reference/thisInConstructorParameter2.errors.txt @@ -1,14 +1,11 @@ -tests/cases/compiler/thisInConstructorParameter2.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/compiler/thisInConstructorParameter2.ts(5,28): error TS2333: 'this' cannot be referenced in constructor arguments. tests/cases/compiler/thisInConstructorParameter2.ts(5,39): error TS2333: 'this' cannot be referenced in constructor arguments. -==== tests/cases/compiler/thisInConstructorParameter2.ts (3 errors) ==== +==== tests/cases/compiler/thisInConstructorParameter2.ts (2 errors) ==== class P { x = this; static y = this; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. constructor(public z = this, zz = this, zzz = (p = this) => this) { ~~~~ diff --git a/tests/baselines/reference/thisInInvalidContexts.errors.txt b/tests/baselines/reference/thisInInvalidContexts.errors.txt index 7a357e1327ea5..9ed732644757a 100644 --- a/tests/baselines/reference/thisInInvalidContexts.errors.txt +++ b/tests/baselines/reference/thisInInvalidContexts.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(14,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(22,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. @@ -8,12 +7,10 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(44,9): tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(45,9): error TS2332: 'this' cannot be referenced in current location. -==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts (8 errors) ==== +==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts (7 errors) ==== //'this' in static member initializer class ErrClass1 { static t = this; // Error - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class BaseErrClass { diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt index 18f0e314a8ae7..35872f7d95dd5 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(14,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(22,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. @@ -8,12 +7,10 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalMod tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(45,9): error TS2332: 'this' cannot be referenced in current location. -==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts (8 errors) ==== +==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts (7 errors) ==== //'this' in static member initializer class ErrClass1 { static t = this; // Error - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class BaseErrClass { diff --git a/tests/baselines/reference/thisInOuterClassBody.errors.txt b/tests/baselines/reference/thisInOuterClassBody.errors.txt index 1eeabf22e2917..e002e87900faf 100644 --- a/tests/baselines/reference/thisInOuterClassBody.errors.txt +++ b/tests/baselines/reference/thisInOuterClassBody.errors.txt @@ -1,16 +1,13 @@ -tests/cases/compiler/thisInOuterClassBody.ts(5,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/compiler/thisInOuterClassBody.ts(12,22): error TS2576: Property 'y' does not exist on type 'Foo'. Did you mean to access the static member 'Foo.y' instead? tests/cases/compiler/thisInOuterClassBody.ts(18,22): error TS2339: Property 'x' does not exist on type 'typeof Foo'. -==== tests/cases/compiler/thisInOuterClassBody.ts (3 errors) ==== +==== tests/cases/compiler/thisInOuterClassBody.ts (2 errors) ==== class Foo { x = this; static y = this; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. bar() { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt index 0411a42e2dc39..94e3083d871e7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt @@ -1,18 +1,10 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (12 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== declare const foo: any; @foo @@ -20,8 +12,6 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @@ -30,18 +20,12 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { @@ -58,21 +42,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt index 0411a42e2dc39..94e3083d871e7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt @@ -1,18 +1,10 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (12 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== declare const foo: any; @foo @@ -20,8 +12,6 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @@ -30,18 +20,12 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { @@ -58,21 +42,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt index 0411a42e2dc39..94e3083d871e7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt @@ -1,18 +1,10 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (12 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== declare const foo: any; @foo @@ -20,8 +12,6 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @@ -30,18 +20,12 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { @@ -58,21 +42,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt index 5e571a7363a67..e2be2fefcecef 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt @@ -1,18 +1,10 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (12 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== declare const foo: any; @foo @@ -20,8 +12,6 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @@ -30,18 +20,12 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { @@ -58,21 +42,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt index 5e571a7363a67..e2be2fefcecef 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt @@ -1,18 +1,10 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(29,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(34,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(35,26): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(36,22): error TS2334: 'this' cannot be referenced in a static property initializer. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (12 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== declare const foo: any; @foo @@ -20,8 +12,6 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. } @@ -30,18 +20,12 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { @@ -58,21 +42,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta class CC { static a = 1; static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. } class DD extends CC { static c = 2; static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static f = () => this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt deleted file mode 100644 index 9fd14cc57193a..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.errors.txt +++ /dev/null @@ -1,16 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts(2,18): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts(6,18): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts (2 errors) ==== - class C { - static foo = this; // error - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class C2 { - static foo = this; // error - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt deleted file mode 100644 index a776b2b8b78f7..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (3 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt deleted file mode 100644 index a776b2b8b78f7..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (3 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt deleted file mode 100644 index a776b2b8b78f7..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (3 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt deleted file mode 100644 index 666d39f3f433a..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (3 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt deleted file mode 100644 index 666d39f3f433a..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,26): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (3 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = super.a + this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).errors.txt deleted file mode 100644 index 2e1fca54b7fb7..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).errors.txt +++ /dev/null @@ -1,14 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts(2,31): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts (1 errors) ==== - class C { - static create = () => new this("yep") - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - - constructor (private foo: string) { - - } - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).errors.txt deleted file mode 100644 index 2e1fca54b7fb7..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).errors.txt +++ /dev/null @@ -1,14 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts(2,31): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers5.ts (1 errors) ==== - class C { - static create = () => new this("yep") - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - - constructor (private foo: string) { - - } - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt deleted file mode 100644 index 2ca20146e4832..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(9,33): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts (3 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = 1 + (super.a) + (this.c + 1) + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).errors.txt deleted file mode 100644 index 2ca20146e4832..0000000000000 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(8,16): error TS2334: 'this' cannot be referenced in a static property initializer. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(9,33): error TS2334: 'this' cannot be referenced in a static property initializer. - - -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts (3 errors) ==== - class C { - static a = 1; - static b = this.a + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - - class D extends C { - static c = 2; - static d = this.c + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - static e = 1 + (super.a) + (this.c + 1) + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. - } - \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt index 361e4fc399be0..072f38100cfc6 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).errors.txt @@ -1,15 +1,12 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(3,42): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(5,49): error TS2339: Property 'f' does not exist on type '(Anonymous class)'. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(11,22): error TS2339: Property 'f' does not exist on type 'CC'. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(13,29): error TS2339: Property 'f' does not exist on type 'CC'. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (3 errors) ==== class C { static f = 1; static arrowFunctionBoundary = () => this.f + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static functionExprBoundary = function () { return this.f + 2 }; static classExprBoundary = class { a = this.f + 3 }; ~ diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt index 361e4fc399be0..072f38100cfc6 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).errors.txt @@ -1,15 +1,12 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(3,42): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(5,49): error TS2339: Property 'f' does not exist on type '(Anonymous class)'. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(11,22): error TS2339: Property 'f' does not exist on type 'CC'. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts(13,29): error TS2339: Property 'f' does not exist on type 'CC'. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers8.ts (3 errors) ==== class C { static f = 1; static arrowFunctionBoundary = () => this.f + 1; - ~~~~ -!!! error TS2334: 'this' cannot be referenced in a static property initializer. static functionExprBoundary = function () { return this.f + 2 }; static classExprBoundary = class { a = this.f + 3 }; ~ diff --git a/tests/cases/fourslash/codeFixAddMissingMember7.ts b/tests/cases/fourslash/codeFixAddMissingMember7.ts index 95fbb4be18cba..cdb389ceaeb6d 100644 --- a/tests/cases/fourslash/codeFixAddMissingMember7.ts +++ b/tests/cases/fourslash/codeFixAddMissingMember7.ts @@ -10,7 +10,7 @@ verify.codeFix({ description: "Initialize static property 'foo'", - index: 2, + index: 0, newFileContent: `class C { static p = ()=>{ this.foo === 10 }; } From e8cd8ea969e71152c8ea4d913fb51819d3cdaeef Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 14 Apr 2021 15:49:34 +0800 Subject: [PATCH 27/33] Accept baseline --- src/compiler/checker.ts | 7 +---- .../errorSuperPropertyAccess.errors.txt | 23 +++++++++----- ...opertyAccessibleWithinSubclass2.errors.txt | 30 +++++++++++++++++++ ...isInStaticMembers10(target=es5).errors.txt | 8 ++++- ...isInStaticMembers11(target=es5).errors.txt | 8 ++++- ...hisInStaticMembers3(target=es5).errors.txt | 17 +++++++++++ ...hisInStaticMembers4(target=es5).errors.txt | 17 +++++++++++ ...hisInStaticMembers7(target=es5).errors.txt | 17 +++++++++++ ...hisInStaticMembers9(target=es5).errors.txt | 5 +++- 9 files changed, 116 insertions(+), 16 deletions(-) create mode 100644 tests/baselines/reference/protectedStaticClassPropertyAccessibleWithinSubclass2.errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt create mode 100644 tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 19ba7db2b9c45..6c13fa552ce22 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26814,8 +26814,7 @@ namespace ts { // where this references the constructor function object of a derived class, // a super property access is permitted and must specify a public static member function of the base class. if (languageVersion < ScriptTarget.ES2015) { - const isStatic = flags & ModifierFlags.Static; - if (isStatic ? symbolHasNonClassMemberDeclaration(prop) : symbolHasNonMethodDeclaration(prop)) { + if (symbolHasNonMethodDeclaration(prop)) { if (reportError) { error(errorNode, Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); } @@ -26919,10 +26918,6 @@ namespace ts { return !!forEachProperty(symbol, prop => !(prop.flags & SymbolFlags.Method)); } - function symbolHasNonClassMemberDeclaration(symbol: Symbol) { - return !!forEachProperty(symbol, prop => !(prop.flags & SymbolFlags.ClassMember)); - } - function checkNonNullExpression(node: Expression | QualifiedName) { return checkNonNullType(checkExpression(node), node); } diff --git a/tests/baselines/reference/errorSuperPropertyAccess.errors.txt b/tests/baselines/reference/errorSuperPropertyAccess.errors.txt index 0aea34345f187..7fd6e467eafdc 100644 --- a/tests/baselines/reference/errorSuperPropertyAccess.errors.txt +++ b/tests/baselines/reference/errorSuperPropertyAccess.errors.txt @@ -23,19 +23,22 @@ tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(95,23): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(98,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(99,19): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(110,15): error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(109,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(110,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(111,15): error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(113,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(115,15): error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(114,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(115,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(116,15): error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(119,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(121,15): error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(120,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(121,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(122,15): error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(127,16): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts(127,30): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. -==== tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts (35 errors) ==== +==== tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts (38 errors) ==== //super property access in constructor of class with no base type //super property access in instance member function of class with no base type //super property access in instance member accessor(get and set) of class with no base type @@ -195,9 +198,11 @@ tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess class SomeDerived3 extends SomeBase { static fn() { super.publicStaticMember = 3; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticMember = 3; ~~~~~~~~~~~~~~~~~~~ -!!! error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticFunc(); ~~~~~~~~~~~~~~~~~ !!! error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. @@ -206,9 +211,11 @@ tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super.publicStaticMember = 3; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticMember = 3; ~~~~~~~~~~~~~~~~~~~ -!!! error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticFunc(); ~~~~~~~~~~~~~~~~~ !!! error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. @@ -218,9 +225,11 @@ tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super.publicStaticMember = 3; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticMember = 3; ~~~~~~~~~~~~~~~~~~~ -!!! error TS2341: Property 'privateStaticMember' is private and only accessible within class 'SomeBase'. +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.privateStaticFunc(); ~~~~~~~~~~~~~~~~~ !!! error TS2341: Property 'privateStaticFunc' is private and only accessible within class 'SomeBase'. diff --git a/tests/baselines/reference/protectedStaticClassPropertyAccessibleWithinSubclass2.errors.txt b/tests/baselines/reference/protectedStaticClassPropertyAccessibleWithinSubclass2.errors.txt new file mode 100644 index 0000000000000..b6fa239f2910f --- /dev/null +++ b/tests/baselines/reference/protectedStaticClassPropertyAccessibleWithinSubclass2.errors.txt @@ -0,0 +1,30 @@ +tests/cases/conformance/classes/members/accessibility/protectedStaticClassPropertyAccessibleWithinSubclass2.ts(11,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/classes/members/accessibility/protectedStaticClassPropertyAccessibleWithinSubclass2.ts(19,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + + +==== tests/cases/conformance/classes/members/accessibility/protectedStaticClassPropertyAccessibleWithinSubclass2.ts (2 errors) ==== + class Base { + protected static x: string; + static staticMethod() { + this.x; // OK, accessed within their declaring class + } + } + + class Derived1 extends Base { + static staticMethod1() { + this.x; // OK, accessed within a class derived from their declaring class + super.x; // Error, x is not public + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + } + } + + class Derived2 extends Derived1 { + protected static x: string; + static staticMethod3() { + this.x; // OK, accessed within a class derived from their declaring class + super.x; // Error, x is not public + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt index 94e3083d871e7..a6a7009967b11 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt @@ -1,10 +1,12 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (6 errors) ==== declare const foo: any; @foo @@ -22,6 +24,8 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; @@ -48,6 +52,8 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. static f = () => this.c + 1; static ff = function () { this.c + 1 } static foo () { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt index e2be2fefcecef..67f1abd1c1f90 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt @@ -1,10 +1,12 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(35,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (6 errors) ==== declare const foo: any; @foo @@ -22,6 +24,8 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. ~~~~ !!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; @@ -48,6 +52,8 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; static e = super.a + this.c + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. static f = () => this.c + 1; static ff = function () { this.c + 1 } static foo () { diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt new file mode 100644 index 0000000000000..da38e0eb95920 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts(9,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers3.ts (1 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + } + + class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt new file mode 100644 index 0000000000000..2502ce9dd53be --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts(9,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers4.ts (1 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + } + + class D extends C { + static c = 2; + static d = this.c + 1; + static e = super.a + this.c + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt new file mode 100644 index 0000000000000..54de1238f9098 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts(9,27): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + + +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers7.ts (1 errors) ==== + class C { + static a = 1; + static b = this.a + 1; + } + + class D extends C { + static c = 2; + static d = this.c + 1; + static e = 1 + (super.a) + (this.c + 1) + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt index 7bf89ab8b3f97..dfe85e64c8ff4 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es5).errors.txt @@ -1,3 +1,4 @@ +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(6,48): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(7,56): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(8,44): error TS2335: 'super' can only be referenced in a derived class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(11,20): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. @@ -5,13 +6,15 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts(16,24): error TS2335: 'super' can only be referenced in a derived class. -==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts (5 errors) ==== +==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers9.ts (6 errors) ==== class C { static f = 1 } class D extends C { static arrowFunctionBoundary = () => super.f + 1; + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. static functionExprBoundary = function () { return super.f + 2 }; ~~~~~ !!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. From 4e7cd7aa09418a5537d187b2fae5079de734049b Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 14 Apr 2021 15:56:54 +0800 Subject: [PATCH 28/33] Accept baseline --- .../cases/fourslash/completionListStaticProtectedMembers2.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers2.ts b/tests/cases/fourslash/completionListStaticProtectedMembers2.ts index b71092da572ec..e3ab6a57f4369 100644 --- a/tests/cases/fourslash/completionListStaticProtectedMembers2.ts +++ b/tests/cases/fourslash/completionListStaticProtectedMembers2.ts @@ -59,13 +59,9 @@ verify.completions( // only public and protected methods of the base class are accessible through super marker: "4", exact: [ - { name: "prototype", sortText: completion.SortText.LocationPriority }, { name: "protectedMethod", sortText: completion.SortText.LocalDeclarationPriority }, - { name: "protectedProperty", sortText: completion.SortText.LocalDeclarationPriority }, { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, - { name: "publicProperty", sortText: completion.SortText.LocalDeclarationPriority }, { name: "protectedOverriddenMethod", sortText: completion.SortText.LocalDeclarationPriority }, - { name: "protectedOverriddenProperty", sortText: completion.SortText.LocalDeclarationPriority }, { name: "apply", sortText: completion.SortText.LocationPriority }, { name: "call", sortText: completion.SortText.LocationPriority }, { name: "bind", sortText: completion.SortText.LocationPriority }, From 37f00f9ccc0d4ff4ffbdc5c2810987753b127902 Mon Sep 17 00:00:00 2001 From: kingwl Date: Fri, 11 Jun 2021 14:31:14 +0800 Subject: [PATCH 29/33] Accept baseline --- ...fThisInStaticMembers10(target=es5).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers10(target=es6).errors.txt | 16 ++++++++-------- ...isInStaticMembers10(target=esnext).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers11(target=es5).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers11(target=es6).errors.txt | 16 ++++++++-------- ...isInStaticMembers11(target=esnext).errors.txt | 16 ++++++++-------- 6 files changed, 48 insertions(+), 48 deletions(-) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt index a6a7009967b11..14814da3d986f 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. @@ -14,7 +14,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -22,15 +22,15 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~ !!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt index 94e3083d871e7..dccf5b191c5b7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt index 94e3083d871e7..dccf5b191c5b7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt index 67f1abd1c1f90..8a7cde2ab2433 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(35,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. @@ -14,7 +14,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -22,15 +22,15 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~ !!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt index e2be2fefcecef..6de7047ba0ac1 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt index e2be2fefcecef..6de7047ba0ac1 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2813: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; From 32bd0f15f12f1baa6e26a7696a0e842ec668d3b0 Mon Sep 17 00:00:00 2001 From: kingwl Date: Tue, 22 Jun 2021 11:23:05 +0800 Subject: [PATCH 30/33] Accept baseline --- ...fThisInStaticMembers10(target=es5).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers10(target=es6).errors.txt | 16 ++++++++-------- ...isInStaticMembers10(target=esnext).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers11(target=es5).errors.txt | 16 ++++++++-------- ...fThisInStaticMembers11(target=es6).errors.txt | 16 ++++++++-------- ...isInStaticMembers11(target=esnext).errors.txt | 16 ++++++++-------- 6 files changed, 48 insertions(+), 48 deletions(-) diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt index 14814da3d986f..614a87fc98c10 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(35,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. @@ -14,7 +14,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -22,15 +22,15 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~ !!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt index dccf5b191c5b7..be9735d6cd4ee 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt index dccf5b191c5b7..be9735d6cd4ee 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(6,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(12,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(13,26): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts(14,22): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers10.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt index 8a7cde2ab2433..64617e206600a 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(35,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. @@ -14,7 +14,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -22,15 +22,15 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~ !!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt index 6de7047ba0ac1..2e699c701e689 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt index 6de7047ba0ac1..2e699c701e689 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=esnext).errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. -tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(6,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(12,16): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(13,26): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. +tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts(14,22): error TS2816: Cannot use 'this' in a static property initializer of a decorated class. ==== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers11.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static a = 1; static b = this.a + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. } @foo @@ -20,13 +20,13 @@ tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInSta static c = 2; static d = this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static e = super.a + this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static f = () => this.c + 1; ~~~~ -!!! error TS2815: Cannot use 'this' in a static property initializer of a decorated class. +!!! error TS2816: Cannot use 'this' in a static property initializer of a decorated class. static ff = function () { this.c + 1 } static foo () { return this.c + 1; From 67d1ca9757ec22b3479c01cb5a89ba052aca35ff Mon Sep 17 00:00:00 2001 From: kingwl Date: Tue, 22 Jun 2021 17:07:47 +0800 Subject: [PATCH 31/33] Use substitutions --- src/compiler/transformers/classFields.ts | 236 +++++++++++++++-------- 1 file changed, 156 insertions(+), 80 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 0ca1e70442ba8..c7442a1d002df 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -6,6 +6,11 @@ namespace ts { * which have initializers that reference the class name. */ ClassAliases = 1 << 0, + /** + * Enables substitutions for class expressions with static fields + * which have initializers that reference the 'this' or 'super'. + */ + ClassStaticThisOrSuperReference = 1 << 1, } export const enum PrivateIdentifierKind { Field = "f", @@ -120,6 +125,8 @@ namespace ts { const previousOnSubstituteNode = context.onSubstituteNode; context.onSubstituteNode = onSubstituteNode; + const previousOnEmitNode = context.onEmitNode; + context.onEmitNode = onEmitNode; let enabledSubstitutions: ClassPropertySubstitutionFlags; @@ -140,7 +147,9 @@ namespace ts { const privateIdentifierEnvironmentStack: (PrivateIdentifierEnvironment | undefined)[] = []; let currentPrivateIdentifierEnvironment: PrivateIdentifierEnvironment | undefined; - let staticFieldInitializerContext: StaticClassFieldsInitializeContext | undefined; + const staticFieldInitializerContextMap: (StaticClassFieldsInitializeContext | undefined)[] = []; + let currentStaticFieldInitializerContext: StaticClassFieldsInitializeContext | undefined; + let currentComputedPropertyNameStaticFieldInitializerContext: StaticClassFieldsInitializeContext | undefined; return chainBundle(context, transformSourceFile); @@ -156,7 +165,7 @@ namespace ts { } function visitor(node: Node): VisitResult { - if (!(node.transformFlags & (TransformFlags.ContainsClassFields | TransformFlags.ContainsLexicalThisOrSuper))) return node; + if (!(node.transformFlags & TransformFlags.ContainsClassFields)) return node; switch (node.kind) { case SyntaxKind.ClassExpression: @@ -184,77 +193,6 @@ namespace ts { return visitForStatement(node as ForStatement); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node as TaggedTemplateExpression); - case SyntaxKind.ThisKeyword: - return visitThisExpression(node as ThisExpression); - case SyntaxKind.SuperKeyword: - return visitSuperExpression(node as SuperExpression); - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.FunctionExpression: - case SyntaxKind.Constructor: - return visitNonStaticBoundaryFunction(node as FunctionDeclaration | FunctionExpression | ConstructorDeclaration); - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - case SyntaxKind.MethodDeclaration: - return visitNameInStaticBoundaryFunction(node as AccessorDeclaration | MethodDeclaration); - } - return visitEachChild(node, visitor, context); - } - - function visitNameInStaticBoundaryFunction(node: AccessorDeclaration | MethodDeclaration) { - function nameInContextVisitor(n: Node): Node { - if (node.name === n) { - return visitNode(n, visitor); - } - - const savedStaticFieldInitializerContext = staticFieldInitializerContext; - staticFieldInitializerContext = undefined; - const result = visitNode(n, visitor); - staticFieldInitializerContext = savedStaticFieldInitializerContext; - return result; - } - return visitEachChild(node, nameInContextVisitor, context); - } - - function visitNonStaticBoundaryFunction(node: FunctionDeclaration | FunctionExpression | ConstructorDeclaration) { - const savedStaticFieldInitializerContext = staticFieldInitializerContext; - staticFieldInitializerContext = undefined; - const result = visitEachChild(node, visitor, context); - staticFieldInitializerContext = savedStaticFieldInitializerContext; - return result; - } - - function visitThisExpression(node: ThisExpression): Expression { - if (!staticFieldInitializerContext) { - return visitEachChild(node, visitor, context); - } - - const { receiver, classHasDecorators } = staticFieldInitializerContext; - return setTextRange( - setOriginalNode( - classHasDecorators ? - factory.createParenthesizedExpression(factory.createVoidZero()) : - factory.cloneNode(receiver), - node, - ), - node - ); - } - - function visitSuperExpression(node: SuperExpression): Expression { - if (staticFieldInitializerContext) { - const shouldRewriteSuper = languageVersion >= ScriptTarget.ES2015; - const { baseClass, classHasDecorators } = staticFieldInitializerContext; - if (baseClass && (shouldRewriteSuper || classHasDecorators)) { - return setTextRange( - setOriginalNode( - classHasDecorators ? - factory.createParenthesizedExpression(factory.createVoidZero()) : - factory.cloneNode(baseClass), - node - ), - node - ); - } } return visitEachChild(node, visitor, context); } @@ -1077,15 +1015,18 @@ namespace ts { return expressions; } - function visitPropertyDeclarationInContext(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, classHasDecorators: boolean | undefined) { - const savedStaticFieldInitializerContext = staticFieldInitializerContext; - staticFieldInitializerContext = hasStaticModifier(property) ? { + function visitPropertyDeclarationWithStaticFieldInitializerContext(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, classHasDecorators: boolean | undefined) { + const staticFieldInitializerContext = hasStaticModifier(property) ? { receiver, baseClass, classHasDecorators } : undefined; const result = visitNode(property.initializer, visitor, isExpression); - staticFieldInitializerContext = savedStaticFieldInitializerContext; + staticFieldInitializerContextMap[getOriginalNodeId(property)] = staticFieldInitializerContext; + + if (staticFieldInitializerContext) { + enableSubstitutionForClassStaticThisOrSuperReference(); + } return result; } @@ -1109,14 +1050,14 @@ namespace ts { if (!privateIdentifierInfo.isStatic) { return createPrivateInstanceFieldInitializer( receiver, - visitPropertyDeclarationInContext(property, receiver, baseClass, classHasDecorators), + visitPropertyDeclarationWithStaticFieldInitializerContext(property, receiver, baseClass, classHasDecorators), privateIdentifierInfo.brandCheckIdentifier ); } else { return createPrivateStaticFieldInitializer( privateIdentifierInfo.variableName, - visitPropertyDeclarationInContext(property, receiver, baseClass, classHasDecorators) + visitPropertyDeclarationWithStaticFieldInitializerContext(property, receiver, baseClass, classHasDecorators) ); } } @@ -1137,7 +1078,7 @@ namespace ts { return undefined; } - const initializer = property.initializer || emitAssignment ? visitPropertyDeclarationInContext(property, receiver, baseClass, classHasDecorators) ?? factory.createVoidZero() + const initializer = property.initializer || emitAssignment ? visitPropertyDeclarationWithStaticFieldInitializerContext(property, receiver, baseClass, classHasDecorators) ?? factory.createVoidZero() : isParameterPropertyDeclaration(propertyOriginalNode, propertyOriginalNode.parent) && isIdentifier(propertyName) ? propertyName : factory.createVoidZero(); @@ -1167,6 +1108,25 @@ namespace ts { } } + function enableSubstitutionForClassStaticThisOrSuperReference() { + if ((enabledSubstitutions & ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference) === 0) { + enabledSubstitutions |= ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference; + + context.enableSubstitution(SyntaxKind.ThisKeyword); + context.enableSubstitution(SyntaxKind.SuperKeyword); + context.enableEmitNotification(SyntaxKind.ThisKeyword); + context.enableEmitNotification(SyntaxKind.SuperKeyword); + context.enableEmitNotification(SyntaxKind.FunctionDeclaration); + context.enableEmitNotification(SyntaxKind.FunctionExpression); + context.enableEmitNotification(SyntaxKind.Constructor); + context.enableEmitNotification(SyntaxKind.GetAccessor); + context.enableEmitNotification(SyntaxKind.SetAccessor); + context.enableEmitNotification(SyntaxKind.MethodDeclaration); + context.enableEmitNotification(SyntaxKind.ComputedPropertyName); + context.enableEmitNotification(SyntaxKind.PropertyDeclaration); + } + } + /** * Generates brand-check initializer for private methods. * @@ -1188,6 +1148,75 @@ namespace ts { ); } + function onEmitNode(hint: EmitHint, node: Node, emitCallback: (hint: EmitHint, node: Node) => void) { + switch (node.kind) { + case SyntaxKind.ThisKeyword: + case SyntaxKind.SuperKeyword: + onEmitThisOrSuperExpression(hint, node as SuperExpression | SuperExpression, emitCallback); + break; + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + case SyntaxKind.Constructor: + onEmitFunctionLikeDeclaration(hint, node as FunctionDeclaration | FunctionExpression | ConstructorDeclaration, emitCallback); + break; + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.MethodDeclaration: + onEmitNamedMemberDeclaration(hint, node as AccessorDeclaration | MethodDeclaration, emitCallback); + break; + case SyntaxKind.ComputedPropertyName: + onEmitComputedPropertyName(hint, node as ComputedPropertyName, emitCallback); + break; + case SyntaxKind.PropertyDeclaration: + onEmitPropertyDeclaration(hint, node as PropertyDeclaration, emitCallback); + break; + default: + previousOnEmitNode(hint, node, emitCallback); + } + + } + + function onEmitPropertyDeclaration(hint: EmitHint, node: PropertyDeclaration, emitCallback: (hint: EmitHint, node: Node) => void) { + const savedStaticFieldInitializerContext = currentStaticFieldInitializerContext; + currentStaticFieldInitializerContext = staticFieldInitializerContextMap[getOriginalNodeId(node)]; + + previousOnEmitNode(hint, node, emitCallback); + currentStaticFieldInitializerContext = savedStaticFieldInitializerContext; + } + + function onEmitFunctionLikeDeclaration(hint: EmitHint, node: FunctionDeclaration | FunctionExpression | ConstructorDeclaration, emitCallback: (hint: EmitHint, node: Node) => void) { + const savedStaticFieldInitializerContext = currentStaticFieldInitializerContext; + currentStaticFieldInitializerContext = undefined; + + previousOnEmitNode(hint, node, emitCallback); + currentStaticFieldInitializerContext = savedStaticFieldInitializerContext; + } + + function onEmitNamedMemberDeclaration(hint: EmitHint, node: AccessorDeclaration | MethodDeclaration, emitCallback: (hint: EmitHint, node: Node) => void) { + const savedStaticFieldInitializerContext = currentStaticFieldInitializerContext; + const savedCurrentComputedPropertyNameStaticFieldInitializerContext = currentComputedPropertyNameStaticFieldInitializerContext; + currentComputedPropertyNameStaticFieldInitializerContext = currentStaticFieldInitializerContext; + currentStaticFieldInitializerContext = undefined; + + previousOnEmitNode(hint, node, emitCallback); + currentStaticFieldInitializerContext = savedStaticFieldInitializerContext; + currentComputedPropertyNameStaticFieldInitializerContext = savedCurrentComputedPropertyNameStaticFieldInitializerContext; + } + + function onEmitComputedPropertyName(hint: EmitHint, node: ComputedPropertyName, emitCallback: (hint: EmitHint, node: Node) => void) { + const savedStaticFieldInitializerContext = currentStaticFieldInitializerContext; + currentStaticFieldInitializerContext = currentComputedPropertyNameStaticFieldInitializerContext; + + previousOnEmitNode(hint, node, emitCallback); + currentStaticFieldInitializerContext = savedStaticFieldInitializerContext; + } + + function onEmitThisOrSuperExpression(hint: EmitHint, node: ThisExpression | SuperExpression, emitCallback: (hint: EmitHint, node: Node) => void) { + staticFieldInitializerContextMap[getOriginalNodeId(node)] = currentStaticFieldInitializerContext; + + previousOnEmitNode(hint, node, emitCallback); + } + /** * Hooks node substitutions. * @@ -1206,7 +1235,54 @@ namespace ts { switch (node.kind) { case SyntaxKind.Identifier: return substituteExpressionIdentifier(node as Identifier); + case SyntaxKind.ThisKeyword: + return substituteThisExpression(node as ThisExpression); + case SyntaxKind.SuperKeyword: + return substituteSuperExpression(node as SuperExpression); + } + return node; + } + + function substituteThisExpression(node: ThisExpression) { + if (enabledSubstitutions & ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference) { + const staticFieldInitializerContext = staticFieldInitializerContextMap[getOriginalNodeId(node)]; + if (staticFieldInitializerContext) { + const { receiver, classHasDecorators } = staticFieldInitializerContext; + return setTextRange( + setOriginalNode( + classHasDecorators ? + factory.createParenthesizedExpression(factory.createVoidZero()) : + factory.cloneNode(receiver), + node, + ), + node + ); + } } + + return node; + } + + function substituteSuperExpression(node: SuperExpression) { + if (enabledSubstitutions & ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference) { + const staticFieldInitializerContext = staticFieldInitializerContextMap[getOriginalNodeId(node)]; + if (staticFieldInitializerContext) { + const shouldRewriteSuper = languageVersion >= ScriptTarget.ES2015; + const { baseClass, classHasDecorators } = staticFieldInitializerContext; + if (baseClass && (shouldRewriteSuper || classHasDecorators)) { + return setTextRange( + setOriginalNode( + classHasDecorators ? + factory.createParenthesizedExpression(factory.createVoidZero()) : + factory.cloneNode(baseClass), + node + ), + node + ); + } + } + } + return node; } From f43b5e7a7b9c66ad8284b26ceca283cd19fff002 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Fri, 25 Jun 2021 02:45:16 -0700 Subject: [PATCH 32/33] Full coverage for super, this, merge static and private context --- src/compiler/factory/nodeFactory.ts | 50 +- src/compiler/factory/utilities.ts | 61 + src/compiler/transformers/classFields.ts | 1037 +++++++++++------ src/compiler/transformers/es2015.ts | 45 +- src/compiler/types.ts | 18 + src/compiler/utilitiesPublic.ts | 12 + .../reference/asyncArrowInClassES5.js | 5 +- .../inferringClassMembersFromAssignments.js | 6 +- .../privateNameFieldUnaryMutation.js | 44 +- .../reference/privateNameMethodAssignment.js | 4 +- .../privateNameStaticFieldUnaryMutation.js | 44 +- .../privateNameStaticMethodAssignment.js | 4 +- .../reference/privateWriteOnlyAccessorRead.js | 8 +- .../sourceMapValidationDecorators.js.map | 4 +- ...ourceMapValidationDecorators.sourcemap.txt | 6 +- ...AndSuperInStaticMembers1(target=es2015).js | 218 ++++ ...AndSuperInStaticMembers1(target=esnext).js | 71 ++ ...AndSuperInStaticMembers2(target=es2015).js | 88 ++ ...AndSuperInStaticMembers2(target=esnext).js | 76 ++ .../reference/thisAndSuperInStaticMembers3.js | 117 ++ .../reference/thisAndSuperInStaticMembers4.js | 62 + ...thisInArrowFunctionInStaticInitializer1.js | 8 +- ...nArrowFunctionInStaticInitializer1.symbols | 2 +- ...sInArrowFunctionInStaticInitializer1.types | 4 +- .../reference/thisInConstructorParameter2.js | 4 +- .../thisInInvalidContexts.errors.txt | 19 +- .../reference/thisInInvalidContexts.js | 12 - .../reference/thisInInvalidContexts.symbols | 55 +- .../reference/thisInInvalidContexts.types | 9 - ...InInvalidContextsExternalModule.errors.txt | 19 +- .../thisInInvalidContextsExternalModule.js | 12 - ...hisInInvalidContextsExternalModule.symbols | 55 +- .../thisInInvalidContextsExternalModule.types | 9 - .../reference/thisInOuterClassBody.js | 4 +- ...typeOfThisInStaticMembers10(target=es5).js | 14 +- ...typeOfThisInStaticMembers10(target=es6).js | 13 +- ...eOfThisInStaticMembers10(target=esnext).js | 13 +- ...typeOfThisInStaticMembers11(target=es5).js | 14 +- ...typeOfThisInStaticMembers11(target=es6).js | 13 +- ...typeOfThisInStaticMembers12(target=es5).js | 15 +- ...typeOfThisInStaticMembers12(target=es6).js | 15 +- ...eOfThisInStaticMembers12(target=esnext).js | 15 +- ...typeOfThisInStaticMembers13(target=es5).js | 15 +- ...typeOfThisInStaticMembers13(target=es6).js | 15 +- .../reference/typeOfThisInStaticMembers2.js | 12 +- .../typeOfThisInStaticMembers2.symbols | 4 +- .../typeOfThisInStaticMembers2.types | 4 +- .../typeOfThisInStaticMembers3(target=es5).js | 10 +- .../typeOfThisInStaticMembers3(target=es6).js | 11 +- ...peOfThisInStaticMembers3(target=esnext).js | 11 +- .../typeOfThisInStaticMembers4(target=es5).js | 10 +- .../typeOfThisInStaticMembers4(target=es6).js | 11 +- .../typeOfThisInStaticMembers5(target=es5).js | 4 +- .../typeOfThisInStaticMembers5(target=es6).js | 4 +- .../typeOfThisInStaticMembers7(target=es5).js | 10 +- .../typeOfThisInStaticMembers7(target=es6).js | 11 +- .../typeOfThisInStaticMembers8(target=es5).js | 6 +- .../typeOfThisInStaticMembers8(target=es6).js | 6 +- .../typeOfThisInStaticMembers9(target=es6).js | 8 +- ...thisInArrowFunctionInStaticInitializer1.ts | 2 +- .../thisAndSuperInStaticMembers1.ts | 42 + .../thisAndSuperInStaticMembers2.ts | 42 + .../thisAndSuperInStaticMembers3.ts | 26 + .../thisAndSuperInStaticMembers4.ts | 26 + .../typeOfThisInStaticMembers2.ts | 4 +- .../thisKeyword/thisInInvalidContexts.ts | 5 - .../thisInInvalidContextsExternalModule.ts | 5 - 67 files changed, 1924 insertions(+), 684 deletions(-) create mode 100644 tests/baselines/reference/thisAndSuperInStaticMembers1(target=es2015).js create mode 100644 tests/baselines/reference/thisAndSuperInStaticMembers1(target=esnext).js create mode 100644 tests/baselines/reference/thisAndSuperInStaticMembers2(target=es2015).js create mode 100644 tests/baselines/reference/thisAndSuperInStaticMembers2(target=esnext).js create mode 100644 tests/baselines/reference/thisAndSuperInStaticMembers3.js create mode 100644 tests/baselines/reference/thisAndSuperInStaticMembers4.js create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers1.ts create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers2.ts create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers3.ts create mode 100644 tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers4.ts diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index a329c3c7eedfa..a4c0ea6b68528 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -494,8 +494,11 @@ namespace ts { createArraySliceCall, createArrayConcatCall, createObjectDefinePropertyCall, + createReflectGetCall, + createReflectSetCall, createPropertyDescriptor, createCallBinding, + createAssignmentTargetWrapper, // Utilities inlineExpressions, @@ -2592,7 +2595,7 @@ namespace ts { propagateChildFlags(node.equalsGreaterThanToken) | TransformFlags.ContainsES2015; if (modifiersToFlags(node.modifiers) & ModifierFlags.Async) { - node.transformFlags |= TransformFlags.ContainsES2017; + node.transformFlags |= TransformFlags.ContainsES2017 | TransformFlags.ContainsLexicalThis; } return node; } @@ -5403,6 +5406,15 @@ namespace ts { } function createMethodCall(object: Expression, methodName: string | Identifier, argumentsList: readonly Expression[]) { + // Preserve the optionality of `object`. + if (isCallChain(object)) { + return createCallChain( + createPropertyAccessChain(object, /*questionDotToken*/ undefined, methodName), + /*questionDotToken*/ undefined, + /*typeArguments*/ undefined, + argumentsList + ); + } return createCallExpression( createPropertyAccessExpression(object, methodName), /*typeArguments*/ undefined, @@ -5438,6 +5450,14 @@ namespace ts { return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]); } + function createReflectGetCall(target: Expression, propertyKey: Expression, receiver?: Expression): CallExpression { + return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]); + } + + function createReflectSetCall(target: Expression, propertyKey: Expression, value: Expression, receiver?: Expression): CallExpression { + return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]); + } + function tryAddPropertyAssignment(properties: Push, propertyName: string, expression: Expression | undefined) { if (expression) { properties.push(createPropertyAssignment(propertyName, expression)); @@ -5613,6 +5633,34 @@ namespace ts { return { target, thisArg }; } + function createAssignmentTargetWrapper(paramName: Identifier, expression: Expression): LeftHandSideExpression { + return createPropertyAccessExpression( + // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560) + createParenthesizedExpression( + createObjectLiteralExpression([ + createSetAccessorDeclaration( + /*decorators*/ undefined, + /*modifiers*/ undefined, + "value", + [createParameterDeclaration( + /*decorators*/ undefined, + /*modifiers*/ undefined, + /*dotDotDotToken*/ undefined, + paramName, + /*questionToken*/ undefined, + /*type*/ undefined, + /*initializer*/ undefined + )], + createBlock([ + createExpressionStatement(expression) + ]) + ) + ]) + ), + "value" + ); + } + function inlineExpressions(expressions: readonly Expression[]) { // Avoid deeply nested comma expressions as traversing them during emit can result in "Maximum call // stack size exceeded" errors. diff --git a/src/compiler/factory/utilities.ts b/src/compiler/factory/utilities.ts index a8397d33f5407..6d40ae277bd4e 100644 --- a/src/compiler/factory/utilities.ts +++ b/src/compiler/factory/utilities.ts @@ -303,6 +303,67 @@ namespace ts { } } + /** + * Expand the read and increment/decrement operations a pre- or post-increment or pre- or post-decrement expression. + * + * ```ts + * // input + * ++ + * // output (if result is not discarded) + * var ; + * ( = , = ++, ) + * // output (if result is discarded) + * var ; + * ( = , ++, ) + * + * // input + * ++ + * // output (if result is not discarded) + * var ; + * ( = , = ++) + * // output (if result is discarded) + * var ; + * ( = , ++) + * ``` + * + * It is up to the caller to supply a temporary variable for `` if one is needed. + * The temporary variable `` is injected so that `++` and `--` work uniformly with `number` and `bigint`. + * The result of the expression is always the final result of incrementing or decrementing the expression, so that it can be used for storage. + * + * @param factory {@link NodeFactory} used to create the expanded representation. + * @param node The original prefix or postfix unary node. + * @param expression The expression to use as the value to increment or decrement + * @param resultVariable A temporary variable in which to store the result. Pass `undefined` if the result is discarded, or if the value of `` is the expected result. + */ + export function expandPreOrPostfixIncrementOrDecrementExpression(factory: NodeFactory, node: PrefixUnaryExpression | PostfixUnaryExpression, expression: Expression, recordTempVariable: (node: Identifier) => void, resultVariable: Identifier | undefined) { + const operator = node.operator; + Debug.assert(operator === SyntaxKind.PlusPlusToken || operator === SyntaxKind.MinusMinusToken, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression"); + + const temp = factory.createTempVariable(recordTempVariable); + expression = factory.createAssignment(temp, expression); + setTextRange(expression, node.operand); + + let operation: Expression = isPrefixUnaryExpression(node) ? + factory.createPrefixUnaryExpression(operator, temp) : + factory.createPostfixUnaryExpression(temp, operator); + setTextRange(operation, node); + + if (resultVariable) { + operation = factory.createAssignment(resultVariable, operation); + setTextRange(operation, node); + } + + expression = factory.createComma(expression, operation); + setTextRange(expression, node); + + if (isPostfixUnaryExpression(node)) { + expression = factory.createComma(expression, temp); + setTextRange(expression, node); + } + + return expression; + } + /** * Gets whether an identifier should only be referred to by its internal name. */ diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index c7442a1d002df..89fdd07a24a14 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -81,10 +81,6 @@ namespace ts { * Used for prefixing generated variable names. */ className: string; - /** - * Used for brand check on static members - */ - classConstructor?: Identifier; /** * Used for brand check on private methods. */ @@ -95,10 +91,25 @@ namespace ts { identifiers: UnderscoreEscapedMap } - interface StaticClassFieldsInitializeContext { - receiver: LeftHandSideExpression - baseClass: LeftHandSideExpression | undefined - classHasDecorators: boolean | undefined + interface ClassLexicalEnvironment { + facts: ClassFacts; + /** + * Used for brand checks on static members, and `this` references in static initializers + */ + classConstructor: Identifier | undefined; + /** + * Used for `super` references in static initializers. + */ + superClassReference: Identifier | undefined; + privateIdentifierEnvironment: PrivateIdentifierEnvironment | undefined; + } + + const enum ClassFacts { + None = 0, + ClassWasDecorated = 1 << 0, + NeedsClassConstructorReference = 1 << 1, + NeedsClassSuperReference = 1 << 2, + NeedsSubstitutionForThisInClassStaticField = 1 << 3, } /** @@ -121,7 +132,12 @@ namespace ts { const languageVersion = getEmitScriptTarget(compilerOptions); const useDefineForClassFields = getUseDefineForClassFields(compilerOptions); - const shouldTransformPrivateElements = languageVersion < ScriptTarget.ESNext; + const shouldTransformPrivateElements = languageVersion <= ScriptTarget.ES2021; + + // We don't need to transform `super` property access when targeting ES5, ES3 because + // the es2015 transformation handles those. + const shouldTransformSuperInStaticFields = (languageVersion <= ScriptTarget.ES2021 || !useDefineForClassFields) && languageVersion >= ScriptTarget.ES2015; + const shouldTransformThisInStaticFields = languageVersion <= ScriptTarget.ES2021 || !useDefineForClassFields; const previousOnSubstituteNode = context.onSubstituteNode; context.onSubstituteNode = onSubstituteNode; @@ -144,12 +160,11 @@ namespace ts { */ let pendingStatements: Statement[] | undefined; - const privateIdentifierEnvironmentStack: (PrivateIdentifierEnvironment | undefined)[] = []; - let currentPrivateIdentifierEnvironment: PrivateIdentifierEnvironment | undefined; - - const staticFieldInitializerContextMap: (StaticClassFieldsInitializeContext | undefined)[] = []; - let currentStaticFieldInitializerContext: StaticClassFieldsInitializeContext | undefined; - let currentComputedPropertyNameStaticFieldInitializerContext: StaticClassFieldsInitializeContext | undefined; + const classLexicalEnvironmentStack: (ClassLexicalEnvironment | undefined)[] = []; + const classLexicalEnvironmentMap = new Map(); + let currentClassLexicalEnvironment: ClassLexicalEnvironment | undefined; + let currentComputedPropertyNameClassLexicalEnvironment: ClassLexicalEnvironment | undefined; + let currentStaticPropertyDeclaration: PropertyDeclaration | undefined; return chainBundle(context, transformSourceFile); @@ -164,37 +179,76 @@ namespace ts { return visited; } + function visitorWorker(node: Node, valueIsDiscarded: boolean): VisitResult { + if (node.transformFlags & TransformFlags.ContainsClassFields) { + switch (node.kind) { + case SyntaxKind.ClassExpression: + case SyntaxKind.ClassDeclaration: + return visitClassLike(node as ClassLikeDeclaration); + case SyntaxKind.PropertyDeclaration: + return visitPropertyDeclaration(node as PropertyDeclaration); + case SyntaxKind.VariableStatement: + return visitVariableStatement(node as VariableStatement); + case SyntaxKind.PrivateIdentifier: + return visitPrivateIdentifier(node as PrivateIdentifier); + } + } + if (node.transformFlags & TransformFlags.ContainsClassFields || + node.transformFlags & TransformFlags.ContainsLexicalSuper && + shouldTransformSuperInStaticFields && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment) { + switch (node.kind) { + case SyntaxKind.PrefixUnaryExpression: + case SyntaxKind.PostfixUnaryExpression: + return visitPreOrPostfixUnaryExpression(node as PrefixUnaryExpression | PostfixUnaryExpression, valueIsDiscarded); + case SyntaxKind.BinaryExpression: + return visitBinaryExpression(node as BinaryExpression, valueIsDiscarded); + case SyntaxKind.CallExpression: + return visitCallExpression(node as CallExpression); + case SyntaxKind.TaggedTemplateExpression: + return visitTaggedTemplateExpression(node as TaggedTemplateExpression); + case SyntaxKind.PropertyAccessExpression: + return visitPropertyAccessExpression(node as PropertyAccessExpression); + case SyntaxKind.ElementAccessExpression: + return visitElementAccessExpression(node as ElementAccessExpression); + case SyntaxKind.ExpressionStatement: + return visitExpressionStatement(node as ExpressionStatement); + case SyntaxKind.ForStatement: + return visitForStatement(node as ForStatement); + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + case SyntaxKind.Constructor: + case SyntaxKind.MethodDeclaration: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: { + const savedCurrentStaticPropertyDeclaration = currentStaticPropertyDeclaration; + currentStaticPropertyDeclaration = undefined; + const result = visitEachChild(node, visitor, context); + currentStaticPropertyDeclaration = savedCurrentStaticPropertyDeclaration; + return result; + } + } + } + return visitEachChild(node, visitor, context); + } + + function discardedValueVisitor(node: Node): VisitResult { + return visitorWorker(node, /*valueIsDiscarded*/ true); + } + function visitor(node: Node): VisitResult { - if (!(node.transformFlags & TransformFlags.ContainsClassFields)) return node; + return visitorWorker(node, /*valueIsDiscarded*/ false); + } + function heritageClauseVisitor(node: Node): VisitResult { switch (node.kind) { - case SyntaxKind.ClassExpression: - case SyntaxKind.ClassDeclaration: - return visitClassLike(node as ClassLikeDeclaration); - case SyntaxKind.PropertyDeclaration: - return visitPropertyDeclaration(node as PropertyDeclaration); - case SyntaxKind.VariableStatement: - return visitVariableStatement(node as VariableStatement); - case SyntaxKind.PropertyAccessExpression: - return visitPropertyAccessExpression(node as PropertyAccessExpression); - case SyntaxKind.PrefixUnaryExpression: - return visitPrefixUnaryExpression(node as PrefixUnaryExpression); - case SyntaxKind.PostfixUnaryExpression: - return visitPostfixUnaryExpression(node as PostfixUnaryExpression, /*valueIsDiscarded*/ false); - case SyntaxKind.CallExpression: - return visitCallExpression(node as CallExpression); - case SyntaxKind.BinaryExpression: - return visitBinaryExpression(node as BinaryExpression); - case SyntaxKind.PrivateIdentifier: - return visitPrivateIdentifier(node as PrivateIdentifier); - case SyntaxKind.ExpressionStatement: - return visitExpressionStatement(node as ExpressionStatement); - case SyntaxKind.ForStatement: - return visitForStatement(node as ForStatement); - case SyntaxKind.TaggedTemplateExpression: - return visitTaggedTemplateExpression(node as TaggedTemplateExpression); + case SyntaxKind.HeritageClause: + return visitEachChild(node, heritageClauseVisitor, context); + case SyntaxKind.ExpressionWithTypeArguments: + return visitExpressionWithTypeArguments(node as ExpressionWithTypeArguments); } - return visitEachChild(node, visitor, context); + return visitor(node); } function visitorDestructuringTarget(node: Node): VisitResult { @@ -412,89 +466,153 @@ namespace ts { ); } } + if (shouldTransformSuperInStaticFields && + isSuperProperty(node) && + isIdentifier(node.name) && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment) { + const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; + if (facts & ClassFacts.ClassWasDecorated) { + return visitInvalidSuperProperty(node); + } + if (classConstructor && superClassReference) { + // converts `super.x` into `Reflect.get(_baseTemp, "x", _classTemp)` + const superProperty = factory.createReflectGetCall( + superClassReference, + factory.createStringLiteralFromNode(node.name), + classConstructor + ); + setOriginalNode(superProperty, node.expression); + setTextRange(superProperty, node.expression); + return superProperty; + } + } return visitEachChild(node, visitor, context); } - function visitPrefixUnaryExpression(node: PrefixUnaryExpression) { - if (shouldTransformPrivateElements && isPrivateIdentifierPropertyAccessExpression(node.operand)) { - const operator = node.operator === SyntaxKind.PlusPlusToken ? - SyntaxKind.PlusToken : node.operator === SyntaxKind.MinusMinusToken ? - SyntaxKind.MinusToken : undefined; - let info: PrivateIdentifierInfo | undefined; - if (operator && (info = accessPrivateIdentifier(node.operand.name))) { - const receiver = visitNode(node.operand.expression, visitor, isExpression); - const { readExpression, initializeExpression } = createCopiableReceiverExpr(receiver); - - const existingValue = factory.createPrefixUnaryExpression(SyntaxKind.PlusToken, createPrivateIdentifierAccess(info, readExpression)); + function visitElementAccessExpression(node: ElementAccessExpression) { + if (shouldTransformSuperInStaticFields && + isSuperProperty(node) && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment) { + const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; + if (facts & ClassFacts.ClassWasDecorated) { + return visitInvalidSuperProperty(node); + } - return setOriginalNode( - createPrivateIdentifierAssignment( - info, - initializeExpression || readExpression, - factory.createBinaryExpression(existingValue, operator, factory.createNumericLiteral(1)), - SyntaxKind.EqualsToken - ), - node + if (classConstructor && superClassReference) { + // converts `super[x]` into `Reflect.get(_baseTemp, x, _classTemp)` + const superProperty = factory.createReflectGetCall( + superClassReference, + visitNode(node.argumentExpression, visitor, isExpression), + classConstructor ); + setOriginalNode(superProperty, node.expression); + setTextRange(superProperty, node.expression); + return superProperty; } } return visitEachChild(node, visitor, context); } - function visitPostfixUnaryExpression(node: PostfixUnaryExpression, valueIsDiscarded: boolean) { - if (shouldTransformPrivateElements && isPrivateIdentifierPropertyAccessExpression(node.operand)) { - const operator = node.operator === SyntaxKind.PlusPlusToken ? - SyntaxKind.PlusToken : node.operator === SyntaxKind.MinusMinusToken ? - SyntaxKind.MinusToken : undefined; - let info: PrivateIdentifierInfo | undefined; - if (operator && (info = accessPrivateIdentifier(node.operand.name))) { - const receiver = visitNode(node.operand.expression, visitor, isExpression); - const { readExpression, initializeExpression } = createCopiableReceiverExpr(receiver); - - const existingValue = factory.createPrefixUnaryExpression(SyntaxKind.PlusToken, createPrivateIdentifierAccess(info, readExpression)); - - // Create a temporary variable to store the value returned by the expression. - const returnValue = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration); - - return setOriginalNode( - factory.inlineExpressions(compact([ - createPrivateIdentifierAssignment( - info, - initializeExpression || readExpression, - factory.createBinaryExpression( - returnValue ? factory.createAssignment(returnValue, existingValue) : existingValue, - operator, - factory.createNumericLiteral(1) - ), - SyntaxKind.EqualsToken - ), - returnValue - ])), - node - ); + function visitPreOrPostfixUnaryExpression(node: PrefixUnaryExpression | PostfixUnaryExpression, valueIsDiscarded: boolean) { + if (node.operator === SyntaxKind.PlusPlusToken || node.operator === SyntaxKind.MinusMinusToken) { + if (shouldTransformPrivateElements && isPrivateIdentifierPropertyAccessExpression(node.operand)) { + let info: PrivateIdentifierInfo | undefined; + if (info = accessPrivateIdentifier(node.operand.name)) { + const receiver = visitNode(node.operand.expression, visitor, isExpression); + const { readExpression, initializeExpression } = createCopiableReceiverExpr(receiver); + + let expression: Expression = createPrivateIdentifierAccess(info, readExpression); + const temp = isPrefixUnaryExpression(node) || valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration); + expression = expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp); + expression = createPrivateIdentifierAssignment( + info, + initializeExpression || readExpression, + expression, + SyntaxKind.EqualsToken + ); + setOriginalNode(expression, node); + setTextRange(expression, node); + if (temp) { + expression = factory.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } + else if (shouldTransformSuperInStaticFields && + isSuperProperty(node.operand) && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment) { + // converts `++super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = ++_a), _classTemp), _b)` + // converts `++super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = ++_b), _classTemp), _c)` + // converts `--super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = --_a), _classTemp), _b)` + // converts `--super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = --_b), _classTemp), _c)` + // converts `super.a++` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a++), _classTemp), _b)` + // converts `super[f()]++` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b++), _classTemp), _c)` + // converts `super.a--` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a--), _classTemp), _b)` + // converts `super[f()]--` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b--), _classTemp), _c)` + const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; + if (facts & ClassFacts.ClassWasDecorated) { + const operand = visitInvalidSuperProperty(node.operand); + return isPrefixUnaryExpression(node) ? + factory.updatePrefixUnaryExpression(node, operand) : + factory.updatePostfixUnaryExpression(node, operand); + } + if (classConstructor && superClassReference) { + let setterName: Expression | undefined; + let getterName: Expression | undefined; + if (isPropertyAccessExpression(node.operand)) { + if (isIdentifier(node.operand.name)) { + getterName = setterName = factory.createStringLiteralFromNode(node.operand.name); + } + } + else { + if (isSimpleInlineableExpression(node.operand.argumentExpression)) { + getterName = setterName = node.operand.argumentExpression; + } + else { + getterName = factory.createTempVariable(hoistVariableDeclaration); + setterName = factory.createAssignment(getterName, visitNode(node.operand.argumentExpression, visitor, isExpression)); + } + } + if (setterName && getterName) { + let expression: Expression = factory.createReflectGetCall(superClassReference, getterName, classConstructor); + setTextRange(expression, node.operand); + + const temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration); + expression = expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp); + expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor); + setOriginalNode(expression, node); + setTextRange(expression, node); + if (temp) { + expression = factory.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } } } return visitEachChild(node, visitor, context); } function visitForStatement(node: ForStatement) { - if (node.incrementor && isPostfixUnaryExpression(node.incrementor)) { - return factory.updateForStatement( - node, - visitNode(node.initializer, visitor, isForInitializer), - visitNode(node.condition, visitor, isExpression), - visitPostfixUnaryExpression(node.incrementor, /*valueIsDiscarded*/ true), - visitIterationBody(node.statement, visitor, context) - ); - } - return visitEachChild(node, visitor, context); + return factory.updateForStatement( + node, + visitNode(node.initializer, discardedValueVisitor, isForInitializer), + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, discardedValueVisitor, isExpression), + visitIterationBody(node.statement, visitor, context) + ); } function visitExpressionStatement(node: ExpressionStatement) { - if (isPostfixUnaryExpression(node.expression)) { - return factory.updateExpressionStatement(node, visitPostfixUnaryExpression(node.expression, /*valueIsDiscarded*/ true)); - } - return visitEachChild(node, visitor, context); + return factory.updateExpressionStatement( + node, + visitNode(node.expression, discardedValueVisitor, isExpression) + ); } function createCopiableReceiverExpr(receiver: Expression): { readExpression: Expression; initializeExpression: Expression | undefined } { @@ -527,6 +645,23 @@ namespace ts { [visitNode(thisArg, visitor, isExpression), ...visitNodes(node.arguments, visitor, isExpression)] ); } + + if (shouldTransformSuperInStaticFields && + isSuperProperty(node.expression) && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment?.classConstructor) { + + // converts `super.f(...)` into `Reflect.get(_baseTemp, "f", _classTemp).call(_classTemp, ...)` + const invocation = factory.createFunctionCallCall( + visitNode(node.expression, visitor, isExpression), + currentClassLexicalEnvironment.classConstructor, + visitNodes(node.arguments, visitor, isExpression) + ); + setOriginalNode(invocation, node); + setTextRange(invocation, node); + return invocation; + } + return visitEachChild(node, visitor, context); } @@ -545,27 +680,47 @@ namespace ts { visitNode(node.template, visitor, isTemplateLiteral) ); } + if (shouldTransformSuperInStaticFields && + isSuperProperty(node.tag) && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment?.classConstructor) { + + // converts `` super.f`x` `` into `` Reflect.get(_baseTemp, "f", _classTemp).bind(_classTemp)`x` `` + const invocation = factory.createFunctionBindCall( + visitNode(node.tag, visitor, isExpression), + currentClassLexicalEnvironment.classConstructor, + [] + ); + setOriginalNode(invocation, node); + setTextRange(invocation, node); + return factory.updateTaggedTemplateExpression( + node, + invocation, + /*typeArguments*/ undefined, + visitNode(node.template, visitor, isTemplateLiteral) + ); + } return visitEachChild(node, visitor, context); } - function visitBinaryExpression(node: BinaryExpression) { - if (shouldTransformPrivateElements) { - if (isDestructuringAssignment(node)) { - const savedPendingExpressions = pendingExpressions; - pendingExpressions = undefined; - node = factory.updateBinaryExpression( - node, - visitNode(node.left, visitorDestructuringTarget), - node.operatorToken, - visitNode(node.right, visitor) - ); - const expr = some(pendingExpressions) ? - factory.inlineExpressions(compact([...pendingExpressions!, node])) : - node; - pendingExpressions = savedPendingExpressions; - return expr; - } - if (isAssignmentExpression(node) && isPrivateIdentifierPropertyAccessExpression(node.left)) { + function visitBinaryExpression(node: BinaryExpression, valueIsDiscarded: boolean) { + if (isDestructuringAssignment(node)) { + const savedPendingExpressions = pendingExpressions; + pendingExpressions = undefined; + node = factory.updateBinaryExpression( + node, + visitNode(node.left, visitorDestructuringTarget), + node.operatorToken, + visitNode(node.right, visitor) + ); + const expr = some(pendingExpressions) ? + factory.inlineExpressions(compact([...pendingExpressions!, node])) : + node; + pendingExpressions = savedPendingExpressions; + return expr; + } + if (isAssignmentExpression(node)) { + if (shouldTransformPrivateElements && isPrivateIdentifierPropertyAccessExpression(node.left)) { const info = accessPrivateIdentifier(node.left.name); if (info) { return setTextRange( @@ -577,6 +732,76 @@ namespace ts { ); } } + else if (shouldTransformSuperInStaticFields && + isSuperProperty(node.left) && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment) { + const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; + if (facts & ClassFacts.ClassWasDecorated) { + return factory.updateBinaryExpression( + node, + visitInvalidSuperProperty(node.left), + node.operatorToken, + visitNode(node.right, visitor, isExpression)); + } + if (classConstructor && superClassReference) { + let setterName = + isElementAccessExpression(node.left) ? visitNode(node.left.argumentExpression, visitor, isExpression) : + isIdentifier(node.left.name) ? factory.createStringLiteralFromNode(node.left.name) : + undefined; + if (setterName) { + // converts `super.x = 1` into `(Reflect.set(_baseTemp, "x", _a = 1, _classTemp), _a)` + // converts `super[f()] = 1` into `(Reflect.set(_baseTemp, f(), _a = 1, _classTemp), _a)` + // converts `super.x += 1` into `(Reflect.set(_baseTemp, "x", _a = Reflect.get(_baseTemp, "x", _classtemp) + 1, _classTemp), _a)` + // converts `super[f()] += 1` into `(Reflect.set(_baseTemp, _a = f(), _b = Reflect.get(_baseTemp, _a, _classtemp) + 1, _classTemp), _b)` + + let expression = visitNode(node.right, visitor, isExpression); + if (isCompoundAssignment(node.operatorToken.kind)) { + let getterName = setterName; + if (!isSimpleInlineableExpression(setterName)) { + getterName = factory.createTempVariable(hoistVariableDeclaration); + setterName = factory.createAssignment(getterName, setterName); + } + const superPropertyGet = factory.createReflectGetCall( + superClassReference, + getterName, + classConstructor + ); + setOriginalNode(superPropertyGet, node.left); + setTextRange(superPropertyGet, node.left); + + expression = factory.createBinaryExpression( + superPropertyGet, + getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), + expression + ); + setTextRange(expression, node); + } + + const temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration); + if (temp) { + expression = factory.createAssignment(temp, expression); + setTextRange(temp, node); + } + + expression = factory.createReflectSetCall( + superClassReference, + setterName, + expression, + classConstructor + ); + setOriginalNode(expression, node); + setTextRange(expression, node); + + if (temp) { + expression = factory.createComma(expression, temp); + setTextRange(expression, node); + } + + return expression; + } + } + } } return visitEachChild(node, visitor, context); } @@ -631,11 +856,15 @@ namespace ts { * Set up the environment for a class. */ function visitClassLike(node: ClassLikeDeclaration) { + if (!forEach(node.members, doesClassElementNeedTransform)) { + return visitEachChild(node, visitor, context); + } + const savedPendingExpressions = pendingExpressions; pendingExpressions = undefined; - if (shouldTransformPrivateElements) { - startPrivateIdentifierEnvironment(); + startClassLexicalEnvironment(); + if (shouldTransformPrivateElements) { const name = getNameOfDeclaration(node); if (name && isIdentifier(name)) { getPrivateIdentifierEnvironment().className = idText(name); @@ -654,9 +883,7 @@ namespace ts { visitClassDeclaration(node) : visitClassExpression(node); - if (shouldTransformPrivateElements) { - endPrivateIdentifierEnvironment(); - } + endClassLexicalEnvironment(); pendingExpressions = savedPendingExpressions; return result; } @@ -669,20 +896,69 @@ namespace ts { return filter(node.members, isNonStaticMethodOrAccessorWithPrivateName); } + function getClassFacts(node: ClassLikeDeclaration) { + let facts = ClassFacts.None; + const original = getOriginalNode(node); + if (isClassDeclaration(original) && some(original.decorators)) { + facts |= ClassFacts.ClassWasDecorated; + } + for (const member of node.members) { + if (!hasStaticModifier(member)) continue; + if (member.name && isPrivateIdentifier(member.name) && shouldTransformPrivateElements) { + facts |= ClassFacts.NeedsClassConstructorReference; + } + if (isPropertyDeclaration(member)) { + if (shouldTransformThisInStaticFields && member.transformFlags & TransformFlags.ContainsLexicalThis) { + facts |= ClassFacts.NeedsSubstitutionForThisInClassStaticField; + if (!(facts & ClassFacts.ClassWasDecorated)) { + facts |= ClassFacts.NeedsClassConstructorReference; + } + } + if (shouldTransformSuperInStaticFields && member.transformFlags & TransformFlags.ContainsLexicalSuper) { + if (!(facts & ClassFacts.ClassWasDecorated)) { + facts |= ClassFacts.NeedsClassConstructorReference | ClassFacts.NeedsClassSuperReference; + } + } + } + } + return facts; + } + + function visitExpressionWithTypeArguments(node: ExpressionWithTypeArguments) { + const facts = currentClassLexicalEnvironment?.facts || ClassFacts.None; + if (facts & ClassFacts.NeedsClassSuperReference) { + const temp = factory.createTempVariable(hoistVariableDeclaration, /*reserveInNestedScopes*/ true); + getClassLexicalEnvironment().superClassReference = temp; + return factory.updateExpressionWithTypeArguments( + node, + factory.createAssignment( + temp, + visitNode(node.expression, visitor, isExpression) + ), + /*typeArguments*/ undefined + ); + } + return visitEachChild(node, visitor, context); + } + function visitClassDeclaration(node: ClassDeclaration) { - if (!forEach(node.members, doesClassElementNeedTransform)) { - return visitEachChild(node, visitor, context); + const facts = getClassFacts(node); + if (facts) { + getClassLexicalEnvironment().facts = facts; + } + if (facts & ClassFacts.NeedsSubstitutionForThisInClassStaticField) { + enableSubstitutionForClassStaticThisOrSuperReference(); } const staticProperties = getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true); - let pendingPrivateStateAssignment: BinaryExpression | undefined; - if (shouldTransformPrivateElements && some(node.members, m => hasStaticModifier(m) && !!m.name && isPrivateIdentifier(m.name))) { - const temp = factory.createTempVariable(hoistVariableDeclaration, /* reservedInNestedScopes */ true); - getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp); - pendingPrivateStateAssignment = factory.createAssignment( - temp, - factory.getInternalName(node) - ); + + // If a class has private static fields, or a static field has a `this` or `super` reference, + // then we need to allocate a temp variable to hold on to that reference. + let pendingClassReferenceAssignment: BinaryExpression | undefined; + if (facts & ClassFacts.NeedsClassConstructorReference) { + const temp = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true); + getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp); + pendingClassReferenceAssignment = factory.createAssignment(temp, factory.getInternalName(node)); } const extendsClauseElement = getEffectiveBaseTypeNode(node); @@ -695,13 +971,13 @@ namespace ts { node.modifiers, node.name, /*typeParameters*/ undefined, - visitNodes(node.heritageClauses, visitor, isHeritageClause), + visitNodes(node.heritageClauses, heritageClauseVisitor, isHeritageClause), transformClassMembers(node, isDerivedClass) ) ]; - if (pendingPrivateStateAssignment) { - getPendingExpressions().unshift(pendingPrivateStateAssignment); + if (pendingClassReferenceAssignment) { + getPendingExpressions().unshift(pendingClassReferenceAssignment); } // Write any pending expressions from elided or moved computed property names @@ -716,15 +992,20 @@ namespace ts { // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. if (some(staticProperties)) { - addPropertyStatements(statements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression, !!length(getOriginalNode(node).decorators)); + addPropertyStatements(statements, staticProperties, factory.getInternalName(node)); } return statements; } function visitClassExpression(node: ClassExpression): Expression { - if (!forEach(node.members, doesClassElementNeedTransform)) { - return visitEachChild(node, visitor, context); + const facts = getClassFacts(node); + if (facts) { + getClassLexicalEnvironment().facts = facts; + } + + if (facts & ClassFacts.NeedsSubstitutionForThisInClassStaticField) { + enableSubstitutionForClassStaticThisOrSuperReference(); } // If this class expression is a transformation of a decorated class declaration, @@ -734,7 +1015,7 @@ namespace ts { // In this case, we use pendingStatements to produce the same output as the // class declaration transformation. The VariableStatement visitor will insert // these statements after the class expression variable statement. - const isDecoratedClassDeclaration = isClassDeclaration(getOriginalNode(node)); + const isDecoratedClassDeclaration = !!(facts & ClassFacts.ClassWasDecorated); const staticProperties = getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true); @@ -749,9 +1030,10 @@ namespace ts { const requiresBlockScopedVar = classCheckFlags & NodeCheckFlags.BlockScopedBindingInLoop; return factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, !!isClassWithConstructorReference); } - if (shouldTransformPrivateElements && some(node.members, m => hasStaticModifier(m) && !!m.name && isPrivateIdentifier(m.name))) { + + if (facts & ClassFacts.NeedsClassConstructorReference) { temp = createClassTempVar(); - getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp); + getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp); } const classExpression = factory.updateClassExpression( @@ -760,11 +1042,10 @@ namespace ts { node.modifiers, node.name, /*typeParameters*/ undefined, - visitNodes(node.heritageClauses, visitor, isHeritageClause), + visitNodes(node.heritageClauses, heritageClauseVisitor, isHeritageClause), transformClassMembers(node, isDerivedClass) ); - const hasClassDecorators = !!length(getOriginalNode(node).decorators); const hasTransformableStatics = some(staticProperties, p => !!p.initializer || (shouldTransformPrivateElements && isPrivateIdentifier(p.name))); if (hasTransformableStatics || some(pendingExpressions)) { if (isDecoratedClassDeclaration) { @@ -776,7 +1057,7 @@ namespace ts { } if (pendingStatements && some(staticProperties)) { - addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node), extendsClauseElement?.expression, hasClassDecorators); + addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); } if (temp) { return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]); @@ -800,7 +1081,7 @@ namespace ts { expressions.push(startOnNewLine(factory.createAssignment(temp, classExpression))); // Add any pending expressions leftover from elided or relocated computed property names addRange(expressions, map(pendingExpressions, startOnNewLine)); - addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp, extendsClauseElement?.expression, hasClassDecorators)); + addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp)); expressions.push(startOnNewLine(temp)); return factory.inlineExpressions(expressions); @@ -978,9 +1259,9 @@ namespace ts { * @param properties An array of property declarations to transform. * @param receiver The receiver on which each property should be assigned. */ - function addPropertyStatements(statements: Statement[], properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression, baseClass?: LeftHandSideExpression, hasClassDecorators?: boolean) { + function addPropertyStatements(statements: Statement[], properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression) { for (const property of properties) { - const expression = transformProperty(property, receiver, baseClass, hasClassDecorators); + const expression = transformProperty(property, receiver); if (!expression) { continue; } @@ -998,10 +1279,10 @@ namespace ts { * @param properties An array of property declarations to transform. * @param receiver The receiver on which each property should be assigned. */ - function generateInitializedPropertyExpressions(properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, hasClassDecorators: boolean | undefined) { + function generateInitializedPropertyExpressions(properties: readonly PropertyDeclaration[], receiver: LeftHandSideExpression) { const expressions: Expression[] = []; for (const property of properties) { - const expression = transformProperty(property, receiver, baseClass, hasClassDecorators); + const expression = transformProperty(property, receiver); if (!expression) { continue; } @@ -1015,34 +1296,36 @@ namespace ts { return expressions; } - function visitPropertyDeclarationWithStaticFieldInitializerContext(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, classHasDecorators: boolean | undefined) { - const staticFieldInitializerContext = hasStaticModifier(property) ? { - receiver, - baseClass, - classHasDecorators - } : undefined; - const result = visitNode(property.initializer, visitor, isExpression); - staticFieldInitializerContextMap[getOriginalNodeId(property)] = staticFieldInitializerContext; - - if (staticFieldInitializerContext) { - enableSubstitutionForClassStaticThisOrSuperReference(); - } - return result; - } - /** * Transforms a property initializer into an assignment statement. * * @param property The property declaration. * @param receiver The object receiving the property assignment. */ - function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression, baseClass: LeftHandSideExpression | undefined, classHasDecorators: boolean | undefined) { + function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression) { + const savedCurrentStaticPropertyDeclaration = currentStaticPropertyDeclaration; + const transformed = transformPropertyWorker(property, receiver); + if (transformed && hasStaticModifier(property) && currentClassLexicalEnvironment?.facts) { + // capture the lexical environment for the member + setOriginalNode(transformed, property); + addEmitFlags(transformed, EmitFlags.AdviseOnEmitNode); + classLexicalEnvironmentMap.set(getOriginalNodeId(transformed), currentClassLexicalEnvironment); + } + currentStaticPropertyDeclaration = savedCurrentStaticPropertyDeclaration; + return transformed; + } + + function transformPropertyWorker(property: PropertyDeclaration, receiver: LeftHandSideExpression) { // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name) const emitAssignment = !useDefineForClassFields; const propertyName = isComputedPropertyName(property.name) && !isSimpleInlineableExpression(property.name.expression) ? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name)) : property.name; + if (hasStaticModifier(property)) { + currentStaticPropertyDeclaration = property; + } + if (shouldTransformPrivateElements && isPrivateIdentifier(propertyName)) { const privateIdentifierInfo = accessPrivateIdentifier(propertyName); if (privateIdentifierInfo) { @@ -1050,14 +1333,14 @@ namespace ts { if (!privateIdentifierInfo.isStatic) { return createPrivateInstanceFieldInitializer( receiver, - visitPropertyDeclarationWithStaticFieldInitializerContext(property, receiver, baseClass, classHasDecorators), + visitNode(property.initializer, visitor, isExpression), privateIdentifierInfo.brandCheckIdentifier ); } else { return createPrivateStaticFieldInitializer( privateIdentifierInfo.variableName, - visitPropertyDeclarationWithStaticFieldInitializerContext(property, receiver, baseClass, classHasDecorators) + visitNode(property.initializer, visitor, isExpression) ); } } @@ -1078,7 +1361,7 @@ namespace ts { return undefined; } - const initializer = property.initializer || emitAssignment ? visitPropertyDeclarationWithStaticFieldInitializerContext(property, receiver, baseClass, classHasDecorators) ?? factory.createVoidZero() + const initializer = property.initializer || emitAssignment ? visitNode(property.initializer, visitor, isExpression) ?? factory.createVoidZero() : isParameterPropertyDeclaration(propertyOriginalNode, propertyOriginalNode.parent) && isIdentifier(propertyName) ? propertyName : factory.createVoidZero(); @@ -1112,18 +1395,23 @@ namespace ts { if ((enabledSubstitutions & ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference) === 0) { enabledSubstitutions |= ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference; + // substitute `this` in a static field initializer context.enableSubstitution(SyntaxKind.ThisKeyword); - context.enableSubstitution(SyntaxKind.SuperKeyword); - context.enableEmitNotification(SyntaxKind.ThisKeyword); - context.enableEmitNotification(SyntaxKind.SuperKeyword); + + // these push a new lexical environment that is not the class lexical environment context.enableEmitNotification(SyntaxKind.FunctionDeclaration); context.enableEmitNotification(SyntaxKind.FunctionExpression); context.enableEmitNotification(SyntaxKind.Constructor); + + // these push a new lexical environment that is not the class lexical environment, except + // when they have a computed property name context.enableEmitNotification(SyntaxKind.GetAccessor); context.enableEmitNotification(SyntaxKind.SetAccessor); context.enableEmitNotification(SyntaxKind.MethodDeclaration); - context.enableEmitNotification(SyntaxKind.ComputedPropertyName); context.enableEmitNotification(SyntaxKind.PropertyDeclaration); + + // class lexical environments are restored when entering a computed property name + context.enableEmitNotification(SyntaxKind.ComputedPropertyName); } } @@ -1148,72 +1436,77 @@ namespace ts { ); } + function visitInvalidSuperProperty(node: SuperProperty) { + return isPropertyAccessExpression(node) ? + factory.updatePropertyAccessExpression( + node, + factory.createVoidZero(), + node.name) : + factory.updateElementAccessExpression( + node, + factory.createVoidZero(), + visitNode(node.argumentExpression, visitor, isExpression)); + } + function onEmitNode(hint: EmitHint, node: Node, emitCallback: (hint: EmitHint, node: Node) => void) { + const original = getOriginalNode(node); + if (original.id) { + const classLexicalEnvironment = classLexicalEnvironmentMap.get(original.id); + if (classLexicalEnvironment) { + const savedClassLexicalEnvironment = currentClassLexicalEnvironment; + const savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment; + currentClassLexicalEnvironment = classLexicalEnvironment; + currentComputedPropertyNameClassLexicalEnvironment = classLexicalEnvironment; + previousOnEmitNode(hint, node, emitCallback); + currentClassLexicalEnvironment = savedClassLexicalEnvironment; + currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment; + return; + } + } + switch (node.kind) { - case SyntaxKind.ThisKeyword: - case SyntaxKind.SuperKeyword: - onEmitThisOrSuperExpression(hint, node as SuperExpression | SuperExpression, emitCallback); - break; - case SyntaxKind.FunctionDeclaration: case SyntaxKind.FunctionExpression: - case SyntaxKind.Constructor: - onEmitFunctionLikeDeclaration(hint, node as FunctionDeclaration | FunctionExpression | ConstructorDeclaration, emitCallback); - break; + if (isArrowFunction(original) || getEmitFlags(node) & EmitFlags.AsyncFunctionBody) { + break; + } + + // falls through + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.Constructor: { + const savedClassLexicalEnvironment = currentClassLexicalEnvironment; + const savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment; + currentClassLexicalEnvironment = undefined; + currentComputedPropertyNameClassLexicalEnvironment = undefined; + previousOnEmitNode(hint, node, emitCallback); + currentClassLexicalEnvironment = savedClassLexicalEnvironment; + currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment; + return; + } + case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: case SyntaxKind.MethodDeclaration: - onEmitNamedMemberDeclaration(hint, node as AccessorDeclaration | MethodDeclaration, emitCallback); - break; - case SyntaxKind.ComputedPropertyName: - onEmitComputedPropertyName(hint, node as ComputedPropertyName, emitCallback); - break; - case SyntaxKind.PropertyDeclaration: - onEmitPropertyDeclaration(hint, node as PropertyDeclaration, emitCallback); - break; - default: + case SyntaxKind.PropertyDeclaration: { + const savedClassLexicalEnvironment = currentClassLexicalEnvironment; + const savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment; + currentComputedPropertyNameClassLexicalEnvironment = currentClassLexicalEnvironment; + currentClassLexicalEnvironment = undefined; + previousOnEmitNode(hint, node, emitCallback); + currentClassLexicalEnvironment = savedClassLexicalEnvironment; + currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment; + return; + } + case SyntaxKind.ComputedPropertyName: { + const savedClassLexicalEnvironment = currentClassLexicalEnvironment; + const savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment; + currentClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment; + currentComputedPropertyNameClassLexicalEnvironment = undefined; previousOnEmitNode(hint, node, emitCallback); + currentClassLexicalEnvironment = savedClassLexicalEnvironment; + currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment; + return; + } } - - } - - function onEmitPropertyDeclaration(hint: EmitHint, node: PropertyDeclaration, emitCallback: (hint: EmitHint, node: Node) => void) { - const savedStaticFieldInitializerContext = currentStaticFieldInitializerContext; - currentStaticFieldInitializerContext = staticFieldInitializerContextMap[getOriginalNodeId(node)]; - - previousOnEmitNode(hint, node, emitCallback); - currentStaticFieldInitializerContext = savedStaticFieldInitializerContext; - } - - function onEmitFunctionLikeDeclaration(hint: EmitHint, node: FunctionDeclaration | FunctionExpression | ConstructorDeclaration, emitCallback: (hint: EmitHint, node: Node) => void) { - const savedStaticFieldInitializerContext = currentStaticFieldInitializerContext; - currentStaticFieldInitializerContext = undefined; - - previousOnEmitNode(hint, node, emitCallback); - currentStaticFieldInitializerContext = savedStaticFieldInitializerContext; - } - - function onEmitNamedMemberDeclaration(hint: EmitHint, node: AccessorDeclaration | MethodDeclaration, emitCallback: (hint: EmitHint, node: Node) => void) { - const savedStaticFieldInitializerContext = currentStaticFieldInitializerContext; - const savedCurrentComputedPropertyNameStaticFieldInitializerContext = currentComputedPropertyNameStaticFieldInitializerContext; - currentComputedPropertyNameStaticFieldInitializerContext = currentStaticFieldInitializerContext; - currentStaticFieldInitializerContext = undefined; - - previousOnEmitNode(hint, node, emitCallback); - currentStaticFieldInitializerContext = savedStaticFieldInitializerContext; - currentComputedPropertyNameStaticFieldInitializerContext = savedCurrentComputedPropertyNameStaticFieldInitializerContext; - } - - function onEmitComputedPropertyName(hint: EmitHint, node: ComputedPropertyName, emitCallback: (hint: EmitHint, node: Node) => void) { - const savedStaticFieldInitializerContext = currentStaticFieldInitializerContext; - currentStaticFieldInitializerContext = currentComputedPropertyNameStaticFieldInitializerContext; - - previousOnEmitNode(hint, node, emitCallback); - currentStaticFieldInitializerContext = savedStaticFieldInitializerContext; - } - - function onEmitThisOrSuperExpression(hint: EmitHint, node: ThisExpression | SuperExpression, emitCallback: (hint: EmitHint, node: Node) => void) { - staticFieldInitializerContextMap[getOriginalNodeId(node)] = currentStaticFieldInitializerContext; - previousOnEmitNode(hint, node, emitCallback); } @@ -1237,52 +1530,26 @@ namespace ts { return substituteExpressionIdentifier(node as Identifier); case SyntaxKind.ThisKeyword: return substituteThisExpression(node as ThisExpression); - case SyntaxKind.SuperKeyword: - return substituteSuperExpression(node as SuperExpression); } return node; } function substituteThisExpression(node: ThisExpression) { - if (enabledSubstitutions & ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference) { - const staticFieldInitializerContext = staticFieldInitializerContextMap[getOriginalNodeId(node)]; - if (staticFieldInitializerContext) { - const { receiver, classHasDecorators } = staticFieldInitializerContext; + if (enabledSubstitutions & ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference && currentClassLexicalEnvironment) { + const { facts, classConstructor } = currentClassLexicalEnvironment; + if (facts & ClassFacts.ClassWasDecorated) { + return factory.createParenthesizedExpression(factory.createVoidZero()); + } + if (classConstructor) { return setTextRange( setOriginalNode( - classHasDecorators ? - factory.createParenthesizedExpression(factory.createVoidZero()) : - factory.cloneNode(receiver), + factory.cloneNode(classConstructor), node, ), node ); } } - - return node; - } - - function substituteSuperExpression(node: SuperExpression) { - if (enabledSubstitutions & ClassPropertySubstitutionFlags.ClassStaticThisOrSuperReference) { - const staticFieldInitializerContext = staticFieldInitializerContextMap[getOriginalNodeId(node)]; - if (staticFieldInitializerContext) { - const shouldRewriteSuper = languageVersion >= ScriptTarget.ES2015; - const { baseClass, classHasDecorators } = staticFieldInitializerContext; - if (baseClass && (shouldRewriteSuper || classHasDecorators)) { - return setTextRange( - setOriginalNode( - classHasDecorators ? - factory.createParenthesizedExpression(factory.createVoidZero()) : - factory.cloneNode(baseClass), - node - ), - node - ); - } - } - } - return node; } @@ -1339,24 +1606,31 @@ namespace ts { } } - function startPrivateIdentifierEnvironment() { - privateIdentifierEnvironmentStack.push(currentPrivateIdentifierEnvironment); - currentPrivateIdentifierEnvironment = undefined; + function startClassLexicalEnvironment() { + classLexicalEnvironmentStack.push(currentClassLexicalEnvironment); + currentClassLexicalEnvironment = undefined; } - function endPrivateIdentifierEnvironment() { - currentPrivateIdentifierEnvironment = privateIdentifierEnvironmentStack.pop(); + function endClassLexicalEnvironment() { + currentClassLexicalEnvironment = classLexicalEnvironmentStack.pop(); } - function getPrivateIdentifierEnvironment() { - if (!currentPrivateIdentifierEnvironment) { - currentPrivateIdentifierEnvironment = { - className: "", - identifiers: new Map() - }; - } + function getClassLexicalEnvironment() { + return currentClassLexicalEnvironment ||= { + facts: ClassFacts.None, + classConstructor: undefined, + superClassReference: undefined, + privateIdentifierEnvironment: undefined, + }; + } - return currentPrivateIdentifierEnvironment; + function getPrivateIdentifierEnvironment() { + const lex = getClassLexicalEnvironment(); + lex.privateIdentifierEnvironment ||= { + className: "", + identifiers: new Map() + }; + return lex.privateIdentifierEnvironment; } function getPendingExpressions() { @@ -1365,19 +1639,23 @@ namespace ts { function addPrivateIdentifierToEnvironment(node: PrivateClassElementDeclaration) { const text = getTextOfPropertyName(node.name) as string; - const env = getPrivateIdentifierEnvironment(); - const { weakSetName, classConstructor } = env; + const lex = getClassLexicalEnvironment(); + const { classConstructor } = lex; + + const privateEnv = getPrivateIdentifierEnvironment(); + const { weakSetName } = privateEnv; + const assignmentExpressions: Expression[] = []; const privateName = node.name.escapedText; - const previousInfo = env.identifiers.get(privateName); + const previousInfo = privateEnv.identifiers.get(privateName); const isValid = !isReservedPrivateName(node.name) && previousInfo === undefined; if (hasStaticModifier(node)) { Debug.assert(classConstructor, "weakSetName should be set in private identifier environment"); if (isPropertyDeclaration(node)) { const variableName = createHoistedVariableForPrivateName(text, node); - env.identifiers.set(privateName, { + privateEnv.identifiers.set(privateName, { kind: PrivateIdentifierKind.Field, variableName, brandCheckIdentifier: classConstructor, @@ -1387,7 +1665,7 @@ namespace ts { } else if (isMethodDeclaration(node)) { const functionName = createHoistedVariableForPrivateName(text, node); - env.identifiers.set(privateName, { + privateEnv.identifiers.set(privateName, { kind: PrivateIdentifierKind.Method, methodName: functionName, brandCheckIdentifier: classConstructor, @@ -1401,7 +1679,7 @@ namespace ts { previousInfo.getterName = getterName; } else { - env.identifiers.set(privateName, { + privateEnv.identifiers.set(privateName, { kind: PrivateIdentifierKind.Accessor, getterName, setterName: undefined, @@ -1417,7 +1695,7 @@ namespace ts { previousInfo.setterName = setterName; } else { - env.identifiers.set(privateName, { + privateEnv.identifiers.set(privateName, { kind: PrivateIdentifierKind.Accessor, getterName: undefined, setterName, @@ -1433,7 +1711,7 @@ namespace ts { } else if (isPropertyDeclaration(node)) { const weakMapName = createHoistedVariableForPrivateName(text, node); - env.identifiers.set(privateName, { + privateEnv.identifiers.set(privateName, { kind: PrivateIdentifierKind.Field, brandCheckIdentifier: weakMapName, isStatic: false, @@ -1453,7 +1731,7 @@ namespace ts { else if (isMethodDeclaration(node)) { Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); - env.identifiers.set(privateName, { + privateEnv.identifiers.set(privateName, { kind: PrivateIdentifierKind.Method, methodName: createHoistedVariableForPrivateName(text, node), brandCheckIdentifier: weakSetName, @@ -1471,7 +1749,7 @@ namespace ts { previousInfo.getterName = getterName; } else { - env.identifiers.set(privateName, { + privateEnv.identifiers.set(privateName, { kind: PrivateIdentifierKind.Accessor, getterName, setterName: undefined, @@ -1488,7 +1766,7 @@ namespace ts { previousInfo.setterName = setterName; } else { - env.identifiers.set(privateName, { + privateEnv.identifiers.set(privateName, { kind: PrivateIdentifierKind.Accessor, getterName: undefined, setterName, @@ -1526,18 +1804,18 @@ namespace ts { } function accessPrivateIdentifier(name: PrivateIdentifier) { - if (currentPrivateIdentifierEnvironment) { - const info = currentPrivateIdentifierEnvironment.identifiers.get(name.escapedText); + if (currentClassLexicalEnvironment?.privateIdentifierEnvironment) { + const info = currentClassLexicalEnvironment.privateIdentifierEnvironment.identifiers.get(name.escapedText); if (info) { return info; } } - for (let i = privateIdentifierEnvironmentStack.length - 1; i >= 0; --i) { - const env = privateIdentifierEnvironmentStack[i]; + for (let i = classLexicalEnvironmentStack.length - 1; i >= 0; --i) { + const env = classLexicalEnvironmentStack[i]; if (!env) { continue; } - const info = env.identifiers.get(name.escapedText); + const info = env.privateIdentifierEnvironment?.identifiers.get(name.escapedText); if (info) { return info; } @@ -1545,7 +1823,6 @@ namespace ts { return undefined; } - function wrapPrivateIdentifierForDestructuringTarget(node: PrivateIdentifierPropertyAccessExpression) { const parameter = factory.getGeneratedNameForNode(node); const info = accessPrivateIdentifier(node.name); @@ -1557,89 +1834,134 @@ namespace ts { // differently inside the function. if (isThisProperty(node) || isSuperProperty(node) || !isSimpleCopiableExpression(node.expression)) { receiver = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true); - getPendingExpressions().push(factory.createBinaryExpression(receiver, SyntaxKind.EqualsToken, node.expression)); - } - return factory.createPropertyAccessExpression( - // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560) - factory.createParenthesizedExpression( - factory.createObjectLiteralExpression([ - factory.createSetAccessorDeclaration( - /*decorators*/ undefined, - /*modifiers*/ undefined, - "value", - [factory.createParameterDeclaration( - /*decorators*/ undefined, - /*modifiers*/ undefined, - /*dotDotDotToken*/ undefined, - parameter, - /*questionToken*/ undefined, - /*type*/ undefined, - /*initializer*/ undefined - )], - factory.createBlock( - [factory.createExpressionStatement( - createPrivateIdentifierAssignment( - info, - receiver, - parameter, - SyntaxKind.EqualsToken - ) - )] - ) - ) - ]) - ), - "value" + getPendingExpressions().push(factory.createBinaryExpression(receiver, SyntaxKind.EqualsToken, visitNode(node.expression, visitor, isExpression))); + } + return factory.createAssignmentTargetWrapper( + parameter, + createPrivateIdentifierAssignment( + info, + receiver, + parameter, + SyntaxKind.EqualsToken + ) ); } function visitArrayAssignmentTarget(node: BindingOrAssignmentElement) { const target = getTargetOfBindingOrAssignmentElement(node); - if (target && isPrivateIdentifierPropertyAccessExpression(target)) { - const wrapped = wrapPrivateIdentifierForDestructuringTarget(target); - if (isAssignmentExpression(node)) { - return factory.updateBinaryExpression( - node, - wrapped, - node.operatorToken, - visitNode(node.right, visitor, isExpression) - ); + if (target) { + let wrapped: LeftHandSideExpression | undefined; + if (isPrivateIdentifierPropertyAccessExpression(target)) { + wrapped = wrapPrivateIdentifierForDestructuringTarget(target); } - else if (isSpreadElement(node)) { - return factory.updateSpreadElement(node, wrapped); + else if (shouldTransformSuperInStaticFields && + isSuperProperty(target) && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment) { + const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; + if (facts & ClassFacts.ClassWasDecorated) { + wrapped = visitInvalidSuperProperty(target); + } + else if (classConstructor && superClassReference) { + const name = + isElementAccessExpression(target) ? visitNode(target.argumentExpression, visitor, isExpression) : + isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) : + undefined; + if (name) { + const temp = factory.createTempVariable(/*recordTempVariable*/ undefined); + wrapped = factory.createAssignmentTargetWrapper( + temp, + factory.createReflectSetCall( + superClassReference, + name, + temp, + classConstructor, + ) + ); + } + } } - else { - return wrapped; + if (wrapped) { + if (isAssignmentExpression(node)) { + return factory.updateBinaryExpression( + node, + wrapped, + node.operatorToken, + visitNode(node.right, visitor, isExpression) + ); + } + else if (isSpreadElement(node)) { + return factory.updateSpreadElement(node, wrapped); + } + else { + return wrapped; + } } } return visitNode(node, visitorDestructuringTarget); } function visitObjectAssignmentTarget(node: ObjectLiteralElementLike) { - if (isPropertyAssignment(node)) { + if (isObjectBindingOrAssignmentElement(node) && !isShorthandPropertyAssignment(node)) { const target = getTargetOfBindingOrAssignmentElement(node); - if (target && isPrivateIdentifierPropertyAccessExpression(target)) { + let wrapped: LeftHandSideExpression | undefined; + if (target) { + if (isPrivateIdentifierPropertyAccessExpression(target)) { + wrapped = wrapPrivateIdentifierForDestructuringTarget(target); + } + else if (shouldTransformSuperInStaticFields && + isSuperProperty(target) && + currentStaticPropertyDeclaration && + currentClassLexicalEnvironment) { + const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; + if (facts & ClassFacts.ClassWasDecorated) { + wrapped = visitInvalidSuperProperty(target); + } + else if (classConstructor && superClassReference) { + const name = + isElementAccessExpression(target) ? visitNode(target.argumentExpression, visitor, isExpression) : + isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) : + undefined; + if (name) { + const temp = factory.createTempVariable(/*recordTempVariable*/ undefined); + wrapped = factory.createAssignmentTargetWrapper( + temp, + factory.createReflectSetCall( + superClassReference, + name, + temp, + classConstructor, + ) + ); + } + } + } + } + if (isPropertyAssignment(node)) { const initializer = getInitializerOfBindingOrAssignmentElement(node); - const wrapped = wrapPrivateIdentifierForDestructuringTarget(target); return factory.updatePropertyAssignment( node, - visitNode(node.name, visitor), - initializer ? factory.createAssignment(wrapped, visitNode(initializer, visitor)) : wrapped, + visitNode(node.name, visitor, isPropertyName), + wrapped ? + initializer ? factory.createAssignment(wrapped, visitNode(initializer, visitor)) : wrapped : + visitNode(node.initializer, visitorDestructuringTarget, isExpression) ); } - return factory.updatePropertyAssignment( - node, - visitNode(node.name, visitor), - visitNode(node.initializer, visitorDestructuringTarget) - ); + if (isSpreadAssignment(node)) { + return factory.updateSpreadAssignment( + node, + wrapped || visitNode(node.expression, visitorDestructuringTarget, isExpression) + ); + } + Debug.assert(wrapped === undefined, "Should not have generated a wrapped target"); } return visitNode(node, visitor); } - function visitAssignmentPattern(node: AssignmentPattern) { if (isArrayLiteralExpression(node)) { // Transforms private names in destructuring assignment array bindings. + // Transforms SuperProperty assignments in destructuring assignment array bindings in static initializers. // // Source: // ([ this.#myProp ] = [ "hello" ]); @@ -1653,6 +1975,7 @@ namespace ts { } else { // Transforms private names in destructuring assignment object bindings. + // Transforms SuperProperty assignments in destructuring assignment object bindings in static initializers. // // Source: // ({ stringProperty: this.#myProp } = { stringProperty: "hello" }); diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index 5235b9330ac8a..c1b4eabc81bac 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -169,6 +169,8 @@ namespace ts { ForStatement = 1 << 11, // Enclosing block-scoped container is a ForStatement ForInOrForOfStatement = 1 << 12, // Enclosing block-scoped container is a ForInStatement or ForOfStatement ConstructorWithCapturedSuper = 1 << 13, // Enclosed in a constructor that captures 'this' for use with 'super' + StaticInitializer = 1 << 14, // Enclosed in a static initializer + // NOTE: do not add more ancestor flags without also updating AncestorFactsMask below. // NOTE: when adding a new ancestor flag, be sure to update the subtree flags below. @@ -176,7 +178,7 @@ namespace ts { // Ancestor masks // - AncestorFactsMask = (ConstructorWithCapturedSuper << 1) - 1, + AncestorFactsMask = (StaticInitializer << 1) - 1, // We are always in *some* kind of block scope, but only specific block-scope containers are // top-level or Blocks. @@ -189,7 +191,7 @@ namespace ts { // Functions, methods, and accessors are both new lexical scopes and new block scopes. FunctionIncludes = Function | TopLevel, - FunctionExcludes = BlockScopeExcludes & ~TopLevel | ArrowFunction | AsyncFunctionBody | CapturesThis | NonStaticClassElement | ConstructorWithCapturedSuper | IterationContainer, + FunctionExcludes = BlockScopeExcludes & ~TopLevel | ArrowFunction | AsyncFunctionBody | CapturesThis | NonStaticClassElement | ConstructorWithCapturedSuper | IterationContainer | StaticInitializer, AsyncFunctionBodyIncludes = FunctionIncludes | AsyncFunctionBody, AsyncFunctionBodyExcludes = FunctionExcludes & ~NonStaticClassElement, @@ -225,12 +227,15 @@ namespace ts { IterationStatementBlockIncludes = IterationStatementBlock, IterationStatementBlockExcludes = BlockScopeExcludes, + StaticInitializerIncludes = FunctionIncludes | StaticInitializer, + StaticInitializerExcludes = FunctionExcludes, + // // Subtree facts // - NewTarget = 1 << 14, // Contains a 'new.target' meta-property - CapturedLexicalThis = 1 << 15, // Contains a lexical `this` reference captured by an arrow function. + NewTarget = 1 << 15, // Contains a 'new.target' meta-property + CapturedLexicalThis = 1 << 16, // Contains a lexical `this` reference captured by an arrow function. // // Subtree masks @@ -377,6 +382,23 @@ namespace ts { return shouldVisitNode(node) ? visitorWorker(node, /*expressionResultIsUnused*/ true) : node; } + function classWrapperStatementVisitor(node: Node): VisitResult { + if (shouldVisitNode(node)) { + const original = getOriginalNode(node); + if (isPropertyDeclaration(original) && hasStaticModifier(original)) { + const ancestorFacts = enterSubtree( + HierarchyFacts.StaticInitializerExcludes, + HierarchyFacts.StaticInitializerIncludes + ); + const result = visitorWorker(node, /*expressionResultIsUnused*/ false); + exitSubtree(ancestorFacts, HierarchyFacts.FunctionSubtreeExcludes, HierarchyFacts.None); + return result; + } + return visitorWorker(node, /*expressionResultIsUnused*/ false); + } + return node; + } + function callExpressionVisitor(node: Node): VisitResult { if (node.kind === SyntaxKind.SuperKeyword) { return visitSuperKeyword(/*isExpressionOfCall*/ true); @@ -602,7 +624,7 @@ namespace ts { } function visitThisKeyword(node: Node): Node { - if (hierarchyFacts & HierarchyFacts.ArrowFunction) { + if (hierarchyFacts & HierarchyFacts.ArrowFunction && !(hierarchyFacts & HierarchyFacts.StaticInitializer)) { hierarchyFacts |= HierarchyFacts.CapturedLexicalThis; } if (convertedLoopState) { @@ -1749,7 +1771,7 @@ namespace ts { * @param node An ArrowFunction node. */ function visitArrowFunction(node: ArrowFunction) { - if (node.transformFlags & TransformFlags.ContainsLexicalThis) { + if (node.transformFlags & TransformFlags.ContainsLexicalThis && !(hierarchyFacts & HierarchyFacts.StaticInitializer)) { hierarchyFacts |= HierarchyFacts.CapturedLexicalThis; } @@ -1769,10 +1791,6 @@ namespace ts { setOriginalNode(func, node); setEmitFlags(func, EmitFlags.CapturesThis); - if (hierarchyFacts & HierarchyFacts.CapturedLexicalThis) { - enableSubstitutionsForCapturedThis(); - } - // If an arrow function contains exitSubtree(ancestorFacts, HierarchyFacts.ArrowFunctionSubtreeExcludes, HierarchyFacts.None); @@ -3687,7 +3705,7 @@ namespace ts { // visit the class body statements outside of any converted loop body. const savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; - const bodyStatements = visitNodes(body.statements, visitor, isStatement); + const bodyStatements = visitNodes(body.statements, classWrapperStatementVisitor, isStatement); convertedLoopState = savedConvertedLoopState; const classStatements = filter(bodyStatements, isVariableStatementWithInitializer); @@ -3714,7 +3732,10 @@ namespace ts { // return C; // }()) // - const aliasAssignment = tryCast(initializer, isAssignmentExpression); + let aliasAssignment = tryCast(initializer, isAssignmentExpression); + if (!aliasAssignment && isBinaryExpression(initializer) && initializer.operatorToken.kind === SyntaxKind.CommaToken) { + aliasAssignment = tryCast(initializer.left, isAssignmentExpression); + } // The underlying call (3) is another IIFE that may contain a '_super' argument. const call = cast(aliasAssignment ? skipOuterExpressions(aliasAssignment.right) : initializer, isCallExpression); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index fad23c1eb1a16..a20b234f867ad 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -7536,10 +7536,28 @@ namespace ts { /* @internal */ createFunctionCallCall(target: Expression, thisArg: Expression, argumentsList: readonly Expression[]): CallExpression; /* @internal */ createFunctionApplyCall(target: Expression, thisArg: Expression, argumentsExpression: Expression): CallExpression; /* @internal */ createObjectDefinePropertyCall(target: Expression, propertyName: string | Expression, attributes: Expression): CallExpression; + /* @internal */ createReflectGetCall(target: Expression, propertyKey: Expression, receiver?: Expression): CallExpression; + /* @internal */ createReflectSetCall(target: Expression, propertyKey: Expression, value: Expression, receiver?: Expression): CallExpression; /* @internal */ createPropertyDescriptor(attributes: PropertyDescriptorAttributes, singleLine?: boolean): ObjectLiteralExpression; /* @internal */ createArraySliceCall(array: Expression, start?: number | Expression): CallExpression; /* @internal */ createArrayConcatCall(array: Expression, values: readonly Expression[]): CallExpression; /* @internal */ createCallBinding(expression: Expression, recordTempVariable: (temp: Identifier) => void, languageVersion?: ScriptTarget, cacheIdentifiers?: boolean): CallBinding; + /** + * Wraps an expression that cannot be an assignment target in an expression that can be. + * + * Given a `paramName` of `_a`: + * ``` + * Reflect.set(obj, "x", _a) + * ``` + * Becomes + * ```ts + * ({ set value(_a) { Reflect.set(obj, "x", _a); } }).value + * ``` + * + * @param paramName + * @param expression + */ + /* @internal */ createAssignmentTargetWrapper(paramName: Identifier, expression: Expression): LeftHandSideExpression; /* @internal */ inlineExpressions(expressions: readonly Expression[]): Expression; /** * Gets the internal name of a declaration. This is primarily used for declarations that can be diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index b156908537953..56d87f75c6187 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1414,6 +1414,18 @@ namespace ts { return false; } + /* @internal */ + export function isObjectBindingOrAssignmentElement(node: Node): node is ObjectBindingOrAssignmentElement { + switch (node.kind) { + case SyntaxKind.BindingElement: + case SyntaxKind.PropertyAssignment: // AssignmentProperty + case SyntaxKind.ShorthandPropertyAssignment: // AssignmentProperty + case SyntaxKind.SpreadAssignment: // AssignmentRestProperty + return true; + } + return false; + } + /** * Determines whether a node is an ArrayBindingOrAssignmentPattern */ diff --git a/tests/baselines/reference/asyncArrowInClassES5.js b/tests/baselines/reference/asyncArrowInClassES5.js index f0204f7319bda..08d9e0fe46e3d 100644 --- a/tests/baselines/reference/asyncArrowInClassES5.js +++ b/tests/baselines/reference/asyncArrowInClassES5.js @@ -10,11 +10,12 @@ class Test { //// [asyncArrowInClassES5.js] // https://github.com/Microsoft/TypeScript/issues/16924 // Should capture `this` -var _this = this; var Test = /** @class */ (function () { function Test() { } - Test.member = function (x) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + var _a; + _a = Test; + Test.member = function (x) { return __awaiter(_a, void 0, void 0, function () { return __generator(_a, function (_b) { return [2 /*return*/]; }); }); }; return Test; diff --git a/tests/baselines/reference/inferringClassMembersFromAssignments.js b/tests/baselines/reference/inferringClassMembersFromAssignments.js index f46fe6fdc305c..b3830e6f2c7eb 100644 --- a/tests/baselines/reference/inferringClassMembersFromAssignments.js +++ b/tests/baselines/reference/inferringClassMembersFromAssignments.js @@ -224,12 +224,14 @@ var C = /** @class */ (function () { this.inStaticSetter = "string"; } }; + var _a; + _a = C; C.prop = function () { if (Math.random()) { - C.inStaticPropertyDeclaration = 0; + _a.inStaticPropertyDeclaration = 0; } else { - C.inStaticPropertyDeclaration = "string"; + _a.inStaticPropertyDeclaration = "string"; } }; return C; diff --git a/tests/baselines/reference/privateNameFieldUnaryMutation.js b/tests/baselines/reference/privateNameFieldUnaryMutation.js index 5ff58fdd5d68a..8d16a10861b38 100644 --- a/tests/baselines/reference/privateNameFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameFieldUnaryMutation.js @@ -44,31 +44,31 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( var _C_test; class C { constructor() { - var _a, _b; + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; _C_test.set(this, 24); - __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test, "f") + 1, "f"); - __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test, "f") - 1, "f"); - __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test, "f") + 1, "f"); - __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test, "f") - 1, "f"); - const a = (__classPrivateFieldSet(this, _C_test, (_a = +__classPrivateFieldGet(this, _C_test, "f")) + 1, "f"), _a); - const b = (__classPrivateFieldSet(this, _C_test, (_b = +__classPrivateFieldGet(this, _C_test, "f")) - 1, "f"), _b); - const c = __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test, "f") + 1, "f"); - const d = __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test, "f") - 1, "f"); - for (__classPrivateFieldSet(this, _C_test, 0, "f"); __classPrivateFieldGet(this, _C_test, "f") < 10; __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test, "f") + 1, "f")) { } - for (__classPrivateFieldSet(this, _C_test, 0, "f"); __classPrivateFieldGet(this, _C_test, "f") < 10; __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test, "f") + 1, "f")) { } + __classPrivateFieldSet(this, _C_test, (_a = __classPrivateFieldGet(this, _C_test, "f"), _a++, _a), "f"); + __classPrivateFieldSet(this, _C_test, (_b = __classPrivateFieldGet(this, _C_test, "f"), _b--, _b), "f"); + __classPrivateFieldSet(this, _C_test, (_c = __classPrivateFieldGet(this, _C_test, "f"), ++_c), "f"); + __classPrivateFieldSet(this, _C_test, (_d = __classPrivateFieldGet(this, _C_test, "f"), --_d), "f"); + const a = (__classPrivateFieldSet(this, _C_test, (_f = __classPrivateFieldGet(this, _C_test, "f"), _e = _f++, _f), "f"), _e); + const b = (__classPrivateFieldSet(this, _C_test, (_h = __classPrivateFieldGet(this, _C_test, "f"), _g = _h--, _h), "f"), _g); + const c = __classPrivateFieldSet(this, _C_test, (_j = __classPrivateFieldGet(this, _C_test, "f"), ++_j), "f"); + const d = __classPrivateFieldSet(this, _C_test, (_k = __classPrivateFieldGet(this, _C_test, "f"), --_k), "f"); + for (__classPrivateFieldSet(this, _C_test, 0, "f"); __classPrivateFieldGet(this, _C_test, "f") < 10; __classPrivateFieldSet(this, _C_test, (_l = __classPrivateFieldGet(this, _C_test, "f"), ++_l), "f")) { } + for (__classPrivateFieldSet(this, _C_test, 0, "f"); __classPrivateFieldGet(this, _C_test, "f") < 10; __classPrivateFieldSet(this, _C_test, (_m = __classPrivateFieldGet(this, _C_test, "f"), _m++, _m), "f")) { } } test() { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; - __classPrivateFieldSet(_a = this.getInstance(), _C_test, +__classPrivateFieldGet(_a, _C_test, "f") + 1, "f"); - __classPrivateFieldSet(_b = this.getInstance(), _C_test, +__classPrivateFieldGet(_b, _C_test, "f") - 1, "f"); - __classPrivateFieldSet(_c = this.getInstance(), _C_test, +__classPrivateFieldGet(_c, _C_test, "f") + 1, "f"); - __classPrivateFieldSet(_d = this.getInstance(), _C_test, +__classPrivateFieldGet(_d, _C_test, "f") - 1, "f"); - const a = (__classPrivateFieldSet(_e = this.getInstance(), _C_test, (_f = +__classPrivateFieldGet(_e, _C_test, "f")) + 1, "f"), _f); - const b = (__classPrivateFieldSet(_g = this.getInstance(), _C_test, (_h = +__classPrivateFieldGet(_g, _C_test, "f")) - 1, "f"), _h); - const c = __classPrivateFieldSet(_j = this.getInstance(), _C_test, +__classPrivateFieldGet(_j, _C_test, "f") + 1, "f"); - const d = __classPrivateFieldSet(_k = this.getInstance(), _C_test, +__classPrivateFieldGet(_k, _C_test, "f") - 1, "f"); - for (__classPrivateFieldSet(this.getInstance(), _C_test, 0, "f"); __classPrivateFieldGet(this.getInstance(), _C_test, "f") < 10; __classPrivateFieldSet(_l = this.getInstance(), _C_test, +__classPrivateFieldGet(_l, _C_test, "f") + 1, "f")) { } - for (__classPrivateFieldSet(this.getInstance(), _C_test, 0, "f"); __classPrivateFieldGet(this.getInstance(), _C_test, "f") < 10; __classPrivateFieldSet(_m = this.getInstance(), _C_test, +__classPrivateFieldGet(_m, _C_test, "f") + 1, "f")) { } + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x; + __classPrivateFieldSet(_a = this.getInstance(), _C_test, (_b = __classPrivateFieldGet(_a, _C_test, "f"), _b++, _b), "f"); + __classPrivateFieldSet(_c = this.getInstance(), _C_test, (_d = __classPrivateFieldGet(_c, _C_test, "f"), _d--, _d), "f"); + __classPrivateFieldSet(_e = this.getInstance(), _C_test, (_f = __classPrivateFieldGet(_e, _C_test, "f"), ++_f), "f"); + __classPrivateFieldSet(_g = this.getInstance(), _C_test, (_h = __classPrivateFieldGet(_g, _C_test, "f"), --_h), "f"); + const a = (__classPrivateFieldSet(_j = this.getInstance(), _C_test, (_l = __classPrivateFieldGet(_j, _C_test, "f"), _k = _l++, _l), "f"), _k); + const b = (__classPrivateFieldSet(_m = this.getInstance(), _C_test, (_p = __classPrivateFieldGet(_m, _C_test, "f"), _o = _p--, _p), "f"), _o); + const c = __classPrivateFieldSet(_q = this.getInstance(), _C_test, (_r = __classPrivateFieldGet(_q, _C_test, "f"), ++_r), "f"); + const d = __classPrivateFieldSet(_s = this.getInstance(), _C_test, (_t = __classPrivateFieldGet(_s, _C_test, "f"), --_t), "f"); + for (__classPrivateFieldSet(this.getInstance(), _C_test, 0, "f"); __classPrivateFieldGet(this.getInstance(), _C_test, "f") < 10; __classPrivateFieldSet(_u = this.getInstance(), _C_test, (_v = __classPrivateFieldGet(_u, _C_test, "f"), ++_v), "f")) { } + for (__classPrivateFieldSet(this.getInstance(), _C_test, 0, "f"); __classPrivateFieldGet(this.getInstance(), _C_test, "f") < 10; __classPrivateFieldSet(_w = this.getInstance(), _C_test, (_x = __classPrivateFieldGet(_w, _C_test, "f"), _x++, _x), "f")) { } } getInstance() { return new C(); } } diff --git a/tests/baselines/reference/privateNameMethodAssignment.js b/tests/baselines/reference/privateNameMethodAssignment.js index c33e3406f9d9b..08b4bb806bd1b 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.js +++ b/tests/baselines/reference/privateNameMethodAssignment.js @@ -27,14 +27,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _A3_instances, _A3_method; class A3 { constructor(a, b) { - var _a, _b; + var _a, _b, _c; _A3_instances.add(this); __classPrivateFieldSet(this, _A3_instances, () => { }, "m"); // Error, not writable __classPrivateFieldSet(a, _A3_instances, () => { }, "m"); // Error, not writable __classPrivateFieldSet(b, _A3_instances, () => { }, "m"); //Error, not writable (_a = this, { x: ({ set value(_b) { __classPrivateFieldSet(_a, _A3_instances, _b, "m"); } }).value } = { x: () => { } }); //Error, not writable let x = __classPrivateFieldGet(this, _A3_instances, "m", _A3_method); - __classPrivateFieldSet(_b = b, _A3_instances, +__classPrivateFieldGet(_b, _A3_instances, "m", _A3_method) + 1, "m"); //Error, not writable + __classPrivateFieldSet(_b = b, _A3_instances, (_c = __classPrivateFieldGet(_b, _A3_instances, "m", _A3_method), _c++, _c), "m"); //Error, not writable } ; } diff --git a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js index 810c3df10b50c..b112c14c46656 100644 --- a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js @@ -44,30 +44,30 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( var _a, _C_test; class C { constructor() { - var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; - __classPrivateFieldSet(_b = C, _a, +__classPrivateFieldGet(_b, _a, "f", _C_test) + 1, "f", _C_test); - __classPrivateFieldSet(_c = C, _a, +__classPrivateFieldGet(_c, _a, "f", _C_test) - 1, "f", _C_test); - __classPrivateFieldSet(_d = C, _a, +__classPrivateFieldGet(_d, _a, "f", _C_test) + 1, "f", _C_test); - __classPrivateFieldSet(_e = C, _a, +__classPrivateFieldGet(_e, _a, "f", _C_test) - 1, "f", _C_test); - const a = (__classPrivateFieldSet(_f = C, _a, (_g = +__classPrivateFieldGet(_f, _a, "f", _C_test)) + 1, "f", _C_test), _g); - const b = (__classPrivateFieldSet(_h = C, _a, (_j = +__classPrivateFieldGet(_h, _a, "f", _C_test)) - 1, "f", _C_test), _j); - const c = __classPrivateFieldSet(_k = C, _a, +__classPrivateFieldGet(_k, _a, "f", _C_test) + 1, "f", _C_test); - const d = __classPrivateFieldSet(_l = C, _a, +__classPrivateFieldGet(_l, _a, "f", _C_test) - 1, "f", _C_test); - for (__classPrivateFieldSet(C, _a, 0, "f", _C_test); __classPrivateFieldGet(C, _a, "f", _C_test) < 10; __classPrivateFieldSet(_m = C, _a, +__classPrivateFieldGet(_m, _a, "f", _C_test) + 1, "f", _C_test)) { } - for (__classPrivateFieldSet(C, _a, 0, "f", _C_test); __classPrivateFieldGet(C, _a, "f", _C_test) < 10; __classPrivateFieldSet(_o = C, _a, +__classPrivateFieldGet(_o, _a, "f", _C_test) + 1, "f", _C_test)) { } + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; + __classPrivateFieldSet(_b = C, _a, (_c = __classPrivateFieldGet(_b, _a, "f", _C_test), _c++, _c), "f", _C_test); + __classPrivateFieldSet(_d = C, _a, (_e = __classPrivateFieldGet(_d, _a, "f", _C_test), _e--, _e), "f", _C_test); + __classPrivateFieldSet(_f = C, _a, (_g = __classPrivateFieldGet(_f, _a, "f", _C_test), ++_g), "f", _C_test); + __classPrivateFieldSet(_h = C, _a, (_j = __classPrivateFieldGet(_h, _a, "f", _C_test), --_j), "f", _C_test); + const a = (__classPrivateFieldSet(_k = C, _a, (_m = __classPrivateFieldGet(_k, _a, "f", _C_test), _l = _m++, _m), "f", _C_test), _l); + const b = (__classPrivateFieldSet(_o = C, _a, (_q = __classPrivateFieldGet(_o, _a, "f", _C_test), _p = _q--, _q), "f", _C_test), _p); + const c = __classPrivateFieldSet(_r = C, _a, (_s = __classPrivateFieldGet(_r, _a, "f", _C_test), ++_s), "f", _C_test); + const d = __classPrivateFieldSet(_t = C, _a, (_u = __classPrivateFieldGet(_t, _a, "f", _C_test), --_u), "f", _C_test); + for (__classPrivateFieldSet(C, _a, 0, "f", _C_test); __classPrivateFieldGet(C, _a, "f", _C_test) < 10; __classPrivateFieldSet(_v = C, _a, (_w = __classPrivateFieldGet(_v, _a, "f", _C_test), ++_w), "f", _C_test)) { } + for (__classPrivateFieldSet(C, _a, 0, "f", _C_test); __classPrivateFieldGet(C, _a, "f", _C_test) < 10; __classPrivateFieldSet(_x = C, _a, (_y = __classPrivateFieldGet(_x, _a, "f", _C_test), _y++, _y), "f", _C_test)) { } } test() { - var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; - __classPrivateFieldSet(_b = this.getClass(), _a, +__classPrivateFieldGet(_b, _a, "f", _C_test) + 1, "f", _C_test); - __classPrivateFieldSet(_c = this.getClass(), _a, +__classPrivateFieldGet(_c, _a, "f", _C_test) - 1, "f", _C_test); - __classPrivateFieldSet(_d = this.getClass(), _a, +__classPrivateFieldGet(_d, _a, "f", _C_test) + 1, "f", _C_test); - __classPrivateFieldSet(_e = this.getClass(), _a, +__classPrivateFieldGet(_e, _a, "f", _C_test) - 1, "f", _C_test); - const a = (__classPrivateFieldSet(_f = this.getClass(), _a, (_g = +__classPrivateFieldGet(_f, _a, "f", _C_test)) + 1, "f", _C_test), _g); - const b = (__classPrivateFieldSet(_h = this.getClass(), _a, (_j = +__classPrivateFieldGet(_h, _a, "f", _C_test)) - 1, "f", _C_test), _j); - const c = __classPrivateFieldSet(_k = this.getClass(), _a, +__classPrivateFieldGet(_k, _a, "f", _C_test) + 1, "f", _C_test); - const d = __classPrivateFieldSet(_l = this.getClass(), _a, +__classPrivateFieldGet(_l, _a, "f", _C_test) - 1, "f", _C_test); - for (__classPrivateFieldSet(this.getClass(), _a, 0, "f", _C_test); __classPrivateFieldGet(this.getClass(), _a, "f", _C_test) < 10; __classPrivateFieldSet(_m = this.getClass(), _a, +__classPrivateFieldGet(_m, _a, "f", _C_test) + 1, "f", _C_test)) { } - for (__classPrivateFieldSet(this.getClass(), _a, 0, "f", _C_test); __classPrivateFieldGet(this.getClass(), _a, "f", _C_test) < 10; __classPrivateFieldSet(_o = this.getClass(), _a, +__classPrivateFieldGet(_o, _a, "f", _C_test) + 1, "f", _C_test)) { } + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; + __classPrivateFieldSet(_b = this.getClass(), _a, (_c = __classPrivateFieldGet(_b, _a, "f", _C_test), _c++, _c), "f", _C_test); + __classPrivateFieldSet(_d = this.getClass(), _a, (_e = __classPrivateFieldGet(_d, _a, "f", _C_test), _e--, _e), "f", _C_test); + __classPrivateFieldSet(_f = this.getClass(), _a, (_g = __classPrivateFieldGet(_f, _a, "f", _C_test), ++_g), "f", _C_test); + __classPrivateFieldSet(_h = this.getClass(), _a, (_j = __classPrivateFieldGet(_h, _a, "f", _C_test), --_j), "f", _C_test); + const a = (__classPrivateFieldSet(_k = this.getClass(), _a, (_m = __classPrivateFieldGet(_k, _a, "f", _C_test), _l = _m++, _m), "f", _C_test), _l); + const b = (__classPrivateFieldSet(_o = this.getClass(), _a, (_q = __classPrivateFieldGet(_o, _a, "f", _C_test), _p = _q--, _q), "f", _C_test), _p); + const c = __classPrivateFieldSet(_r = this.getClass(), _a, (_s = __classPrivateFieldGet(_r, _a, "f", _C_test), ++_s), "f", _C_test); + const d = __classPrivateFieldSet(_t = this.getClass(), _a, (_u = __classPrivateFieldGet(_t, _a, "f", _C_test), --_u), "f", _C_test); + for (__classPrivateFieldSet(this.getClass(), _a, 0, "f", _C_test); __classPrivateFieldGet(this.getClass(), _a, "f", _C_test) < 10; __classPrivateFieldSet(_v = this.getClass(), _a, (_w = __classPrivateFieldGet(_v, _a, "f", _C_test), ++_w), "f", _C_test)) { } + for (__classPrivateFieldSet(this.getClass(), _a, 0, "f", _C_test); __classPrivateFieldGet(this.getClass(), _a, "f", _C_test) < 10; __classPrivateFieldSet(_x = this.getClass(), _a, (_y = __classPrivateFieldGet(_x, _a, "f", _C_test), _y++, _y), "f", _C_test)) { } } getClass() { return C; } } diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.js b/tests/baselines/reference/privateNameStaticMethodAssignment.js index 48b6df46c24c8..aad92bf3205b6 100644 --- a/tests/baselines/reference/privateNameStaticMethodAssignment.js +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.js @@ -27,13 +27,13 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _a, _A3_method; class A3 { constructor(a, b) { - var _b; + var _b, _c; __classPrivateFieldSet(A3, _a, () => { }, "m"); // Error, not writable __classPrivateFieldSet(a, _a, () => { }, "m"); // Error, not writable __classPrivateFieldSet(b, _a, () => { }, "m"); //Error, not writable ({ x: ({ set value(_b) { __classPrivateFieldSet(A3, _a, _b, "m"); } }).value } = { x: () => { } }); //Error, not writable let x = __classPrivateFieldGet(A3, _a, "m", _A3_method); - __classPrivateFieldSet(_b = b, _a, +__classPrivateFieldGet(_b, _a, "m", _A3_method) + 1, "m"); //Error, not writable + __classPrivateFieldSet(_b = b, _a, (_c = __classPrivateFieldGet(_b, _a, "m", _A3_method), _c++, _c), "m"); //Error, not writable } ; } diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.js b/tests/baselines/reference/privateWriteOnlyAccessorRead.js index 8761f3f667fa1..1b822605639a4 100644 --- a/tests/baselines/reference/privateWriteOnlyAccessorRead.js +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.js @@ -63,20 +63,20 @@ class Test { _Test_instances.add(this); } m() { - var _a, _b, _c; + var _a, _b, _c, _d; const foo = { bar: 1 }; console.log(__classPrivateFieldGet(this, _Test_instances, "a")); // error __classPrivateFieldSet(this, _Test_instances, { foo }, "a", _Test_value_set); // ok __classPrivateFieldSet(this, _Test_instances, { foo }, "a", _Test_value_set); // ok __classPrivateFieldGet(this, _Test_instances, "a").foo = foo; // error - (_a = this, { o: ({ set value(_d) { __classPrivateFieldSet(_a, _Test_instances, _d, "a", _Test_value_set); } }).value } = { o: { foo } }); //ok - (__classPrivateFieldGet(this, _Test_instances, "a") = __rest({ foo }, [])); //ok + (_a = this, { o: ({ set value(_e) { __classPrivateFieldSet(_a, _Test_instances, _e, "a", _Test_value_set); } }).value } = { o: { foo } }); //ok + (_b = this, ({ set value(_e) { __classPrivateFieldSet(_b, _Test_instances, _e, "a", _Test_value_set); } }).value = __rest({ foo }, [])); //ok ({ foo: __classPrivateFieldGet(this, _Test_instances, "a").foo } = { foo }); //error ({ foo: Object.assign({}, __classPrivateFieldGet(this, _Test_instances, "a").foo), } = { foo }); //error let r = { o: __classPrivateFieldGet(this, _Test_instances, "a") }; //error - _b = this, _c = this, [({ set value(_d) { __classPrivateFieldSet(_b, _Test_instances, _d, "a", _Test_valueOne_set); } }).value, ...({ set value(_d) { __classPrivateFieldSet(_c, _Test_instances, _d, "a", _Test_valueRest_set); } }).value] = [1, 2, 3]; + _c = this, _d = this, [({ set value(_e) { __classPrivateFieldSet(_c, _Test_instances, _e, "a", _Test_valueOne_set); } }).value, ...({ set value(_e) { __classPrivateFieldSet(_d, _Test_instances, _e, "a", _Test_valueRest_set); } }).value] = [1, 2, 3]; let arr = [ __classPrivateFieldGet(this, _Test_instances, "a"), ...__classPrivateFieldGet(this, _Test_instances, "a") diff --git a/tests/baselines/reference/sourceMapValidationDecorators.js.map b/tests/baselines/reference/sourceMapValidationDecorators.js.map index 5b5471bc7bf62..e2312dd2f3977 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.js.map +++ b/tests/baselines/reference/sourceMapValidationDecorators.js.map @@ -1,3 +1,3 @@ //// [sourceMapValidationDecorators.js.map] -{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA;IACI,iBAGS,QAAgB;QAIvB,WAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,0BAAc;;QAJP,aAAQ,GAAR,QAAQ,CAAQ;IAKzB,CAAC;IAID,uBAAK,GAAL;QACI,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5C,CAAC;IAUO,oBAAE,GAAV,UAGE,CAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,sBAAI,8BAAS;aAAb;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAGE,SAAiB;YACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC9B,CAAC;;;OAPA;IAbc,UAAE,GAAW,EAAE,CAAC;IAV/B;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;wCAGtB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;sCACL;IAMlB;QACG,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;qCAGzB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;QAMpB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;4CAJzB;IAbD;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;6BACQ;IAvB7B,OAAO;QAFZ,eAAe;QACf,eAAe,CAAC,EAAE,CAAC;QAGb,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAGvB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;OAPxB,OAAO,CA4CZ;IAAD,cAAC;CAAA,AA5CD,IA4CC"} -//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCnZhciBHcmVldGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgew0KICAgIGZ1bmN0aW9uIEdyZWV0ZXIoZ3JlZXRpbmcpIHsNCiAgICAgICAgdmFyIGIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsNCiAgICAgICAgICAgIGJbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBHcmVldGVyLnByb3RvdHlwZS5ncmVldCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH07DQogICAgR3JlZXRlci5wcm90b3R5cGUuZm4gPSBmdW5jdGlvbiAoeCkgew0KICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICB9Ow0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIHsNCiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICAgICAgfSwNCiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZ3JlZXRpbmdzKSB7DQogICAgICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgICAgICB9LA0KICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwNCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlDQogICAgfSk7DQogICAgR3JlZXRlci54MSA9IDEwOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig0MCkNCiAgICBdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0IiwgbnVsbCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IyKDUwKQ0KICAgIF0sIEdyZWV0ZXIucHJvdG90eXBlLCAieCIsIHZvaWQgMCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig3MCkpDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJmbiIsIG51bGwpOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig4MCksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig5MCkpDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldGluZ3MiLCBudWxsKTsNCiAgICBfX2RlY29yYXRlKFsNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjIoNjApDQogICAgXSwgR3JlZXRlciwgIngxIiwgdm9pZCAwKTsNCiAgICBHcmVldGVyID0gX19kZWNvcmF0ZShbDQogICAgICAgIENsYXNzRGVjb3JhdG9yMSwNCiAgICAgICAgQ2xhc3NEZWNvcmF0b3IyKDEwKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDIwKSksDQogICAgICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMigzMCkpDQogICAgXSwgR3JlZXRlcik7DQogICAgcmV0dXJuIEdyZWV0ZXI7DQp9KCkpOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9c291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMubWFw,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQTtJQUNJLGlCQUdTLFFBQWdCO1FBSXZCLFdBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQsMEJBQWM7O1FBSlAsYUFBUSxHQUFSLFFBQVEsQ0FBUTtJQUt6QixDQUFDO0lBSUQsdUJBQUssR0FBTDtRQUNJLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFVTyxvQkFBRSxHQUFWLFVBR0UsQ0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsc0JBQUksOEJBQVM7YUFBYjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO2FBRUQsVUFHRSxTQUFpQjtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQVBBO0lBYmMsVUFBRSxHQUFXLEVBQUUsQ0FBQztJQVYvQjtRQUZDLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxFQUFFLENBQUM7d0NBR3RCO0lBSUQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3NDQUNMO0lBTWxCO1FBQ0csV0FBQSxtQkFBbUIsQ0FBQTtRQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO3FDQUd6QjtJQUlEO1FBRkMsa0JBQWtCO1FBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQU1wQixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7NENBSnpCO0lBYkQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDOzZCQUNRO0lBdkI3QixPQUFPO1FBRlosZUFBZTtRQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFHYixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7UUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtRQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO09BUHhCLE9BQU8sQ0E0Q1o7SUFBRCxjQUFDO0NBQUEsQUE1Q0QsSUE0Q0MifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 +{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA;IACI,iBAGS,QAAgB;QAIvB,WAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,0BAAc;;QAJP,aAAQ,GAAR,QAAQ,CAAQ;IAKzB,CAAC;IAID,uBAAK,GAAL;QACI,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5C,CAAC;IAUO,oBAAE,GAAV,UAGE,CAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,sBAAI,8BAAS;aAAb;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAGE,SAAiB;YACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC9B,CAAC;;;OAPA;IAbc,UAAE,GAAW,EAAG,CAAA;IAV/B;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;wCAGtB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;sCACL;IAMlB;QACG,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;qCAGzB;IAID;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;QAMpB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;4CAJzB;IAbD;QAFC,kBAAkB;QAClB,kBAAkB,CAAC,EAAE,CAAC;6BACQ;IAvB7B,OAAO;QAFZ,eAAe;QACf,eAAe,CAAC,EAAE,CAAC;QAGb,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAGvB,WAAA,mBAAmB,CAAA;QACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;OAPxB,OAAO,CA4CZ;IAAD,cAAC;CAAA,AA5CD,IA4CC"} +//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCnZhciBHcmVldGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgew0KICAgIGZ1bmN0aW9uIEdyZWV0ZXIoZ3JlZXRpbmcpIHsNCiAgICAgICAgdmFyIGIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsNCiAgICAgICAgICAgIGJbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBHcmVldGVyLnByb3RvdHlwZS5ncmVldCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH07DQogICAgR3JlZXRlci5wcm90b3R5cGUuZm4gPSBmdW5jdGlvbiAoeCkgew0KICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICB9Ow0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIHsNCiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICAgICAgfSwNCiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZ3JlZXRpbmdzKSB7DQogICAgICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgICAgICB9LA0KICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwNCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlDQogICAgfSk7DQogICAgR3JlZXRlci54MSA9IDEwOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig0MCkNCiAgICBdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0IiwgbnVsbCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IyKDUwKQ0KICAgIF0sIEdyZWV0ZXIucHJvdG90eXBlLCAieCIsIHZvaWQgMCk7DQogICAgX19kZWNvcmF0ZShbDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig3MCkpDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJmbiIsIG51bGwpOw0KICAgIF9fZGVjb3JhdGUoWw0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgICAgIFByb3BlcnR5RGVjb3JhdG9yMig4MCksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig5MCkpDQogICAgXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldGluZ3MiLCBudWxsKTsNCiAgICBfX2RlY29yYXRlKFsNCiAgICAgICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgICAgICBQcm9wZXJ0eURlY29yYXRvcjIoNjApDQogICAgXSwgR3JlZXRlciwgIngxIiwgdm9pZCAwKTsNCiAgICBHcmVldGVyID0gX19kZWNvcmF0ZShbDQogICAgICAgIENsYXNzRGVjb3JhdG9yMSwNCiAgICAgICAgQ2xhc3NEZWNvcmF0b3IyKDEwKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICAgICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDIwKSksDQogICAgICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMigzMCkpDQogICAgXSwgR3JlZXRlcik7DQogICAgcmV0dXJuIEdyZWV0ZXI7DQp9KCkpOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9c291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMubWFw,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQTtJQUNJLGlCQUdTLFFBQWdCO1FBSXZCLFdBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQsMEJBQWM7O1FBSlAsYUFBUSxHQUFSLFFBQVEsQ0FBUTtJQUt6QixDQUFDO0lBSUQsdUJBQUssR0FBTDtRQUNJLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFVTyxvQkFBRSxHQUFWLFVBR0UsQ0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsc0JBQUksOEJBQVM7YUFBYjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO2FBRUQsVUFHRSxTQUFpQjtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQVBBO0lBYmMsVUFBRSxHQUFXLEVBQUcsQ0FBQTtJQVYvQjtRQUZDLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxFQUFFLENBQUM7d0NBR3RCO0lBSUQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3NDQUNMO0lBTWxCO1FBQ0csV0FBQSxtQkFBbUIsQ0FBQTtRQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO3FDQUd6QjtJQUlEO1FBRkMsa0JBQWtCO1FBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQU1wQixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7NENBSnpCO0lBYkQ7UUFGQyxrQkFBa0I7UUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDOzZCQUNRO0lBdkI3QixPQUFPO1FBRlosZUFBZTtRQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFHYixXQUFBLG1CQUFtQixDQUFBO1FBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7UUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtRQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO09BUHhCLE9BQU8sQ0E0Q1o7SUFBRCxjQUFDO0NBQUEsQUE1Q0QsSUE0Q0MifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 diff --git a/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt b/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt index de57be0e9fa38..dfa6433263e52 100644 --- a/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt +++ b/tests/baselines/reference/sourceMapValidationDecorators.sourcemap.txt @@ -360,12 +360,12 @@ sourceFile:sourceMapValidationDecorators.ts 1-> 2 > x1 3 > : number = -4 > 10 -5 > ; +4 > 10; +5 > 1->Emitted(34, 5) Source(33, 20) + SourceIndex(0) 2 >Emitted(34, 15) Source(33, 22) + SourceIndex(0) 3 >Emitted(34, 18) Source(33, 33) + SourceIndex(0) -4 >Emitted(34, 20) Source(33, 35) + SourceIndex(0) +4 >Emitted(34, 20) Source(33, 36) + SourceIndex(0) 5 >Emitted(34, 21) Source(33, 36) + SourceIndex(0) --- >>> __decorate([ diff --git a/tests/baselines/reference/thisAndSuperInStaticMembers1(target=es2015).js b/tests/baselines/reference/thisAndSuperInStaticMembers1(target=es2015).js new file mode 100644 index 0000000000000..6c766ee87a600 --- /dev/null +++ b/tests/baselines/reference/thisAndSuperInStaticMembers1(target=es2015).js @@ -0,0 +1,218 @@ +//// [thisAndSuperInStaticMembers1.ts] +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z1 = super.a; + static z2 = super["a"]; + static z3 = super.f(); + static z4 = super["f"](); + static z5 = super.a = 0; + static z6 = super.a += 1; + static z7 = (() => { super.a = 0; })(); + static z8 = [super.a] = [0]; + static z9 = [super.a = 0] = [0]; + static z10 = [...super.a] = [0]; + static z11 = { x: super.a } = { x: 0 }; + static z12 = { x: super.a = 0 } = { x: 0 }; + static z13 = { ...super.a } = { x: 0 }; + static z14 = ++super.a; + static z15 = --super.a; + static z16 = ++super[("a")]; + static z17 = super.a++; + static z18 = super.a``; + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} + +//// [thisAndSuperInStaticMembers1.js] +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +var _a; +var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; +class C extends (_c = B) { + constructor() { + super(...arguments); + // these should be unaffected + Object.defineProperty(this, "x", { + enumerable: true, + configurable: true, + writable: true, + value: 1 + }); + Object.defineProperty(this, "y", { + enumerable: true, + configurable: true, + writable: true, + value: this.x + }); + Object.defineProperty(this, "z", { + enumerable: true, + configurable: true, + writable: true, + value: super.f() + }); + } +} +_b = C; +Object.defineProperty(C, "x", { + enumerable: true, + configurable: true, + writable: true, + value: undefined +}); +Object.defineProperty(C, "y1", { + enumerable: true, + configurable: true, + writable: true, + value: _b.x +}); +Object.defineProperty(C, "y2", { + enumerable: true, + configurable: true, + writable: true, + value: _b.x() +}); +Object.defineProperty(C, "y3", { + enumerable: true, + configurable: true, + writable: true, + value: _b === null || _b === void 0 ? void 0 : _b.x() +}); +Object.defineProperty(C, "y4", { + enumerable: true, + configurable: true, + writable: true, + value: _b[("x")]() +}); +Object.defineProperty(C, "y5", { + enumerable: true, + configurable: true, + writable: true, + value: _b === null || _b === void 0 ? void 0 : _b[("x")]() +}); +Object.defineProperty(C, "z1", { + enumerable: true, + configurable: true, + writable: true, + value: Reflect.get(_c, "a", _b) +}); +Object.defineProperty(C, "z2", { + enumerable: true, + configurable: true, + writable: true, + value: Reflect.get(_c, "a", _b) +}); +Object.defineProperty(C, "z3", { + enumerable: true, + configurable: true, + writable: true, + value: Reflect.get(_c, "f", _b).call(_b) +}); +Object.defineProperty(C, "z4", { + enumerable: true, + configurable: true, + writable: true, + value: Reflect.get(_c, "f", _b).call(_b) +}); +Object.defineProperty(C, "z5", { + enumerable: true, + configurable: true, + writable: true, + value: (Reflect.set(_c, "a", _d = 0, _b), _d) +}); +Object.defineProperty(C, "z6", { + enumerable: true, + configurable: true, + writable: true, + value: (Reflect.set(_c, "a", _e = Reflect.get(_c, "a", _b) + 1, _b), _e) +}); +Object.defineProperty(C, "z7", { + enumerable: true, + configurable: true, + writable: true, + value: (() => { Reflect.set(_c, "a", 0, _b); })() +}); +Object.defineProperty(C, "z8", { + enumerable: true, + configurable: true, + writable: true, + value: [({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value] = [0] +}); +Object.defineProperty(C, "z9", { + enumerable: true, + configurable: true, + writable: true, + value: [({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value = 0] = [0] +}); +Object.defineProperty(C, "z10", { + enumerable: true, + configurable: true, + writable: true, + value: [...({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value] = [0] +}); +Object.defineProperty(C, "z11", { + enumerable: true, + configurable: true, + writable: true, + value: { x: ({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value } = { x: 0 } +}); +Object.defineProperty(C, "z12", { + enumerable: true, + configurable: true, + writable: true, + value: { x: ({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value = 0 } = { x: 0 } +}); +Object.defineProperty(C, "z13", Object.assign({ enumerable: true, configurable: true, writable: true, value: (_a = { x: 0 }, ({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value = __rest(_a, []), _a) })); +Object.defineProperty(C, "z14", { + enumerable: true, + configurable: true, + writable: true, + value: (Reflect.set(_c, "a", (_g = Reflect.get(_c, "a", _b), _f = ++_g), _b), _f) +}); +Object.defineProperty(C, "z15", { + enumerable: true, + configurable: true, + writable: true, + value: (Reflect.set(_c, "a", (_j = Reflect.get(_c, "a", _b), _h = --_j), _b), _h) +}); +Object.defineProperty(C, "z16", { + enumerable: true, + configurable: true, + writable: true, + value: (Reflect.set(_c, _k = ("a"), (_m = Reflect.get(_c, _k, _b), _l = ++_m), _b), _l) +}); +Object.defineProperty(C, "z17", { + enumerable: true, + configurable: true, + writable: true, + value: (Reflect.set(_c, "a", (_p = Reflect.get(_c, "a", _b), _o = _p++, _p), _b), _o) +}); +Object.defineProperty(C, "z18", { + enumerable: true, + configurable: true, + writable: true, + value: Reflect.get(_c, "a", _b).bind(_b) `` +}); diff --git a/tests/baselines/reference/thisAndSuperInStaticMembers1(target=esnext).js b/tests/baselines/reference/thisAndSuperInStaticMembers1(target=esnext).js new file mode 100644 index 0000000000000..8bf57ccac5ae9 --- /dev/null +++ b/tests/baselines/reference/thisAndSuperInStaticMembers1(target=esnext).js @@ -0,0 +1,71 @@ +//// [thisAndSuperInStaticMembers1.ts] +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z1 = super.a; + static z2 = super["a"]; + static z3 = super.f(); + static z4 = super["f"](); + static z5 = super.a = 0; + static z6 = super.a += 1; + static z7 = (() => { super.a = 0; })(); + static z8 = [super.a] = [0]; + static z9 = [super.a = 0] = [0]; + static z10 = [...super.a] = [0]; + static z11 = { x: super.a } = { x: 0 }; + static z12 = { x: super.a = 0 } = { x: 0 }; + static z13 = { ...super.a } = { x: 0 }; + static z14 = ++super.a; + static z15 = --super.a; + static z16 = ++super[("a")]; + static z17 = super.a++; + static z18 = super.a``; + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} + +//// [thisAndSuperInStaticMembers1.js] +class C extends B { + static x = undefined; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z1 = super.a; + static z2 = super["a"]; + static z3 = super.f(); + static z4 = super["f"](); + static z5 = super.a = 0; + static z6 = super.a += 1; + static z7 = (() => { super.a = 0; })(); + static z8 = [super.a] = [0]; + static z9 = [super.a = 0] = [0]; + static z10 = [...super.a] = [0]; + static z11 = { x: super.a } = { x: 0 }; + static z12 = { x: super.a = 0 } = { x: 0 }; + static z13 = { ...super.a } = { x: 0 }; + static z14 = ++super.a; + static z15 = --super.a; + static z16 = ++super[("a")]; + static z17 = super.a++; + static z18 = super.a ``; + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} diff --git a/tests/baselines/reference/thisAndSuperInStaticMembers2(target=es2015).js b/tests/baselines/reference/thisAndSuperInStaticMembers2(target=es2015).js new file mode 100644 index 0000000000000..62f9e180aecb6 --- /dev/null +++ b/tests/baselines/reference/thisAndSuperInStaticMembers2(target=es2015).js @@ -0,0 +1,88 @@ +//// [thisAndSuperInStaticMembers2.ts] +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z1 = super.a; + static z2 = super["a"]; + static z3 = super.f(); + static z4 = super["f"](); + static z5 = super.a = 0; + static z6 = super.a += 1; + static z7 = (() => { super.a = 0; })(); + static z8 = [super.a] = [0]; + static z9 = [super.a = 0] = [0]; + static z10 = [...super.a] = [0]; + static z11 = { x: super.a } = { x: 0 }; + static z12 = { x: super.a = 0 } = { x: 0 }; + static z13 = { ...super.a } = { x: 0 }; + static z14 = ++super.a; + static z15 = --super.a; + static z16 = ++super[("a")]; + static z17 = super.a++; + static z18 = super.a``; + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} + +//// [thisAndSuperInStaticMembers2.js] +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +var _a; +var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; +class C extends (_c = B) { + constructor() { + super(...arguments); + // these should be unaffected + this.x = 1; + this.y = this.x; + this.z = super.f(); + } +} +_b = C; +C.x = undefined; +C.y1 = _b.x; +C.y2 = _b.x(); +C.y3 = _b === null || _b === void 0 ? void 0 : _b.x(); +C.y4 = _b[("x")](); +C.y5 = _b === null || _b === void 0 ? void 0 : _b[("x")](); +C.z1 = Reflect.get(_c, "a", _b); +C.z2 = Reflect.get(_c, "a", _b); +C.z3 = Reflect.get(_c, "f", _b).call(_b); +C.z4 = Reflect.get(_c, "f", _b).call(_b); +C.z5 = (Reflect.set(_c, "a", _d = 0, _b), _d); +C.z6 = (Reflect.set(_c, "a", _e = Reflect.get(_c, "a", _b) + 1, _b), _e); +C.z7 = (() => { Reflect.set(_c, "a", 0, _b); })(); +C.z8 = [({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value] = [0]; +C.z9 = [({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value = 0] = [0]; +C.z10 = [...({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value] = [0]; +C.z11 = { x: ({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value } = { x: 0 }; +C.z12 = { x: ({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value = 0 } = { x: 0 }; +C.z13 = (_a = { x: 0 }, ({ set value(_a) { Reflect.set(_c, "a", _a, _b); } }).value = __rest(_a, []), _a); +C.z14 = (Reflect.set(_c, "a", (_g = Reflect.get(_c, "a", _b), _f = ++_g), _b), _f); +C.z15 = (Reflect.set(_c, "a", (_j = Reflect.get(_c, "a", _b), _h = --_j), _b), _h); +C.z16 = (Reflect.set(_c, _k = ("a"), (_m = Reflect.get(_c, _k, _b), _l = ++_m), _b), _l); +C.z17 = (Reflect.set(_c, "a", (_p = Reflect.get(_c, "a", _b), _o = _p++, _p), _b), _o); +C.z18 = Reflect.get(_c, "a", _b).bind(_b) ``; diff --git a/tests/baselines/reference/thisAndSuperInStaticMembers2(target=esnext).js b/tests/baselines/reference/thisAndSuperInStaticMembers2(target=esnext).js new file mode 100644 index 0000000000000..d29dc7a000638 --- /dev/null +++ b/tests/baselines/reference/thisAndSuperInStaticMembers2(target=esnext).js @@ -0,0 +1,76 @@ +//// [thisAndSuperInStaticMembers2.ts] +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z1 = super.a; + static z2 = super["a"]; + static z3 = super.f(); + static z4 = super["f"](); + static z5 = super.a = 0; + static z6 = super.a += 1; + static z7 = (() => { super.a = 0; })(); + static z8 = [super.a] = [0]; + static z9 = [super.a = 0] = [0]; + static z10 = [...super.a] = [0]; + static z11 = { x: super.a } = { x: 0 }; + static z12 = { x: super.a = 0 } = { x: 0 }; + static z13 = { ...super.a } = { x: 0 }; + static z14 = ++super.a; + static z15 = --super.a; + static z16 = ++super[("a")]; + static z17 = super.a++; + static z18 = super.a``; + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} + +//// [thisAndSuperInStaticMembers2.js] +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; +class C extends (_b = B) { + constructor() { + super(...arguments); + // these should be unaffected + this.x = 1; + this.y = this.x; + this.z = super.f(); + } +} +_a = C; +C.x = undefined; +C.y1 = _a.x; +C.y2 = _a.x(); +C.y3 = _a?.x(); +C.y4 = _a[("x")](); +C.y5 = _a?.[("x")](); +C.z1 = Reflect.get(_b, "a", _a); +C.z2 = Reflect.get(_b, "a", _a); +C.z3 = Reflect.get(_b, "f", _a).call(_a); +C.z4 = Reflect.get(_b, "f", _a).call(_a); +C.z5 = (Reflect.set(_b, "a", _c = 0, _a), _c); +C.z6 = (Reflect.set(_b, "a", _d = Reflect.get(_b, "a", _a) + 1, _a), _d); +C.z7 = (() => { Reflect.set(_b, "a", 0, _a); })(); +C.z8 = [({ set value(_c) { Reflect.set(_b, "a", _c, _a); } }).value] = [0]; +C.z9 = [({ set value(_c) { Reflect.set(_b, "a", _c, _a); } }).value = 0] = [0]; +C.z10 = [...({ set value(_c) { Reflect.set(_b, "a", _c, _a); } }).value] = [0]; +C.z11 = { x: ({ set value(_c) { Reflect.set(_b, "a", _c, _a); } }).value } = { x: 0 }; +C.z12 = { x: ({ set value(_c) { Reflect.set(_b, "a", _c, _a); } }).value = 0 } = { x: 0 }; +C.z13 = { ...({ set value(_c) { Reflect.set(_b, "a", _c, _a); } }).value } = { x: 0 }; +C.z14 = (Reflect.set(_b, "a", (_f = Reflect.get(_b, "a", _a), _e = ++_f), _a), _e); +C.z15 = (Reflect.set(_b, "a", (_h = Reflect.get(_b, "a", _a), _g = --_h), _a), _g); +C.z16 = (Reflect.set(_b, _j = ("a"), (_l = Reflect.get(_b, _j, _a), _k = ++_l), _a), _k); +C.z17 = (Reflect.set(_b, "a", (_o = Reflect.get(_b, "a", _a), _m = _o++, _o), _a), _m); +C.z18 = Reflect.get(_b, "a", _a).bind(_a) ``; diff --git a/tests/baselines/reference/thisAndSuperInStaticMembers3.js b/tests/baselines/reference/thisAndSuperInStaticMembers3.js new file mode 100644 index 0000000000000..48044bbd60fe1 --- /dev/null +++ b/tests/baselines/reference/thisAndSuperInStaticMembers3.js @@ -0,0 +1,117 @@ +//// [thisAndSuperInStaticMembers3.ts] +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z3 = super.f(); + static z4 = super["f"](); + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} + +//// [thisAndSuperInStaticMembers3.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var C = /** @class */ (function (_super) { + __extends(C, _super); + function C() { + var _this = _super !== null && _super.apply(this, arguments) || this; + // these should be unaffected + Object.defineProperty(_this, "x", { + enumerable: true, + configurable: true, + writable: true, + value: 1 + }); + Object.defineProperty(_this, "y", { + enumerable: true, + configurable: true, + writable: true, + value: _this.x + }); + Object.defineProperty(_this, "z", { + enumerable: true, + configurable: true, + writable: true, + value: _super.prototype.f.call(_this) + }); + return _this; + } + var _a; + _a = C; + Object.defineProperty(C, "x", { + enumerable: true, + configurable: true, + writable: true, + value: undefined + }); + Object.defineProperty(C, "y1", { + enumerable: true, + configurable: true, + writable: true, + value: _a.x + }); + Object.defineProperty(C, "y2", { + enumerable: true, + configurable: true, + writable: true, + value: _a.x() + }); + Object.defineProperty(C, "y3", { + enumerable: true, + configurable: true, + writable: true, + value: _a === null || _a === void 0 ? void 0 : _a.x() + }); + Object.defineProperty(C, "y4", { + enumerable: true, + configurable: true, + writable: true, + value: _a[("x")]() + }); + Object.defineProperty(C, "y5", { + enumerable: true, + configurable: true, + writable: true, + value: _a === null || _a === void 0 ? void 0 : _a[("x")]() + }); + Object.defineProperty(C, "z3", { + enumerable: true, + configurable: true, + writable: true, + value: _super.f.call(_a) + }); + Object.defineProperty(C, "z4", { + enumerable: true, + configurable: true, + writable: true, + value: _super["f"].call(_a) + }); + return C; +}(B)); diff --git a/tests/baselines/reference/thisAndSuperInStaticMembers4.js b/tests/baselines/reference/thisAndSuperInStaticMembers4.js new file mode 100644 index 0000000000000..2c0dfd7cbccee --- /dev/null +++ b/tests/baselines/reference/thisAndSuperInStaticMembers4.js @@ -0,0 +1,62 @@ +//// [thisAndSuperInStaticMembers4.ts] +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z3 = super.f(); + static z4 = super["f"](); + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} + +//// [thisAndSuperInStaticMembers4.js] +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var C = /** @class */ (function (_super) { + __extends(C, _super); + function C() { + var _this = _super !== null && _super.apply(this, arguments) || this; + // these should be unaffected + _this.x = 1; + _this.y = _this.x; + _this.z = _super.prototype.f.call(_this); + return _this; + } + var _a; + _a = C; + C.x = undefined; + C.y1 = _a.x; + C.y2 = _a.x(); + C.y3 = _a === null || _a === void 0 ? void 0 : _a.x(); + C.y4 = _a[("x")](); + C.y5 = _a === null || _a === void 0 ? void 0 : _a[("x")](); + C.z3 = _super.f.call(_a); + C.z4 = _super["f"].call(_a); + return C; +}(B)); diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js index b0bb52bc4fed0..a38a992042548 100644 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js +++ b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.js @@ -3,7 +3,7 @@ function log(a) { } class Vector { static foo = () => { - // 'this' should not be available in a static initializer. + // 'this' should be allowed in a static initializer. log(this); } } @@ -13,9 +13,11 @@ function log(a) { } var Vector = /** @class */ (function () { function Vector() { } + var _a; + _a = Vector; Vector.foo = function () { - // 'this' should not be available in a static initializer. - log(Vector); + // 'this' should be allowed in a static initializer. + log(_a); }; return Vector; }()); diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.symbols b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.symbols index 7bb71d768ebb9..065ebf00ffc30 100644 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.symbols +++ b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.symbols @@ -9,7 +9,7 @@ class Vector { static foo = () => { >foo : Symbol(Vector.foo, Decl(thisInArrowFunctionInStaticInitializer1.ts, 2, 14)) - // 'this' should not be available in a static initializer. + // 'this' should be allowed in a static initializer. log(this); >log : Symbol(log, Decl(thisInArrowFunctionInStaticInitializer1.ts, 0, 0)) >this : Symbol(Vector, Decl(thisInArrowFunctionInStaticInitializer1.ts, 0, 19)) diff --git a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.types b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.types index 98d38d70d676f..88caef7ebf723 100644 --- a/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.types +++ b/tests/baselines/reference/thisInArrowFunctionInStaticInitializer1.types @@ -8,9 +8,9 @@ class Vector { static foo = () => { >foo : () => void ->() => { // 'this' should not be available in a static initializer. log(this); } : () => void +>() => { // 'this' should be allowed in a static initializer. log(this); } : () => void - // 'this' should not be available in a static initializer. + // 'this' should be allowed in a static initializer. log(this); >log(this) : void >log : (a: any) => void diff --git a/tests/baselines/reference/thisInConstructorParameter2.js b/tests/baselines/reference/thisInConstructorParameter2.js index 1ab5ed4851922..3af8ee1d8d884 100644 --- a/tests/baselines/reference/thisInConstructorParameter2.js +++ b/tests/baselines/reference/thisInConstructorParameter2.js @@ -36,6 +36,8 @@ var P = /** @class */ (function () { if (zz === void 0) { zz = this; } zz.y; }; - P.y = P; + var _a; + _a = P; + P.y = _a; return P; }()); diff --git a/tests/baselines/reference/thisInInvalidContexts.errors.txt b/tests/baselines/reference/thisInInvalidContexts.errors.txt index 9ed732644757a..64f2f0d8c211c 100644 --- a/tests/baselines/reference/thisInInvalidContexts.errors.txt +++ b/tests/baselines/reference/thisInInvalidContexts.errors.txt @@ -1,18 +1,13 @@ -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(14,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(22,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(36,13): error TS2526: A 'this' type is available only in a non-static member of a class or interface. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(38,25): error TS2507: Type 'typeof globalThis' is not a constructor function type. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(44,9): error TS2332: 'this' cannot be referenced in current location. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(45,9): error TS2332: 'this' cannot be referenced in current location. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(9,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(17,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(23,13): error TS2331: 'this' cannot be referenced in a module or namespace body. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(31,13): error TS2526: A 'this' type is available only in a non-static member of a class or interface. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(33,25): error TS2507: Type 'typeof globalThis' is not a constructor function type. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(39,9): error TS2332: 'this' cannot be referenced in current location. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(40,9): error TS2332: 'this' cannot be referenced in current location. ==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts (7 errors) ==== - //'this' in static member initializer - class ErrClass1 { - static t = this; // Error - } - class BaseErrClass { constructor(t: any) { } } diff --git a/tests/baselines/reference/thisInInvalidContexts.js b/tests/baselines/reference/thisInInvalidContexts.js index 8b4b8b92ef74e..ba1df2c5e4d15 100644 --- a/tests/baselines/reference/thisInInvalidContexts.js +++ b/tests/baselines/reference/thisInInvalidContexts.js @@ -1,9 +1,4 @@ //// [thisInInvalidContexts.ts] -//'this' in static member initializer -class ErrClass1 { - static t = this; // Error -} - class BaseErrClass { constructor(t: any) { } } @@ -64,13 +59,6 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -//'this' in static member initializer -var ErrClass1 = /** @class */ (function () { - function ErrClass1() { - } - ErrClass1.t = ErrClass1; // Error - return ErrClass1; -}()); var BaseErrClass = /** @class */ (function () { function BaseErrClass(t) { } diff --git a/tests/baselines/reference/thisInInvalidContexts.symbols b/tests/baselines/reference/thisInInvalidContexts.symbols index 7fecdf73f4397..1536697ba75cd 100644 --- a/tests/baselines/reference/thisInInvalidContexts.symbols +++ b/tests/baselines/reference/thisInInvalidContexts.symbols @@ -1,56 +1,47 @@ === tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts === -//'this' in static member initializer -class ErrClass1 { ->ErrClass1 : Symbol(ErrClass1, Decl(thisInInvalidContexts.ts, 0, 0)) - - static t = this; // Error ->t : Symbol(ErrClass1.t, Decl(thisInInvalidContexts.ts, 1, 17)) ->this : Symbol(ErrClass1, Decl(thisInInvalidContexts.ts, 0, 0)) -} - class BaseErrClass { ->BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 3, 1)) +>BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 0, 0)) constructor(t: any) { } ->t : Symbol(t, Decl(thisInInvalidContexts.ts, 6, 16)) +>t : Symbol(t, Decl(thisInInvalidContexts.ts, 1, 16)) } class ClassWithNoInitializer extends BaseErrClass { ->ClassWithNoInitializer : Symbol(ClassWithNoInitializer, Decl(thisInInvalidContexts.ts, 7, 1)) ->BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 3, 1)) +>ClassWithNoInitializer : Symbol(ClassWithNoInitializer, Decl(thisInInvalidContexts.ts, 2, 1)) +>BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 0, 0)) t; ->t : Symbol(ClassWithNoInitializer.t, Decl(thisInInvalidContexts.ts, 9, 51)) +>t : Symbol(ClassWithNoInitializer.t, Decl(thisInInvalidContexts.ts, 4, 51)) //'this' in optional super call constructor() { super(this); // Error ->super : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 3, 1)) ->this : Symbol(ClassWithNoInitializer, Decl(thisInInvalidContexts.ts, 7, 1)) +>super : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 0, 0)) +>this : Symbol(ClassWithNoInitializer, Decl(thisInInvalidContexts.ts, 2, 1)) } } class ClassWithInitializer extends BaseErrClass { ->ClassWithInitializer : Symbol(ClassWithInitializer, Decl(thisInInvalidContexts.ts, 15, 1)) ->BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 3, 1)) +>ClassWithInitializer : Symbol(ClassWithInitializer, Decl(thisInInvalidContexts.ts, 10, 1)) +>BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 0, 0)) t = 4; ->t : Symbol(ClassWithInitializer.t, Decl(thisInInvalidContexts.ts, 17, 49)) +>t : Symbol(ClassWithInitializer.t, Decl(thisInInvalidContexts.ts, 12, 49)) //'this' in required super call constructor() { super(this); // Error ->super : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 3, 1)) ->this : Symbol(ClassWithInitializer, Decl(thisInInvalidContexts.ts, 15, 1)) +>super : Symbol(BaseErrClass, Decl(thisInInvalidContexts.ts, 0, 0)) +>this : Symbol(ClassWithInitializer, Decl(thisInInvalidContexts.ts, 10, 1)) } } module M { ->M : Symbol(M, Decl(thisInInvalidContexts.ts, 23, 1)) +>M : Symbol(M, Decl(thisInInvalidContexts.ts, 18, 1)) //'this' in module variable var x = this; // Error ->x : Symbol(x, Decl(thisInInvalidContexts.ts, 27, 7)) +>x : Symbol(x, Decl(thisInInvalidContexts.ts, 22, 7)) } //'this' as type parameter constraint @@ -58,30 +49,30 @@ module M { //'this' as a type argument function genericFunc(x: T) { } ->genericFunc : Symbol(genericFunc, Decl(thisInInvalidContexts.ts, 28, 1)) ->T : Symbol(T, Decl(thisInInvalidContexts.ts, 34, 21)) ->x : Symbol(x, Decl(thisInInvalidContexts.ts, 34, 24)) ->T : Symbol(T, Decl(thisInInvalidContexts.ts, 34, 21)) +>genericFunc : Symbol(genericFunc, Decl(thisInInvalidContexts.ts, 23, 1)) +>T : Symbol(T, Decl(thisInInvalidContexts.ts, 29, 21)) +>x : Symbol(x, Decl(thisInInvalidContexts.ts, 29, 24)) +>T : Symbol(T, Decl(thisInInvalidContexts.ts, 29, 21)) genericFunc(undefined); // Should be an error ->genericFunc : Symbol(genericFunc, Decl(thisInInvalidContexts.ts, 28, 1)) +>genericFunc : Symbol(genericFunc, Decl(thisInInvalidContexts.ts, 23, 1)) >undefined : Symbol(undefined) class ErrClass3 extends this { ->ErrClass3 : Symbol(ErrClass3, Decl(thisInInvalidContexts.ts, 35, 29)) +>ErrClass3 : Symbol(ErrClass3, Decl(thisInInvalidContexts.ts, 30, 29)) >this : Symbol(globalThis) } //'this' as a computed enum value enum SomeEnum { ->SomeEnum : Symbol(SomeEnum, Decl(thisInInvalidContexts.ts, 39, 1)) +>SomeEnum : Symbol(SomeEnum, Decl(thisInInvalidContexts.ts, 34, 1)) A = this, // Should not be allowed ->A : Symbol(SomeEnum.A, Decl(thisInInvalidContexts.ts, 42, 15)) +>A : Symbol(SomeEnum.A, Decl(thisInInvalidContexts.ts, 37, 15)) B = this.spaaaace // Also should not be allowed ->B : Symbol(SomeEnum.B, Decl(thisInInvalidContexts.ts, 43, 13)) +>B : Symbol(SomeEnum.B, Decl(thisInInvalidContexts.ts, 38, 13)) } diff --git a/tests/baselines/reference/thisInInvalidContexts.types b/tests/baselines/reference/thisInInvalidContexts.types index 6f35006b6c12a..e247e4678d7fd 100644 --- a/tests/baselines/reference/thisInInvalidContexts.types +++ b/tests/baselines/reference/thisInInvalidContexts.types @@ -1,13 +1,4 @@ === tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts === -//'this' in static member initializer -class ErrClass1 { ->ErrClass1 : ErrClass1 - - static t = this; // Error ->t : typeof ErrClass1 ->this : typeof ErrClass1 -} - class BaseErrClass { >BaseErrClass : BaseErrClass diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt index 35872f7d95dd5..c4f90b417a4c3 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt @@ -1,18 +1,13 @@ -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(14,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(22,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(36,13): error TS2526: A 'this' type is available only in a non-static member of a class or interface. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(38,25): error TS2507: Type 'undefined' is not a constructor function type. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(44,9): error TS2332: 'this' cannot be referenced in current location. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(45,9): error TS2332: 'this' cannot be referenced in current location. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(9,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(17,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(23,13): error TS2331: 'this' cannot be referenced in a module or namespace body. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(31,13): error TS2526: A 'this' type is available only in a non-static member of a class or interface. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(33,25): error TS2507: Type 'undefined' is not a constructor function type. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(39,9): error TS2332: 'this' cannot be referenced in current location. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(40,9): error TS2332: 'this' cannot be referenced in current location. ==== tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts (7 errors) ==== - //'this' in static member initializer - class ErrClass1 { - static t = this; // Error - } - class BaseErrClass { constructor(t: any) { } } diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.js b/tests/baselines/reference/thisInInvalidContextsExternalModule.js index a8fa318db83e3..4866f66f59de4 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.js +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.js @@ -1,9 +1,4 @@ //// [thisInInvalidContextsExternalModule.ts] -//'this' in static member initializer -class ErrClass1 { - static t = this; // Error -} - class BaseErrClass { constructor(t: any) { } } @@ -65,13 +60,6 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -//'this' in static member initializer -var ErrClass1 = /** @class */ (function () { - function ErrClass1() { - } - ErrClass1.t = ErrClass1; // Error - return ErrClass1; -}()); var BaseErrClass = /** @class */ (function () { function BaseErrClass(t) { } diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.symbols b/tests/baselines/reference/thisInInvalidContextsExternalModule.symbols index 9cf261fa672b3..ed9b09565cfe1 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.symbols +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.symbols @@ -1,56 +1,47 @@ === tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts === -//'this' in static member initializer -class ErrClass1 { ->ErrClass1 : Symbol(ErrClass1, Decl(thisInInvalidContextsExternalModule.ts, 0, 0)) - - static t = this; // Error ->t : Symbol(ErrClass1.t, Decl(thisInInvalidContextsExternalModule.ts, 1, 17)) ->this : Symbol(ErrClass1, Decl(thisInInvalidContextsExternalModule.ts, 0, 0)) -} - class BaseErrClass { ->BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 3, 1)) +>BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 0, 0)) constructor(t: any) { } ->t : Symbol(t, Decl(thisInInvalidContextsExternalModule.ts, 6, 16)) +>t : Symbol(t, Decl(thisInInvalidContextsExternalModule.ts, 1, 16)) } class ClassWithNoInitializer extends BaseErrClass { ->ClassWithNoInitializer : Symbol(ClassWithNoInitializer, Decl(thisInInvalidContextsExternalModule.ts, 7, 1)) ->BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 3, 1)) +>ClassWithNoInitializer : Symbol(ClassWithNoInitializer, Decl(thisInInvalidContextsExternalModule.ts, 2, 1)) +>BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 0, 0)) t; ->t : Symbol(ClassWithNoInitializer.t, Decl(thisInInvalidContextsExternalModule.ts, 9, 51)) +>t : Symbol(ClassWithNoInitializer.t, Decl(thisInInvalidContextsExternalModule.ts, 4, 51)) //'this' in optional super call constructor() { super(this); // error: "super" has to be called before "this" accessing ->super : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 3, 1)) ->this : Symbol(ClassWithNoInitializer, Decl(thisInInvalidContextsExternalModule.ts, 7, 1)) +>super : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 0, 0)) +>this : Symbol(ClassWithNoInitializer, Decl(thisInInvalidContextsExternalModule.ts, 2, 1)) } } class ClassWithInitializer extends BaseErrClass { ->ClassWithInitializer : Symbol(ClassWithInitializer, Decl(thisInInvalidContextsExternalModule.ts, 15, 1)) ->BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 3, 1)) +>ClassWithInitializer : Symbol(ClassWithInitializer, Decl(thisInInvalidContextsExternalModule.ts, 10, 1)) +>BaseErrClass : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 0, 0)) t = 4; ->t : Symbol(ClassWithInitializer.t, Decl(thisInInvalidContextsExternalModule.ts, 17, 49)) +>t : Symbol(ClassWithInitializer.t, Decl(thisInInvalidContextsExternalModule.ts, 12, 49)) //'this' in required super call constructor() { super(this); // Error ->super : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 3, 1)) ->this : Symbol(ClassWithInitializer, Decl(thisInInvalidContextsExternalModule.ts, 15, 1)) +>super : Symbol(BaseErrClass, Decl(thisInInvalidContextsExternalModule.ts, 0, 0)) +>this : Symbol(ClassWithInitializer, Decl(thisInInvalidContextsExternalModule.ts, 10, 1)) } } module M { ->M : Symbol(M, Decl(thisInInvalidContextsExternalModule.ts, 23, 1)) +>M : Symbol(M, Decl(thisInInvalidContextsExternalModule.ts, 18, 1)) //'this' in module variable var x = this; // Error ->x : Symbol(x, Decl(thisInInvalidContextsExternalModule.ts, 27, 7)) +>x : Symbol(x, Decl(thisInInvalidContextsExternalModule.ts, 22, 7)) } //'this' as type parameter constraint @@ -58,29 +49,29 @@ module M { //'this' as a type argument function genericFunc(x: T) { } ->genericFunc : Symbol(genericFunc, Decl(thisInInvalidContextsExternalModule.ts, 28, 1)) ->T : Symbol(T, Decl(thisInInvalidContextsExternalModule.ts, 34, 21)) ->x : Symbol(x, Decl(thisInInvalidContextsExternalModule.ts, 34, 24)) ->T : Symbol(T, Decl(thisInInvalidContextsExternalModule.ts, 34, 21)) +>genericFunc : Symbol(genericFunc, Decl(thisInInvalidContextsExternalModule.ts, 23, 1)) +>T : Symbol(T, Decl(thisInInvalidContextsExternalModule.ts, 29, 21)) +>x : Symbol(x, Decl(thisInInvalidContextsExternalModule.ts, 29, 24)) +>T : Symbol(T, Decl(thisInInvalidContextsExternalModule.ts, 29, 21)) genericFunc(undefined); // Should be an error ->genericFunc : Symbol(genericFunc, Decl(thisInInvalidContextsExternalModule.ts, 28, 1)) +>genericFunc : Symbol(genericFunc, Decl(thisInInvalidContextsExternalModule.ts, 23, 1)) >undefined : Symbol(undefined) class ErrClass3 extends this { ->ErrClass3 : Symbol(ErrClass3, Decl(thisInInvalidContextsExternalModule.ts, 35, 29)) +>ErrClass3 : Symbol(ErrClass3, Decl(thisInInvalidContextsExternalModule.ts, 30, 29)) } //'this' as a computed enum value enum SomeEnum { ->SomeEnum : Symbol(SomeEnum, Decl(thisInInvalidContextsExternalModule.ts, 39, 1)) +>SomeEnum : Symbol(SomeEnum, Decl(thisInInvalidContextsExternalModule.ts, 34, 1)) A = this, // Should not be allowed ->A : Symbol(SomeEnum.A, Decl(thisInInvalidContextsExternalModule.ts, 42, 15)) +>A : Symbol(SomeEnum.A, Decl(thisInInvalidContextsExternalModule.ts, 37, 15)) B = this.spaaaace // Also should not be allowed ->B : Symbol(SomeEnum.B, Decl(thisInInvalidContextsExternalModule.ts, 43, 13)) +>B : Symbol(SomeEnum.B, Decl(thisInInvalidContextsExternalModule.ts, 38, 13)) } export = this; // Should be an error diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.types b/tests/baselines/reference/thisInInvalidContextsExternalModule.types index cbd78a8bce4db..ddd2e105f60e0 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.types +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.types @@ -1,13 +1,4 @@ === tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts === -//'this' in static member initializer -class ErrClass1 { ->ErrClass1 : ErrClass1 - - static t = this; // Error ->t : typeof ErrClass1 ->this : typeof ErrClass1 -} - class BaseErrClass { >BaseErrClass : BaseErrClass diff --git a/tests/baselines/reference/thisInOuterClassBody.js b/tests/baselines/reference/thisInOuterClassBody.js index a23c2b1be22d6..79a95c4763762 100644 --- a/tests/baselines/reference/thisInOuterClassBody.js +++ b/tests/baselines/reference/thisInOuterClassBody.js @@ -36,6 +36,8 @@ var Foo = /** @class */ (function () { var a = this.y; var b = this.x; }; - Foo.y = Foo; + var _a; + _a = Foo; + Foo.y = _a; return Foo; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js index e7ff1bbff0ae7..339ede54e72f5 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es5).js @@ -100,7 +100,7 @@ var D = /** @class */ (function (_super) { }); D.c = 2; D.d = (void 0).c + 1; - D.e = (void 0).a + (void 0).c + 1; + D.e = _super.a + (void 0).c + 1; D.f = function () { return (void 0).c + 1; }; D.ff = function () { this.c + 1; }; D = __decorate([ @@ -111,8 +111,10 @@ var D = /** @class */ (function (_super) { var CC = /** @class */ (function () { function CC() { } + var _a; + _a = CC; CC.a = 1; - CC.b = CC.a + 1; + CC.b = _a.a + 1; return CC; }()); var DD = /** @class */ (function (_super) { @@ -133,10 +135,12 @@ var DD = /** @class */ (function (_super) { enumerable: false, configurable: true }); + var _b; + _b = DD; DD.c = 2; - DD.d = DD.c + 1; - DD.e = _super.a + DD.c + 1; - DD.f = function () { return DD.c + 1; }; + DD.d = _b.c + 1; + DD.e = _super.a + _b.c + 1; + DD.f = function () { return _b.c + 1; }; DD.ff = function () { this.c + 1; }; return DD; }(CC)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js index 74a6f9d87b52e..a45a5c9915488 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=es6).js @@ -55,6 +55,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var _a, _b, _c; let C = class C { }; C.a = 1; @@ -83,9 +84,10 @@ D = __decorate([ ], D); class CC { } +_a = CC; CC.a = 1; -CC.b = CC.a + 1; -class DD extends CC { +CC.b = _a.a + 1; +class DD extends (_c = CC) { static foo() { return this.c + 1; } @@ -96,8 +98,9 @@ class DD extends CC { this.c = v + 1; } } +_b = DD; DD.c = 2; -DD.d = DD.c + 1; -DD.e = CC.a + DD.c + 1; -DD.f = () => DD.c + 1; +DD.d = _b.c + 1; +DD.e = Reflect.get(_c, "a", _b) + _b.c + 1; +DD.f = () => _b.c + 1; DD.ff = function () { this.c + 1; }; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js index 74a6f9d87b52e..a45a5c9915488 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers10(target=esnext).js @@ -55,6 +55,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var _a, _b, _c; let C = class C { }; C.a = 1; @@ -83,9 +84,10 @@ D = __decorate([ ], D); class CC { } +_a = CC; CC.a = 1; -CC.b = CC.a + 1; -class DD extends CC { +CC.b = _a.a + 1; +class DD extends (_c = CC) { static foo() { return this.c + 1; } @@ -96,8 +98,9 @@ class DD extends CC { this.c = v + 1; } } +_b = DD; DD.c = 2; -DD.d = DD.c + 1; -DD.e = CC.a + DD.c + 1; -DD.f = () => DD.c + 1; +DD.d = _b.c + 1; +DD.e = Reflect.get(_c, "a", _b) + _b.c + 1; +DD.f = () => _b.c + 1; DD.ff = function () { this.c + 1; }; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js index 89775f2d6f2b0..cd9f3555b7262 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es5).js @@ -129,7 +129,7 @@ var D = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: (void 0).a + (void 0).c + 1 + value: _super.a + (void 0).c + 1 }); Object.defineProperty(D, "f", { enumerable: true, @@ -151,6 +151,8 @@ var D = /** @class */ (function (_super) { var CC = /** @class */ (function () { function CC() { } + var _a; + _a = CC; Object.defineProperty(CC, "a", { enumerable: true, configurable: true, @@ -161,7 +163,7 @@ var CC = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: CC.a + 1 + value: _a.a + 1 }); return CC; }()); @@ -188,6 +190,8 @@ var DD = /** @class */ (function (_super) { enumerable: false, configurable: true }); + var _b; + _b = DD; Object.defineProperty(DD, "c", { enumerable: true, configurable: true, @@ -198,19 +202,19 @@ var DD = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: DD.c + 1 + value: _b.c + 1 }); Object.defineProperty(DD, "e", { enumerable: true, configurable: true, writable: true, - value: _super.a + DD.c + 1 + value: _super.a + _b.c + 1 }); Object.defineProperty(DD, "f", { enumerable: true, configurable: true, writable: true, - value: function () { return DD.c + 1; } + value: function () { return _b.c + 1; } }); Object.defineProperty(DD, "ff", { enumerable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js index 3fea1512b8cbd..7057d06a10006 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers11(target=es6).js @@ -55,6 +55,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var _a, _b, _c; let C = class C { }; Object.defineProperty(C, "a", { @@ -118,6 +119,7 @@ D = __decorate([ ], D); class CC { } +_a = CC; Object.defineProperty(CC, "a", { enumerable: true, configurable: true, @@ -128,9 +130,9 @@ Object.defineProperty(CC, "b", { enumerable: true, configurable: true, writable: true, - value: CC.a + 1 + value: _a.a + 1 }); -class DD extends CC { +class DD extends (_c = CC) { static foo() { return this.c + 1; } @@ -141,6 +143,7 @@ class DD extends CC { this.c = v + 1; } } +_b = DD; Object.defineProperty(DD, "c", { enumerable: true, configurable: true, @@ -151,19 +154,19 @@ Object.defineProperty(DD, "d", { enumerable: true, configurable: true, writable: true, - value: DD.c + 1 + value: _b.c + 1 }); Object.defineProperty(DD, "e", { enumerable: true, configurable: true, writable: true, - value: CC.a + DD.c + 1 + value: Reflect.get(_c, "a", _b) + _b.c + 1 }); Object.defineProperty(DD, "f", { enumerable: true, configurable: true, writable: true, - value: () => DD.c + 1 + value: () => _b.c + 1 }); Object.defineProperty(DD, "ff", { enumerable: true, diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js index 157ae8e129dd5..d68ce57eeaf6a 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es5).js @@ -12,17 +12,18 @@ class C { var C = /** @class */ (function () { function C() { } - var _a, _b, _c; + var _a, _b, _c, _d; + _a = C; C.c = "foo"; - C.bar = (_c = /** @class */ (function () { + C.bar = (_b = /** @class */ (function () { function Inner() { - this[_b] = 123; + this[_d] = 123; } return Inner; }()), - _a = C.c, - _b = C.c, - _c[_a] = 123, - _c); + _c = _a.c, + _d = _a.c, + _b[_c] = 123, + _b); return C; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js index a6c055499ebeb..59ce5132646d1 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=es6).js @@ -9,16 +9,17 @@ class C { //// [typeOfThisInStaticMembers12.js] -var _a, _b, _c; +var _a, _b, _c, _d; class C { } +_a = C; C.c = "foo"; -C.bar = (_c = class Inner { +C.bar = (_b = class Inner { constructor() { - this[_b] = 123; + this[_d] = 123; } }, - _a = C.c, - _b = C.c, - _c[_a] = 123, - _c); + _c = _a.c, + _d = _a.c, + _b[_c] = 123, + _b); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js index a6c055499ebeb..59ce5132646d1 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers12(target=esnext).js @@ -9,16 +9,17 @@ class C { //// [typeOfThisInStaticMembers12.js] -var _a, _b, _c; +var _a, _b, _c, _d; class C { } +_a = C; C.c = "foo"; -C.bar = (_c = class Inner { +C.bar = (_b = class Inner { constructor() { - this[_b] = 123; + this[_d] = 123; } }, - _a = C.c, - _b = C.c, - _c[_a] = 123, - _c); + _c = _a.c, + _d = _a.c, + _b[_c] = 123, + _b); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js index 43e6c217b60f1..8339f36175222 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es5).js @@ -12,7 +12,8 @@ class C { var C = /** @class */ (function () { function C() { } - var _a, _b, _c; + var _a, _b, _c, _d; + _a = C; Object.defineProperty(C, "c", { enumerable: true, configurable: true, @@ -23,9 +24,9 @@ var C = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: (_c = /** @class */ (function () { + value: (_b = /** @class */ (function () { function Inner() { - Object.defineProperty(this, _b, { + Object.defineProperty(this, _d, { enumerable: true, configurable: true, writable: true, @@ -34,15 +35,15 @@ var C = /** @class */ (function () { } return Inner; }()), - _a = C.c, - _b = C.c, - Object.defineProperty(_c, _a, { + _c = _a.c, + _d = _a.c, + Object.defineProperty(_b, _c, { enumerable: true, configurable: true, writable: true, value: 123 }), - _c) + _b) }); return C; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js index b45a0491893ce..1ad7177461a6d 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers13(target=es6).js @@ -9,9 +9,10 @@ class C { //// [typeOfThisInStaticMembers13.js] -var _a, _b, _c; +var _a, _b, _c, _d; class C { } +_a = C; Object.defineProperty(C, "c", { enumerable: true, configurable: true, @@ -22,9 +23,9 @@ Object.defineProperty(C, "bar", { enumerable: true, configurable: true, writable: true, - value: (_c = class Inner { + value: (_b = class Inner { constructor() { - Object.defineProperty(this, _b, { + Object.defineProperty(this, _d, { enumerable: true, configurable: true, writable: true, @@ -32,13 +33,13 @@ Object.defineProperty(C, "bar", { }); } }, - _a = C.c, - _b = C.c, - Object.defineProperty(_c, _a, { + _c = _a.c, + _d = _a.c, + Object.defineProperty(_b, _c, { enumerable: true, configurable: true, writable: true, value: 123 }), - _c) + _b) }); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.js b/tests/baselines/reference/typeOfThisInStaticMembers2.js index f851ff93be001..acc3c0cf68a37 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.js +++ b/tests/baselines/reference/typeOfThisInStaticMembers2.js @@ -1,22 +1,26 @@ //// [typeOfThisInStaticMembers2.ts] class C { - static foo = this; // error + static foo = this; // ok } class C2 { - static foo = this; // error + static foo = this; // ok } //// [typeOfThisInStaticMembers2.js] var C = /** @class */ (function () { function C() { } - C.foo = C; // error + var _a; + _a = C; + C.foo = _a; // ok return C; }()); var C2 = /** @class */ (function () { function C2() { } - C2.foo = C2; // error + var _b; + _b = C2; + C2.foo = _b; // ok return C2; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.symbols b/tests/baselines/reference/typeOfThisInStaticMembers2.symbols index 3bb0261771d48..ff4aee318f721 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.symbols +++ b/tests/baselines/reference/typeOfThisInStaticMembers2.symbols @@ -2,7 +2,7 @@ class C { >C : Symbol(C, Decl(typeOfThisInStaticMembers2.ts, 0, 0)) - static foo = this; // error + static foo = this; // ok >foo : Symbol(C.foo, Decl(typeOfThisInStaticMembers2.ts, 0, 9)) >this : Symbol(C, Decl(typeOfThisInStaticMembers2.ts, 0, 0)) } @@ -11,7 +11,7 @@ class C2 { >C2 : Symbol(C2, Decl(typeOfThisInStaticMembers2.ts, 2, 1)) >T : Symbol(T, Decl(typeOfThisInStaticMembers2.ts, 4, 9)) - static foo = this; // error + static foo = this; // ok >foo : Symbol(C2.foo, Decl(typeOfThisInStaticMembers2.ts, 4, 13)) >this : Symbol(C2, Decl(typeOfThisInStaticMembers2.ts, 2, 1)) } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers2.types b/tests/baselines/reference/typeOfThisInStaticMembers2.types index 099916a7b9d13..9a07972ca6c70 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers2.types +++ b/tests/baselines/reference/typeOfThisInStaticMembers2.types @@ -2,7 +2,7 @@ class C { >C : C - static foo = this; // error + static foo = this; // ok >foo : typeof C >this : typeof C } @@ -10,7 +10,7 @@ class C { class C2 { >C2 : C2 - static foo = this; // error + static foo = this; // ok >foo : typeof C2 >this : typeof C2 } diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js index 2d74f4822d30a..fdaf4ccb06b7c 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es5).js @@ -30,8 +30,10 @@ var __extends = (this && this.__extends) || (function () { var C = /** @class */ (function () { function C() { } + var _a; + _a = C; C.a = 1; - C.b = C.a + 1; + C.b = _a.a + 1; return C; }()); var D = /** @class */ (function (_super) { @@ -39,8 +41,10 @@ var D = /** @class */ (function (_super) { function D() { return _super !== null && _super.apply(this, arguments) || this; } + var _b; + _b = D; D.c = 2; - D.d = D.c + 1; - D.e = _super.a + D.c + 1; + D.d = _b.c + 1; + D.e = _super.a + _b.c + 1; return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js index b789f68f55f4b..ac5018106c0f7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=es6).js @@ -12,12 +12,15 @@ class D extends C { //// [typeOfThisInStaticMembers3.js] +var _a, _b, _c; class C { } +_a = C; C.a = 1; -C.b = C.a + 1; -class D extends C { +C.b = _a.a + 1; +class D extends (_c = C) { } +_b = D; D.c = 2; -D.d = D.c + 1; -D.e = C.a + D.c + 1; +D.d = _b.c + 1; +D.e = Reflect.get(_c, "a", _b) + _b.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js index b789f68f55f4b..ac5018106c0f7 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers3(target=esnext).js @@ -12,12 +12,15 @@ class D extends C { //// [typeOfThisInStaticMembers3.js] +var _a, _b, _c; class C { } +_a = C; C.a = 1; -C.b = C.a + 1; -class D extends C { +C.b = _a.a + 1; +class D extends (_c = C) { } +_b = D; D.c = 2; -D.d = D.c + 1; -D.e = C.a + D.c + 1; +D.d = _b.c + 1; +D.e = Reflect.get(_c, "a", _b) + _b.c + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js index 138f2f2c41338..298cf649d9ea5 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es5).js @@ -30,6 +30,8 @@ var __extends = (this && this.__extends) || (function () { var C = /** @class */ (function () { function C() { } + var _a; + _a = C; Object.defineProperty(C, "a", { enumerable: true, configurable: true, @@ -40,7 +42,7 @@ var C = /** @class */ (function () { enumerable: true, configurable: true, writable: true, - value: C.a + 1 + value: _a.a + 1 }); return C; }()); @@ -49,6 +51,8 @@ var D = /** @class */ (function (_super) { function D() { return _super !== null && _super.apply(this, arguments) || this; } + var _b; + _b = D; Object.defineProperty(D, "c", { enumerable: true, configurable: true, @@ -59,13 +63,13 @@ var D = /** @class */ (function (_super) { enumerable: true, configurable: true, writable: true, - value: D.c + 1 + value: _b.c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: _super.a + D.c + 1 + value: _super.a + _b.c + 1 }); return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js index 4fc7476c94eac..eba1388438d1f 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers4(target=es6).js @@ -12,8 +12,10 @@ class D extends C { //// [typeOfThisInStaticMembers4.js] +var _a, _b, _c; class C { } +_a = C; Object.defineProperty(C, "a", { enumerable: true, configurable: true, @@ -24,10 +26,11 @@ Object.defineProperty(C, "b", { enumerable: true, configurable: true, writable: true, - value: C.a + 1 + value: _a.a + 1 }); -class D extends C { +class D extends (_c = C) { } +_b = D; Object.defineProperty(D, "c", { enumerable: true, configurable: true, @@ -38,11 +41,11 @@ Object.defineProperty(D, "d", { enumerable: true, configurable: true, writable: true, - value: D.c + 1 + value: _b.c + 1 }); Object.defineProperty(D, "e", { enumerable: true, configurable: true, writable: true, - value: C.a + D.c + 1 + value: Reflect.get(_c, "a", _b) + _b.c + 1 }); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js index fdd6879b6fd26..793af4829df6b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es5).js @@ -13,6 +13,8 @@ var C = /** @class */ (function () { function C(foo) { this.foo = foo; } - C.create = function () { return new C("yep"); }; + var _a; + _a = C; + C.create = function () { return new _a("yep"); }; return C; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js index 8f14d05a7b76b..4bbbd6ffc8090 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers5(target=es6).js @@ -9,9 +9,11 @@ class C { //// [typeOfThisInStaticMembers5.js] +var _a; class C { constructor(foo) { this.foo = foo; } } -C.create = () => new C("yep"); +_a = C; +C.create = () => new _a("yep"); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js index cef83b33e9c85..a9166f43f9f51 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es5).js @@ -30,8 +30,10 @@ var __extends = (this && this.__extends) || (function () { var C = /** @class */ (function () { function C() { } + var _a; + _a = C; C.a = 1; - C.b = C.a + 1; + C.b = _a.a + 1; return C; }()); var D = /** @class */ (function (_super) { @@ -39,8 +41,10 @@ var D = /** @class */ (function (_super) { function D() { return _super !== null && _super.apply(this, arguments) || this; } + var _b; + _b = D; D.c = 2; - D.d = D.c + 1; - D.e = 1 + (_super.a) + (D.c + 1) + 1; + D.d = _b.c + 1; + D.e = 1 + (_super.a) + (_b.c + 1) + 1; return D; }(C)); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js index 59581b2082621..186e15bd30f8b 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers7(target=es6).js @@ -12,12 +12,15 @@ class D extends C { //// [typeOfThisInStaticMembers7.js] +var _a, _b, _c; class C { } +_a = C; C.a = 1; -C.b = C.a + 1; -class D extends C { +C.b = _a.a + 1; +class D extends (_c = C) { } +_b = D; D.c = 2; -D.d = D.c + 1; -D.e = 1 + (C.a) + (D.c + 1) + 1; +D.d = _b.c + 1; +D.e = 1 + (Reflect.get(_c, "a", _b)) + (_b.c + 1) + 1; diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js index ac4e67b646ff8..343a8096bfde8 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es5).js @@ -22,8 +22,10 @@ class C { var C = /** @class */ (function () { function C() { } + var _a; + _a = C; C.f = 1; - C.arrowFunctionBoundary = function () { return C.f + 1; }; + C.arrowFunctionBoundary = function () { return _a.f + 1; }; C.functionExprBoundary = function () { return this.f + 2; }; C.classExprBoundary = /** @class */ (function () { function class_1() { @@ -40,7 +42,7 @@ var C = /** @class */ (function () { this.a = this.f + 5; } CC.prototype.method = function () { - return C.f + 6; + return this.f + 6; }; return CC; }()); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js index 7b364b68b3d5e..b43570acc63bb 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers8(target=es6).js @@ -19,10 +19,12 @@ class C { //// [typeOfThisInStaticMembers8.js] +var _a; class C { } +_a = C; C.f = 1; -C.arrowFunctionBoundary = () => C.f + 1; +C.arrowFunctionBoundary = () => _a.f + 1; C.functionExprBoundary = function () { return this.f + 2; }; C.classExprBoundary = class { constructor() { @@ -38,7 +40,7 @@ C.functionAndClassDeclBoundary = (() => { this.a = this.f + 5; } method() { - return C.f + 6; + return this.f + 6; } } })(); diff --git a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js index 0f79d1f815d08..2bd68f8756f0a 100644 --- a/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js +++ b/tests/baselines/reference/typeOfThisInStaticMembers9(target=es6).js @@ -22,12 +22,14 @@ class D extends C { //// [typeOfThisInStaticMembers9.js] +var _a, _b; class C { } C.f = 1; -class D extends C { +class D extends (_b = C) { } -D.arrowFunctionBoundary = () => C.f + 1; +_a = D; +D.arrowFunctionBoundary = () => Reflect.get(_b, "f", _a) + 1; D.functionExprBoundary = function () { return super.f + 2; }; D.classExprBoundary = class { constructor() { @@ -43,7 +45,7 @@ D.functionAndClassDeclBoundary = (() => { this.a = super.f + 5; } method() { - return C.f + 6; + return super.f + 6; } } })(); diff --git a/tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts b/tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts index 6aba2135da0da..3ac1a2428a141 100644 --- a/tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts +++ b/tests/cases/compiler/thisInArrowFunctionInStaticInitializer1.ts @@ -2,7 +2,7 @@ function log(a) { } class Vector { static foo = () => { - // 'this' should not be available in a static initializer. + // 'this' should be allowed in a static initializer. log(this); } } \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers1.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers1.ts new file mode 100644 index 0000000000000..e3bfff9aedfab --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers1.ts @@ -0,0 +1,42 @@ +// @target: esnext, es2015 +// @useDefineForClassFields: true +// @noTypesAndSymbols: true + +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z1 = super.a; + static z2 = super["a"]; + static z3 = super.f(); + static z4 = super["f"](); + static z5 = super.a = 0; + static z6 = super.a += 1; + static z7 = (() => { super.a = 0; })(); + static z8 = [super.a] = [0]; + static z9 = [super.a = 0] = [0]; + static z10 = [...super.a] = [0]; + static z11 = { x: super.a } = { x: 0 }; + static z12 = { x: super.a = 0 } = { x: 0 }; + static z13 = { ...super.a } = { x: 0 }; + static z14 = ++super.a; + static z15 = --super.a; + static z16 = ++super[("a")]; + static z17 = super.a++; + static z18 = super.a``; + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers2.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers2.ts new file mode 100644 index 0000000000000..7e751c3d672a4 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers2.ts @@ -0,0 +1,42 @@ +// @target: esnext, es2015 +// @useDefineForClassFields: false +// @noTypesAndSymbols: true + +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z1 = super.a; + static z2 = super["a"]; + static z3 = super.f(); + static z4 = super["f"](); + static z5 = super.a = 0; + static z6 = super.a += 1; + static z7 = (() => { super.a = 0; })(); + static z8 = [super.a] = [0]; + static z9 = [super.a = 0] = [0]; + static z10 = [...super.a] = [0]; + static z11 = { x: super.a } = { x: 0 }; + static z12 = { x: super.a = 0 } = { x: 0 }; + static z13 = { ...super.a } = { x: 0 }; + static z14 = ++super.a; + static z15 = --super.a; + static z16 = ++super[("a")]; + static z17 = super.a++; + static z18 = super.a``; + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers3.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers3.ts new file mode 100644 index 0000000000000..413c7c54bc832 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers3.ts @@ -0,0 +1,26 @@ +// @target: es5 +// @useDefineForClassFields: true +// @noTypesAndSymbols: true + +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z3 = super.f(); + static z4 = super["f"](); + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers4.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers4.ts new file mode 100644 index 0000000000000..aad82e41dc531 --- /dev/null +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/thisAndSuperInStaticMembers4.ts @@ -0,0 +1,26 @@ +// @target: es5 +// @useDefineForClassFields: false +// @noTypesAndSymbols: true + +declare class B { + static a: any; + static f(): number; + a: number; + f(): number; +} + +class C extends B { + static x: any = undefined!; + static y1 = this.x; + static y2 = this.x(); + static y3 = this?.x(); + static y4 = this[("x")](); + static y5 = this?.[("x")](); + static z3 = super.f(); + static z4 = super["f"](); + + // these should be unaffected + x = 1; + y = this.x; + z = super.f(); +} \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts index 7ab6fc48b3908..e6666219f55e6 100644 --- a/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts +++ b/tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInStaticMembers2.ts @@ -1,7 +1,7 @@ class C { - static foo = this; // error + static foo = this; // ok } class C2 { - static foo = this; // error + static foo = this; // ok } \ No newline at end of file diff --git a/tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts b/tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts index 2b929318c13fe..fdcb9c410b401 100644 --- a/tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts +++ b/tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts @@ -1,8 +1,3 @@ -//'this' in static member initializer -class ErrClass1 { - static t = this; // Error -} - class BaseErrClass { constructor(t: any) { } } diff --git a/tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts b/tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts index e3d8ce9f5fcd2..7791be14650f4 100644 --- a/tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts +++ b/tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts @@ -1,8 +1,3 @@ -//'this' in static member initializer -class ErrClass1 { - static t = this; // Error -} - class BaseErrClass { constructor(t: any) { } } From 9850dc3df763e134da572dfef52d743987d4178d Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Fri, 25 Jun 2021 15:00:49 -0700 Subject: [PATCH 33/33] Fix use-before-def in static fields --- src/compiler/binder.ts | 14 +- src/compiler/checker.ts | 195 ++++++++++++------ src/compiler/diagnosticMessages.json | 4 + src/compiler/transformers/classFields.ts | 103 ++++----- .../transformers/declarations/diagnostics.ts | 16 +- src/compiler/transformers/es2015.ts | 4 +- src/compiler/transformers/ts.ts | 10 +- src/compiler/transformers/utilities.ts | 2 +- src/compiler/types.ts | 2 + src/compiler/utilities.ts | 8 +- src/services/completions.ts | 5 +- src/services/findAllReferences.ts | 12 +- src/services/navigationBar.ts | 2 +- src/services/refactors/extractSymbol.ts | 4 +- .../reference/classStaticBlock4.errors.txt | 8 +- ...lassStaticBlock5(target=es2015).errors.txt | 28 --- .../classStaticBlock5(target=es2015).js | 6 +- .../classStaticBlock5(target=es2015).symbols | 7 + .../classStaticBlock5(target=es2015).types | 12 +- .../classStaticBlock5(target=es5).errors.txt | 17 +- .../classStaticBlock5(target=es5).js | 4 +- .../classStaticBlock5(target=es5).symbols | 7 + .../classStaticBlock5(target=es5).types | 12 +- ...lassStaticBlock5(target=esnext).errors.txt | 28 --- .../classStaticBlock5(target=esnext).symbols | 7 + .../classStaticBlock5(target=esnext).types | 12 +- .../reference/classStaticBlock6.errors.txt | 4 +- .../classStaticBlockUseBeforeDef1.symbols | 32 +++ .../classStaticBlockUseBeforeDef1.types | 35 ++++ .../classStaticBlockUseBeforeDef2.errors.txt | 13 ++ .../classStaticBlockUseBeforeDef2.symbols | 13 ++ .../classStaticBlockUseBeforeDef2.types | 15 ++ tests/baselines/reference/variance.js | 3 +- tests/baselines/reference/variance.symbols | 4 +- tests/baselines/reference/variance.types | 3 +- .../classStaticBlockUseBeforeDef1.ts | 15 ++ .../classStaticBlockUseBeforeDef2.ts | 10 + .../conformance/types/conditional/variance.ts | 2 +- 38 files changed, 426 insertions(+), 252 deletions(-) delete mode 100644 tests/baselines/reference/classStaticBlock5(target=es2015).errors.txt delete mode 100644 tests/baselines/reference/classStaticBlock5(target=esnext).errors.txt create mode 100644 tests/baselines/reference/classStaticBlockUseBeforeDef1.symbols create mode 100644 tests/baselines/reference/classStaticBlockUseBeforeDef1.types create mode 100644 tests/baselines/reference/classStaticBlockUseBeforeDef2.errors.txt create mode 100644 tests/baselines/reference/classStaticBlockUseBeforeDef2.symbols create mode 100644 tests/baselines/reference/classStaticBlockUseBeforeDef2.types create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts create mode 100644 tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 490b1bd9fbd40..faefba86582f1 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -669,7 +669,7 @@ namespace ts { } // We create a return control flow graph for IIFEs and constructors. For constructors // we use the return control flow graph in strict property initialization checks. - currentReturnTarget = isIIFE || node.kind === SyntaxKind.Constructor || (isInJSFile(node) && (node.kind === SyntaxKind.FunctionDeclaration || node.kind === SyntaxKind.FunctionExpression)) ? createBranchLabel() : undefined; + currentReturnTarget = isIIFE || node.kind === SyntaxKind.Constructor || node.kind === SyntaxKind.ClassStaticBlockDeclaration || (isInJSFile(node) && (node.kind === SyntaxKind.FunctionDeclaration || node.kind === SyntaxKind.FunctionExpression)) ? createBranchLabel() : undefined; currentExceptionTarget = undefined; currentBreakTarget = undefined; currentContinueTarget = undefined; @@ -678,10 +678,10 @@ namespace ts { bindChildren(node); // Reset all reachability check related flags on node (for incremental scenarios) node.flags &= ~NodeFlags.ReachabilityAndEmitFlags; - if (!(currentFlow.flags & FlowFlags.Unreachable) && containerFlags & ContainerFlags.IsFunctionLike && nodeIsPresent((node as FunctionLikeDeclaration).body)) { + if (!(currentFlow.flags & FlowFlags.Unreachable) && containerFlags & ContainerFlags.IsFunctionLike && nodeIsPresent((node as FunctionLikeDeclaration | ClassStaticBlockDeclaration).body)) { node.flags |= NodeFlags.HasImplicitReturn; if (hasExplicitReturn) node.flags |= NodeFlags.HasExplicitReturn; - (node as FunctionLikeDeclaration).endFlowNode = currentFlow; + (node as FunctionLikeDeclaration | ClassStaticBlockDeclaration).endFlowNode = currentFlow; } if (node.kind === SyntaxKind.SourceFile) { node.flags |= emitFlags; @@ -691,8 +691,8 @@ namespace ts { if (currentReturnTarget) { addAntecedent(currentReturnTarget, currentFlow); currentFlow = finishFlowLabel(currentReturnTarget); - if (node.kind === SyntaxKind.Constructor || (isInJSFile(node) && (node.kind === SyntaxKind.FunctionDeclaration || node.kind === SyntaxKind.FunctionExpression))) { - (node as FunctionLikeDeclaration).returnFlowNode = currentFlow; + if (node.kind === SyntaxKind.Constructor || node.kind === SyntaxKind.ClassStaticBlockDeclaration || (isInJSFile(node) && (node.kind === SyntaxKind.FunctionDeclaration || node.kind === SyntaxKind.FunctionExpression))) { + (node as FunctionLikeDeclaration | ClassStaticBlockDeclaration).returnFlowNode = currentFlow; } } if (!isIIFE) { @@ -1944,7 +1944,7 @@ namespace ts { } function declareClassMember(node: Declaration, symbolFlags: SymbolFlags, symbolExcludes: SymbolFlags) { - return hasSyntacticModifier(node, ModifierFlags.Static) + return isStatic(node) ? declareSymbol(container.symbol.exports!, container.symbol, node, symbolFlags, symbolExcludes) : declareSymbol(container.symbol.members!, container.symbol, node, symbolFlags, symbolExcludes); } @@ -2950,7 +2950,7 @@ namespace ts { // this.foo assignment in a JavaScript class // Bind this property to the containing class const containingClass = thisContainer.parent; - const symbolTable = hasSyntacticModifier(thisContainer, ModifierFlags.Static) ? containingClass.symbol.exports! : containingClass.symbol.members!; + const symbolTable = isStatic(thisContainer) ? containingClass.symbol.exports! : containingClass.symbol.members!; if (hasDynamicName(node)) { bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable); } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f9103ae598a70..ad5c60e5bffaa 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1579,21 +1579,34 @@ namespace ts { if (isFunctionLike(current)) { return true; } + if (isClassStaticBlockDeclaration(current)) { + return declaration.pos < usage.pos; + } - const initializerOfProperty = current.parent && - current.parent.kind === SyntaxKind.PropertyDeclaration && - (current.parent as PropertyDeclaration).initializer === current; - - if (initializerOfProperty) { - if (hasSyntacticModifier(current.parent, ModifierFlags.Static)) { - if (declaration.kind === SyntaxKind.MethodDeclaration) { - return true; + const propertyDeclaration = tryCast(current.parent, isPropertyDeclaration); + if (propertyDeclaration) { + const initializerOfProperty = propertyDeclaration.initializer === current; + if (initializerOfProperty) { + if (isStatic(current.parent)) { + if (declaration.kind === SyntaxKind.MethodDeclaration) { + return true; + } + if (isPropertyDeclaration(declaration) && getContainingClass(usage) === getContainingClass(declaration)) { + const propName = declaration.name; + if (isIdentifier(propName) || isPrivateIdentifier(propName)) { + const type = getTypeOfSymbol(getSymbolOfNode(declaration)); + const staticBlocks = filter(declaration.parent.members, isClassStaticBlockDeclaration); + if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration.parent.pos, current.pos)) { + return true; + } + } + } } - } - else { - const isDeclarationInstanceProperty = declaration.kind === SyntaxKind.PropertyDeclaration && !hasSyntacticModifier(declaration, ModifierFlags.Static); - if (!isDeclarationInstanceProperty || getContainingClass(usage) !== getContainingClass(declaration)) { - return true; + else { + const isDeclarationInstanceProperty = declaration.kind === SyntaxKind.PropertyDeclaration && !isStatic(declaration); + if (!isDeclarationInstanceProperty || getContainingClass(usage) !== getContainingClass(declaration)) { + return true; + } } } } @@ -1857,7 +1870,7 @@ namespace ts { // local variables of the constructor. This effectively means that entities from outer scopes // by the same name as a constructor parameter or local variable are inaccessible // in initializer expressions for instance member variables. - if (!hasSyntacticModifier(location, ModifierFlags.Static)) { + if (!isStatic(location)) { const ctor = findConstructorDeclaration(location.parent as ClassLikeDeclaration); if (ctor && ctor.locals) { if (lookup(ctor.locals, name, meaning & SymbolFlags.Value)) { @@ -1879,7 +1892,7 @@ namespace ts { result = undefined; break; } - if (lastLocation && hasSyntacticModifier(lastLocation, ModifierFlags.Static)) { + if (lastLocation && isStatic(lastLocation)) { // TypeScript 1.0 spec (April 2014): 3.4.1 // The scope of a type parameter extends over the entire declaration with which the type // parameter list is associated, with the exception of static member declarations in classes. @@ -2189,7 +2202,7 @@ namespace ts { // initializers in instance property declaration of class like entities are executed in constructor and thus deferred return isTypeQueryNode(location) || (( isFunctionLikeDeclaration(location) || - (location.kind === SyntaxKind.PropertyDeclaration && !hasSyntacticModifier(location, ModifierFlags.Static)) + (location.kind === SyntaxKind.PropertyDeclaration && !isStatic(location)) ) && (!lastLocation || lastLocation !== (location as SignatureDeclaration | PropertyDeclaration).name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred } if (lastLocation && lastLocation === (location as FunctionExpression | ArrowFunction).name) { @@ -2258,7 +2271,7 @@ namespace ts { // No static member is present. // Check if we're in an instance method and look for a relevant instance member. - if (location === container && !hasSyntacticModifier(location, ModifierFlags.Static)) { + if (location === container && !isStatic(location)) { const instanceType = (getDeclaredTypeOfSymbol(classSymbol) as InterfaceType).thisType!; // TODO: GH#18217 if (getPropertyOfType(instanceType, name)) { error(errorLocation, Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg)); @@ -4855,7 +4868,7 @@ namespace ts { } function shouldWriteTypeOfFunctionSymbol() { const isStaticMethodSymbol = !!(symbol.flags & SymbolFlags.Method) && // typeof static method - some(symbol.declarations, declaration => hasSyntacticModifier(declaration, ModifierFlags.Static)); + some(symbol.declarations, declaration => isStatic(declaration)); const isNonLocalFunctionSymbol = !!(symbol.flags & SymbolFlags.Function) && (symbol.parent || // is exported function symbol forEach(symbol.declarations, declaration => @@ -7008,7 +7021,7 @@ namespace ts { function isNamespaceMember(p: Symbol) { return !!(p.flags & (SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias)) || - !(p.flags & SymbolFlags.Prototype || p.escapedName === "prototype" || p.valueDeclaration && getEffectiveModifierFlags(p.valueDeclaration) & ModifierFlags.Static && isClassLike(p.valueDeclaration.parent)); + !(p.flags & SymbolFlags.Prototype || p.escapedName === "prototype" || p.valueDeclaration && isStatic(p.valueDeclaration) && isClassLike(p.valueDeclaration.parent)); } function sanitizeJSDocImplements(clauses: readonly ExpressionWithTypeArguments[]): ExpressionWithTypeArguments[] | undefined { @@ -8448,14 +8461,23 @@ namespace ts { return addOptionality(type, isProperty, isOptional); } - if (isPropertyDeclaration(declaration) && !hasStaticModifier(declaration) && (noImplicitAny || isInJSFile(declaration))) { + if (isPropertyDeclaration(declaration) && (noImplicitAny || isInJSFile(declaration))) { // We have a property declaration with no type annotation or initializer, in noImplicitAny mode or a .js file. - // Use control flow analysis of this.xxx assignments in the constructor to determine the type of the property. - const constructor = findConstructorDeclaration(declaration.parent); - const type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) : - getEffectiveModifierFlags(declaration) & ModifierFlags.Ambient ? getTypeOfPropertyInBaseClass(declaration.symbol) : - undefined; - return type && addOptionality(type, /*isProperty*/ true, isOptional); + // Use control flow analysis of this.xxx assignments in the constructor or static block to determine the type of the property. + if (!hasStaticModifier(declaration)) { + const constructor = findConstructorDeclaration(declaration.parent); + const type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) : + getEffectiveModifierFlags(declaration) & ModifierFlags.Ambient ? getTypeOfPropertyInBaseClass(declaration.symbol) : + undefined; + return type && addOptionality(type, /*isProperty*/ true, isOptional); + } + else { + const staticBlocks = filter(declaration.parent.members, isClassStaticBlockDeclaration); + const type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) : + getEffectiveModifierFlags(declaration) & ModifierFlags.Ambient ? getTypeOfPropertyInBaseClass(declaration.symbol) : + undefined; + return type && addOptionality(type, /*isProperty*/ true, isOptional); + } } if (isJsxAttribute(declaration)) { @@ -8530,6 +8552,27 @@ namespace ts { return getFlowTypeOfReference(reference, autoType, undefinedType); } + function getFlowTypeInStaticBlocks(symbol: Symbol, staticBlocks: readonly ClassStaticBlockDeclaration[]) { + const accessName = startsWith(symbol.escapedName as string, "__#") + ? factory.createPrivateIdentifier((symbol.escapedName as string).split("@")[1]) + : unescapeLeadingUnderscores(symbol.escapedName); + for (const staticBlock of staticBlocks) { + const reference = factory.createPropertyAccessExpression(factory.createThis(), accessName); + setParent(reference.expression, reference); + setParent(reference, staticBlock); + reference.flowNode = staticBlock.returnFlowNode; + const flowType = getFlowTypeOfProperty(reference, symbol); + if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) { + error(symbol.valueDeclaration, Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType)); + } + // We don't infer a type if assignments are only null or undefined. + if (everyType(flowType, isNullableType)) { + continue; + } + return convertAutoToAny(flowType); + } + } + function getFlowTypeInConstructor(symbol: Symbol, constructor: ConstructorDeclaration) { const accessName = startsWith(symbol.escapedName as string, "__#") ? factory.createPrivateIdentifier((symbol.escapedName as string).split("@")[1]) @@ -10131,7 +10174,7 @@ namespace ts { } function isStaticPrivateIdentifierProperty(s: Symbol): boolean { - return !!s.valueDeclaration && isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && hasSyntacticModifier(s.valueDeclaration, ModifierFlags.Static); + return !!s.valueDeclaration && isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && isStatic(s.valueDeclaration); } function resolveDeclaredMembers(type: InterfaceType): InterfaceTypeWithDeclaredMembers { @@ -15617,7 +15660,7 @@ namespace ts { const container = getThisContainer(node, /*includeArrowFunctions*/ false); const parent = container && container.parent; if (parent && (isClassLike(parent) || parent.kind === SyntaxKind.InterfaceDeclaration)) { - if (!hasSyntacticModifier(container, ModifierFlags.Static) && + if (!isStatic(container) && (!isConstructorDeclaration(container) || isNodeDescendantOf(node, container.body))) { return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent as ClassLikeDeclaration | InterfaceDeclaration)).thisType!; } @@ -24242,7 +24285,7 @@ namespace ts { let container = getThisContainer(node, /*includeArrowFunctions*/ false); while (container.kind !== SyntaxKind.SourceFile) { if (container.parent === declaration) { - if (container.kind === SyntaxKind.PropertyDeclaration && hasSyntacticModifier(container, ModifierFlags.Static)) { + if (container.kind === SyntaxKind.PropertyDeclaration && isStatic(container)) { getNodeLinks(declaration).flags |= NodeCheckFlags.ClassWithConstructorReference; getNodeLinks(node).flags |= NodeCheckFlags.ConstructorReferenceInClass; } @@ -24545,9 +24588,6 @@ namespace ts { // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks } break; - case SyntaxKind.ClassStaticBlockDeclaration: - error(node, Diagnostics.this_cannot_be_referenced_in_current_location); - break; case SyntaxKind.ComputedPropertyName: error(node, Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; @@ -24606,8 +24646,7 @@ namespace ts { if (isClassLike(container.parent)) { const symbol = getSymbolOfNode(container.parent); - const isStatic = hasSyntacticModifier(container, ModifierFlags.Static) || isClassStaticBlockDeclaration(container); - const type = isStatic ? getTypeOfSymbol(symbol) : (getDeclaredTypeOfSymbol(symbol) as InterfaceType).thisType!; + const type = isStatic(container) ? getTypeOfSymbol(symbol) : (getDeclaredTypeOfSymbol(symbol) as InterfaceType).thisType!; return getFlowTypeOfReference(node, type); } @@ -24637,7 +24676,7 @@ namespace ts { } if (isClassLike(container.parent)) { const symbol = getSymbolOfNode(container.parent); - return hasSyntacticModifier(container, ModifierFlags.Static) ? getTypeOfSymbol(symbol) : (getDeclaredTypeOfSymbol(symbol) as InterfaceType).thisType!; + return isStatic(container) ? getTypeOfSymbol(symbol) : (getDeclaredTypeOfSymbol(symbol) as InterfaceType).thisType!; } } @@ -24758,7 +24797,7 @@ namespace ts { checkThisBeforeSuper(node, container, Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class); } - if (hasSyntacticModifier(container, ModifierFlags.Static) || isCallExpression) { + if (isStatic(container) || isCallExpression) { nodeCheckFlag = NodeCheckFlags.SuperStatic; } else { @@ -24894,12 +24933,13 @@ namespace ts { // topmost container must be something that is directly nested in the class declaration\object literal expression if (isClassLike(container.parent) || container.parent.kind === SyntaxKind.ObjectLiteralExpression) { - if (hasSyntacticModifier(container, ModifierFlags.Static)) { + if (isStatic(container)) { return container.kind === SyntaxKind.MethodDeclaration || container.kind === SyntaxKind.MethodSignature || container.kind === SyntaxKind.GetAccessor || container.kind === SyntaxKind.SetAccessor || - container.kind === SyntaxKind.PropertyDeclaration; + container.kind === SyntaxKind.PropertyDeclaration || + container.kind === SyntaxKind.ClassStaticBlockDeclaration; } else { return container.kind === SyntaxKind.MethodDeclaration || @@ -25038,7 +25078,7 @@ namespace ts { case SyntaxKind.BindingElement: return getContextualTypeForBindingElement(declaration); case SyntaxKind.PropertyDeclaration: - if (hasSyntacticModifier(declaration, ModifierFlags.Static)) { + if (isStatic(declaration)) { return getContextualTypeForStaticPropertyDeclaration(declaration); } // By default, do nothing and return undefined - only the above cases have context implied by a parent @@ -27541,10 +27581,12 @@ namespace ts { let assumeUninitialized = false; if (strictNullChecks && strictPropertyInitialization && isAccessExpression(node) && node.expression.kind === SyntaxKind.ThisKeyword) { const declaration = prop && prop.valueDeclaration; - if (declaration && isInstancePropertyWithoutInitializer(declaration)) { - const flowContainer = getControlFlowContainer(node); - if (flowContainer.kind === SyntaxKind.Constructor && flowContainer.parent === declaration.parent && !(declaration.flags & NodeFlags.Ambient)) { - assumeUninitialized = true; + if (declaration && isPropertyWithoutInitializer(declaration)) { + if (!isStatic(declaration)) { + const flowContainer = getControlFlowContainer(node); + if (flowContainer.kind === SyntaxKind.Constructor && flowContainer.parent === declaration.parent && !(declaration.flags & NodeFlags.Ambient)) { + assumeUninitialized = true; + } } } } @@ -27710,7 +27752,7 @@ namespace ts { function typeHasStaticProperty(propName: __String, containingType: Type): boolean { const prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName); - return prop !== undefined && !!prop.valueDeclaration && hasSyntacticModifier(prop.valueDeclaration, ModifierFlags.Static); + return prop !== undefined && !!prop.valueDeclaration && isStatic(prop.valueDeclaration); } function getSuggestedLibForNonExistentName(name: __String | Identifier) { @@ -33274,16 +33316,16 @@ namespace ts { } } else { - const isStatic = hasSyntacticModifier(member, ModifierFlags.Static); + const isStaticMember = isStatic(member); const name = member.name; if (!name) { continue; } const isPrivate = isPrivateIdentifier(name); - const privateStaticFlags = isPrivate && isStatic ? DeclarationMeaning.PrivateStatic : 0; + const privateStaticFlags = isPrivate && isStaticMember ? DeclarationMeaning.PrivateStatic : 0; const names = isPrivate ? privateIdentifiers : - isStatic ? staticNames : + isStaticMember ? staticNames : instanceNames; const memberName = name && getPropertyNameForPropertyNameNode(name); @@ -33353,8 +33395,8 @@ namespace ts { function checkClassForStaticPropertyNameConflicts(node: ClassLikeDeclaration) { for (const member of node.members) { const memberNameNode = member.name; - const isStatic = hasSyntacticModifier(member, ModifierFlags.Static); - if (isStatic && memberNameNode) { + const isStaticMember = isStatic(member); + if (isStaticMember && memberNameNode) { const memberName = getPropertyNameForPropertyNameNode(memberNameNode); switch (memberName) { case "name": @@ -33536,7 +33578,7 @@ namespace ts { return true; } return n.kind === SyntaxKind.PropertyDeclaration && - !hasSyntacticModifier(n, ModifierFlags.Static) && + !isStatic(n) && !!(n as PropertyDeclaration).initializer; } @@ -34021,13 +34063,13 @@ namespace ts { )) { const reportError = (node.kind === SyntaxKind.MethodDeclaration || node.kind === SyntaxKind.MethodSignature) && - hasSyntacticModifier(node, ModifierFlags.Static) !== hasSyntacticModifier(subsequentNode, ModifierFlags.Static); + isStatic(node) !== isStatic(subsequentNode); // we can get here in two cases // 1. mixed static and instance class members // 2. something with the same name was defined before the set of overloads that prevents them from merging // here we'll report error only for the first case since for second we should already report error in binder if (reportError) { - const diagnostic = hasSyntacticModifier(node, ModifierFlags.Static) ? Diagnostics.Function_overload_must_be_static : Diagnostics.Function_overload_must_not_be_static; + const diagnostic = isStatic(node) ? Diagnostics.Function_overload_must_be_static : Diagnostics.Function_overload_must_not_be_static; error(errorNode, diagnostic); } return; @@ -36999,13 +37041,13 @@ namespace ts { } } - function checkIndexConstraints(type: Type, isStatic?: boolean) { + function checkIndexConstraints(type: Type, isStaticIndex?: boolean) { const indexInfos = getIndexInfosOfType(type); if (indexInfos.length === 0) { return; } for (const prop of getPropertiesOfObjectType(type)) { - if (!(isStatic && prop.flags & SymbolFlags.Prototype)) { + if (!(isStaticIndex && prop.flags & SymbolFlags.Prototype)) { checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty(prop, TypeFlags.StringOrNumberLiteralOrUnique, /*includeNonPublic*/ true), getNonMissingTypeOfSymbol(prop)); } } @@ -37014,7 +37056,7 @@ namespace ts { for (const member of typeDeclaration.members) { // Only process instance properties with computed names here. Static properties cannot be in conflict with indexers, // and properties with literal names were already checked. - if (!hasSyntacticModifier(member, ModifierFlags.Static) && !hasBindableName(member)) { + if (!isStatic(member) && !hasBindableName(member)) { const symbol = getSymbolOfNode(member); checkIndexConstraintForProperty(type, symbol, getTypeOfExpression((member as DynamicNamedDeclaration).name.expression), getNonMissingTypeOfSymbol(symbol)); } @@ -37358,7 +37400,7 @@ namespace ts { if (produceDiagnostics) { checkIndexConstraints(type); - checkIndexConstraints(staticType, /*isStatic*/ true); + checkIndexConstraints(staticType, /*isStaticIndex*/ true); checkTypeForDuplicateIndexSignatures(node); checkPropertyInitialization(node); } @@ -37388,7 +37430,7 @@ namespace ts { function checkClassMember(member: ClassElement | ParameterPropertyDeclaration, memberIsParameterProperty?: boolean) { const hasOverride = hasOverrideModifier(member); - const hasStatic = hasStaticModifier(member); + const hasStatic = isStatic(member); if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) { const declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member); if (!declaredProp) { @@ -37435,7 +37477,7 @@ namespace ts { // iterate over all implemented properties and issue errors on each one which isn't compatible, rather than the class as a whole, if possible let issuedMemberError = false; for (const member of node.members) { - if (hasStaticModifier(member)) { + if (isStatic(member)) { continue; } const declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member); @@ -37691,7 +37733,7 @@ namespace ts { if (getEffectiveModifierFlags(member) & ModifierFlags.Ambient) { continue; } - if (isInstancePropertyWithoutInitializer(member)) { + if (!isStatic(member) && isPropertyWithoutInitializer(member)) { const propName = (member as PropertyDeclaration).name; if (isIdentifier(propName) || isPrivateIdentifier(propName)) { const type = getTypeOfSymbol(getSymbolOfNode(member)); @@ -37705,13 +37747,30 @@ namespace ts { } } - function isInstancePropertyWithoutInitializer(node: Node) { + function isPropertyWithoutInitializer(node: Node) { return node.kind === SyntaxKind.PropertyDeclaration && - !hasSyntacticModifier(node, ModifierFlags.Static | ModifierFlags.Abstract) && + !hasAbstractModifier(node) && !(node as PropertyDeclaration).exclamationToken && !(node as PropertyDeclaration).initializer; } + function isPropertyInitializedInStaticBlocks(propName: Identifier | PrivateIdentifier, propType: Type, staticBlocks: readonly ClassStaticBlockDeclaration[], startPos: number, endPos: number) { + for (const staticBlock of staticBlocks) { + // static block must be within the provided range as they are evaluated in document order (unlike constructors) + if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) { + const reference = factory.createPropertyAccessExpression(factory.createThis(), propName); + setParent(reference.expression, reference); + setParent(reference, staticBlock); + reference.flowNode = staticBlock.returnFlowNode; + const flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType)); + if (!(getFalsyFlags(flowType) & TypeFlags.Undefined)) { + return true; + } + } + } + return false; + } + function isPropertyInitializedInConstructor(propName: Identifier | PrivateIdentifier, propType: Type, constructor: ConstructorDeclaration) { const reference = factory.createPropertyAccessExpression(factory.createThis(), propName); setParent(reference.expression, reference); @@ -39123,7 +39182,7 @@ namespace ts { } const symbols = createSymbolTable(); - let isStatic = false; + let isStaticSymbol = false; populateSymbols(); @@ -39161,7 +39220,7 @@ namespace ts { // add the type parameters into the symbol table // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol. // Note: that the memberFlags come from previous iteration. - if (!isStatic) { + if (!isStaticSymbol) { copySymbols(getMembersOfSymbol(getSymbolOfNode(location as ClassDeclaration | InterfaceDeclaration)), meaning & SymbolFlags.Type); } break; @@ -39177,7 +39236,7 @@ namespace ts { copySymbol(argumentsSymbol, meaning); } - isStatic = hasSyntacticModifier(location, ModifierFlags.Static); + isStaticSymbol = isStatic(location); location = location.parent; } @@ -39776,7 +39835,7 @@ namespace ts { */ function getParentTypeOfClassElement(node: ClassElement) { const classSymbol = getSymbolOfNode(node.parent)!; - return hasSyntacticModifier(node, ModifierFlags.Static) + return isStatic(node) ? getTypeOfSymbol(classSymbol) : getDeclaredTypeOfSymbol(classSymbol); } @@ -41820,8 +41879,8 @@ namespace ts { break; case SyntaxKind.PropertyDeclaration: - if (!hasSyntacticModifier(parent, ModifierFlags.Static) || - !hasEffectiveModifier(parent, ModifierFlags.Readonly)) { + if (!isStatic(parent) || + !hasEffectiveReadonlyModifier(parent)) { return grammarErrorOnNode((parent as PropertyDeclaration).name, Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly); } break; @@ -42238,7 +42297,7 @@ namespace ts { } if (isPropertyDeclaration(node) && node.exclamationToken && (!isClassLike(node.parent) || !node.type || node.initializer || - node.flags & NodeFlags.Ambient || hasSyntacticModifier(node, ModifierFlags.Static | ModifierFlags.Abstract))) { + node.flags & NodeFlags.Ambient || isStatic(node) || hasAbstractModifier(node))) { const message = node.initializer ? Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions : !node.type diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 687b1a79c299c..134588f89fe57 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3348,6 +3348,10 @@ "category": "Error", "code": 2816 }, + "Property '{0}' has no initializer and is not definitely assigned in a class static block.": { + "category": "Error", + "code": 2817 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index c6d0e8956aeec..4a8b407578981 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -137,8 +137,8 @@ namespace ts { // We don't need to transform `super` property access when targeting ES5, ES3 because // the es2015 transformation handles those. - const shouldTransformSuperInStaticFields = (languageVersion <= ScriptTarget.ES2021 || !useDefineForClassFields) && languageVersion >= ScriptTarget.ES2015; - const shouldTransformThisInStaticFields = languageVersion <= ScriptTarget.ES2021 || !useDefineForClassFields; + const shouldTransformSuperInStaticInitializers = (languageVersion <= ScriptTarget.ES2021 || !useDefineForClassFields) && languageVersion >= ScriptTarget.ES2015; + const shouldTransformThisInStaticInitializers = languageVersion <= ScriptTarget.ES2021 || !useDefineForClassFields; const previousOnSubstituteNode = context.onSubstituteNode; context.onSubstituteNode = onSubstituteNode; @@ -165,7 +165,7 @@ namespace ts { const classLexicalEnvironmentMap = new Map(); let currentClassLexicalEnvironment: ClassLexicalEnvironment | undefined; let currentComputedPropertyNameClassLexicalEnvironment: ClassLexicalEnvironment | undefined; - let currentStaticPropertyDeclaration: PropertyDeclaration | undefined; + let currentStaticPropertyDeclarationOrStaticBlock: PropertyDeclaration | ClassStaticBlockDeclaration | undefined; return chainBundle(context, transformSourceFile); @@ -198,8 +198,8 @@ namespace ts { } if (node.transformFlags & TransformFlags.ContainsClassFields || node.transformFlags & TransformFlags.ContainsLexicalSuper && - shouldTransformSuperInStaticFields && - currentStaticPropertyDeclaration && + shouldTransformSuperInStaticInitializers && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment) { switch (node.kind) { case SyntaxKind.PrefixUnaryExpression: @@ -225,10 +225,10 @@ namespace ts { case SyntaxKind.MethodDeclaration: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: { - const savedCurrentStaticPropertyDeclaration = currentStaticPropertyDeclaration; - currentStaticPropertyDeclaration = undefined; + const savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock; + currentStaticPropertyDeclarationOrStaticBlock = undefined; const result = visitEachChild(node, visitor, context); - currentStaticPropertyDeclaration = savedCurrentStaticPropertyDeclaration; + currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock; return result; } } @@ -236,14 +236,6 @@ namespace ts { return visitEachChild(node, visitor, context); } - function visitClassStaticBlockDeclaration(node: ClassStaticBlockDeclaration) { - if (!shouldTransformPrivateElementsOrClassStaticBlocks) { - return visitEachChild(node, classElementVisitor, context); - } - // ClassStaticBlockDeclaration for classes are transformed in `visitClassDeclaration` or `visitClassExpression`. - return undefined; - } - function discardedValueVisitor(node: Node): VisitResult { return visitorWorker(node, /*valueIsDiscarded*/ true); } @@ -477,10 +469,10 @@ namespace ts { ); } } - if (shouldTransformSuperInStaticFields && + if (shouldTransformSuperInStaticInitializers && isSuperProperty(node) && isIdentifier(node.name) && - currentStaticPropertyDeclaration && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment) { const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; if (facts & ClassFacts.ClassWasDecorated) { @@ -502,9 +494,9 @@ namespace ts { } function visitElementAccessExpression(node: ElementAccessExpression) { - if (shouldTransformSuperInStaticFields && + if (shouldTransformSuperInStaticInitializers && isSuperProperty(node) && - currentStaticPropertyDeclaration && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment) { const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; if (facts & ClassFacts.ClassWasDecorated) { @@ -552,9 +544,9 @@ namespace ts { return expression; } } - else if (shouldTransformSuperInStaticFields && + else if (shouldTransformSuperInStaticInitializers && isSuperProperty(node.operand) && - currentStaticPropertyDeclaration && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment) { // converts `++super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = ++_a), _classTemp), _b)` // converts `++super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = ++_b), _classTemp), _c)` @@ -657,9 +649,9 @@ namespace ts { ); } - if (shouldTransformSuperInStaticFields && + if (shouldTransformSuperInStaticInitializers && isSuperProperty(node.expression) && - currentStaticPropertyDeclaration && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment?.classConstructor) { // converts `super.f(...)` into `Reflect.get(_baseTemp, "f", _classTemp).call(_classTemp, ...)` @@ -691,9 +683,9 @@ namespace ts { visitNode(node.template, visitor, isTemplateLiteral) ); } - if (shouldTransformSuperInStaticFields && + if (shouldTransformSuperInStaticInitializers && isSuperProperty(node.tag) && - currentStaticPropertyDeclaration && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment?.classConstructor) { // converts `` super.f`x` `` into `` Reflect.get(_baseTemp, "f", _classTemp).bind(_classTemp)`x` `` @@ -716,17 +708,22 @@ namespace ts { function transformClassStaticBlockDeclaration(node: ClassStaticBlockDeclaration) { if (shouldTransformPrivateElementsOrClassStaticBlocks) { + if (currentClassLexicalEnvironment) { + classLexicalEnvironmentMap.set(getOriginalNodeId(node), currentClassLexicalEnvironment); + } + startLexicalEnvironment(); + const savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock; + currentStaticPropertyDeclarationOrStaticBlock = node; let statements = visitNodes(node.body.statements, visitor, isStatement); statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment()); + currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock; - return setTextRange( - setOriginalNode( - factory.createImmediatelyInvokedArrowFunction(statements), - node - ), - node - ); + const iife = factory.createImmediatelyInvokedArrowFunction(statements); + setOriginalNode(iife, node); + setTextRange(iife, node); + addEmitFlags(iife, EmitFlags.AdviseOnEmitNode); + return iife; } } @@ -759,9 +756,9 @@ namespace ts { ); } } - else if (shouldTransformSuperInStaticFields && + else if (shouldTransformSuperInStaticInitializers && isSuperProperty(node.left) && - currentStaticPropertyDeclaration && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment) { const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; if (facts & ClassFacts.ClassWasDecorated) { @@ -930,18 +927,18 @@ namespace ts { facts |= ClassFacts.ClassWasDecorated; } for (const member of node.members) { - if (!hasStaticModifier(member)) continue; + if (!isStatic(member)) continue; if (member.name && isPrivateIdentifier(member.name) && shouldTransformPrivateElementsOrClassStaticBlocks) { facts |= ClassFacts.NeedsClassConstructorReference; } - if (isPropertyDeclaration(member)) { - if (shouldTransformThisInStaticFields && member.transformFlags & TransformFlags.ContainsLexicalThis) { + if (isPropertyDeclaration(member) || isClassStaticBlockDeclaration(member)) { + if (shouldTransformThisInStaticInitializers && member.transformFlags & TransformFlags.ContainsLexicalThis) { facts |= ClassFacts.NeedsSubstitutionForThisInClassStaticField; if (!(facts & ClassFacts.ClassWasDecorated)) { facts |= ClassFacts.NeedsClassConstructorReference; } } - if (shouldTransformSuperInStaticFields && member.transformFlags & TransformFlags.ContainsLexicalSuper) { + if (shouldTransformSuperInStaticInitializers && member.transformFlags & TransformFlags.ContainsLexicalSuper) { if (!(facts & ClassFacts.ClassWasDecorated)) { facts |= ClassFacts.NeedsClassConstructorReference | ClassFacts.NeedsClassSuperReference; } @@ -1118,6 +1115,14 @@ namespace ts { return classExpression; } + function visitClassStaticBlockDeclaration(node: ClassStaticBlockDeclaration) { + if (!shouldTransformPrivateElementsOrClassStaticBlocks) { + return visitEachChild(node, classElementVisitor, context); + } + // ClassStaticBlockDeclaration for classes are transformed in `visitClassDeclaration` or `visitClassExpression`. + return undefined; + } + function transformClassMembers(node: ClassDeclaration | ClassExpression, isDerivedClass: boolean) { if (shouldTransformPrivateElementsOrClassStaticBlocks) { // Declare private names. @@ -1158,7 +1163,7 @@ namespace ts { } function isClassElementThatRequiresConstructorStatement(member: ClassElement) { - if (hasStaticModifier(member) || hasSyntacticModifier(getOriginalNode(member), ModifierFlags.Abstract)) { + if (isStatic(member) || hasSyntacticModifier(getOriginalNode(member), ModifierFlags.Abstract)) { return false; } if (useDefineForClassFields) { @@ -1288,7 +1293,9 @@ namespace ts { */ function addPropertyOrClassStaticBlockStatements(statements: Statement[], properties: readonly (PropertyDeclaration | ClassStaticBlockDeclaration)[], receiver: LeftHandSideExpression) { for (const property of properties) { - const expression = isClassStaticBlockDeclaration(property) ? transformClassStaticBlockDeclaration(property) : transformProperty(property, receiver); + const expression = isClassStaticBlockDeclaration(property) ? + transformClassStaticBlockDeclaration(property) : + transformProperty(property, receiver); if (!expression) { continue; } @@ -1330,7 +1337,7 @@ namespace ts { * @param receiver The object receiving the property assignment. */ function transformProperty(property: PropertyDeclaration, receiver: LeftHandSideExpression) { - const savedCurrentStaticPropertyDeclaration = currentStaticPropertyDeclaration; + const savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock; const transformed = transformPropertyWorker(property, receiver); if (transformed && hasStaticModifier(property) && currentClassLexicalEnvironment?.facts) { // capture the lexical environment for the member @@ -1338,7 +1345,7 @@ namespace ts { addEmitFlags(transformed, EmitFlags.AdviseOnEmitNode); classLexicalEnvironmentMap.set(getOriginalNodeId(transformed), currentClassLexicalEnvironment); } - currentStaticPropertyDeclaration = savedCurrentStaticPropertyDeclaration; + currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock; return transformed; } @@ -1350,7 +1357,7 @@ namespace ts { : property.name; if (hasStaticModifier(property)) { - currentStaticPropertyDeclaration = property; + currentStaticPropertyDeclarationOrStaticBlock = property; } if (shouldTransformPrivateElementsOrClassStaticBlocks && isPrivateIdentifier(propertyName)) { @@ -1881,9 +1888,9 @@ namespace ts { if (isPrivateIdentifierPropertyAccessExpression(target)) { wrapped = wrapPrivateIdentifierForDestructuringTarget(target); } - else if (shouldTransformSuperInStaticFields && + else if (shouldTransformSuperInStaticInitializers && isSuperProperty(target) && - currentStaticPropertyDeclaration && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment) { const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; if (facts & ClassFacts.ClassWasDecorated) { @@ -1936,9 +1943,9 @@ namespace ts { if (isPrivateIdentifierPropertyAccessExpression(target)) { wrapped = wrapPrivateIdentifierForDestructuringTarget(target); } - else if (shouldTransformSuperInStaticFields && + else if (shouldTransformSuperInStaticInitializers && isSuperProperty(target) && - currentStaticPropertyDeclaration && + currentStaticPropertyDeclarationOrStaticBlock && currentClassLexicalEnvironment) { const { classConstructor, superClassReference, facts } = currentClassLexicalEnvironment; if (facts & ClassFacts.ClassWasDecorated) { diff --git a/src/compiler/transformers/declarations/diagnostics.ts b/src/compiler/transformers/declarations/diagnostics.ts index 7be27b453a0d2..81b00987efdd8 100644 --- a/src/compiler/transformers/declarations/diagnostics.ts +++ b/src/compiler/transformers/declarations/diagnostics.ts @@ -75,7 +75,7 @@ namespace ts { } function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult: SymbolAccessibilityResult) { - if (hasSyntacticModifier(node, ModifierFlags.Static)) { + if (isStatic(node)) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -106,7 +106,7 @@ namespace ts { } function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult: SymbolAccessibilityResult) { - if (hasSyntacticModifier(node, ModifierFlags.Static)) { + if (isStatic(node)) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -173,7 +173,7 @@ namespace ts { else if (node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertyAccessExpression || node.kind === SyntaxKind.PropertySignature || (node.kind === SyntaxKind.Parameter && hasSyntacticModifier(node.parent, ModifierFlags.Private))) { // TODO(jfreeman): Deal with computed properties in error reporting. - if (hasSyntacticModifier(node, ModifierFlags.Static)) { + if (isStatic(node)) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -210,7 +210,7 @@ namespace ts { if (node.kind === SyntaxKind.SetAccessor) { // Getters can infer the return type from the returned expression, but setters cannot, so the // "_from_external_module_1_but_cannot_be_named" case cannot occur. - if (hasSyntacticModifier(node, ModifierFlags.Static)) { + if (isStatic(node)) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1; @@ -222,7 +222,7 @@ namespace ts { } } else { - if (hasSyntacticModifier(node, ModifierFlags.Static)) { + if (isStatic(node)) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -270,7 +270,7 @@ namespace ts { case SyntaxKind.MethodDeclaration: case SyntaxKind.MethodSignature: - if (hasSyntacticModifier(node, ModifierFlags.Static)) { + if (isStatic(node)) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : @@ -349,7 +349,7 @@ namespace ts { case SyntaxKind.MethodDeclaration: case SyntaxKind.MethodSignature: - if (hasSyntacticModifier(node.parent, ModifierFlags.Static)) { + if (isStatic(node.parent)) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -417,7 +417,7 @@ namespace ts { case SyntaxKind.MethodDeclaration: case SyntaxKind.MethodSignature: - if (hasSyntacticModifier(node.parent, ModifierFlags.Static)) { + if (isStatic(node.parent)) { diagnosticMessage = Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; } else if (node.parent.parent.kind === SyntaxKind.ClassDeclaration) { diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index ff0c8291fba48..52963c530ab77 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -1871,7 +1871,7 @@ namespace ts { function transformFunctionLikeToExpression(node: FunctionLikeDeclaration, location: TextRange | undefined, name: Identifier | undefined, container: Node | undefined): FunctionExpression { const savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; - const ancestorFacts = container && isClassLike(container) && !hasSyntacticModifier(node, ModifierFlags.Static) + const ancestorFacts = container && isClassLike(container) && !isStatic(node) ? enterSubtree(HierarchyFacts.FunctionExcludes, HierarchyFacts.FunctionIncludes | HierarchyFacts.NonStaticClassElement) : enterSubtree(HierarchyFacts.FunctionExcludes, HierarchyFacts.FunctionIncludes); const parameters = visitParameterList(node.parameters, visitor, context); @@ -4379,7 +4379,7 @@ namespace ts { } function getClassMemberPrefix(node: ClassExpression | ClassDeclaration, member: ClassElement) { - return hasSyntacticModifier(member, ModifierFlags.Static) + return isStatic(member) ? factory.getInternalName(node) : factory.createPropertyAccessExpression(factory.getInternalName(node), "prototype"); } diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index ff416451eb72e..aa677c911b874 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -945,7 +945,7 @@ namespace ts { * @param member The class member. */ function isStaticDecoratedClassElement(member: ClassElement, parent: ClassLikeDeclaration) { - return isDecoratedClassElement(member, /*isStatic*/ true, parent); + return isDecoratedClassElement(member, /*isStaticElement*/ true, parent); } /** @@ -955,7 +955,7 @@ namespace ts { * @param member The class member. */ function isInstanceDecoratedClassElement(member: ClassElement, parent: ClassLikeDeclaration) { - return isDecoratedClassElement(member, /*isStatic*/ false, parent); + return isDecoratedClassElement(member, /*isStaticElement*/ false, parent); } /** @@ -964,9 +964,9 @@ namespace ts { * * @param member The class member. */ - function isDecoratedClassElement(member: ClassElement, isStatic: boolean, parent: ClassLikeDeclaration) { + function isDecoratedClassElement(member: ClassElement, isStaticElement: boolean, parent: ClassLikeDeclaration) { return nodeOrChildIsDecorated(member, parent) - && isStatic === hasSyntacticModifier(member, ModifierFlags.Static); + && isStaticElement === isStatic(member); } /** @@ -3158,7 +3158,7 @@ namespace ts { } function getClassMemberPrefix(node: ClassExpression | ClassDeclaration, member: ClassElement) { - return hasSyntacticModifier(member, ModifierFlags.Static) + return isStatic(member) ? factory.getDeclarationName(node) : getClassPrototype(node); } diff --git a/src/compiler/transformers/utilities.ts b/src/compiler/transformers/utilities.ts index b899cf0991ea4..276d034c7b92c 100644 --- a/src/compiler/transformers/utilities.ts +++ b/src/compiler/transformers/utilities.ts @@ -385,6 +385,6 @@ namespace ts { * @param member The class element node. */ export function isNonStaticMethodOrAccessorWithPrivateName(member: ClassElement): member is PrivateIdentifierMethodDeclaration | PrivateIdentifierAccessorDeclaration { - return !hasStaticModifier(member) && isMethodOrAccessor(member) && isPrivateIdentifier(member.name); + return !isStatic(member) && isMethodOrAccessor(member) && isPrivateIdentifier(member.name); } } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 3377f74a79ff7..7c0133676e00a 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1543,6 +1543,8 @@ namespace ts { readonly body: Block; /* @internal */ readonly decorators?: NodeArray; // Present for use with reporting a grammar error /* @internal */ readonly modifier?: ModifiersArray; // Present for use with reporting a grammar error + /* @internal */ endFlowNode?: FlowNode; + /* @internal */ returnFlowNode?: FlowNode; } export interface TypeNode extends Node { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 9a1fb530a64c1..479e7cabb0d81 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1706,6 +1706,7 @@ namespace ts { case SyntaxKind.Constructor: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: + case SyntaxKind.ClassStaticBlockDeclaration: return node; case SyntaxKind.Decorator: // Decorators are always applied outside of the body of a class or method. @@ -4400,7 +4401,7 @@ namespace ts { else { forEach(declarations, member => { if (isAccessor(member) - && hasSyntacticModifier(member, ModifierFlags.Static) === hasSyntacticModifier(accessor, ModifierFlags.Static)) { + && isStatic(member) === isStatic(accessor)) { const memberName = getPropertyNameForPropertyNameNode(member.name); const accessorName = getPropertyNameForPropertyNameNode(accessor.name); if (memberName === accessorName) { @@ -4711,6 +4712,11 @@ namespace ts { return !!getSelectedSyntacticModifierFlags(node, flags); } + export function isStatic(node: Node) { + // https://tc39.es/ecma262/#sec-static-semantics-isstatic + return isClassElement(node) && hasStaticModifier(node) || isClassStaticBlockDeclaration(node); + } + export function hasStaticModifier(node: Node): boolean { return hasSyntacticModifier(node, ModifierFlags.Static); } diff --git a/src/services/completions.ts b/src/services/completions.ts index ca907646f0afa..98701ec193fd3 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -2173,6 +2173,9 @@ namespace ts.Completions { break; } } + if (isClassStaticBlockDeclaration(classElement)) { + classElementModifierFlags |= ModifierFlags.Static; + } // No member list for private methods if (!(classElementModifierFlags & ModifierFlags.Private)) { @@ -2626,7 +2629,7 @@ namespace ts.Completions { } // do not filter it out if the static presence doesnt match - if (hasEffectiveModifier(m, ModifierFlags.Static) !== !!(currentClassElementModifierFlags & ModifierFlags.Static)) { + if (isStatic(m) !== !!(currentClassElementModifierFlags & ModifierFlags.Static)) { continue; } diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 8422fbe09c8da..45308754a66dd 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -1684,7 +1684,7 @@ namespace ts.FindAllReferences { Debug.assert(classLike.name === referenceLocation); const addRef = state.referenceAdder(search.symbol); for (const member of classLike.members) { - if (!(isMethodOrAccessor(member) && hasSyntacticModifier(member, ModifierFlags.Static))) { + if (!(isMethodOrAccessor(member) && isStatic(member))) { continue; } if (member.body) { @@ -1917,7 +1917,7 @@ namespace ts.FindAllReferences { // If we have a 'super' container, we must have an enclosing class. // Now make sure the owning class is the same as the search-space // and has the same static qualifier as the original 'super's owner. - return container && (ModifierFlags.Static & getSyntacticModifierFlags(container)) === staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined; + return container && isStatic(container) === !!staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined; }); return [{ definition: { type: DefinitionKind.Symbol, symbol: searchSpaceNode.symbol }, references }]; @@ -1983,7 +1983,7 @@ namespace ts.FindAllReferences { case SyntaxKind.ObjectLiteralExpression: // Make sure the container belongs to the same class/object literals // and has the appropriate static modifier from the original container. - return container.parent && searchSpaceNode.symbol === container.parent.symbol && (getSyntacticModifierFlags(container) & ModifierFlags.Static) === staticFlag; + return container.parent && searchSpaceNode.symbol === container.parent.symbol && isStatic(container) === !!staticFlag; case SyntaxKind.SourceFile: return container.kind === SyntaxKind.SourceFile && !isExternalModule(container as SourceFile) && !isParameterName(node); } @@ -2030,7 +2030,7 @@ namespace ts.FindAllReferences { (sym, root, base) => { // static method/property and instance method/property might have the same name. Only include static or only include instance. if (base) { - if (isStatic(symbol) !== isStatic(base)) { + if (isStaticSymbol(symbol) !== isStaticSymbol(base)) { base = undefined; } } @@ -2196,7 +2196,7 @@ namespace ts.FindAllReferences { readonly kind: NodeEntryKind | undefined; } - function isStatic(symbol: Symbol): boolean { + function isStaticSymbol(symbol: Symbol): boolean { if (!symbol.valueDeclaration) { return false; } const modifierFlags = getEffectiveModifierFlags(symbol.valueDeclaration); return !!(modifierFlags & ModifierFlags.Static); @@ -2210,7 +2210,7 @@ namespace ts.FindAllReferences { // check whether the symbol used to search itself is just the searched one. if (baseSymbol) { // static method/property and instance method/property might have the same name. Only check static or only check instance. - if (isStatic(referenceSymbol) !== isStatic(baseSymbol)) { + if (isStaticSymbol(referenceSymbol) !== isStaticSymbol(baseSymbol)) { baseSymbol = undefined; } } diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index ab315d3eb2d34..6f9cdd55950c3 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -627,7 +627,7 @@ namespace ts.NavigationBar { case SyntaxKind.MethodDeclaration: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - return hasSyntacticModifier(a, ModifierFlags.Static) === hasSyntacticModifier(b, ModifierFlags.Static); + return isStatic(a) === isStatic(b); case SyntaxKind.ModuleDeclaration: return areSameModule(a as ModuleDeclaration, b as ModuleDeclaration) && getFullyQualifiedModuleName(a as ModuleDeclaration) === getFullyQualifiedModuleName(b as ModuleDeclaration); diff --git a/src/services/refactors/extractSymbol.ts b/src/services/refactors/extractSymbol.ts index ebf72aa7589d3..7c5e881ce5537 100644 --- a/src/services/refactors/extractSymbol.ts +++ b/src/services/refactors/extractSymbol.ts @@ -398,7 +398,7 @@ namespace ts.refactor.extractSymbol { let current: Node = nodeToCheck; while (current !== containingClass) { if (current.kind === SyntaxKind.PropertyDeclaration) { - if (hasSyntacticModifier(current, ModifierFlags.Static)) { + if (isStatic(current)) { rangeFacts |= RangeFacts.InStaticRegion; } break; @@ -411,7 +411,7 @@ namespace ts.refactor.extractSymbol { break; } else if (current.kind === SyntaxKind.MethodDeclaration) { - if (hasSyntacticModifier(current, ModifierFlags.Static)) { + if (isStatic(current)) { rangeFacts |= RangeFacts.InStaticRegion; } } diff --git a/tests/baselines/reference/classStaticBlock4.errors.txt b/tests/baselines/reference/classStaticBlock4.errors.txt index 4bd2b377e0b97..d4ec1db72f646 100644 --- a/tests/baselines/reference/classStaticBlock4.errors.txt +++ b/tests/baselines/reference/classStaticBlock4.errors.txt @@ -1,22 +1,16 @@ -tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts(5,9): error TS2332: 'this' cannot be referenced in current location. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts(8,9): error TS2332: 'this' cannot be referenced in current location. tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts(8,14): error TS2729: Property 's2' is used before its initialization. tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts(9,11): error TS2729: Property 's2' is used before its initialization. -==== tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts (4 errors) ==== +==== tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts (2 errors) ==== class C { static s1 = 1; static { this.s1; - ~~~~ -!!! error TS2332: 'this' cannot be referenced in current location. C.s1; this.s2; - ~~~~ -!!! error TS2332: 'this' cannot be referenced in current location. ~~ !!! error TS2729: Property 's2' is used before its initialization. !!! related TS2728 tests/cases/conformance/classes/classStaticBlock/classStaticBlock4.ts:12:12: 's2' is declared here. diff --git a/tests/baselines/reference/classStaticBlock5(target=es2015).errors.txt b/tests/baselines/reference/classStaticBlock5(target=es2015).errors.txt deleted file mode 100644 index d60e6eb41b532..0000000000000 --- a/tests/baselines/reference/classStaticBlock5(target=es2015).errors.txt +++ /dev/null @@ -1,28 +0,0 @@ -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(11,9): error TS2332: 'this' cannot be referenced in current location. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(12,9): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(13,9): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. - - -==== tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts (3 errors) ==== - class B { - static a = 1; - static b = 2; - } - - class C extends B { - static b = 3; - static c = super.a - - static { - this.b; - ~~~~ -!!! error TS2332: 'this' cannot be referenced in current location. - super.b; - ~~~~~ -!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. - super.a; - ~~~~~ -!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. - } - } - \ No newline at end of file diff --git a/tests/baselines/reference/classStaticBlock5(target=es2015).js b/tests/baselines/reference/classStaticBlock5(target=es2015).js index 43be0da601da4..ef2d9f44234ff 100644 --- a/tests/baselines/reference/classStaticBlock5(target=es2015).js +++ b/tests/baselines/reference/classStaticBlock5(target=es2015).js @@ -28,7 +28,7 @@ _a = C; C.b = 3; C.c = Reflect.get(_b, "a", _a); (() => { - this.b; - super.b; - super.a; + _a.b; + Reflect.get(_b, "b", _a); + Reflect.get(_b, "a", _a); })(); diff --git a/tests/baselines/reference/classStaticBlock5(target=es2015).symbols b/tests/baselines/reference/classStaticBlock5(target=es2015).symbols index a1b2cb79675d9..4559a1eaaf287 100644 --- a/tests/baselines/reference/classStaticBlock5(target=es2015).symbols +++ b/tests/baselines/reference/classStaticBlock5(target=es2015).symbols @@ -29,7 +29,14 @@ class C extends B { >b : Symbol(C.b, Decl(classStaticBlock5.ts, 5, 19)) super.b; +>super.b : Symbol(B.b, Decl(classStaticBlock5.ts, 1, 17)) +>super : Symbol(B, Decl(classStaticBlock5.ts, 0, 0)) +>b : Symbol(B.b, Decl(classStaticBlock5.ts, 1, 17)) + super.a; +>super.a : Symbol(B.a, Decl(classStaticBlock5.ts, 0, 9)) +>super : Symbol(B, Decl(classStaticBlock5.ts, 0, 0)) +>a : Symbol(B.a, Decl(classStaticBlock5.ts, 0, 9)) } } diff --git a/tests/baselines/reference/classStaticBlock5(target=es2015).types b/tests/baselines/reference/classStaticBlock5(target=es2015).types index 273ab281e6aaa..8aebace4d70e3 100644 --- a/tests/baselines/reference/classStaticBlock5(target=es2015).types +++ b/tests/baselines/reference/classStaticBlock5(target=es2015).types @@ -32,14 +32,14 @@ class C extends B { >b : number super.b; ->super.b : any ->super : any ->b : any +>super.b : number +>super : typeof B +>b : number super.a; ->super.a : any ->super : any ->a : any +>super.a : number +>super : typeof B +>a : number } } diff --git a/tests/baselines/reference/classStaticBlock5(target=es5).errors.txt b/tests/baselines/reference/classStaticBlock5(target=es5).errors.txt index 6e2a142e46c6d..18ca200f7ceb4 100644 --- a/tests/baselines/reference/classStaticBlock5(target=es5).errors.txt +++ b/tests/baselines/reference/classStaticBlock5(target=es5).errors.txt @@ -1,10 +1,9 @@ tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(8,22): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(11,9): error TS2332: 'this' cannot be referenced in current location. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(12,9): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(13,9): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. +tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(12,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. +tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(13,15): error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. -==== tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts (4 errors) ==== +==== tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts (3 errors) ==== class B { static a = 1; static b = 2; @@ -18,14 +17,12 @@ tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(13,9): err static { this.b; - ~~~~ -!!! error TS2332: 'this' cannot be referenced in current location. super.b; - ~~~~~ -!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. super.a; - ~~~~~ -!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. + ~ +!!! error TS2340: Only public and protected methods of the base class are accessible via the 'super' keyword. } } \ No newline at end of file diff --git a/tests/baselines/reference/classStaticBlock5(target=es5).js b/tests/baselines/reference/classStaticBlock5(target=es5).js index 0b26d0f4dcd1e..db5b10ebd4ca3 100644 --- a/tests/baselines/reference/classStaticBlock5(target=es5).js +++ b/tests/baselines/reference/classStaticBlock5(target=es5).js @@ -45,10 +45,12 @@ var C = /** @class */ (function (_super) { function C() { return _super !== null && _super.apply(this, arguments) || this; } + var _a; + _a = C; C.b = 3; C.c = _super.a; (function () { - _this.b; + _a.b; _super.b; _super.a; })(); diff --git a/tests/baselines/reference/classStaticBlock5(target=es5).symbols b/tests/baselines/reference/classStaticBlock5(target=es5).symbols index a1b2cb79675d9..4559a1eaaf287 100644 --- a/tests/baselines/reference/classStaticBlock5(target=es5).symbols +++ b/tests/baselines/reference/classStaticBlock5(target=es5).symbols @@ -29,7 +29,14 @@ class C extends B { >b : Symbol(C.b, Decl(classStaticBlock5.ts, 5, 19)) super.b; +>super.b : Symbol(B.b, Decl(classStaticBlock5.ts, 1, 17)) +>super : Symbol(B, Decl(classStaticBlock5.ts, 0, 0)) +>b : Symbol(B.b, Decl(classStaticBlock5.ts, 1, 17)) + super.a; +>super.a : Symbol(B.a, Decl(classStaticBlock5.ts, 0, 9)) +>super : Symbol(B, Decl(classStaticBlock5.ts, 0, 0)) +>a : Symbol(B.a, Decl(classStaticBlock5.ts, 0, 9)) } } diff --git a/tests/baselines/reference/classStaticBlock5(target=es5).types b/tests/baselines/reference/classStaticBlock5(target=es5).types index 273ab281e6aaa..8aebace4d70e3 100644 --- a/tests/baselines/reference/classStaticBlock5(target=es5).types +++ b/tests/baselines/reference/classStaticBlock5(target=es5).types @@ -32,14 +32,14 @@ class C extends B { >b : number super.b; ->super.b : any ->super : any ->b : any +>super.b : number +>super : typeof B +>b : number super.a; ->super.a : any ->super : any ->a : any +>super.a : number +>super : typeof B +>a : number } } diff --git a/tests/baselines/reference/classStaticBlock5(target=esnext).errors.txt b/tests/baselines/reference/classStaticBlock5(target=esnext).errors.txt deleted file mode 100644 index d60e6eb41b532..0000000000000 --- a/tests/baselines/reference/classStaticBlock5(target=esnext).errors.txt +++ /dev/null @@ -1,28 +0,0 @@ -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(11,9): error TS2332: 'this' cannot be referenced in current location. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(12,9): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts(13,9): error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. - - -==== tests/cases/conformance/classes/classStaticBlock/classStaticBlock5.ts (3 errors) ==== - class B { - static a = 1; - static b = 2; - } - - class C extends B { - static b = 3; - static c = super.a - - static { - this.b; - ~~~~ -!!! error TS2332: 'this' cannot be referenced in current location. - super.b; - ~~~~~ -!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. - super.a; - ~~~~~ -!!! error TS2660: 'super' can only be referenced in members of derived classes or object literal expressions. - } - } - \ No newline at end of file diff --git a/tests/baselines/reference/classStaticBlock5(target=esnext).symbols b/tests/baselines/reference/classStaticBlock5(target=esnext).symbols index a1b2cb79675d9..4559a1eaaf287 100644 --- a/tests/baselines/reference/classStaticBlock5(target=esnext).symbols +++ b/tests/baselines/reference/classStaticBlock5(target=esnext).symbols @@ -29,7 +29,14 @@ class C extends B { >b : Symbol(C.b, Decl(classStaticBlock5.ts, 5, 19)) super.b; +>super.b : Symbol(B.b, Decl(classStaticBlock5.ts, 1, 17)) +>super : Symbol(B, Decl(classStaticBlock5.ts, 0, 0)) +>b : Symbol(B.b, Decl(classStaticBlock5.ts, 1, 17)) + super.a; +>super.a : Symbol(B.a, Decl(classStaticBlock5.ts, 0, 9)) +>super : Symbol(B, Decl(classStaticBlock5.ts, 0, 0)) +>a : Symbol(B.a, Decl(classStaticBlock5.ts, 0, 9)) } } diff --git a/tests/baselines/reference/classStaticBlock5(target=esnext).types b/tests/baselines/reference/classStaticBlock5(target=esnext).types index 273ab281e6aaa..8aebace4d70e3 100644 --- a/tests/baselines/reference/classStaticBlock5(target=esnext).types +++ b/tests/baselines/reference/classStaticBlock5(target=esnext).types @@ -32,14 +32,14 @@ class C extends B { >b : number super.b; ->super.b : any ->super : any ->b : any +>super.b : number +>super : typeof B +>b : number super.a; ->super.a : any ->super : any ->a : any +>super.a : number +>super : typeof B +>a : number } } diff --git a/tests/baselines/reference/classStaticBlock6.errors.txt b/tests/baselines/reference/classStaticBlock6.errors.txt index 95e69c743769c..82f056d5b8423 100644 --- a/tests/baselines/reference/classStaticBlock6.errors.txt +++ b/tests/baselines/reference/classStaticBlock6.errors.txt @@ -6,7 +6,7 @@ tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(17,9): err tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(18,9): error TS18037: Await expression cannot be used inside a class static block. tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(18,14): error TS1109: Expression expected. tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(19,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. -tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(32,17): error TS2335: 'super' can only be referenced in a derived class. +tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(32,17): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(41,13): error TS2815: 'arguments' cannot be referenced in property initializers. tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(42,13): error TS18037: Await expression cannot be used inside a class static block. tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(42,18): error TS1109: Expression expected. @@ -65,7 +65,7 @@ tests/cases/conformance/classes/classStaticBlock/classStaticBlock6.ts(55,13): er } super(); ~~~~~ -!!! error TS2335: 'super' can only be referenced in a derived class. +!!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. } } } diff --git a/tests/baselines/reference/classStaticBlockUseBeforeDef1.symbols b/tests/baselines/reference/classStaticBlockUseBeforeDef1.symbols new file mode 100644 index 0000000000000..3a432e830e4b1 --- /dev/null +++ b/tests/baselines/reference/classStaticBlockUseBeforeDef1.symbols @@ -0,0 +1,32 @@ +=== tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts === +class C { +>C : Symbol(C, Decl(classStaticBlockUseBeforeDef1.ts, 0, 0)) + + static x; +>x : Symbol(C.x, Decl(classStaticBlockUseBeforeDef1.ts, 0, 9)) + + static { + this.x = 1; +>this.x : Symbol(C.x, Decl(classStaticBlockUseBeforeDef1.ts, 0, 9)) +>this : Symbol(C, Decl(classStaticBlockUseBeforeDef1.ts, 0, 0)) +>x : Symbol(C.x, Decl(classStaticBlockUseBeforeDef1.ts, 0, 9)) + } + static y = this.x; +>y : Symbol(C.y, Decl(classStaticBlockUseBeforeDef1.ts, 4, 5)) +>this.x : Symbol(C.x, Decl(classStaticBlockUseBeforeDef1.ts, 0, 9)) +>this : Symbol(C, Decl(classStaticBlockUseBeforeDef1.ts, 0, 0)) +>x : Symbol(C.x, Decl(classStaticBlockUseBeforeDef1.ts, 0, 9)) + + static z; +>z : Symbol(C.z, Decl(classStaticBlockUseBeforeDef1.ts, 5, 22)) + + static { + this.z = this.y; +>this.z : Symbol(C.z, Decl(classStaticBlockUseBeforeDef1.ts, 5, 22)) +>this : Symbol(C, Decl(classStaticBlockUseBeforeDef1.ts, 0, 0)) +>z : Symbol(C.z, Decl(classStaticBlockUseBeforeDef1.ts, 5, 22)) +>this.y : Symbol(C.y, Decl(classStaticBlockUseBeforeDef1.ts, 4, 5)) +>this : Symbol(C, Decl(classStaticBlockUseBeforeDef1.ts, 0, 0)) +>y : Symbol(C.y, Decl(classStaticBlockUseBeforeDef1.ts, 4, 5)) + } +} diff --git a/tests/baselines/reference/classStaticBlockUseBeforeDef1.types b/tests/baselines/reference/classStaticBlockUseBeforeDef1.types new file mode 100644 index 0000000000000..084534b0a169f --- /dev/null +++ b/tests/baselines/reference/classStaticBlockUseBeforeDef1.types @@ -0,0 +1,35 @@ +=== tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts === +class C { +>C : C + + static x; +>x : number + + static { + this.x = 1; +>this.x = 1 : 1 +>this.x : number +>this : typeof C +>x : number +>1 : 1 + } + static y = this.x; +>y : number +>this.x : number +>this : typeof C +>x : number + + static z; +>z : number + + static { + this.z = this.y; +>this.z = this.y : number +>this.z : number +>this : typeof C +>z : number +>this.y : number +>this : typeof C +>y : number + } +} diff --git a/tests/baselines/reference/classStaticBlockUseBeforeDef2.errors.txt b/tests/baselines/reference/classStaticBlockUseBeforeDef2.errors.txt new file mode 100644 index 0000000000000..ca13946d6230a --- /dev/null +++ b/tests/baselines/reference/classStaticBlockUseBeforeDef2.errors.txt @@ -0,0 +1,13 @@ +tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts(3,14): error TS2729: Property 'x' is used before its initialization. + + +==== tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts (1 errors) ==== + class C { + static { + this.x = 1; + ~ +!!! error TS2729: Property 'x' is used before its initialization. +!!! related TS2728 tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts:5:12: 'x' is declared here. + } + static x; + } \ No newline at end of file diff --git a/tests/baselines/reference/classStaticBlockUseBeforeDef2.symbols b/tests/baselines/reference/classStaticBlockUseBeforeDef2.symbols new file mode 100644 index 0000000000000..69716958faa82 --- /dev/null +++ b/tests/baselines/reference/classStaticBlockUseBeforeDef2.symbols @@ -0,0 +1,13 @@ +=== tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts === +class C { +>C : Symbol(C, Decl(classStaticBlockUseBeforeDef2.ts, 0, 0)) + + static { + this.x = 1; +>this.x : Symbol(C.x, Decl(classStaticBlockUseBeforeDef2.ts, 3, 5)) +>this : Symbol(C, Decl(classStaticBlockUseBeforeDef2.ts, 0, 0)) +>x : Symbol(C.x, Decl(classStaticBlockUseBeforeDef2.ts, 3, 5)) + } + static x; +>x : Symbol(C.x, Decl(classStaticBlockUseBeforeDef2.ts, 3, 5)) +} diff --git a/tests/baselines/reference/classStaticBlockUseBeforeDef2.types b/tests/baselines/reference/classStaticBlockUseBeforeDef2.types new file mode 100644 index 0000000000000..660b09c8d25b1 --- /dev/null +++ b/tests/baselines/reference/classStaticBlockUseBeforeDef2.types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts === +class C { +>C : C + + static { + this.x = 1; +>this.x = 1 : 1 +>this.x : number +>this : typeof C +>x : number +>1 : 1 + } + static x; +>x : number +} diff --git a/tests/baselines/reference/variance.js b/tests/baselines/reference/variance.js index df84404b31beb..22fd646d33cd2 100644 --- a/tests/baselines/reference/variance.js +++ b/tests/baselines/reference/variance.js @@ -16,7 +16,7 @@ const z: Foo = x; // Repro from #30118 class Bar { - private static instance: Bar[]; + private static instance: Bar[] = []; cast(_name: ([T] extends [string] ? string : string)) { } @@ -41,5 +41,6 @@ var Bar = /** @class */ (function () { Bar.prototype.pushThis = function () { Bar.instance.push(this); }; + Bar.instance = []; return Bar; }()); diff --git a/tests/baselines/reference/variance.symbols b/tests/baselines/reference/variance.symbols index 0a6ec56d725b6..a9503a867c13d 100644 --- a/tests/baselines/reference/variance.symbols +++ b/tests/baselines/reference/variance.symbols @@ -38,12 +38,12 @@ class Bar { >Bar : Symbol(Bar, Decl(variance.ts, 11, 25)) >T : Symbol(T, Decl(variance.ts, 16, 10)) - private static instance: Bar[]; + private static instance: Bar[] = []; >instance : Symbol(Bar.instance, Decl(variance.ts, 16, 29)) >Bar : Symbol(Bar, Decl(variance.ts, 11, 25)) cast(_name: ([T] extends [string] ? string : string)) { } ->cast : Symbol(Bar.cast, Decl(variance.ts, 17, 41)) +>cast : Symbol(Bar.cast, Decl(variance.ts, 17, 46)) >_name : Symbol(_name, Decl(variance.ts, 19, 7)) >T : Symbol(T, Decl(variance.ts, 16, 10)) diff --git a/tests/baselines/reference/variance.types b/tests/baselines/reference/variance.types index 08ee1053b3dba..2f7267aca5de0 100644 --- a/tests/baselines/reference/variance.types +++ b/tests/baselines/reference/variance.types @@ -35,8 +35,9 @@ const z: Foo = x; class Bar { >Bar : Bar - private static instance: Bar[]; + private static instance: Bar[] = []; >instance : Bar[] +>[] : never[] cast(_name: ([T] extends [string] ? string : string)) { } >cast : (_name: ([T] extends [string] ? string : string)) => void diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts new file mode 100644 index 0000000000000..11f8b7f55472a --- /dev/null +++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef1.ts @@ -0,0 +1,15 @@ +// @target: esnext +// @noEmit: true +// @strict: true + +class C { + static x; + static { + this.x = 1; + } + static y = this.x; + static z; + static { + this.z = this.y; + } +} \ No newline at end of file diff --git a/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts b/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts new file mode 100644 index 0000000000000..89658a6ebe26c --- /dev/null +++ b/tests/cases/conformance/classes/classStaticBlock/classStaticBlockUseBeforeDef2.ts @@ -0,0 +1,10 @@ +// @target: esnext +// @noEmit: true +// @strict: true + +class C { + static { + this.x = 1; + } + static x; +} \ No newline at end of file diff --git a/tests/cases/conformance/types/conditional/variance.ts b/tests/cases/conformance/types/conditional/variance.ts index 1dd5db5c67e8f..11fccaa0f9d6d 100644 --- a/tests/cases/conformance/types/conditional/variance.ts +++ b/tests/cases/conformance/types/conditional/variance.ts @@ -17,7 +17,7 @@ const z: Foo = x; // Repro from #30118 class Bar { - private static instance: Bar[]; + private static instance: Bar[] = []; cast(_name: ([T] extends [string] ? string : string)) { }