From e3a3fb8eb25160923ab87960d357cf67869d16b1 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Fri, 15 Jan 2021 17:28:52 +0200 Subject: [PATCH 01/73] Added support for private identifier methods. --- src/compiler/checker.ts | 78 ++++++++++++++---------- src/compiler/diagnosticMessages.json | 12 ++-- src/compiler/transformers/classFields.ts | 4 +- src/compiler/types.ts | 18 ++++++ src/compiler/utilitiesPublic.ts | 6 +- src/services/completions.ts | 4 +- src/services/findAllReferences.ts | 2 +- src/services/stringCompletions.ts | 2 +- 8 files changed, 77 insertions(+), 49 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c4b3d67ad6d96..33cade5a7ddc2 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9852,7 +9852,7 @@ namespace ts { } function isStaticPrivateIdentifierProperty(s: Symbol): boolean { - return !!s.valueDeclaration && isPrivateIdentifierPropertyDeclaration(s.valueDeclaration) && hasSyntacticModifier(s.valueDeclaration, ModifierFlags.Static); + return !!s.valueDeclaration && isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && hasSyntacticModifier(s.valueDeclaration, ModifierFlags.Static); } function resolveDeclaredMembers(type: InterfaceType): InterfaceTypeWithDeclaredMembers { @@ -15067,7 +15067,7 @@ namespace ts { /** We approximate own properties as non-methods plus methods that are inside the object literal */ function isSpreadableProperty(prop: Symbol): boolean { - return !some(prop.declarations, isPrivateIdentifierPropertyDeclaration) && + return !some(prop.declarations, isPrivateIdentifierClassElementDeclaration) && (!(prop.flags & (SymbolFlags.Method | SymbolFlags.GetAccessor | SymbolFlags.SetAccessor)) || !prop.declarations.some(decl => isClassLike(decl.parent))); } @@ -26063,7 +26063,7 @@ namespace ts { */ function checkPropertyAccessibility( node: PropertyAccessExpression | QualifiedName | PropertyAccessExpression | VariableDeclaration | ParameterDeclaration | ImportTypeNode | PropertyAssignment | ShorthandPropertyAssignment | BindingElement, - isSuper: boolean, type: Type, prop: Symbol): boolean { + isSuper: boolean, type: Type, prop: Symbol, reportError = true): boolean { const flags = getDeclarationModifierFlagsFromSymbol(prop); const errorNode = node.kind === SyntaxKind.QualifiedName ? node.right : node.kind === SyntaxKind.ImportType ? node : node.name; @@ -26077,7 +26077,9 @@ namespace ts { // a super property access is permitted and must specify a public static member function of the base class. 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); + if(reportError) { + error(errorNode, Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); + } return false; } } @@ -26086,7 +26088,9 @@ namespace ts { // This error could mask a private property access error. But, a member // cannot simultaneously be private and abstract, so this will trigger an // additional error elsewhere. - error(errorNode, Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression, symbolToString(prop), typeToString(getDeclaringClass(prop)!)); + if(reportError) { + error(errorNode, Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression, symbolToString(prop), typeToString(getDeclaringClass(prop)!)); + } return false; } } @@ -26095,17 +26099,11 @@ namespace ts { if ((flags & ModifierFlags.Abstract) && isThisProperty(node) && symbolHasNonMethodDeclaration(prop)) { const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)!); if (declaringClassDeclaration && isNodeUsedDuringClassInitialization(node)) { - error(errorNode, Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor, symbolToString(prop), getTextOfIdentifierOrLiteral(declaringClassDeclaration.name!)); // TODO: GH#18217 - return false; - } - } - - if (isPropertyAccessExpression(node) && isPrivateIdentifier(node.name)) { - if (!getContainingClass(node)) { - error(errorNode, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + if(reportError) { + error(errorNode, Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor, symbolToString(prop), getTextOfIdentifierOrLiteral(declaringClassDeclaration.name!)); // TODO: GH#18217 + } return false; } - return true; } // Public properties are otherwise accessible. @@ -26119,7 +26117,9 @@ namespace ts { if (flags & ModifierFlags.Private) { const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)!)!; if (!isNodeWithinClass(node, declaringClassDeclaration)) { - error(errorNode, Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(getDeclaringClass(prop)!)); + if(reportError) { + error(errorNode, Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(getDeclaringClass(prop)!)); + } return false; } return true; @@ -26144,7 +26144,9 @@ namespace ts { // static member access is disallow let thisParameter: ParameterDeclaration | undefined; if (flags & ModifierFlags.Static || !(thisParameter = getThisParameterFromNodeContext(node)) || !thisParameter.type) { - error(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(getDeclaringClass(prop) || type)); + if(reportError) { + error(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(getDeclaringClass(prop) || type)); + } return false; } @@ -26160,7 +26162,9 @@ namespace ts { type = (type as TypeParameter).isThisType ? getConstraintOfTypeParameter(type)! : getBaseConstraintOfType(type)!; // TODO: GH#18217 Use a different variable that's allowed to be undefined } if (!type || !hasBaseType(type, enclosingClass)) { - error(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass)); + if(reportError) { + error(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass)); + } return false; } return true; @@ -26349,6 +26353,9 @@ namespace ts { let prop: Symbol | undefined; if (isPrivateIdentifier(right)) { const lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(right.escapedText, right); + if(assignmentKind && lexicallyScopedSymbol && isMethodDeclaration(lexicallyScopedSymbol.valueDeclaration)) { + grammarErrorOnNode(right, Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable, idText(right)); + } if (isAnyLike) { if (lexicallyScopedSymbol) { return apparentType; @@ -26635,7 +26642,14 @@ namespace ts { } function getSuggestedSymbolForNonexistentProperty(name: Identifier | PrivateIdentifier | string, containingType: Type): Symbol | undefined { - return getSpellingSuggestionForName(isString(name) ? name : idText(name), getPropertiesOfType(containingType), SymbolFlags.Value); + let props = getPropertiesOfType(containingType); + if(typeof name !== "string") { + const parent = name.parent; + if(isPropertyAccessExpression(parent)) { + props = filter(props, prop => isValidPropertyAccessForCompletions(parent, containingType, prop)); + } + } + return getSpellingSuggestionForName(isString(name) ? name : idText(name), props, SymbolFlags.Value); } function getSuggestedSymbolForNonexistentJSXAttribute(name: Identifier | PrivateIdentifier | string, containingType: Type): Symbol | undefined { @@ -26797,11 +26811,11 @@ namespace ts { } const prop = getPropertyOfType(type, propertyName); if (prop) { - if (isPropertyAccessExpression(node) && prop.valueDeclaration && isPrivateIdentifierPropertyDeclaration(prop.valueDeclaration)) { + if (prop.valueDeclaration && isPrivateIdentifierClassElementDeclaration(prop.valueDeclaration)) { const declClass = getContainingClass(prop.valueDeclaration); return !isOptionalChain(node) && !!findAncestor(node, parent => parent === declClass); } - return checkPropertyAccessibility(node, isSuper, type, prop); + return checkPropertyAccessibility(node, isSuper, type, prop, /* reportError */ false); } // In js files properties of unions are allowed in completion return isInJSFile(node) && (type.flags & TypeFlags.Union) !== 0 && (type).types.some(elementType => isValidPropertyAccessWithType(node, isSuper, propertyName, elementType)); @@ -32291,10 +32305,6 @@ namespace ts { // Grammar checking if (!checkGrammarMethod(node)) checkGrammarComputedPropertyName(node.name); - if (isPrivateIdentifier(node.name)) { - error(node, Diagnostics.A_method_cannot_be_named_with_a_private_identifier); - } - // Grammar checking for modifiers is done inside the function checkGrammarFunctionLikeDeclaration checkFunctionOrMethodDeclaration(node); @@ -32331,7 +32341,7 @@ namespace ts { } function isInstancePropertyWithInitializerOrPrivateIdentifierProperty(n: Node): boolean { - if (isPrivateIdentifierPropertyDeclaration(n)) { + if (isPrivateIdentifierClassElementDeclaration(n)) { return true; } return n.kind === SyntaxKind.PropertyDeclaration && @@ -32408,9 +32418,7 @@ namespace ts { if (node.name.kind === SyntaxKind.ComputedPropertyName) { checkComputedPropertyName(node.name); } - if (isPrivateIdentifier(node.name)) { - error(node.name, Diagnostics.An_accessor_cannot_be_named_with_a_private_identifier); - } + if (hasBindableName(node)) { // TypeScript 1.0 spec (April 2014): 8.4.3 // Accessors for the same member name must specify the same accessibility. @@ -32705,7 +32713,7 @@ namespace ts { } function isPrivateWithinAmbient(node: Node): boolean { - return (hasEffectiveModifier(node, ModifierFlags.Private) || isPrivateIdentifierPropertyDeclaration(node)) && !!(node.flags & NodeFlags.Ambient); + return (hasEffectiveModifier(node, ModifierFlags.Private) || isPrivateIdentifierClassElementDeclaration(node)) && !!(node.flags & NodeFlags.Ambient); } function getEffectiveDeclarationFlags(n: Declaration, flagsToCheck: ModifierFlags): ModifierFlags { @@ -39512,7 +39520,7 @@ namespace ts { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "abstract"); } } - else if (isPrivateIdentifierPropertyDeclaration(node)) { + else if (isPrivateIdentifierClassElementDeclaration(node)) { return grammarErrorOnNode(modifier, Diagnostics.An_accessibility_modifier_cannot_be_used_with_a_private_identifier); } flags |= modifierToFlag(modifier.kind); @@ -39537,7 +39545,7 @@ namespace ts { else if (flags & ModifierFlags.Abstract) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract"); } - else if (isPrivateIdentifierPropertyDeclaration(node)) { + else if (isPrivateIdentifierClassElementDeclaration(node)) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "static"); } flags |= ModifierFlags.Static; @@ -39601,7 +39609,7 @@ namespace ts { else if ((node.parent.flags & NodeFlags.Ambient) && node.parent.kind === SyntaxKind.ModuleBlock) { return grammarErrorOnNode(modifier, Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); } - else if (isPrivateIdentifierPropertyDeclaration(node)) { + else if (isPrivateIdentifierClassElementDeclaration(node)) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "declare"); } flags |= ModifierFlags.Ambient; @@ -40283,6 +40291,9 @@ namespace ts { if (languageVersion < ScriptTarget.ES5) { return grammarErrorOnNode(accessor.name, Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); } + if (languageVersion < ScriptTarget.ES2015 && isPrivateIdentifier(accessor.name)) { + return grammarErrorOnNode(accessor.name, Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher); + } if (accessor.body === undefined && !hasSyntacticModifier(accessor, ModifierFlags.Abstract)) { return grammarErrorAtPos(accessor, accessor.end - 1, ";".length, Diagnostics._0_expected, "{"); } @@ -40416,6 +40427,9 @@ namespace ts { } if (isClassLike(node.parent)) { + if (languageVersion < ScriptTarget.ES2015 && isPrivateIdentifier(node.name)) { + return grammarErrorOnNode(node.name, Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher); + } // Technically, computed properties in ambient contexts is disallowed // for property declarations and accessors too, not just methods. // However, property declarations disallow computed names in general, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 035e0b5ceea2f..fbb76afc581eb 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3257,6 +3257,10 @@ "code": 2800 }, + "Cannot assign to private method '{0}'. Private methods are not writable.": { + "category": "Error", + "code": 2801 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", "code": 4000 @@ -6303,14 +6307,6 @@ "category": "Error", "code": 18019 }, - "A method cannot be named with a private identifier.": { - "category": "Error", - "code": 18022 - }, - "An accessor cannot be named with a private identifier.": { - "category": "Error", - "code": 18023 - }, "An enum member cannot be named with a private identifier.": { "category": "Error", "code": 18024 diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 96ba926dd17db..da8c8f35c4aeb 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -570,7 +570,7 @@ namespace ts { if (shouldTransformPrivateFields) { // Declare private names. for (const member of node.members) { - if (isPrivateIdentifierPropertyDeclaration(member)) { + if (isPrivateIdentifierClassElementDeclaration(member)) { addPrivateIdentifierToEnvironment(member.name); } } @@ -594,7 +594,7 @@ namespace ts { // then we don't need to transform any class properties. return languageVersion < ScriptTarget.ESNext; } - return isInitializedProperty(member) || shouldTransformPrivateFields && isPrivateIdentifierPropertyDeclaration(member); + return isInitializedProperty(member) || shouldTransformPrivateFields && isPrivateIdentifierClassElementDeclaration(member); } function transformConstructor(node: ClassDeclaration | ClassExpression, isDerivedClass: boolean) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 4352e2f2171e3..7ddfff3820876 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1300,6 +1300,24 @@ namespace ts { export interface PrivateIdentifierPropertyDeclaration extends PropertyDeclaration { name: PrivateIdentifier; } + /*@internal*/ + export interface PrivateIdentifierMethodDeclaration extends MethodDeclaration { + name: PrivateIdentifier; + } + /*@internal*/ + export interface PrivateIdentifierGetAccessorDeclaration extends GetAccessorDeclaration { + name: PrivateIdentifier; + } + /*@internal*/ + export interface PrivateIdentifierSetAccessorDeclaration extends SetAccessorDeclaration { + name: PrivateIdentifier; + } + /*@internal*/ + export type PrivateClassElementDeclaration = + | PrivateIdentifierPropertyDeclaration + | PrivateIdentifierMethodDeclaration + | PrivateIdentifierGetAccessorDeclaration + | PrivateIdentifierSetAccessorDeclaration; /* @internal */ export type InitializedPropertyDeclaration = PropertyDeclaration & { readonly initializer: Expression }; diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index d45eb73478d5a..fc90aa5bca55e 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -488,7 +488,7 @@ namespace ts { return unescapeLeadingUnderscores(identifierOrPrivateName.escapedText); } export function symbolName(symbol: Symbol): string { - if (symbol.valueDeclaration && isPrivateIdentifierPropertyDeclaration(symbol.valueDeclaration)) { + if (symbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(symbol.valueDeclaration)) { return idText(symbol.valueDeclaration.name); } return unescapeLeadingUnderscores(symbol.escapedName); @@ -1131,8 +1131,8 @@ namespace ts { // Private Identifiers /*@internal*/ - export function isPrivateIdentifierPropertyDeclaration(node: Node): node is PrivateIdentifierPropertyDeclaration { - return isPropertyDeclaration(node) && isPrivateIdentifier(node.name); + export function isPrivateIdentifierClassElementDeclaration(node: Node): node is PrivateClassElementDeclaration { + return (isPropertyDeclaration(node) || isMethodOrAccessor(node)) && isPrivateIdentifier(node.name); } /*@internal*/ diff --git a/src/services/completions.ts b/src/services/completions.ts index a59f637a96eca..13d9e2bd4dc46 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -2530,7 +2530,7 @@ namespace ts.Completions { !existingMemberNames.has(propertySymbol.escapedName) && !!propertySymbol.declarations && !(getDeclarationModifierFlagsFromSymbol(propertySymbol) & ModifierFlags.Private) && - !(propertySymbol.valueDeclaration && isPrivateIdentifierPropertyDeclaration(propertySymbol.valueDeclaration))); + !(propertySymbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(propertySymbol.valueDeclaration))); } /** @@ -2589,7 +2589,7 @@ namespace ts.Completions { } const validNameResult: CompletionEntryDisplayNameForSymbol = { name, needsConvertPropertyAccess: false }; - if (isIdentifierText(name, target, jsxIdentifierExpected ? LanguageVariant.JSX : LanguageVariant.Standard) || symbol.valueDeclaration && isPrivateIdentifierPropertyDeclaration(symbol.valueDeclaration)) { + if (isIdentifierText(name, target, jsxIdentifierExpected ? LanguageVariant.JSX : LanguageVariant.Standard) || symbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(symbol.valueDeclaration)) { return validNameResult; } switch (kind) { diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 12a97433615ca..f9bb50c286b06 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -1242,7 +1242,7 @@ namespace ts.FindAllReferences { // If this is private property or method, the scope is the containing class if (flags & (SymbolFlags.Property | SymbolFlags.Method)) { - const privateDeclaration = find(declarations, d => hasEffectiveModifier(d, ModifierFlags.Private) || isPrivateIdentifierPropertyDeclaration(d)); + const privateDeclaration = find(declarations, d => hasEffectiveModifier(d, ModifierFlags.Private) || isPrivateIdentifierClassElementDeclaration(d)); if (privateDeclaration) { return getAncestor(privateDeclaration, SyntaxKind.ClassDeclaration); } diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts index de823ad951d0e..654c537b853af 100644 --- a/src/services/stringCompletions.ts +++ b/src/services/stringCompletions.ts @@ -249,7 +249,7 @@ namespace ts.Completions.StringCompletions { function stringLiteralCompletionsFromProperties(type: Type | undefined): StringLiteralCompletionsFromProperties | undefined { return type && { kind: StringLiteralCompletionKind.Properties, - symbols: filter(type.getApparentProperties(), prop => !(prop.valueDeclaration && isPrivateIdentifierPropertyDeclaration(prop.valueDeclaration))), + symbols: filter(type.getApparentProperties(), prop => !(prop.valueDeclaration && isPrivateIdentifierClassElementDeclaration(prop.valueDeclaration))), hasIndexSignature: hasIndexSignature(type) }; } From 4ab27a2bc511066cf5cf20a62bc834bd29fa560a Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Fri, 15 Jan 2021 18:05:42 +0200 Subject: [PATCH 02/73] Added tests for private methods. --- .../privateNameConstructorReserved.errors.txt | 5 +- .../privateNameConstructorReserved.js | 2 + .../privateNameES5Ban(target=es3).errors.txt | 36 ++--- .../privateNameES5Ban(target=es3).js | 4 +- .../privateNameES5Ban(target=es5).errors.txt | 30 ++-- .../privateNameES5Ban(target=es5).js | 4 +- .../reference/privateNameMethod.errors.txt | 22 +++ .../baselines/reference/privateNameMethod.js | 35 +++++ .../reference/privateNameMethod.symbols | 28 ++++ .../reference/privateNameMethod.types | 34 +++++ .../privateNameMethodAccess.errors.txt | 35 +++++ .../reference/privateNameMethodAccess.js | 56 ++++++++ .../reference/privateNameMethodAccess.symbols | 54 +++++++ .../reference/privateNameMethodAccess.types | 66 +++++++++ .../privateNameMethodAssignment.errors.txt | 30 ++++ .../reference/privateNameMethodAssignment.js | 45 ++++++ .../privateNameMethodAssignment.symbols | 39 ++++++ .../privateNameMethodAssignment.types | 52 +++++++ .../privateNameMethodCallExpression.js | 81 +++++++++++ .../privateNameMethodCallExpression.symbols | 89 ++++++++++++ .../privateNameMethodCallExpression.types | 132 ++++++++++++++++++ ...rivateNameMethodsDerivedClasses.errors.txt | 18 +++ .../privateNameMethodsDerivedClasses.js | 34 +++++ .../privateNameMethodsDerivedClasses.symbols | 37 +++++ .../privateNameMethodsDerivedClasses.types | 41 ++++++ ...eNameNestedClassMethodShadowing.errors.txt | 23 +++ .../privateNameNestedClassMethodShadowing.js | 44 ++++++ ...vateNameNestedClassMethodShadowing.symbols | 41 ++++++ ...rivateNameNestedClassMethodShadowing.types | 42 ++++++ .../privateNamesAndDecorators.errors.txt | 5 +- .../reference/privateNamesAndDecorators.js | 4 +- ...privateNamesAndGenericClasses-2.errors.txt | 5 +- .../privateNamesAndGenericClasses-2.js | 6 +- .../privateNamesAndMethods.errors.txt | 51 ------- .../privateNamesAndStaticMethods.errors.txt | 36 ++--- .../members/privateNames/privateNameMethod.ts | 14 ++ .../privateNames/privateNameMethodAccess.ts | 24 ++++ .../privateNameMethodAssignment.ts | 13 ++ .../privateNameMethodCallExpression.ts | 25 ++++ .../privateNameMethodsDerivedClasses.ts | 13 ++ .../privateNameNestedClassMethodShadowing.ts | 16 +++ ...ixSpellingPrivatePropertyNameNotInScope.ts | 15 ++ .../completionListPrivateNamesMethods.ts | 31 ++++ .../findAllRefsPrivateNameMethods.ts | 24 ++++ .../fourslash/goToDefinitionPrivateName.ts | 9 +- .../navigationBarPrivateNameMethod.ts | 109 +++++++++++++++ tests/cases/fourslash/renamePrivateMethod.ts | 13 ++ 47 files changed, 1440 insertions(+), 132 deletions(-) create mode 100644 tests/baselines/reference/privateNameMethod.errors.txt create mode 100644 tests/baselines/reference/privateNameMethod.js create mode 100644 tests/baselines/reference/privateNameMethod.symbols create mode 100644 tests/baselines/reference/privateNameMethod.types create mode 100644 tests/baselines/reference/privateNameMethodAccess.errors.txt create mode 100644 tests/baselines/reference/privateNameMethodAccess.js create mode 100644 tests/baselines/reference/privateNameMethodAccess.symbols create mode 100644 tests/baselines/reference/privateNameMethodAccess.types create mode 100644 tests/baselines/reference/privateNameMethodAssignment.errors.txt create mode 100644 tests/baselines/reference/privateNameMethodAssignment.js create mode 100644 tests/baselines/reference/privateNameMethodAssignment.symbols create mode 100644 tests/baselines/reference/privateNameMethodAssignment.types create mode 100644 tests/baselines/reference/privateNameMethodCallExpression.js create mode 100644 tests/baselines/reference/privateNameMethodCallExpression.symbols create mode 100644 tests/baselines/reference/privateNameMethodCallExpression.types create mode 100644 tests/baselines/reference/privateNameMethodsDerivedClasses.errors.txt create mode 100644 tests/baselines/reference/privateNameMethodsDerivedClasses.js create mode 100644 tests/baselines/reference/privateNameMethodsDerivedClasses.symbols create mode 100644 tests/baselines/reference/privateNameMethodsDerivedClasses.types create mode 100644 tests/baselines/reference/privateNameNestedClassMethodShadowing.errors.txt create mode 100644 tests/baselines/reference/privateNameNestedClassMethodShadowing.js create mode 100644 tests/baselines/reference/privateNameNestedClassMethodShadowing.symbols create mode 100644 tests/baselines/reference/privateNameNestedClassMethodShadowing.types delete mode 100644 tests/baselines/reference/privateNamesAndMethods.errors.txt create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameMethodsDerivedClasses.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts create mode 100644 tests/cases/fourslash/codeFixSpellingPrivatePropertyNameNotInScope.ts create mode 100644 tests/cases/fourslash/completionListPrivateNamesMethods.ts create mode 100644 tests/cases/fourslash/findAllRefsPrivateNameMethods.ts create mode 100644 tests/cases/fourslash/navigationBarPrivateNameMethod.ts create mode 100644 tests/cases/fourslash/renamePrivateMethod.ts diff --git a/tests/baselines/reference/privateNameConstructorReserved.errors.txt b/tests/baselines/reference/privateNameConstructorReserved.errors.txt index 4cc4131338f00..6ac1e71bfc6a5 100644 --- a/tests/baselines/reference/privateNameConstructorReserved.errors.txt +++ b/tests/baselines/reference/privateNameConstructorReserved.errors.txt @@ -1,13 +1,10 @@ tests/cases/conformance/classes/members/privateNames/privateNameConstructorReserved.ts(2,5): error TS18012: '#constructor' is a reserved word. -tests/cases/conformance/classes/members/privateNames/privateNameConstructorReserved.ts(2,5): error TS18022: A method cannot be named with a private identifier. -==== tests/cases/conformance/classes/members/privateNames/privateNameConstructorReserved.ts (2 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameConstructorReserved.ts (1 errors) ==== class A { #constructor() {} // Error: `#constructor` is a reserved word. ~~~~~~~~~~~~ !!! error TS18012: '#constructor' is a reserved word. - ~~~~~~~~~~~~ -!!! error TS18022: A method cannot be named with a private identifier. } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameConstructorReserved.js b/tests/baselines/reference/privateNameConstructorReserved.js index 54cae241f51da..ea3c83b9eaae3 100644 --- a/tests/baselines/reference/privateNameConstructorReserved.js +++ b/tests/baselines/reference/privateNameConstructorReserved.js @@ -5,6 +5,8 @@ class A { //// [privateNameConstructorReserved.js] +var _constructor; class A { () { } // Error: `#constructor` is a reserved word. } +_constructor = new WeakMap(); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).errors.txt b/tests/baselines/reference/privateNameES5Ban(target=es3).errors.txt index 48669311941cc..a5c48c8461826 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).errors.txt +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).errors.txt @@ -1,18 +1,14 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(3,5): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(4,5): error TS18022: A method cannot be named with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(4,5): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(5,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(6,12): error TS18022: A method cannot be named with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(6,5): error TS18019: 'static' modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(7,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(7,9): error TS18023: An accessor cannot be named with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(8,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(8,9): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,16): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,16): error TS18023: An accessor cannot be named with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,5): error TS18019: 'static' modifier cannot be used with a private identifier. -==== tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts (12 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts (8 errors) ==== class A { constructor() {} #field = 123; @@ -20,33 +16,25 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,16) !!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. #method() {} ~~~~~~~ -!!! error TS18022: A method cannot be named with a private identifier. +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static #sField = "hello world"; ~~~~~~ !!! error TS18019: 'static' modifier cannot be used with a private identifier. static #sMethod() {} - ~~~~~~~~ -!!! error TS18022: A method cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. get #acc() { return ""; } ~~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. set #acc(x: string) {} ~~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. static get #sAcc() { return 0; } - ~~~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. static set #sAcc(x: number) {} - ~~~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index b17b950cbf530..431eaba29e7cf 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -32,8 +32,8 @@ var A = /** @class */ (function () { enumerable: false, configurable: true }); - var _field, _sField; - _field = new WeakMap(), _sField = new WeakMap(); + var _field, _method, _sField, _sMethod, _acc, _acc_1, _sAcc, _sAcc_1; + _field = new WeakMap(), _method = new WeakMap(), _sField = new WeakMap(), _sMethod = new WeakMap(), _acc = new WeakMap(), _acc_1 = new WeakMap(), _sAcc = new WeakMap(), _sAcc_1 = new WeakMap(); _sField.set(A, "hello world"); return A; }()); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es5).errors.txt b/tests/baselines/reference/privateNameES5Ban(target=es5).errors.txt index 98da48317a6fa..6261ff415a483 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).errors.txt +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).errors.txt @@ -1,11 +1,11 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(3,5): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(4,5): error TS18022: A method cannot be named with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(4,5): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(5,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(6,12): error TS18022: A method cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(7,9): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(8,9): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,16): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,16): error TS18023: An accessor cannot be named with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(6,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(7,9): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(8,9): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,5): error TS18019: 'static' modifier cannot be used with a private identifier. ==== tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts (8 errors) ==== @@ -16,25 +16,25 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,16) !!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. #method() {} ~~~~~~~ -!!! error TS18022: A method cannot be named with a private identifier. +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static #sField = "hello world"; ~~~~~~ !!! error TS18019: 'static' modifier cannot be used with a private identifier. static #sMethod() {} - ~~~~~~~~ -!!! error TS18022: A method cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. get #acc() { return ""; } ~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. set #acc(x: string) {} ~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static get #sAcc() { return 0; } - ~~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. static set #sAcc(x: number) {} - ~~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameES5Ban(target=es5).js b/tests/baselines/reference/privateNameES5Ban(target=es5).js index b17b950cbf530..431eaba29e7cf 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -32,8 +32,8 @@ var A = /** @class */ (function () { enumerable: false, configurable: true }); - var _field, _sField; - _field = new WeakMap(), _sField = new WeakMap(); + var _field, _method, _sField, _sMethod, _acc, _acc_1, _sAcc, _sAcc_1; + _field = new WeakMap(), _method = new WeakMap(), _sField = new WeakMap(), _sMethod = new WeakMap(), _acc = new WeakMap(), _acc_1 = new WeakMap(), _sAcc = new WeakMap(), _sAcc_1 = new WeakMap(); _sField.set(A, "hello world"); return A; }()); diff --git a/tests/baselines/reference/privateNameMethod.errors.txt b/tests/baselines/reference/privateNameMethod.errors.txt new file mode 100644 index 0000000000000..92de4ef3f42cd --- /dev/null +++ b/tests/baselines/reference/privateNameMethod.errors.txt @@ -0,0 +1,22 @@ +tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts(7,22): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts(8,14): error TS2554: Expected 1 arguments, but got 0. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts (2 errors) ==== + class A1 { + #method(param: string): string { + return ""; + } + constructor(name: string) { + this.#method("") + this.#method(1) // Error + ~ +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + this.#method() // Error + ~~~~~~~~~ +!!! error TS2554: Expected 1 arguments, but got 0. +!!! related TS6210 tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts:2:13: An argument for 'param' was not provided. + + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameMethod.js b/tests/baselines/reference/privateNameMethod.js new file mode 100644 index 0000000000000..47fcf7964d955 --- /dev/null +++ b/tests/baselines/reference/privateNameMethod.js @@ -0,0 +1,35 @@ +//// [privateNameMethod.ts] +class A1 { + #method(param: string): string { + return ""; + } + constructor(name: string) { + this.#method("") + this.#method(1) // Error + this.#method() // Error + + } +} + + +//// [privateNameMethod.js] +"use strict"; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _method; +class A1 { + constructor(name) { + __classPrivateFieldGet(this, _method).call(this, ""); + __classPrivateFieldGet(this, _method).call(this, 1); // Error + __classPrivateFieldGet(this, _method).call(// Error + this); // Error + } + (param) { + return ""; + } +} +_method = new WeakMap(); diff --git a/tests/baselines/reference/privateNameMethod.symbols b/tests/baselines/reference/privateNameMethod.symbols new file mode 100644 index 0000000000000..724dd0cbddb1e --- /dev/null +++ b/tests/baselines/reference/privateNameMethod.symbols @@ -0,0 +1,28 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts === +class A1 { +>A1 : Symbol(A1, Decl(privateNameMethod.ts, 0, 0)) + + #method(param: string): string { +>#method : Symbol(A1.#method, Decl(privateNameMethod.ts, 0, 10)) +>param : Symbol(param, Decl(privateNameMethod.ts, 1, 12)) + + return ""; + } + constructor(name: string) { +>name : Symbol(name, Decl(privateNameMethod.ts, 4, 16)) + + this.#method("") +>this.#method : Symbol(A1.#method, Decl(privateNameMethod.ts, 0, 10)) +>this : Symbol(A1, Decl(privateNameMethod.ts, 0, 0)) + + this.#method(1) // Error +>this.#method : Symbol(A1.#method, Decl(privateNameMethod.ts, 0, 10)) +>this : Symbol(A1, Decl(privateNameMethod.ts, 0, 0)) + + this.#method() // Error +>this.#method : Symbol(A1.#method, Decl(privateNameMethod.ts, 0, 10)) +>this : Symbol(A1, Decl(privateNameMethod.ts, 0, 0)) + + } +} + diff --git a/tests/baselines/reference/privateNameMethod.types b/tests/baselines/reference/privateNameMethod.types new file mode 100644 index 0000000000000..f28e54126790f --- /dev/null +++ b/tests/baselines/reference/privateNameMethod.types @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts === +class A1 { +>A1 : A1 + + #method(param: string): string { +>#method : (param: string) => string +>param : string + + return ""; +>"" : "" + } + constructor(name: string) { +>name : string + + this.#method("") +>this.#method("") : string +>this.#method : (param: string) => string +>this : this +>"" : "" + + this.#method(1) // Error +>this.#method(1) : string +>this.#method : (param: string) => string +>this : this +>1 : 1 + + this.#method() // Error +>this.#method() : string +>this.#method : (param: string) => string +>this : this + + } +} + diff --git a/tests/baselines/reference/privateNameMethodAccess.errors.txt b/tests/baselines/reference/privateNameMethodAccess.errors.txt new file mode 100644 index 0000000000000..4ee30c160f5ca --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAccess.errors.txt @@ -0,0 +1,35 @@ +tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts(12,10): error TS18013: Property '#method' is not accessible outside class 'A2' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts(15,14): error TS18013: Property '#method' is not accessible outside class 'A2' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts(20,18): error TS18013: Property '#method' is not accessible outside class 'A2' because it has a private identifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts (3 errors) ==== + class A2 { + #method() { return "" } + constructor() { + console.log(this.#method); + let a: A2 = this; + a.#method(); + function foo (){ + a.#method(); + } + } + } + new A2().#method(); // Error + ~~~~~~~ +!!! error TS18013: Property '#method' is not accessible outside class 'A2' because it has a private identifier. + + function foo (){ + new A2().#method(); // Error + ~~~~~~~ +!!! error TS18013: Property '#method' is not accessible outside class 'A2' because it has a private identifier. + } + + class B2 { + m() { + new A2().#method(); + ~~~~~~~ +!!! error TS18013: Property '#method' is not accessible outside class 'A2' because it has a private identifier. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameMethodAccess.js b/tests/baselines/reference/privateNameMethodAccess.js new file mode 100644 index 0000000000000..2a42bead50f92 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAccess.js @@ -0,0 +1,56 @@ +//// [privateNameMethodAccess.ts] +class A2 { + #method() { return "" } + constructor() { + console.log(this.#method); + let a: A2 = this; + a.#method(); + function foo (){ + a.#method(); + } + } +} +new A2().#method(); // Error + +function foo (){ + new A2().#method(); // Error +} + +class B2 { + m() { + new A2().#method(); + } +} + + +//// [privateNameMethodAccess.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _method, _a; +class A2 { + constructor() { + console.log(__classPrivateFieldGet(this, _method)); + let a = this; + __classPrivateFieldGet(a, _method).call(a); + function foo() { + __classPrivateFieldGet(a, _method).call(a); + } + } + () { return ""; } +} +_method = new WeakMap(); +(_a = new A2())..call(_a); // Error +function foo() { + var _a; + (_a = new A2())..call(_a); // Error +} +class B2 { + m() { + var _a; + (_a = new A2())..call(_a); + } +} diff --git a/tests/baselines/reference/privateNameMethodAccess.symbols b/tests/baselines/reference/privateNameMethodAccess.symbols new file mode 100644 index 0000000000000..7b1517bca05b8 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAccess.symbols @@ -0,0 +1,54 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts === +class A2 { +>A2 : Symbol(A2, Decl(privateNameMethodAccess.ts, 0, 0)) + + #method() { return "" } +>#method : Symbol(A2.#method, Decl(privateNameMethodAccess.ts, 0, 10)) + + constructor() { + console.log(this.#method); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>this.#method : Symbol(A2.#method, Decl(privateNameMethodAccess.ts, 0, 10)) +>this : Symbol(A2, Decl(privateNameMethodAccess.ts, 0, 0)) + + let a: A2 = this; +>a : Symbol(a, Decl(privateNameMethodAccess.ts, 4, 11)) +>A2 : Symbol(A2, Decl(privateNameMethodAccess.ts, 0, 0)) +>this : Symbol(A2, Decl(privateNameMethodAccess.ts, 0, 0)) + + a.#method(); +>a.#method : Symbol(A2.#method, Decl(privateNameMethodAccess.ts, 0, 10)) +>a : Symbol(a, Decl(privateNameMethodAccess.ts, 4, 11)) + + function foo (){ +>foo : Symbol(foo, Decl(privateNameMethodAccess.ts, 5, 20)) + + a.#method(); +>a.#method : Symbol(A2.#method, Decl(privateNameMethodAccess.ts, 0, 10)) +>a : Symbol(a, Decl(privateNameMethodAccess.ts, 4, 11)) + } + } +} +new A2().#method(); // Error +>A2 : Symbol(A2, Decl(privateNameMethodAccess.ts, 0, 0)) + +function foo (){ +>foo : Symbol(foo, Decl(privateNameMethodAccess.ts, 11, 19)) + + new A2().#method(); // Error +>A2 : Symbol(A2, Decl(privateNameMethodAccess.ts, 0, 0)) +} + +class B2 { +>B2 : Symbol(B2, Decl(privateNameMethodAccess.ts, 15, 1)) + + m() { +>m : Symbol(B2.m, Decl(privateNameMethodAccess.ts, 17, 10)) + + new A2().#method(); +>A2 : Symbol(A2, Decl(privateNameMethodAccess.ts, 0, 0)) + } +} + diff --git a/tests/baselines/reference/privateNameMethodAccess.types b/tests/baselines/reference/privateNameMethodAccess.types new file mode 100644 index 0000000000000..9b126fe672c9a --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAccess.types @@ -0,0 +1,66 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts === +class A2 { +>A2 : A2 + + #method() { return "" } +>#method : () => string +>"" : "" + + constructor() { + console.log(this.#method); +>console.log(this.#method) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>this.#method : () => string +>this : this + + let a: A2 = this; +>a : A2 +>this : this + + a.#method(); +>a.#method() : string +>a.#method : () => string +>a : A2 + + function foo (){ +>foo : () => void + + a.#method(); +>a.#method() : string +>a.#method : () => string +>a : A2 + } + } +} +new A2().#method(); // Error +>new A2().#method() : any +>new A2().#method : any +>new A2() : A2 +>A2 : typeof A2 + +function foo (){ +>foo : () => void + + new A2().#method(); // Error +>new A2().#method() : any +>new A2().#method : any +>new A2() : A2 +>A2 : typeof A2 +} + +class B2 { +>B2 : B2 + + m() { +>m : () => void + + new A2().#method(); +>new A2().#method() : any +>new A2().#method : any +>new A2() : A2 +>A2 : typeof A2 + } +} + diff --git a/tests/baselines/reference/privateNameMethodAssignment.errors.txt b/tests/baselines/reference/privateNameMethodAssignment.errors.txt new file mode 100644 index 0000000000000..d25297e3672ee --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAssignment.errors.txt @@ -0,0 +1,30 @@ +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(4,14): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(5,11): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(6,11): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(7,20): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(9,11): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts (5 errors) ==== + class A3 { + #method() { }; + constructor(a: A3, b: any) { + this.#method = () => {} // Error, not writable + ~~~~~~~ +!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. + a.#method = () => { }; // Error, not writable + ~~~~~~~ +!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. + b.#method = () => { } //Error, not writable + ~~~~~~~ +!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. + ({ x: this.#method } = { x: () => {}}); //Error, not writable + ~~~~~~~ +!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. + let x = this.#method; + b.#method++ //Error, not writable + ~~~~~~~ +!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameMethodAssignment.js b/tests/baselines/reference/privateNameMethodAssignment.js new file mode 100644 index 0000000000000..407206bee54c0 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAssignment.js @@ -0,0 +1,45 @@ +//// [privateNameMethodAssignment.ts] +class A3 { + #method() { }; + constructor(a: A3, b: any) { + this.#method = () => {} // Error, not writable + a.#method = () => { }; // Error, not writable + b.#method = () => { } //Error, not writable + ({ x: this.#method } = { x: () => {}}); //Error, not writable + let x = this.#method; + b.#method++ //Error, not writable + } +} + + +//// [privateNameMethodAssignment.js] +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _method; +class A3 { + constructor(a, b) { + var _a, _b; + __classPrivateFieldSet(this, _method, () => { }); // Error, not writable + __classPrivateFieldSet(// Error, not writable + a, _method, () => { }); // Error, not writable + __classPrivateFieldSet(// Error, not writable + b, _method, () => { }); //Error, not writable + (_a = this, { x: ({ set value(_b) { __classPrivateFieldSet(_a, _method, _b); } }).value } = { x: () => { } }); //Error, not writable + let x = __classPrivateFieldGet(this, _method); + __classPrivateFieldSet(_b = b, _method, +__classPrivateFieldGet(_b, _method) + 1); //Error, not writable + } + () { } + ; +} +_method = new WeakMap(); diff --git a/tests/baselines/reference/privateNameMethodAssignment.symbols b/tests/baselines/reference/privateNameMethodAssignment.symbols new file mode 100644 index 0000000000000..01a6b8c40877f --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAssignment.symbols @@ -0,0 +1,39 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts === +class A3 { +>A3 : Symbol(A3, Decl(privateNameMethodAssignment.ts, 0, 0)) + + #method() { }; +>#method : Symbol(A3.#method, Decl(privateNameMethodAssignment.ts, 0, 10)) + + constructor(a: A3, b: any) { +>a : Symbol(a, Decl(privateNameMethodAssignment.ts, 2, 16)) +>A3 : Symbol(A3, Decl(privateNameMethodAssignment.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameMethodAssignment.ts, 2, 22)) + + this.#method = () => {} // Error, not writable +>this.#method : Symbol(A3.#method, Decl(privateNameMethodAssignment.ts, 0, 10)) +>this : Symbol(A3, Decl(privateNameMethodAssignment.ts, 0, 0)) + + a.#method = () => { }; // Error, not writable +>a.#method : Symbol(A3.#method, Decl(privateNameMethodAssignment.ts, 0, 10)) +>a : Symbol(a, Decl(privateNameMethodAssignment.ts, 2, 16)) + + b.#method = () => { } //Error, not writable +>b : Symbol(b, Decl(privateNameMethodAssignment.ts, 2, 22)) + + ({ x: this.#method } = { x: () => {}}); //Error, not writable +>x : Symbol(x, Decl(privateNameMethodAssignment.ts, 6, 10)) +>this.#method : Symbol(A3.#method, Decl(privateNameMethodAssignment.ts, 0, 10)) +>this : Symbol(A3, Decl(privateNameMethodAssignment.ts, 0, 0)) +>x : Symbol(x, Decl(privateNameMethodAssignment.ts, 6, 32)) + + let x = this.#method; +>x : Symbol(x, Decl(privateNameMethodAssignment.ts, 7, 11)) +>this.#method : Symbol(A3.#method, Decl(privateNameMethodAssignment.ts, 0, 10)) +>this : Symbol(A3, Decl(privateNameMethodAssignment.ts, 0, 0)) + + b.#method++ //Error, not writable +>b : Symbol(b, Decl(privateNameMethodAssignment.ts, 2, 22)) + } +} + diff --git a/tests/baselines/reference/privateNameMethodAssignment.types b/tests/baselines/reference/privateNameMethodAssignment.types new file mode 100644 index 0000000000000..963ba0c718650 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAssignment.types @@ -0,0 +1,52 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts === +class A3 { +>A3 : A3 + + #method() { }; +>#method : () => void + + constructor(a: A3, b: any) { +>a : A3 +>b : any + + this.#method = () => {} // Error, not writable +>this.#method = () => {} : () => void +>this.#method : () => void +>this : this +>() => {} : () => void + + a.#method = () => { }; // Error, not writable +>a.#method = () => { } : () => void +>a.#method : () => void +>a : A3 +>() => { } : () => void + + b.#method = () => { } //Error, not writable +>b.#method = () => { } : () => void +>b.#method : any +>b : any +>() => { } : () => void + + ({ x: this.#method } = { x: () => {}}); //Error, not writable +>({ x: this.#method } = { x: () => {}}) : { x: () => void; } +>{ x: this.#method } = { x: () => {}} : { x: () => void; } +>{ x: this.#method } : { x: () => void; } +>x : () => void +>this.#method : () => void +>this : this +>{ x: () => {}} : { x: () => void; } +>x : () => void +>() => {} : () => void + + let x = this.#method; +>x : () => void +>this.#method : () => void +>this : this + + b.#method++ //Error, not writable +>b.#method++ : number +>b.#method : any +>b : any + } +} + diff --git a/tests/baselines/reference/privateNameMethodCallExpression.js b/tests/baselines/reference/privateNameMethodCallExpression.js new file mode 100644 index 0000000000000..f9ee44f4b73c7 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodCallExpression.js @@ -0,0 +1,81 @@ +//// [privateNameMethodCallExpression.ts] +class AA { + #method() { this.x = 10; }; + #method2(a, ...b) {}; + x = 1; + test() { + this.#method(); + const func = this.#method; + func(); + new this.#method(); + + const arr = [ 1, 2 ]; + this.#method2(0, ...arr, 3); + + const b = new this.#method2(0, ...arr, 3); //Error + const str = this.#method2`head${1}middle${2}tail`; + this.getInstance().#method2`test${1}and${2}`; + + this.getInstance().#method2(0, ...arr, 3); + const b2 = new (this.getInstance().#method2)(0, ...arr, 3); //Error + const str2 = this.getInstance().#method2`head${1}middle${2}tail`; + } + getInstance() { return new AA(); } +} + + +tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(12,5): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. +tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(12,8): error TS1005: '=>' expected. +tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(14,15): error TS1005: '=>' expected. +tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(16,12): error TS1005: ';' expected. +tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(31,19): error TS1005: ';' expected. +tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(32,1): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js (6 errors) ==== + var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); + }; + var _method, _method2; + class AA { + constructor() { + this.x = 1; + } + () { this.x = 10; } + ~ +!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. + ~ +!!! error TS1005: '=>' expected. + ; + (a, ...b) { } + ~ +!!! error TS1005: '=>' expected. + ; + test() { + ~ +!!! error TS1005: ';' expected. + var _a, _b, _c; + __classPrivateFieldGet(this, _method).call(this); + const func = __classPrivateFieldGet(this, _method); + func(); + new (__classPrivateFieldGet(this, _method))(); + const arr = [1, 2]; + __classPrivateFieldGet(this, _method2).call(this, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(this, _method2))(0, ...arr, 3); //Error + const str = __classPrivateFieldGet(this, _method2).bind(this) `head${1}middle${2}tail`; + __classPrivateFieldGet((_a = this.getInstance()), _method2).bind(_a) `test${1}and${2}`; + __classPrivateFieldGet((_b = this.getInstance()), _method2).call(_b, 0, ...arr, 3); + const b2 = new (__classPrivateFieldGet(this.getInstance(), _method2))(0, ...arr, 3); //Error + const str2 = __classPrivateFieldGet((_c = this.getInstance()), _method2).bind(_c) `head${1}middle${2}tail`; + } + getInstance() { return new AA(); } + ~ +!!! error TS1005: ';' expected. + } + ~ +!!! error TS1128: Declaration or statement expected. + _method = new WeakMap(), _method2 = new WeakMap(); + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameMethodCallExpression.symbols b/tests/baselines/reference/privateNameMethodCallExpression.symbols new file mode 100644 index 0000000000000..668953b9b546e --- /dev/null +++ b/tests/baselines/reference/privateNameMethodCallExpression.symbols @@ -0,0 +1,89 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.ts === +class AA { +>AA : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) + + #method() { this.x = 10; }; +>#method : Symbol(AA.#method, Decl(privateNameMethodCallExpression.ts, 0, 10)) +>this.x : Symbol(AA.x, Decl(privateNameMethodCallExpression.ts, 2, 25)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) +>x : Symbol(AA.x, Decl(privateNameMethodCallExpression.ts, 2, 25)) + + #method2(a, ...b) {}; +>#method2 : Symbol(AA.#method2, Decl(privateNameMethodCallExpression.ts, 1, 31)) +>a : Symbol(a, Decl(privateNameMethodCallExpression.ts, 2, 13)) +>b : Symbol(b, Decl(privateNameMethodCallExpression.ts, 2, 15)) + + x = 1; +>x : Symbol(AA.x, Decl(privateNameMethodCallExpression.ts, 2, 25)) + + test() { +>test : Symbol(AA.test, Decl(privateNameMethodCallExpression.ts, 3, 10)) + + this.#method(); +>this.#method : Symbol(AA.#method, Decl(privateNameMethodCallExpression.ts, 0, 10)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) + + const func = this.#method; +>func : Symbol(func, Decl(privateNameMethodCallExpression.ts, 6, 13)) +>this.#method : Symbol(AA.#method, Decl(privateNameMethodCallExpression.ts, 0, 10)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) + + func(); +>func : Symbol(func, Decl(privateNameMethodCallExpression.ts, 6, 13)) + + new this.#method(); +>this.#method : Symbol(AA.#method, Decl(privateNameMethodCallExpression.ts, 0, 10)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) + + const arr = [ 1, 2 ]; +>arr : Symbol(arr, Decl(privateNameMethodCallExpression.ts, 10, 13)) + + this.#method2(0, ...arr, 3); +>this.#method2 : Symbol(AA.#method2, Decl(privateNameMethodCallExpression.ts, 1, 31)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameMethodCallExpression.ts, 10, 13)) + + const b = new this.#method2(0, ...arr, 3); //Error +>b : Symbol(b, Decl(privateNameMethodCallExpression.ts, 13, 13)) +>this.#method2 : Symbol(AA.#method2, Decl(privateNameMethodCallExpression.ts, 1, 31)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameMethodCallExpression.ts, 10, 13)) + + const str = this.#method2`head${1}middle${2}tail`; +>str : Symbol(str, Decl(privateNameMethodCallExpression.ts, 14, 13)) +>this.#method2 : Symbol(AA.#method2, Decl(privateNameMethodCallExpression.ts, 1, 31)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) + + this.getInstance().#method2`test${1}and${2}`; +>this.getInstance().#method2 : Symbol(AA.#method2, Decl(privateNameMethodCallExpression.ts, 1, 31)) +>this.getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) +>getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) + + this.getInstance().#method2(0, ...arr, 3); +>this.getInstance().#method2 : Symbol(AA.#method2, Decl(privateNameMethodCallExpression.ts, 1, 31)) +>this.getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) +>getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) +>arr : Symbol(arr, Decl(privateNameMethodCallExpression.ts, 10, 13)) + + const b2 = new (this.getInstance().#method2)(0, ...arr, 3); //Error +>b2 : Symbol(b2, Decl(privateNameMethodCallExpression.ts, 18, 13)) +>this.getInstance().#method2 : Symbol(AA.#method2, Decl(privateNameMethodCallExpression.ts, 1, 31)) +>this.getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) +>getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) +>arr : Symbol(arr, Decl(privateNameMethodCallExpression.ts, 10, 13)) + + const str2 = this.getInstance().#method2`head${1}middle${2}tail`; +>str2 : Symbol(str2, Decl(privateNameMethodCallExpression.ts, 19, 13)) +>this.getInstance().#method2 : Symbol(AA.#method2, Decl(privateNameMethodCallExpression.ts, 1, 31)) +>this.getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) +>this : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) +>getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) + } + getInstance() { return new AA(); } +>getInstance : Symbol(AA.getInstance, Decl(privateNameMethodCallExpression.ts, 20, 5)) +>AA : Symbol(AA, Decl(privateNameMethodCallExpression.ts, 0, 0)) +} + diff --git a/tests/baselines/reference/privateNameMethodCallExpression.types b/tests/baselines/reference/privateNameMethodCallExpression.types new file mode 100644 index 0000000000000..4f769429259e2 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodCallExpression.types @@ -0,0 +1,132 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.ts === +class AA { +>AA : AA + + #method() { this.x = 10; }; +>#method : () => void +>this.x = 10 : 10 +>this.x : number +>this : this +>x : number +>10 : 10 + + #method2(a, ...b) {}; +>#method2 : (a: any, ...b: any[]) => void +>a : any +>b : any[] + + x = 1; +>x : number +>1 : 1 + + test() { +>test : () => void + + this.#method(); +>this.#method() : void +>this.#method : () => void +>this : this + + const func = this.#method; +>func : () => void +>this.#method : () => void +>this : this + + func(); +>func() : void +>func : () => void + + new this.#method(); +>new this.#method() : any +>this.#method : () => void +>this : this + + const arr = [ 1, 2 ]; +>arr : number[] +>[ 1, 2 ] : number[] +>1 : 1 +>2 : 2 + + this.#method2(0, ...arr, 3); +>this.#method2(0, ...arr, 3) : void +>this.#method2 : (a: any, ...b: any[]) => void +>this : this +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const b = new this.#method2(0, ...arr, 3); //Error +>b : any +>new this.#method2(0, ...arr, 3) : any +>this.#method2 : (a: any, ...b: any[]) => void +>this : this +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const str = this.#method2`head${1}middle${2}tail`; +>str : void +>this.#method2`head${1}middle${2}tail` : void +>this.#method2 : (a: any, ...b: any[]) => void +>this : this +>`head${1}middle${2}tail` : "head1middle2tail" +>1 : 1 +>2 : 2 + + this.getInstance().#method2`test${1}and${2}`; +>this.getInstance().#method2`test${1}and${2}` : void +>this.getInstance().#method2 : (a: any, ...b: any[]) => void +>this.getInstance() : AA +>this.getInstance : () => AA +>this : this +>getInstance : () => AA +>`test${1}and${2}` : "test1and2" +>1 : 1 +>2 : 2 + + this.getInstance().#method2(0, ...arr, 3); +>this.getInstance().#method2(0, ...arr, 3) : void +>this.getInstance().#method2 : (a: any, ...b: any[]) => void +>this.getInstance() : AA +>this.getInstance : () => AA +>this : this +>getInstance : () => AA +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const b2 = new (this.getInstance().#method2)(0, ...arr, 3); //Error +>b2 : any +>new (this.getInstance().#method2)(0, ...arr, 3) : any +>(this.getInstance().#method2) : (a: any, ...b: any[]) => void +>this.getInstance().#method2 : (a: any, ...b: any[]) => void +>this.getInstance() : AA +>this.getInstance : () => AA +>this : this +>getInstance : () => AA +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const str2 = this.getInstance().#method2`head${1}middle${2}tail`; +>str2 : void +>this.getInstance().#method2`head${1}middle${2}tail` : void +>this.getInstance().#method2 : (a: any, ...b: any[]) => void +>this.getInstance() : AA +>this.getInstance : () => AA +>this : this +>getInstance : () => AA +>`head${1}middle${2}tail` : "head1middle2tail" +>1 : 1 +>2 : 2 + } + getInstance() { return new AA(); } +>getInstance : () => AA +>new AA() : AA +>AA : typeof AA +} + diff --git a/tests/baselines/reference/privateNameMethodsDerivedClasses.errors.txt b/tests/baselines/reference/privateNameMethodsDerivedClasses.errors.txt new file mode 100644 index 0000000000000..62989cb6613a6 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodsDerivedClasses.errors.txt @@ -0,0 +1,18 @@ +tests/cases/conformance/classes/members/privateNames/privateNameMethodsDerivedClasses.ts(9,23): error TS18013: Property '#prop' is not accessible outside class 'Base' because it has a private identifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameMethodsDerivedClasses.ts (1 errors) ==== + class Base { + #prop(): number{ return 123; } + static method(x: Derived) { + console.log(x.#prop()); + } + } + class Derived extends Base { + static method(x: Derived) { + console.log(x.#prop()); + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'Base' because it has a private identifier. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameMethodsDerivedClasses.js b/tests/baselines/reference/privateNameMethodsDerivedClasses.js new file mode 100644 index 0000000000000..44fe2875de037 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodsDerivedClasses.js @@ -0,0 +1,34 @@ +//// [privateNameMethodsDerivedClasses.ts] +class Base { + #prop(): number{ return 123; } + static method(x: Derived) { + console.log(x.#prop()); + } +} +class Derived extends Base { + static method(x: Derived) { + console.log(x.#prop()); + } +} + + +//// [privateNameMethodsDerivedClasses.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _prop; +class Base { + () { return 123; } + static method(x) { + console.log(__classPrivateFieldGet(x, _prop).call(x)); + } +} +_prop = new WeakMap(); +class Derived extends Base { + static method(x) { + console.log(x..call(x)); + } +} diff --git a/tests/baselines/reference/privateNameMethodsDerivedClasses.symbols b/tests/baselines/reference/privateNameMethodsDerivedClasses.symbols new file mode 100644 index 0000000000000..472eef820a4ca --- /dev/null +++ b/tests/baselines/reference/privateNameMethodsDerivedClasses.symbols @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodsDerivedClasses.ts === +class Base { +>Base : Symbol(Base, Decl(privateNameMethodsDerivedClasses.ts, 0, 0)) + + #prop(): number{ return 123; } +>#prop : Symbol(Base.#prop, Decl(privateNameMethodsDerivedClasses.ts, 0, 12)) + + static method(x: Derived) { +>method : Symbol(Base.method, Decl(privateNameMethodsDerivedClasses.ts, 1, 35)) +>x : Symbol(x, Decl(privateNameMethodsDerivedClasses.ts, 2, 18)) +>Derived : Symbol(Derived, Decl(privateNameMethodsDerivedClasses.ts, 5, 1)) + + console.log(x.#prop()); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x.#prop : Symbol(Base.#prop, Decl(privateNameMethodsDerivedClasses.ts, 0, 12)) +>x : Symbol(x, Decl(privateNameMethodsDerivedClasses.ts, 2, 18)) + } +} +class Derived extends Base { +>Derived : Symbol(Derived, Decl(privateNameMethodsDerivedClasses.ts, 5, 1)) +>Base : Symbol(Base, Decl(privateNameMethodsDerivedClasses.ts, 0, 0)) + + static method(x: Derived) { +>method : Symbol(Derived.method, Decl(privateNameMethodsDerivedClasses.ts, 6, 28)) +>x : Symbol(x, Decl(privateNameMethodsDerivedClasses.ts, 7, 18)) +>Derived : Symbol(Derived, Decl(privateNameMethodsDerivedClasses.ts, 5, 1)) + + console.log(x.#prop()); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x : Symbol(x, Decl(privateNameMethodsDerivedClasses.ts, 7, 18)) + } +} + diff --git a/tests/baselines/reference/privateNameMethodsDerivedClasses.types b/tests/baselines/reference/privateNameMethodsDerivedClasses.types new file mode 100644 index 0000000000000..9215984b7b023 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodsDerivedClasses.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodsDerivedClasses.ts === +class Base { +>Base : Base + + #prop(): number{ return 123; } +>#prop : () => number +>123 : 123 + + static method(x: Derived) { +>method : (x: Derived) => void +>x : Derived + + console.log(x.#prop()); +>console.log(x.#prop()) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#prop() : number +>x.#prop : () => number +>x : Derived + } +} +class Derived extends Base { +>Derived : Derived +>Base : Base + + static method(x: Derived) { +>method : (x: Derived) => void +>x : Derived + + console.log(x.#prop()); +>console.log(x.#prop()) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#prop() : any +>x.#prop : any +>x : Derived + } +} + diff --git a/tests/baselines/reference/privateNameNestedClassMethodShadowing.errors.txt b/tests/baselines/reference/privateNameNestedClassMethodShadowing.errors.txt new file mode 100644 index 0000000000000..8f3f19a9fc5be --- /dev/null +++ b/tests/baselines/reference/privateNameNestedClassMethodShadowing.errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts(7,31): error TS18014: The property '#x' cannot be accessed on type 'Base' within this class because it is shadowed by another private identifier with the same spelling. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts (1 errors) ==== + class Base { + #x() { }; + constructor() { + class Derived { + #x() { }; + testBase(x: Base) { + console.log(x.#x); + ~~ +!!! error TS18014: The property '#x' cannot be accessed on type 'Base' within this class because it is shadowed by another private identifier with the same spelling. +!!! related TS18017 tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts:5:13: The shadowing declaration of '#x' is defined here +!!! related TS18018 tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts:2:5: The declaration of '#x' that you probably intended to use is defined here + } + testDerived(x: Derived) { + console.log(x.#x); + } + } + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js new file mode 100644 index 0000000000000..3ad246554754b --- /dev/null +++ b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js @@ -0,0 +1,44 @@ +//// [privateNameNestedClassMethodShadowing.ts] +class Base { + #x() { }; + constructor() { + class Derived { + #x() { }; + testBase(x: Base) { + console.log(x.#x); + } + testDerived(x: Derived) { + console.log(x.#x); + } + } + } +} + + +//// [privateNameNestedClassMethodShadowing.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _x; +class Base { + constructor() { + var _x_1; + class Derived { + () { } + ; + testBase(x) { + console.log(__classPrivateFieldGet(x, _x_1)); + } + testDerived(x) { + console.log(__classPrivateFieldGet(x, _x_1)); + } + } + _x_1 = new WeakMap(); + } + () { } + ; +} +_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameNestedClassMethodShadowing.symbols b/tests/baselines/reference/privateNameNestedClassMethodShadowing.symbols new file mode 100644 index 0000000000000..4a8b23726f9e1 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedClassMethodShadowing.symbols @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts === +class Base { +>Base : Symbol(Base, Decl(privateNameNestedClassMethodShadowing.ts, 0, 0)) + + #x() { }; +>#x : Symbol(Base.#x, Decl(privateNameNestedClassMethodShadowing.ts, 0, 12)) + + constructor() { + class Derived { +>Derived : Symbol(Derived, Decl(privateNameNestedClassMethodShadowing.ts, 2, 19)) + + #x() { }; +>#x : Symbol(Derived.#x, Decl(privateNameNestedClassMethodShadowing.ts, 3, 23)) + + testBase(x: Base) { +>testBase : Symbol(Derived.testBase, Decl(privateNameNestedClassMethodShadowing.ts, 4, 21)) +>x : Symbol(x, Decl(privateNameNestedClassMethodShadowing.ts, 5, 21)) +>Base : Symbol(Base, Decl(privateNameNestedClassMethodShadowing.ts, 0, 0)) + + console.log(x.#x); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x : Symbol(x, Decl(privateNameNestedClassMethodShadowing.ts, 5, 21)) + } + testDerived(x: Derived) { +>testDerived : Symbol(Derived.testDerived, Decl(privateNameNestedClassMethodShadowing.ts, 7, 13)) +>x : Symbol(x, Decl(privateNameNestedClassMethodShadowing.ts, 8, 24)) +>Derived : Symbol(Derived, Decl(privateNameNestedClassMethodShadowing.ts, 2, 19)) + + console.log(x.#x); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x.#x : Symbol(Derived.#x, Decl(privateNameNestedClassMethodShadowing.ts, 3, 23)) +>x : Symbol(x, Decl(privateNameNestedClassMethodShadowing.ts, 8, 24)) + } + } + } +} + diff --git a/tests/baselines/reference/privateNameNestedClassMethodShadowing.types b/tests/baselines/reference/privateNameNestedClassMethodShadowing.types new file mode 100644 index 0000000000000..66f4023d0de36 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedClassMethodShadowing.types @@ -0,0 +1,42 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts === +class Base { +>Base : Base + + #x() { }; +>#x : () => void + + constructor() { + class Derived { +>Derived : Derived + + #x() { }; +>#x : () => void + + testBase(x: Base) { +>testBase : (x: Base) => void +>x : Base + + console.log(x.#x); +>console.log(x.#x) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#x : any +>x : Base + } + testDerived(x: Derived) { +>testDerived : (x: Derived) => void +>x : Derived + + console.log(x.#x); +>console.log(x.#x) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#x : () => void +>x : Derived + } + } + } +} + diff --git a/tests/baselines/reference/privateNamesAndDecorators.errors.txt b/tests/baselines/reference/privateNamesAndDecorators.errors.txt index aea3772ca2e9d..a17770c1cb2a7 100644 --- a/tests/baselines/reference/privateNamesAndDecorators.errors.txt +++ b/tests/baselines/reference/privateNamesAndDecorators.errors.txt @@ -1,9 +1,8 @@ tests/cases/conformance/classes/members/privateNames/privateNamesAndDecorators.ts(4,5): error TS1206: Decorators are not valid here. tests/cases/conformance/classes/members/privateNames/privateNamesAndDecorators.ts(6,5): error TS1206: Decorators are not valid here. -tests/cases/conformance/classes/members/privateNames/privateNamesAndDecorators.ts(7,5): error TS18022: A method cannot be named with a private identifier. -==== tests/cases/conformance/classes/members/privateNames/privateNamesAndDecorators.ts (3 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesAndDecorators.ts (2 errors) ==== declare function dec(target: T): T; class A { @@ -15,7 +14,5 @@ tests/cases/conformance/classes/members/privateNames/privateNamesAndDecorators.t ~ !!! error TS1206: Decorators are not valid here. #bar(): void { } - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. } \ No newline at end of file diff --git a/tests/baselines/reference/privateNamesAndDecorators.js b/tests/baselines/reference/privateNamesAndDecorators.js index 63183cf3df9ba..65011d85f169d 100644 --- a/tests/baselines/reference/privateNamesAndDecorators.js +++ b/tests/baselines/reference/privateNamesAndDecorators.js @@ -10,7 +10,7 @@ class A { //// [privateNamesAndDecorators.js] -var _foo; +var _foo, _bar; var A = /** @class */ (function () { function A() { _foo.set(this, 1); @@ -18,4 +18,4 @@ var A = /** @class */ (function () { A.prototype. = function () { }; return A; }()); -_foo = new WeakMap(); +_foo = new WeakMap(), _bar = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.errors.txt b/tests/baselines/reference/privateNamesAndGenericClasses-2.errors.txt index c44ec084989b9..c06298c2693a3 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.errors.txt +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts(3,5): error TS18022: A method cannot be named with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts(24,3): error TS18013: Property '#foo' is not accessible outside class 'C' because it has a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts(25,1): error TS2322: Type 'C' is not assignable to type 'C'. Type 'string' is not assignable to type 'number'. @@ -6,12 +5,10 @@ tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClass Type 'number' is not assignable to type 'string'. -==== tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts (3 errors) ==== class C { #foo: T; #bar(): T { - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. return this.#foo; } constructor(t: T) { diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.js b/tests/baselines/reference/privateNamesAndGenericClasses-2.js index 0d62474bc636c..84710604b9dcc 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.js +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.js @@ -42,12 +42,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo; +var _foo, _bar; class C { constructor(t) { _foo.set(this, void 0); __classPrivateFieldSet(this, _foo, t); - t = this..call(this); + t = __classPrivateFieldGet(this, _bar).call(this); } () { return __classPrivateFieldGet(this, _foo); @@ -59,7 +59,7 @@ class C { return __classPrivateFieldGet(this, _foo); } } -_foo = new WeakMap(); +_foo = new WeakMap(), _bar = new WeakMap(); let a = new C(3); let b = new C("hello"); a.baz = 5; // OK diff --git a/tests/baselines/reference/privateNamesAndMethods.errors.txt b/tests/baselines/reference/privateNamesAndMethods.errors.txt deleted file mode 100644 index a213c9911be49..0000000000000 --- a/tests/baselines/reference/privateNamesAndMethods.errors.txt +++ /dev/null @@ -1,51 +0,0 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesAndMethods.ts(2,5): error TS18022: A method cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndMethods.ts(3,11): error TS18022: A method cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndMethods.ts(4,12): error TS18022: A method cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndMethods.ts(8,9): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndMethods.ts(11,9): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndMethods.ts(24,5): error TS18022: A method cannot be named with a private identifier. - - -==== tests/cases/conformance/classes/members/privateNames/privateNamesAndMethods.ts (6 errors) ==== - class A { - #foo(a: number) {} - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. - async #bar(a: number) {} - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. - async *#baz(a: number) { - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. - return 3; - } - #_quux: number; - get #quux (): number { - ~~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. - return this.#_quux; - } - set #quux (val: number) { - ~~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. - this.#_quux = val; - } - constructor () { - this.#foo(30); - this.#bar(30); - this.#baz(30); - this.#quux = this.#quux + 1; - this.#quux++; - } - } - - class B extends A { - #foo(a: string) {} - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. - constructor () { - super(); - this.#foo("str"); - } - } - \ No newline at end of file diff --git a/tests/baselines/reference/privateNamesAndStaticMethods.errors.txt b/tests/baselines/reference/privateNamesAndStaticMethods.errors.txt index 795afd395fe6e..2191f73a0d6be 100644 --- a/tests/baselines/reference/privateNamesAndStaticMethods.errors.txt +++ b/tests/baselines/reference/privateNamesAndStaticMethods.errors.txt @@ -1,36 +1,36 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(2,12): error TS18022: A method cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(3,18): error TS18022: A method cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(4,19): error TS18022: A method cannot be named with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(2,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(3,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(4,5): error TS18019: 'static' modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(7,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(8,16): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(11,16): error TS18023: An accessor cannot be named with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(24,12): error TS18022: A method cannot be named with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(8,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(11,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(24,5): error TS18019: 'static' modifier cannot be used with a private identifier. ==== tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts (7 errors) ==== class A { static #foo(a: number) {} - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. static async #bar(a: number) {} - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. static async *#baz(a: number) { - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. return 3; } static #_quux: number; ~~~~~~ !!! error TS18019: 'static' modifier cannot be used with a private identifier. static get #quux (): number { - ~~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. return this.#_quux; } static set #quux (val: number) { - ~~~~~ -!!! error TS18023: An accessor cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. this.#_quux = val; } constructor () { @@ -44,8 +44,8 @@ tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethod class B extends A { static #foo(a: string) {} - ~~~~ -!!! error TS18022: A method cannot be named with a private identifier. + ~~~~~~ +!!! error TS18019: 'static' modifier cannot be used with a private identifier. constructor () { super(); B.#foo("str"); diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts b/tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts new file mode 100644 index 0000000000000..0104fc9fc4236 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameMethod.ts @@ -0,0 +1,14 @@ +// @strict: true +// @target: es6 + +class A1 { + #method(param: string): string { + return ""; + } + constructor(name: string) { + this.#method("") + this.#method(1) // Error + this.#method() // Error + + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts b/tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts new file mode 100644 index 0000000000000..c2f5104c3101f --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameMethodAccess.ts @@ -0,0 +1,24 @@ +// @target: es2015 + +class A2 { + #method() { return "" } + constructor() { + console.log(this.#method); + let a: A2 = this; + a.#method(); + function foo (){ + a.#method(); + } + } +} +new A2().#method(); // Error + +function foo (){ + new A2().#method(); // Error +} + +class B2 { + m() { + new A2().#method(); + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts b/tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts new file mode 100644 index 0000000000000..e0ae392458945 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts @@ -0,0 +1,13 @@ +// @target: es2015 + +class A3 { + #method() { }; + constructor(a: A3, b: any) { + this.#method = () => {} // Error, not writable + a.#method = () => { }; // Error, not writable + b.#method = () => { } //Error, not writable + ({ x: this.#method } = { x: () => {}}); //Error, not writable + let x = this.#method; + b.#method++ //Error, not writable + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.ts new file mode 100644 index 0000000000000..d76deec97de3e --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.ts @@ -0,0 +1,25 @@ +// @target: es2015 + +class AA { + #method() { this.x = 10; }; + #method2(a, ...b) {}; + x = 1; + test() { + this.#method(); + const func = this.#method; + func(); + new this.#method(); + + const arr = [ 1, 2 ]; + this.#method2(0, ...arr, 3); + + const b = new this.#method2(0, ...arr, 3); //Error + const str = this.#method2`head${1}middle${2}tail`; + this.getInstance().#method2`test${1}and${2}`; + + this.getInstance().#method2(0, ...arr, 3); + const b2 = new (this.getInstance().#method2)(0, ...arr, 3); //Error + const str2 = this.getInstance().#method2`head${1}middle${2}tail`; + } + getInstance() { return new AA(); } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameMethodsDerivedClasses.ts b/tests/cases/conformance/classes/members/privateNames/privateNameMethodsDerivedClasses.ts new file mode 100644 index 0000000000000..807826e5dceec --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameMethodsDerivedClasses.ts @@ -0,0 +1,13 @@ +// @target: es2015 + +class Base { + #prop(): number{ return 123; } + static method(x: Derived) { + console.log(x.#prop()); + } +} +class Derived extends Base { + static method(x: Derived) { + console.log(x.#prop()); + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts b/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts new file mode 100644 index 0000000000000..c05301955e438 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassMethodShadowing.ts @@ -0,0 +1,16 @@ +// @target: es2015 + +class Base { + #x() { }; + constructor() { + class Derived { + #x() { }; + testBase(x: Base) { + console.log(x.#x); + } + testDerived(x: Derived) { + console.log(x.#x); + } + } + } +} diff --git a/tests/cases/fourslash/codeFixSpellingPrivatePropertyNameNotInScope.ts b/tests/cases/fourslash/codeFixSpellingPrivatePropertyNameNotInScope.ts new file mode 100644 index 0000000000000..6e219fa4d9733 --- /dev/null +++ b/tests/cases/fourslash/codeFixSpellingPrivatePropertyNameNotInScope.ts @@ -0,0 +1,15 @@ +/// + +////class A { +//// #foo: number; +//// constructor() { +//// } +////} +////let a = new A(); +////[|a.foo = 1;|] + +verify.codeFixAvailable([ + { description: "Declare property 'foo'" }, + { description: "Add index signature for property 'foo'" }, + { description: "Remove unused declaration for: '#foo'" } +]); diff --git a/tests/cases/fourslash/completionListPrivateNamesMethods.ts b/tests/cases/fourslash/completionListPrivateNamesMethods.ts new file mode 100644 index 0000000000000..d8005a2e7de4d --- /dev/null +++ b/tests/cases/fourslash/completionListPrivateNamesMethods.ts @@ -0,0 +1,31 @@ +/// + +//// class Foo { +//// #x() {}; +//// y() {}; +//// } +//// class Bar extends Foo { +//// #z() {}; +//// t() {}; +//// constructor() { +//// this./*1*/ +//// class Baz { +//// #z() {}; +//// #u() {}; +//// v() {}; +//// constructor() { +//// this./*2*/ +//// new Bar()./*3*/ +//// } +//// } +//// } +//// } +//// +//// new Foo()./*4*/ + + + +verify.completions({ marker: "1", exact: ["#z", "t", "y"] }); +verify.completions({ marker: "2", exact: ["#z", "#u", "v"] }); +verify.completions({ marker: "3", exact: ["#z", "t", "y"] }); +verify.completions({ marker: "4", exact: ["y"] }); diff --git a/tests/cases/fourslash/findAllRefsPrivateNameMethods.ts b/tests/cases/fourslash/findAllRefsPrivateNameMethods.ts new file mode 100644 index 0000000000000..d90a7e3940f98 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsPrivateNameMethods.ts @@ -0,0 +1,24 @@ +/// + +////class C { +//// [|[|{|"isDefinition": true, "isWriteAccess":true, "contextRangeIndex": 0 |}#foo|](){ }|] +//// constructor() { +//// this.[|#foo|](); +//// } +////} +////class D extends C { +//// constructor() { +//// super() +//// this.#foo = 20; +//// } +////} +////class E { +//// [|[|{|"isDefinition": true, "isWriteAccess":true, "contextRangeIndex": 3 |}#foo|](){ }|] +//// constructor() { +//// this.[|#foo|](); +//// } +////} + +const [rC0Def, rC0, rC1, rE0Def, rE0, rE1] = test.ranges(); +verify.singleReferenceGroup("(method) C.#foo(): void", [rC0, rC1]); +verify.singleReferenceGroup("(method) E.#foo(): void", [rE0, rE1]); diff --git a/tests/cases/fourslash/goToDefinitionPrivateName.ts b/tests/cases/fourslash/goToDefinitionPrivateName.ts index 4524fca577c8d..c03b4fe179c2e 100644 --- a/tests/cases/fourslash/goToDefinitionPrivateName.ts +++ b/tests/cases/fourslash/goToDefinitionPrivateName.ts @@ -1,12 +1,15 @@ /// //// class A { -//// [|/*pnDecl*/#foo|] = 3; +//// [|/*pnMethodDecl*/#method|]() { } +//// [|/*pnFieldDecl*/#foo|] = 3; //// constructor() { -//// this.[|/*pnUse*/#foo|] +//// this.[|/*pnFieldUse*/#foo|] +//// this.[|/*pnMethodUse*/#method|] //// } //// } verify.goToDefinition({ - pnUse: "pnDecl", + pnFieldUse: "pnFieldDecl", + pnMethodUse: "pnMethodDecl" }); diff --git a/tests/cases/fourslash/navigationBarPrivateNameMethod.ts b/tests/cases/fourslash/navigationBarPrivateNameMethod.ts new file mode 100644 index 0000000000000..b97d8e282aa7d --- /dev/null +++ b/tests/cases/fourslash/navigationBarPrivateNameMethod.ts @@ -0,0 +1,109 @@ +/// + +//// class A { +//// #foo() { +//// class B { +//// #bar() { +//// function baz () { +//// } +//// } +//// } +//// } +//// } + +verify.navigationTree({ + "text": "", + "kind": "script", + "childItems": [ + { + "text": "A", + "kind": "class", + "childItems": [ + { + "text": "#foo", + "kind": "method", + "childItems": [ + { + "text": "B", + "kind": "class", + "childItems": [ + { + "text": "#bar", + "kind": "method", + "childItems": [ + { + "text": "baz", + "kind": "function" + } + ] + } + ] + } + ] + } + ] + }, + ] +}); + +verify.navigationBar([ + { + "text": "", + "kind": "script", + "childItems": [ + { + "text": "A", + "kind": "class" + } + ] + }, + { + "text": "A", + "kind": "class", + "childItems": [ + { + "text": "#foo", + "kind": "method" + } + ], + "indent": 1 + }, + { + "text": "#foo", + "kind": "method", + "childItems": [ + { + "text": "B", + "kind": "class" + } + ], + "indent": 2 + }, + { + "text": "B", + "kind": "class", + "childItems": [ + { + "text": "#bar", + "kind": "method" + } + ], + "indent": 3 + }, + { + "text": "#bar", + "kind": "method", + "childItems": [ + { + "text": "baz", + "kind": "function" + } + ], + "indent": 4 + }, + { + "text": "baz", + "kind": "function", + "indent": 5 + } +]); diff --git a/tests/cases/fourslash/renamePrivateMethod.ts b/tests/cases/fourslash/renamePrivateMethod.ts new file mode 100644 index 0000000000000..d0b7ba0aa9d51 --- /dev/null +++ b/tests/cases/fourslash/renamePrivateMethod.ts @@ -0,0 +1,13 @@ +/// + +////class Foo { +//// [|[|{| "contextRangeIndex": 0 |}#foo|]() { }|] +//// callFoo() { +//// return this.[|#foo|](); +//// } +////} + +const ranges = test.rangesByText().get("#foo"); +verify.renameLocations(ranges, { + ranges +}); From 6977b9fa819a23b7a079e1dbb137b30556798621 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Mon, 18 Jan 2021 17:41:23 +0200 Subject: [PATCH 03/73] Added check to only not allow private name method signatures in anything except classes. Changes objects literal checking to not bail on first private name found in object literal. --- src/compiler/checker.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 33cade5a7ddc2..0627820809b8b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -32313,6 +32313,11 @@ namespace ts { if (hasSyntacticModifier(node, ModifierFlags.Abstract) && node.kind === SyntaxKind.MethodDeclaration && node.body) { error(node, Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, declarationNameToString(node.name)); } + + // Private named methods are only allowed in class declarations + if (isPrivateIdentifier(node.name) && !isClassDeclaration(node.parent)) { + error(node, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + } } function checkConstructorDeclaration(node: ConstructorDeclaration) { @@ -40100,7 +40105,7 @@ namespace ts { } if (name.kind === SyntaxKind.PrivateIdentifier) { - return grammarErrorOnNode(name, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + grammarErrorOnNode(name, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); } // Modifiers are never allowed on properties except for 'async' on a method declaration From bc8c07e497254f70dd861adb06c6572c674b6eac Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Tue, 19 Jan 2021 13:17:09 +0200 Subject: [PATCH 04/73] Added private accessors tests --- .../reference/privateNameAccessors.errors.txt | 20 ++++ .../reference/privateNameAccessors.js | 44 ++++++++ .../reference/privateNameAccessors.symbols | 41 +++++++ .../reference/privateNameAccessors.types | 49 +++++++++ .../privateNameAccessorsAccess.errors.txt | 37 +++++++ .../reference/privateNameAccessorsAccess.js | 57 ++++++++++ .../privateNameAccessorsAccess.symbols | 58 ++++++++++ .../privateNameAccessorsAccess.types | 65 +++++++++++ .../privateNameAccessorsCallExpression.js | 49 +++++++++ ...privateNameAccessorsCallExpression.symbols | 63 +++++++++++ .../privateNameAccessorsCallExpression.types | 95 ++++++++++++++++ ...ateNameAccessorssDerivedClasses.errors.txt | 18 ++++ .../privateNameAccessorssDerivedClasses.js | 34 ++++++ ...rivateNameAccessorssDerivedClasses.symbols | 37 +++++++ .../privateNameAccessorssDerivedClasses.types | 39 +++++++ ...privateNameAndPropertySignature.errors.txt | 28 +++-- .../privateNameAndPropertySignature.js | 6 +- .../privateNameAndPropertySignature.symbols | 32 ++++-- .../privateNameAndPropertySignature.types | 16 ++- .../privateNameBadDeclaration.errors.txt | 32 +++++- .../reference/privateNameBadDeclaration.js | 16 ++- .../privateNameBadDeclaration.symbols | 26 +++-- .../reference/privateNameBadDeclaration.types | 26 +++-- .../privateNameDuplicateField.errors.txt | 64 ++++++++++- .../reference/privateNameDuplicateField.js | 63 ++++++++++- .../privateNameDuplicateField.symbols | 56 ++++++++++ .../reference/privateNameDuplicateField.types | 66 ++++++++++++ .../privateNameInObjectLiteral-3.errors.txt | 15 +++ .../reference/privateNameInObjectLiteral-3.js | 14 +++ .../privateNameInObjectLiteral-3.symbols | 11 ++ .../privateNameInObjectLiteral-3.types | 13 +++ .../privateNameJsBadDeclaration.errors.txt | 32 +++++- .../privateNameJsBadDeclaration.symbols | 30 ++++-- .../privateNameJsBadDeclaration.types | 26 +++-- ...meNestedClassAccessorsShadowing.errors.txt | 23 ++++ ...rivateNameNestedClassAccessorsShadowing.js | 44 ++++++++ ...eNameNestedClassAccessorsShadowing.symbols | 41 +++++++ ...ateNameNestedClassAccessorsShadowing.types | 44 ++++++++ .../reference/privateNameUnused.errors.txt | 28 ++++- .../reference/privateNameUnused.symbols | 45 ++++++++ .../reference/privateNameUnused.types | 50 +++++++++ .../reference/privateNamesAndkeyof.js | 51 ++++++--- .../reference/privateNamesAndkeyof.symbols | 22 ++-- .../reference/privateNamesAndkeyof.types | 17 ++- .../reference/privateNamesAssertion.js | 23 ++++ .../reference/privateNamesAssertion.symbols | 29 +++++ .../reference/privateNamesAssertion.types | 33 ++++++ .../privateNamesInGenericClasses.errors.txt | 28 ++++- .../reference/privateNamesInGenericClasses.js | 36 ++++++- .../privateNamesInGenericClasses.symbols | 102 +++++++++++++++--- .../privateNamesInGenericClasses.types | 63 +++++++++++ ...ivateNamesIncompatibleModifiers.errors.txt | 79 +++++++++++++- .../privateNamesIncompatibleModifiers.js | 68 +++++++++++- .../privateNamesIncompatibleModifiers.symbols | 70 +++++++++++- .../privateNamesIncompatibleModifiers.types | 78 ++++++++++++++ .../privateNamesUseBeforeDef.errors.txt | 14 ++- .../reference/privateNamesUseBeforeDef.js | 34 +++++- .../privateNamesUseBeforeDef.symbols | 38 +++++-- .../reference/privateNamesUseBeforeDef.types | 27 +++++ .../privateNames/privateNameAccessors.ts | 16 +++ .../privateNameAccessorsAccess.ts | 26 +++++ .../privateNameAccessorsCallExpression.ts | 20 ++++ .../privateNameAccessorssDerivedClasses.ts | 13 +++ .../privateNameAndPropertySignature.ts | 6 +- .../privateNames/privateNameBadDeclaration.ts | 8 +- .../privateNames/privateNameDuplicateField.ts | 29 +++++ .../privateNameInObjectLiteral-3.ts | 5 + .../privateNameJsBadDeclaration.ts | 8 +- ...rivateNameNestedClassAccessorsShadowing.ts | 16 +++ .../members/privateNames/privateNameUnused.ts | 19 ++++ .../privateNames/privateNamesAndkeyof.ts | 7 +- .../privateNames/privateNamesAssertion.ts | 12 +++ .../privateNamesInGenericClasses.ts | 14 +++ .../privateNamesIncompatibleModifiers.ts | 22 ++++ .../privateNames/privateNamesUseBeforeDef.ts | 10 ++ .../completionListPrivateNamesAccessors.ts | 37 +++++++ .../findAllRefsPrivateNameAccessors.ts | 27 +++++ .../fourslash/goToDefinitionPrivateName.ts | 6 +- .../cases/fourslash/renamePrivateAccessor.ts | 14 +++ 79 files changed, 2545 insertions(+), 135 deletions(-) create mode 100644 tests/baselines/reference/privateNameAccessors.errors.txt create mode 100644 tests/baselines/reference/privateNameAccessors.js create mode 100644 tests/baselines/reference/privateNameAccessors.symbols create mode 100644 tests/baselines/reference/privateNameAccessors.types create mode 100644 tests/baselines/reference/privateNameAccessorsAccess.errors.txt create mode 100644 tests/baselines/reference/privateNameAccessorsAccess.js create mode 100644 tests/baselines/reference/privateNameAccessorsAccess.symbols create mode 100644 tests/baselines/reference/privateNameAccessorsAccess.types create mode 100644 tests/baselines/reference/privateNameAccessorsCallExpression.js create mode 100644 tests/baselines/reference/privateNameAccessorsCallExpression.symbols create mode 100644 tests/baselines/reference/privateNameAccessorsCallExpression.types create mode 100644 tests/baselines/reference/privateNameAccessorssDerivedClasses.errors.txt create mode 100644 tests/baselines/reference/privateNameAccessorssDerivedClasses.js create mode 100644 tests/baselines/reference/privateNameAccessorssDerivedClasses.symbols create mode 100644 tests/baselines/reference/privateNameAccessorssDerivedClasses.types create mode 100644 tests/baselines/reference/privateNameInObjectLiteral-3.errors.txt create mode 100644 tests/baselines/reference/privateNameInObjectLiteral-3.js create mode 100644 tests/baselines/reference/privateNameInObjectLiteral-3.symbols create mode 100644 tests/baselines/reference/privateNameInObjectLiteral-3.types create mode 100644 tests/baselines/reference/privateNameNestedClassAccessorsShadowing.errors.txt create mode 100644 tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js create mode 100644 tests/baselines/reference/privateNameNestedClassAccessorsShadowing.symbols create mode 100644 tests/baselines/reference/privateNameNestedClassAccessorsShadowing.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameAccessors.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameAccessorssDerivedClasses.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts create mode 100644 tests/cases/fourslash/completionListPrivateNamesAccessors.ts create mode 100644 tests/cases/fourslash/findAllRefsPrivateNameAccessors.ts create mode 100644 tests/cases/fourslash/renamePrivateAccessor.ts diff --git a/tests/baselines/reference/privateNameAccessors.errors.txt b/tests/baselines/reference/privateNameAccessors.errors.txt new file mode 100644 index 0000000000000..de5ae2636a6a0 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessors.errors.txt @@ -0,0 +1,20 @@ +tests/cases/conformance/classes/members/privateNames/privateNameAccessors.ts(9,14): error TS2540: Cannot assign to '#roProp' because it is a read-only property. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameAccessors.ts (1 errors) ==== + class A1 { + get #prop() { return ""; } + set #prop(param: string) { } + + get #roProp() { return ""; } + + constructor(name: string) { + this.#prop = ""; + this.#roProp = ""; // Error + ~~~~~~~ +!!! error TS2540: Cannot assign to '#roProp' because it is a read-only property. + console.log(this.#prop); + console.log(this.#roProp); + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameAccessors.js b/tests/baselines/reference/privateNameAccessors.js new file mode 100644 index 0000000000000..19376cb013e37 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessors.js @@ -0,0 +1,44 @@ +//// [privateNameAccessors.ts] +class A1 { + get #prop() { return ""; } + set #prop(param: string) { } + + get #roProp() { return ""; } + + constructor(name: string) { + this.#prop = ""; + this.#roProp = ""; // Error + console.log(this.#prop); + console.log(this.#roProp); + } +} + + +//// [privateNameAccessors.js] +"use strict"; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _prop, _prop_1, _roProp; +class A1 { + constructor(name) { + __classPrivateFieldSet(this, _prop_1, ""); + __classPrivateFieldSet(this, _roProp, ""); // Error + console.log(__classPrivateFieldGet(this, _prop_1)); + console.log(__classPrivateFieldGet(this, _roProp)); + } + get () { return ""; } + set (param) { } + get () { return ""; } +} +_prop = new WeakMap(), _prop_1 = new WeakMap(), _roProp = new WeakMap(); diff --git a/tests/baselines/reference/privateNameAccessors.symbols b/tests/baselines/reference/privateNameAccessors.symbols new file mode 100644 index 0000000000000..3386042d76a63 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessors.symbols @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAccessors.ts === +class A1 { +>A1 : Symbol(A1, Decl(privateNameAccessors.ts, 0, 0)) + + get #prop() { return ""; } +>#prop : Symbol(A1.#prop, Decl(privateNameAccessors.ts, 0, 10), Decl(privateNameAccessors.ts, 1, 30)) + + set #prop(param: string) { } +>#prop : Symbol(A1.#prop, Decl(privateNameAccessors.ts, 0, 10), Decl(privateNameAccessors.ts, 1, 30)) +>param : Symbol(param, Decl(privateNameAccessors.ts, 2, 14)) + + get #roProp() { return ""; } +>#roProp : Symbol(A1.#roProp, Decl(privateNameAccessors.ts, 2, 32)) + + constructor(name: string) { +>name : Symbol(name, Decl(privateNameAccessors.ts, 6, 16)) + + this.#prop = ""; +>this.#prop : Symbol(A1.#prop, Decl(privateNameAccessors.ts, 0, 10), Decl(privateNameAccessors.ts, 1, 30)) +>this : Symbol(A1, Decl(privateNameAccessors.ts, 0, 0)) + + this.#roProp = ""; // Error +>this.#roProp : Symbol(A1.#roProp, Decl(privateNameAccessors.ts, 2, 32)) +>this : Symbol(A1, Decl(privateNameAccessors.ts, 0, 0)) + + console.log(this.#prop); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>this.#prop : Symbol(A1.#prop, Decl(privateNameAccessors.ts, 0, 10), Decl(privateNameAccessors.ts, 1, 30)) +>this : Symbol(A1, Decl(privateNameAccessors.ts, 0, 0)) + + console.log(this.#roProp); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>this.#roProp : Symbol(A1.#roProp, Decl(privateNameAccessors.ts, 2, 32)) +>this : Symbol(A1, Decl(privateNameAccessors.ts, 0, 0)) + } +} + diff --git a/tests/baselines/reference/privateNameAccessors.types b/tests/baselines/reference/privateNameAccessors.types new file mode 100644 index 0000000000000..8449fba9f7039 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessors.types @@ -0,0 +1,49 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAccessors.ts === +class A1 { +>A1 : A1 + + get #prop() { return ""; } +>#prop : string +>"" : "" + + set #prop(param: string) { } +>#prop : string +>param : string + + get #roProp() { return ""; } +>#roProp : string +>"" : "" + + constructor(name: string) { +>name : string + + this.#prop = ""; +>this.#prop = "" : "" +>this.#prop : string +>this : this +>"" : "" + + this.#roProp = ""; // Error +>this.#roProp = "" : "" +>this.#roProp : any +>this : this +>"" : "" + + console.log(this.#prop); +>console.log(this.#prop) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>this.#prop : string +>this : this + + console.log(this.#roProp); +>console.log(this.#roProp) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>this.#roProp : string +>this : this + } +} + diff --git a/tests/baselines/reference/privateNameAccessorsAccess.errors.txt b/tests/baselines/reference/privateNameAccessorsAccess.errors.txt new file mode 100644 index 0000000000000..f7c36306fde04 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorsAccess.errors.txt @@ -0,0 +1,37 @@ +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts(14,10): error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts(17,14): error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts(22,18): error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts (3 errors) ==== + class A2 { + get #prop() { return ""; } + set #prop(param: string) { } + + constructor() { + console.log(this.#prop); + let a: A2 = this; + a.#prop; + function foo (){ + a.#prop; + } + } + } + new A2().#prop; // Error + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. + + function foo (){ + new A2().#prop; // Error + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. + } + + class B2 { + m() { + new A2().#prop; + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameAccessorsAccess.js b/tests/baselines/reference/privateNameAccessorsAccess.js new file mode 100644 index 0000000000000..1e650648b504b --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorsAccess.js @@ -0,0 +1,57 @@ +//// [privateNameAccessorsAccess.ts] +class A2 { + get #prop() { return ""; } + set #prop(param: string) { } + + constructor() { + console.log(this.#prop); + let a: A2 = this; + a.#prop; + function foo (){ + a.#prop; + } + } +} +new A2().#prop; // Error + +function foo (){ + new A2().#prop; // Error +} + +class B2 { + m() { + new A2().#prop; + } +} + + +//// [privateNameAccessorsAccess.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _prop, _prop_1; +class A2 { + constructor() { + console.log(__classPrivateFieldGet(this, _prop_1)); + let a = this; + __classPrivateFieldGet(a, _prop_1); + function foo() { + __classPrivateFieldGet(a, _prop_1); + } + } + get () { return ""; } + set (param) { } +} +_prop = new WeakMap(), _prop_1 = new WeakMap(); +new A2().; // Error +function foo() { + new A2().; // Error +} +class B2 { + m() { + new A2().; + } +} diff --git a/tests/baselines/reference/privateNameAccessorsAccess.symbols b/tests/baselines/reference/privateNameAccessorsAccess.symbols new file mode 100644 index 0000000000000..9697bb2d45859 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorsAccess.symbols @@ -0,0 +1,58 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts === +class A2 { +>A2 : Symbol(A2, Decl(privateNameAccessorsAccess.ts, 0, 0)) + + get #prop() { return ""; } +>#prop : Symbol(A2.#prop, Decl(privateNameAccessorsAccess.ts, 0, 10), Decl(privateNameAccessorsAccess.ts, 1, 30)) + + set #prop(param: string) { } +>#prop : Symbol(A2.#prop, Decl(privateNameAccessorsAccess.ts, 0, 10), Decl(privateNameAccessorsAccess.ts, 1, 30)) +>param : Symbol(param, Decl(privateNameAccessorsAccess.ts, 2, 14)) + + constructor() { + console.log(this.#prop); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>this.#prop : Symbol(A2.#prop, Decl(privateNameAccessorsAccess.ts, 0, 10), Decl(privateNameAccessorsAccess.ts, 1, 30)) +>this : Symbol(A2, Decl(privateNameAccessorsAccess.ts, 0, 0)) + + let a: A2 = this; +>a : Symbol(a, Decl(privateNameAccessorsAccess.ts, 6, 11)) +>A2 : Symbol(A2, Decl(privateNameAccessorsAccess.ts, 0, 0)) +>this : Symbol(A2, Decl(privateNameAccessorsAccess.ts, 0, 0)) + + a.#prop; +>a.#prop : Symbol(A2.#prop, Decl(privateNameAccessorsAccess.ts, 0, 10), Decl(privateNameAccessorsAccess.ts, 1, 30)) +>a : Symbol(a, Decl(privateNameAccessorsAccess.ts, 6, 11)) + + function foo (){ +>foo : Symbol(foo, Decl(privateNameAccessorsAccess.ts, 7, 16)) + + a.#prop; +>a.#prop : Symbol(A2.#prop, Decl(privateNameAccessorsAccess.ts, 0, 10), Decl(privateNameAccessorsAccess.ts, 1, 30)) +>a : Symbol(a, Decl(privateNameAccessorsAccess.ts, 6, 11)) + } + } +} +new A2().#prop; // Error +>A2 : Symbol(A2, Decl(privateNameAccessorsAccess.ts, 0, 0)) + +function foo (){ +>foo : Symbol(foo, Decl(privateNameAccessorsAccess.ts, 13, 15)) + + new A2().#prop; // Error +>A2 : Symbol(A2, Decl(privateNameAccessorsAccess.ts, 0, 0)) +} + +class B2 { +>B2 : Symbol(B2, Decl(privateNameAccessorsAccess.ts, 17, 1)) + + m() { +>m : Symbol(B2.m, Decl(privateNameAccessorsAccess.ts, 19, 10)) + + new A2().#prop; +>A2 : Symbol(A2, Decl(privateNameAccessorsAccess.ts, 0, 0)) + } +} + diff --git a/tests/baselines/reference/privateNameAccessorsAccess.types b/tests/baselines/reference/privateNameAccessorsAccess.types new file mode 100644 index 0000000000000..9381e31558f34 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorsAccess.types @@ -0,0 +1,65 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts === +class A2 { +>A2 : A2 + + get #prop() { return ""; } +>#prop : string +>"" : "" + + set #prop(param: string) { } +>#prop : string +>param : string + + constructor() { + console.log(this.#prop); +>console.log(this.#prop) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>this.#prop : string +>this : this + + let a: A2 = this; +>a : A2 +>this : this + + a.#prop; +>a.#prop : string +>a : A2 + + function foo (){ +>foo : () => void + + a.#prop; +>a.#prop : string +>a : A2 + } + } +} +new A2().#prop; // Error +>new A2().#prop : any +>new A2() : A2 +>A2 : typeof A2 + +function foo (){ +>foo : () => void + + new A2().#prop; // Error +>new A2().#prop : any +>new A2() : A2 +>A2 : typeof A2 +} + +class B2 { +>B2 : B2 + + m() { +>m : () => void + + new A2().#prop; +>new A2().#prop : any +>new A2() : A2 +>A2 : typeof A2 + } +} + diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.js b/tests/baselines/reference/privateNameAccessorsCallExpression.js new file mode 100644 index 0000000000000..cc113bc5d513c --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.js @@ -0,0 +1,49 @@ +//// [privateNameAccessorsCallExpression.ts] +class A { + get #fieldFunc() { return function() { this.x = 10; } } + get #fieldFunc2() { return function(a, ...b) {}; } + x = 1; + test() { + this.#fieldFunc(); + const func = this.#fieldFunc; + func(); + new this.#fieldFunc(); + + const arr = [ 1, 2 ]; + this.#fieldFunc2(0, ...arr, 3); + const b = new this.#fieldFunc2(0, ...arr, 3); + const str = this.#fieldFunc2`head${1}middle${2}tail`; + this.getInstance().#fieldFunc2`test${1}and${2}`; + } + getInstance() { return new A(); } +} + +//// [privateNameAccessorsCallExpression.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _fieldFunc, _fieldFunc2; +class A { + constructor() { + this.x = 1; + } + get () { return function () { this.x = 10; }; } + get () { return function (a, ...b) { }; } + test() { + var _a; + __classPrivateFieldGet(this, _fieldFunc).call(this); + const func = __classPrivateFieldGet(this, _fieldFunc); + func(); + new (__classPrivateFieldGet(this, _fieldFunc))(); + const arr = [1, 2]; + __classPrivateFieldGet(this, _fieldFunc2).call(this, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(this, _fieldFunc2))(0, ...arr, 3); + const str = __classPrivateFieldGet(this, _fieldFunc2).bind(this) `head${1}middle${2}tail`; + __classPrivateFieldGet((_a = this.getInstance()), _fieldFunc2).bind(_a) `test${1}and${2}`; + } + getInstance() { return new A(); } +} +_fieldFunc = new WeakMap(), _fieldFunc2 = new WeakMap(); diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.symbols b/tests/baselines/reference/privateNameAccessorsCallExpression.symbols new file mode 100644 index 0000000000000..93d15d2c33e56 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.symbols @@ -0,0 +1,63 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.ts === +class A { +>A : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) + + get #fieldFunc() { return function() { this.x = 10; } } +>#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameAccessorsCallExpression.ts, 0, 9)) + + get #fieldFunc2() { return function(a, ...b) {}; } +>#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameAccessorsCallExpression.ts, 1, 60)) +>a : Symbol(a, Decl(privateNameAccessorsCallExpression.ts, 2, 41)) +>b : Symbol(b, Decl(privateNameAccessorsCallExpression.ts, 2, 43)) + + x = 1; +>x : Symbol(A.x, Decl(privateNameAccessorsCallExpression.ts, 2, 55)) + + test() { +>test : Symbol(A.test, Decl(privateNameAccessorsCallExpression.ts, 3, 10)) + + this.#fieldFunc(); +>this.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameAccessorsCallExpression.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) + + const func = this.#fieldFunc; +>func : Symbol(func, Decl(privateNameAccessorsCallExpression.ts, 6, 13)) +>this.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameAccessorsCallExpression.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) + + func(); +>func : Symbol(func, Decl(privateNameAccessorsCallExpression.ts, 6, 13)) + + new this.#fieldFunc(); +>this.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameAccessorsCallExpression.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) + + const arr = [ 1, 2 ]; +>arr : Symbol(arr, Decl(privateNameAccessorsCallExpression.ts, 10, 13)) + + this.#fieldFunc2(0, ...arr, 3); +>this.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameAccessorsCallExpression.ts, 1, 60)) +>this : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameAccessorsCallExpression.ts, 10, 13)) + + const b = new this.#fieldFunc2(0, ...arr, 3); +>b : Symbol(b, Decl(privateNameAccessorsCallExpression.ts, 12, 13)) +>this.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameAccessorsCallExpression.ts, 1, 60)) +>this : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameAccessorsCallExpression.ts, 10, 13)) + + const str = this.#fieldFunc2`head${1}middle${2}tail`; +>str : Symbol(str, Decl(privateNameAccessorsCallExpression.ts, 13, 13)) +>this.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameAccessorsCallExpression.ts, 1, 60)) +>this : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) + + this.getInstance().#fieldFunc2`test${1}and${2}`; +>this.getInstance().#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameAccessorsCallExpression.ts, 1, 60)) +>this.getInstance : Symbol(A.getInstance, Decl(privateNameAccessorsCallExpression.ts, 15, 5)) +>this : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) +>getInstance : Symbol(A.getInstance, Decl(privateNameAccessorsCallExpression.ts, 15, 5)) + } + getInstance() { return new A(); } +>getInstance : Symbol(A.getInstance, Decl(privateNameAccessorsCallExpression.ts, 15, 5)) +>A : Symbol(A, Decl(privateNameAccessorsCallExpression.ts, 0, 0)) +} diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.types b/tests/baselines/reference/privateNameAccessorsCallExpression.types new file mode 100644 index 0000000000000..69810b957993c --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.types @@ -0,0 +1,95 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.ts === +class A { +>A : A + + get #fieldFunc() { return function() { this.x = 10; } } +>#fieldFunc : () => void +>function() { this.x = 10; } : () => void +>this.x = 10 : 10 +>this.x : any +>this : any +>x : any +>10 : 10 + + get #fieldFunc2() { return function(a, ...b) {}; } +>#fieldFunc2 : (a: any, ...b: any[]) => void +>function(a, ...b) {} : (a: any, ...b: any[]) => void +>a : any +>b : any[] + + x = 1; +>x : number +>1 : 1 + + test() { +>test : () => void + + this.#fieldFunc(); +>this.#fieldFunc() : void +>this.#fieldFunc : () => void +>this : this + + const func = this.#fieldFunc; +>func : () => void +>this.#fieldFunc : () => void +>this : this + + func(); +>func() : void +>func : () => void + + new this.#fieldFunc(); +>new this.#fieldFunc() : any +>this.#fieldFunc : () => void +>this : this + + const arr = [ 1, 2 ]; +>arr : number[] +>[ 1, 2 ] : number[] +>1 : 1 +>2 : 2 + + this.#fieldFunc2(0, ...arr, 3); +>this.#fieldFunc2(0, ...arr, 3) : void +>this.#fieldFunc2 : (a: any, ...b: any[]) => void +>this : this +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const b = new this.#fieldFunc2(0, ...arr, 3); +>b : any +>new this.#fieldFunc2(0, ...arr, 3) : any +>this.#fieldFunc2 : (a: any, ...b: any[]) => void +>this : this +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const str = this.#fieldFunc2`head${1}middle${2}tail`; +>str : void +>this.#fieldFunc2`head${1}middle${2}tail` : void +>this.#fieldFunc2 : (a: any, ...b: any[]) => void +>this : this +>`head${1}middle${2}tail` : "head1middle2tail" +>1 : 1 +>2 : 2 + + this.getInstance().#fieldFunc2`test${1}and${2}`; +>this.getInstance().#fieldFunc2`test${1}and${2}` : void +>this.getInstance().#fieldFunc2 : (a: any, ...b: any[]) => void +>this.getInstance() : A +>this.getInstance : () => A +>this : this +>getInstance : () => A +>`test${1}and${2}` : "test1and2" +>1 : 1 +>2 : 2 + } + getInstance() { return new A(); } +>getInstance : () => A +>new A() : A +>A : typeof A +} diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.errors.txt b/tests/baselines/reference/privateNameAccessorssDerivedClasses.errors.txt new file mode 100644 index 0000000000000..754827bdcb354 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.errors.txt @@ -0,0 +1,18 @@ +tests/cases/conformance/classes/members/privateNames/privateNameAccessorssDerivedClasses.ts(9,23): error TS18013: Property '#prop' is not accessible outside class 'Base' because it has a private identifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameAccessorssDerivedClasses.ts (1 errors) ==== + class Base { + get #prop(): number { return 123; } + static method(x: Derived) { + console.log(x.#prop); + } + } + class Derived extends Base { + static method(x: Derived) { + console.log(x.#prop); + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'Base' because it has a private identifier. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js new file mode 100644 index 0000000000000..f88ea3e4d7b6d --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js @@ -0,0 +1,34 @@ +//// [privateNameAccessorssDerivedClasses.ts] +class Base { + get #prop(): number { return 123; } + static method(x: Derived) { + console.log(x.#prop); + } +} +class Derived extends Base { + static method(x: Derived) { + console.log(x.#prop); + } +} + + +//// [privateNameAccessorssDerivedClasses.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _prop; +class Base { + get () { return 123; } + static method(x) { + console.log(__classPrivateFieldGet(x, _prop)); + } +} +_prop = new WeakMap(); +class Derived extends Base { + static method(x) { + console.log(x.); + } +} diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.symbols b/tests/baselines/reference/privateNameAccessorssDerivedClasses.symbols new file mode 100644 index 0000000000000..771e5bfba3dc6 --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.symbols @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAccessorssDerivedClasses.ts === +class Base { +>Base : Symbol(Base, Decl(privateNameAccessorssDerivedClasses.ts, 0, 0)) + + get #prop(): number { return 123; } +>#prop : Symbol(Base.#prop, Decl(privateNameAccessorssDerivedClasses.ts, 0, 12)) + + static method(x: Derived) { +>method : Symbol(Base.method, Decl(privateNameAccessorssDerivedClasses.ts, 1, 40)) +>x : Symbol(x, Decl(privateNameAccessorssDerivedClasses.ts, 2, 18)) +>Derived : Symbol(Derived, Decl(privateNameAccessorssDerivedClasses.ts, 5, 1)) + + console.log(x.#prop); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x.#prop : Symbol(Base.#prop, Decl(privateNameAccessorssDerivedClasses.ts, 0, 12)) +>x : Symbol(x, Decl(privateNameAccessorssDerivedClasses.ts, 2, 18)) + } +} +class Derived extends Base { +>Derived : Symbol(Derived, Decl(privateNameAccessorssDerivedClasses.ts, 5, 1)) +>Base : Symbol(Base, Decl(privateNameAccessorssDerivedClasses.ts, 0, 0)) + + static method(x: Derived) { +>method : Symbol(Derived.method, Decl(privateNameAccessorssDerivedClasses.ts, 6, 28)) +>x : Symbol(x, Decl(privateNameAccessorssDerivedClasses.ts, 7, 18)) +>Derived : Symbol(Derived, Decl(privateNameAccessorssDerivedClasses.ts, 5, 1)) + + console.log(x.#prop); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x : Symbol(x, Decl(privateNameAccessorssDerivedClasses.ts, 7, 18)) + } +} + diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.types b/tests/baselines/reference/privateNameAccessorssDerivedClasses.types new file mode 100644 index 0000000000000..e25cfbd47532e --- /dev/null +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.types @@ -0,0 +1,39 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAccessorssDerivedClasses.ts === +class Base { +>Base : Base + + get #prop(): number { return 123; } +>#prop : number +>123 : 123 + + static method(x: Derived) { +>method : (x: Derived) => void +>x : Derived + + console.log(x.#prop); +>console.log(x.#prop) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#prop : number +>x : Derived + } +} +class Derived extends Base { +>Derived : Derived +>Base : Base + + static method(x: Derived) { +>method : (x: Derived) => void +>x : Derived + + console.log(x.#prop); +>console.log(x.#prop) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#prop : any +>x : Derived + } +} + diff --git a/tests/baselines/reference/privateNameAndPropertySignature.errors.txt b/tests/baselines/reference/privateNameAndPropertySignature.errors.txt index ef7a8276fdc2a..37653c75ae594 100644 --- a/tests/baselines/reference/privateNameAndPropertySignature.errors.txt +++ b/tests/baselines/reference/privateNameAndPropertySignature.errors.txt @@ -1,20 +1,30 @@ tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(2,5): error TS18016: Private identifiers are not allowed outside class bodies. -tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(6,5): error TS18016: Private identifiers are not allowed outside class bodies. -tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(10,5): error TS18016: Private identifiers are not allowed outside class bodies. -tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(12,9): error TS18016: Private identifiers are not allowed outside class bodies. -tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(16,28): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(3,5): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(7,5): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(8,5): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(12,5): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(14,9): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(15,9): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(17,5): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts(20,28): error TS18016: Private identifiers are not allowed outside class bodies. -==== tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts (5 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts (9 errors) ==== type A = { - #foo: string + #foo: string; ~~~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + #bar(): string; + ~~~~~~~~~~~~~~~ !!! error TS18016: Private identifiers are not allowed outside class bodies. } interface B { #foo: string; ~~~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + #bar(): string; + ~~~~~~~~~~~~~~~ !!! error TS18016: Private identifiers are not allowed outside class bodies. } @@ -25,8 +35,14 @@ tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySigna bar: { #baz: string; ~~~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + #taz(): string; + ~~~~~~~~~~~~~~~ !!! error TS18016: Private identifiers are not allowed outside class bodies. } + #baz(): string; + ~~~~~~~~~~~~~~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. }; declare const y: [{ qux: { #quux: 3 } }]; diff --git a/tests/baselines/reference/privateNameAndPropertySignature.js b/tests/baselines/reference/privateNameAndPropertySignature.js index 602e1159171a5..ad9f8270863d6 100644 --- a/tests/baselines/reference/privateNameAndPropertySignature.js +++ b/tests/baselines/reference/privateNameAndPropertySignature.js @@ -1,17 +1,21 @@ //// [privateNameAndPropertySignature.ts] type A = { - #foo: string + #foo: string; + #bar(): string; } interface B { #foo: string; + #bar(): string; } declare const x: { #foo: number; bar: { #baz: string; + #taz(): string; } + #baz(): string; }; declare const y: [{ qux: { #quux: 3 } }]; diff --git a/tests/baselines/reference/privateNameAndPropertySignature.symbols b/tests/baselines/reference/privateNameAndPropertySignature.symbols index da68133a97edf..1e270e73a839b 100644 --- a/tests/baselines/reference/privateNameAndPropertySignature.symbols +++ b/tests/baselines/reference/privateNameAndPropertySignature.symbols @@ -2,33 +2,45 @@ type A = { >A : Symbol(A, Decl(privateNameAndPropertySignature.ts, 0, 0)) - #foo: string + #foo: string; >#foo : Symbol(#foo, Decl(privateNameAndPropertySignature.ts, 0, 10)) + + #bar(): string; +>#bar : Symbol(#bar, Decl(privateNameAndPropertySignature.ts, 1, 17)) } interface B { ->B : Symbol(B, Decl(privateNameAndPropertySignature.ts, 2, 1)) +>B : Symbol(B, Decl(privateNameAndPropertySignature.ts, 3, 1)) #foo: string; ->#foo : Symbol(B.#foo, Decl(privateNameAndPropertySignature.ts, 4, 13)) +>#foo : Symbol(B.#foo, Decl(privateNameAndPropertySignature.ts, 5, 13)) + + #bar(): string; +>#bar : Symbol(B.#bar, Decl(privateNameAndPropertySignature.ts, 6, 17)) } declare const x: { ->x : Symbol(x, Decl(privateNameAndPropertySignature.ts, 8, 13)) +>x : Symbol(x, Decl(privateNameAndPropertySignature.ts, 10, 13)) #foo: number; ->#foo : Symbol(#foo, Decl(privateNameAndPropertySignature.ts, 8, 18)) +>#foo : Symbol(#foo, Decl(privateNameAndPropertySignature.ts, 10, 18)) bar: { ->bar : Symbol(bar, Decl(privateNameAndPropertySignature.ts, 9, 17)) +>bar : Symbol(bar, Decl(privateNameAndPropertySignature.ts, 11, 17)) #baz: string; ->#baz : Symbol(#baz, Decl(privateNameAndPropertySignature.ts, 10, 10)) +>#baz : Symbol(#baz, Decl(privateNameAndPropertySignature.ts, 12, 10)) + + #taz(): string; +>#taz : Symbol(#taz, Decl(privateNameAndPropertySignature.ts, 13, 21)) } + #baz(): string; +>#baz : Symbol(#baz, Decl(privateNameAndPropertySignature.ts, 15, 5)) + }; declare const y: [{ qux: { #quux: 3 } }]; ->y : Symbol(y, Decl(privateNameAndPropertySignature.ts, 15, 13)) ->qux : Symbol(qux, Decl(privateNameAndPropertySignature.ts, 15, 19)) ->#quux : Symbol(#quux, Decl(privateNameAndPropertySignature.ts, 15, 26)) +>y : Symbol(y, Decl(privateNameAndPropertySignature.ts, 19, 13)) +>qux : Symbol(qux, Decl(privateNameAndPropertySignature.ts, 19, 19)) +>#quux : Symbol(#quux, Decl(privateNameAndPropertySignature.ts, 19, 26)) diff --git a/tests/baselines/reference/privateNameAndPropertySignature.types b/tests/baselines/reference/privateNameAndPropertySignature.types index efe0dfbffd673..3ff962d53e007 100644 --- a/tests/baselines/reference/privateNameAndPropertySignature.types +++ b/tests/baselines/reference/privateNameAndPropertySignature.types @@ -2,17 +2,23 @@ type A = { >A : A - #foo: string + #foo: string; >#foo : string + + #bar(): string; +>#bar : () => string } interface B { #foo: string; >#foo : string + + #bar(): string; +>#bar : () => string } declare const x: { ->x : { bar: { #baz: string;}; } +>x : { bar: { #baz: string; #taz(): string;}; } #foo: number; >#foo : number @@ -22,7 +28,13 @@ declare const x: { #baz: string; >#baz : string + + #taz(): string; +>#taz : () => string } + #baz(): string; +>#baz : () => string + }; declare const y: [{ qux: { #quux: 3 } }]; diff --git a/tests/baselines/reference/privateNameBadDeclaration.errors.txt b/tests/baselines/reference/privateNameBadDeclaration.errors.txt index 71cf3f2089a2a..b05d61c4bf7b9 100644 --- a/tests/baselines/reference/privateNameBadDeclaration.errors.txt +++ b/tests/baselines/reference/privateNameBadDeclaration.errors.txt @@ -1,19 +1,41 @@ tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(3,3): error TS18016: Private identifiers are not allowed outside class bodies. -tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(7,3): error TS18016: Private identifiers are not allowed outside class bodies. -tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(11,10): error TS2339: Property '#z' does not exist on type 'C'. +tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(4,3): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(5,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(5,7): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(9,3): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(10,3): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(11,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(11,7): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts(15,10): error TS2339: Property '#z' does not exist on type 'C'. -==== tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts (3 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts (9 errors) ==== function A() { } A.prototype = { - #x: 1 // Error + #x: 1, // Error ~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + #m() {}, // Error + ~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + get #p() { return "" } // Error + ~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~ !!! error TS18016: Private identifiers are not allowed outside class bodies. } class B { } B.prototype = { - #y: 2 // Error + #y: 2, // Error ~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + #m() {}, // Error + ~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + get #p() { return "" } // Error + ~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~ !!! error TS18016: Private identifiers are not allowed outside class bodies. } class C { diff --git a/tests/baselines/reference/privateNameBadDeclaration.js b/tests/baselines/reference/privateNameBadDeclaration.js index 068720a03a8cf..cf110de187dbe 100644 --- a/tests/baselines/reference/privateNameBadDeclaration.js +++ b/tests/baselines/reference/privateNameBadDeclaration.js @@ -1,11 +1,15 @@ //// [privateNameBadDeclaration.ts] function A() { } A.prototype = { - #x: 1 // Error + #x: 1, // Error + #m() {}, // Error + get #p() { return "" } // Error } class B { } B.prototype = { - #y: 2 // Error + #y: 2, // Error + #m() {}, // Error + get #p() { return "" } // Error } class C { constructor() { @@ -16,7 +20,9 @@ class C { //// [privateNameBadDeclaration.js] function A() { } A.prototype = { - : 1 // Error + : 1, + : function () { }, + get () { return ""; } // Error }; var B = /** @class */ (function () { function B() { @@ -24,7 +30,9 @@ var B = /** @class */ (function () { return B; }()); B.prototype = { - : 2 // Error + : 2, + : function () { }, + get () { return ""; } // Error }; var C = /** @class */ (function () { function C() { diff --git a/tests/baselines/reference/privateNameBadDeclaration.symbols b/tests/baselines/reference/privateNameBadDeclaration.symbols index d689169f7115f..ed3ca5e455c10 100644 --- a/tests/baselines/reference/privateNameBadDeclaration.symbols +++ b/tests/baselines/reference/privateNameBadDeclaration.symbols @@ -7,25 +7,37 @@ A.prototype = { >A : Symbol(A, Decl(privateNameBadDeclaration.ts, 0, 0)) >prototype : Symbol(Function.prototype, Decl(lib.es5.d.ts, --, --)) - #x: 1 // Error + #x: 1, // Error >#x : Symbol(#x, Decl(privateNameBadDeclaration.ts, 1, 15)) + + #m() {}, // Error +>#m : Symbol(#m, Decl(privateNameBadDeclaration.ts, 2, 8)) + + get #p() { return "" } // Error +>#p : Symbol(#p, Decl(privateNameBadDeclaration.ts, 3, 10)) } class B { } ->B : Symbol(B, Decl(privateNameBadDeclaration.ts, 3, 1)) +>B : Symbol(B, Decl(privateNameBadDeclaration.ts, 5, 1)) B.prototype = { >B.prototype : Symbol(B.prototype) ->B : Symbol(B, Decl(privateNameBadDeclaration.ts, 3, 1)) +>B : Symbol(B, Decl(privateNameBadDeclaration.ts, 5, 1)) >prototype : Symbol(B.prototype) - #y: 2 // Error ->#y : Symbol(#y, Decl(privateNameBadDeclaration.ts, 5, 15)) + #y: 2, // Error +>#y : Symbol(#y, Decl(privateNameBadDeclaration.ts, 7, 15)) + + #m() {}, // Error +>#m : Symbol(#m, Decl(privateNameBadDeclaration.ts, 8, 8)) + + get #p() { return "" } // Error +>#p : Symbol(#p, Decl(privateNameBadDeclaration.ts, 9, 10)) } class C { ->C : Symbol(C, Decl(privateNameBadDeclaration.ts, 7, 1)) +>C : Symbol(C, Decl(privateNameBadDeclaration.ts, 11, 1)) constructor() { this.#z = 3; ->this : Symbol(C, Decl(privateNameBadDeclaration.ts, 7, 1)) +>this : Symbol(C, Decl(privateNameBadDeclaration.ts, 11, 1)) } } diff --git a/tests/baselines/reference/privateNameBadDeclaration.types b/tests/baselines/reference/privateNameBadDeclaration.types index a84048bde966c..8dc5b5f65cba4 100644 --- a/tests/baselines/reference/privateNameBadDeclaration.types +++ b/tests/baselines/reference/privateNameBadDeclaration.types @@ -3,29 +3,43 @@ function A() { } >A : () => void A.prototype = { ->A.prototype = { #x: 1 // Error} : {} +>A.prototype = { #x: 1, // Error #m() {}, // Error get #p() { return "" } // Error} : {} >A.prototype : any >A : () => void >prototype : any ->{ #x: 1 // Error} : {} +>{ #x: 1, // Error #m() {}, // Error get #p() { return "" } // Error} : {} - #x: 1 // Error + #x: 1, // Error >#x : number >1 : 1 + + #m() {}, // Error +>#m : () => void + + get #p() { return "" } // Error +>#p : string +>"" : "" } class B { } >B : B B.prototype = { ->B.prototype = { #y: 2 // Error} : {} +>B.prototype = { #y: 2, // Error #m() {}, // Error get #p() { return "" } // Error} : {} >B.prototype : B >B : typeof B >prototype : B ->{ #y: 2 // Error} : {} +>{ #y: 2, // Error #m() {}, // Error get #p() { return "" } // Error} : {} - #y: 2 // Error + #y: 2, // Error >#y : number >2 : 2 + + #m() {}, // Error +>#m : () => void + + get #p() { return "" } // Error +>#p : string +>"" : "" } class C { >C : C diff --git a/tests/baselines/reference/privateNameDuplicateField.errors.txt b/tests/baselines/reference/privateNameDuplicateField.errors.txt index b818eec73b47a..519a2b85f2657 100644 --- a/tests/baselines/reference/privateNameDuplicateField.errors.txt +++ b/tests/baselines/reference/privateNameDuplicateField.errors.txt @@ -1,11 +1,73 @@ tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(3,5): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(7,5): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(8,5): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(13,5): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(14,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(18,5): error TS2393: Duplicate function implementation. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(19,5): error TS2393: Duplicate function implementation. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(24,5): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(25,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(30,5): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(31,5): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(32,9): error TS2300: Duplicate identifier '#foo'. -==== tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts (1 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts (12 errors) ==== class A { #foo = "foo"; #foo = "foo"; ~~~~ !!! error TS2300: Duplicate identifier '#foo'. } + + class A2 { + #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + #foo() {} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + + class A3 { + #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + get #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + class A4 { + #foo() { return ""} + ~~~~ +!!! error TS2393: Duplicate function implementation. + #foo() { return ""} + ~~~~ +!!! error TS2393: Duplicate function implementation. + } + + + class A5 { + #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + get #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + + class A6 { + #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + get #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index 30b96d7c48b74..bfc66c2cfc743 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -3,11 +3,40 @@ class A { #foo = "foo"; #foo = "foo"; } + +class A2 { + #foo = "foo"; + #foo() {} +} + + +class A3 { + #foo = "foo"; + get #foo() { return ""} +} + +class A4 { + #foo() { return ""} + #foo() { return ""} +} + + +class A5 { + #foo() { return ""} + get #foo() { return ""} +} + + +class A6 { + #foo = "foo"; + #foo() { return ""} + get #foo() { return ""} +} //// [privateNameDuplicateField.js] "use strict"; -var _foo, _foo_1; +var _foo, _foo_1, _foo_2, _foo_3, _foo_4, _foo_5, _foo_6, _foo_7, _foo_8, _foo_9, _foo_10, _foo_11, _foo_12; class A { constructor() { _foo_1.set(this, "foo"); @@ -15,3 +44,35 @@ class A { } } _foo = new WeakMap(), _foo_1 = new WeakMap(); +class A2 { + constructor() { + _foo_3.set(this, "foo"); + } + () { } +} +_foo_2 = new WeakMap(), _foo_3 = new WeakMap(); +class A3 { + constructor() { + _foo_5.set(this, "foo"); + } + get () { return ""; } +} +_foo_4 = new WeakMap(), _foo_5 = new WeakMap(); +class A4 { + () { return ""; } + () { return ""; } +} +_foo_6 = new WeakMap(), _foo_7 = new WeakMap(); +class A5 { + () { return ""; } + get () { return ""; } +} +_foo_8 = new WeakMap(), _foo_9 = new WeakMap(); +class A6 { + constructor() { + _foo_12.set(this, "foo"); + } + () { return ""; } + get () { return ""; } +} +_foo_10 = new WeakMap(), _foo_11 = new WeakMap(), _foo_12 = new WeakMap(); diff --git a/tests/baselines/reference/privateNameDuplicateField.symbols b/tests/baselines/reference/privateNameDuplicateField.symbols index af627ed139dfe..85c8eb0ecb05d 100644 --- a/tests/baselines/reference/privateNameDuplicateField.symbols +++ b/tests/baselines/reference/privateNameDuplicateField.symbols @@ -9,3 +9,59 @@ class A { >#foo : Symbol(A.#foo, Decl(privateNameDuplicateField.ts, 0, 9), Decl(privateNameDuplicateField.ts, 1, 17)) } +class A2 { +>A2 : Symbol(A2, Decl(privateNameDuplicateField.ts, 3, 1)) + + #foo = "foo"; +>#foo : Symbol(A2.#foo, Decl(privateNameDuplicateField.ts, 5, 10)) + + #foo() {} +>#foo : Symbol(A2.#foo, Decl(privateNameDuplicateField.ts, 6, 17)) +} + + +class A3 { +>A3 : Symbol(A3, Decl(privateNameDuplicateField.ts, 8, 1)) + + #foo = "foo"; +>#foo : Symbol(A3.#foo, Decl(privateNameDuplicateField.ts, 11, 10)) + + get #foo() { return ""} +>#foo : Symbol(A3.#foo, Decl(privateNameDuplicateField.ts, 12, 17)) +} + +class A4 { +>A4 : Symbol(A4, Decl(privateNameDuplicateField.ts, 14, 1)) + + #foo() { return ""} +>#foo : Symbol(A4.#foo, Decl(privateNameDuplicateField.ts, 16, 10), Decl(privateNameDuplicateField.ts, 17, 23)) + + #foo() { return ""} +>#foo : Symbol(A4.#foo, Decl(privateNameDuplicateField.ts, 16, 10), Decl(privateNameDuplicateField.ts, 17, 23)) +} + + +class A5 { +>A5 : Symbol(A5, Decl(privateNameDuplicateField.ts, 19, 1)) + + #foo() { return ""} +>#foo : Symbol(A5.#foo, Decl(privateNameDuplicateField.ts, 22, 10)) + + get #foo() { return ""} +>#foo : Symbol(A5.#foo, Decl(privateNameDuplicateField.ts, 23, 23)) +} + + +class A6 { +>A6 : Symbol(A6, Decl(privateNameDuplicateField.ts, 25, 1)) + + #foo = "foo"; +>#foo : Symbol(A6.#foo, Decl(privateNameDuplicateField.ts, 28, 10)) + + #foo() { return ""} +>#foo : Symbol(A6.#foo, Decl(privateNameDuplicateField.ts, 29, 17)) + + get #foo() { return ""} +>#foo : Symbol(A6.#foo, Decl(privateNameDuplicateField.ts, 30, 23)) +} + diff --git a/tests/baselines/reference/privateNameDuplicateField.types b/tests/baselines/reference/privateNameDuplicateField.types index 0f67eac2456aa..962b1282c5c5a 100644 --- a/tests/baselines/reference/privateNameDuplicateField.types +++ b/tests/baselines/reference/privateNameDuplicateField.types @@ -11,3 +11,69 @@ class A { >"foo" : "foo" } +class A2 { +>A2 : A2 + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + #foo() {} +>#foo : () => void +} + + +class A3 { +>A3 : A3 + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + get #foo() { return ""} +>#foo : string +>"" : "" +} + +class A4 { +>A4 : A4 + + #foo() { return ""} +>#foo : () => string +>"" : "" + + #foo() { return ""} +>#foo : () => string +>"" : "" +} + + +class A5 { +>A5 : A5 + + #foo() { return ""} +>#foo : () => string +>"" : "" + + get #foo() { return ""} +>#foo : string +>"" : "" +} + + +class A6 { +>A6 : A6 + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + #foo() { return ""} +>#foo : () => string +>"" : "" + + get #foo() { return ""} +>#foo : string +>"" : "" +} + diff --git a/tests/baselines/reference/privateNameInObjectLiteral-3.errors.txt b/tests/baselines/reference/privateNameInObjectLiteral-3.errors.txt new file mode 100644 index 0000000000000..b93a8c149e491 --- /dev/null +++ b/tests/baselines/reference/privateNameInObjectLiteral-3.errors.txt @@ -0,0 +1,15 @@ +tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts(2,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts(2,9): error TS18016: Private identifiers are not allowed outside class bodies. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts (2 errors) ==== + const obj = { + get #foo() { + ~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + return "" + } + }; + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameInObjectLiteral-3.js b/tests/baselines/reference/privateNameInObjectLiteral-3.js new file mode 100644 index 0000000000000..e1394585ecca1 --- /dev/null +++ b/tests/baselines/reference/privateNameInObjectLiteral-3.js @@ -0,0 +1,14 @@ +//// [privateNameInObjectLiteral-3.ts] +const obj = { + get #foo() { + return "" + } +}; + + +//// [privateNameInObjectLiteral-3.js] +var obj = { + get () { + return ""; + } +}; diff --git a/tests/baselines/reference/privateNameInObjectLiteral-3.symbols b/tests/baselines/reference/privateNameInObjectLiteral-3.symbols new file mode 100644 index 0000000000000..190a94360eaf2 --- /dev/null +++ b/tests/baselines/reference/privateNameInObjectLiteral-3.symbols @@ -0,0 +1,11 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts === +const obj = { +>obj : Symbol(obj, Decl(privateNameInObjectLiteral-3.ts, 0, 5)) + + get #foo() { +>#foo : Symbol(#foo, Decl(privateNameInObjectLiteral-3.ts, 0, 13)) + + return "" + } +}; + diff --git a/tests/baselines/reference/privateNameInObjectLiteral-3.types b/tests/baselines/reference/privateNameInObjectLiteral-3.types new file mode 100644 index 0000000000000..20ec74dc18a36 --- /dev/null +++ b/tests/baselines/reference/privateNameInObjectLiteral-3.types @@ -0,0 +1,13 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts === +const obj = { +>obj : {} +>{ get #foo() { return "" }} : {} + + get #foo() { +>#foo : string + + return "" +>"" : "" + } +}; + diff --git a/tests/baselines/reference/privateNameJsBadDeclaration.errors.txt b/tests/baselines/reference/privateNameJsBadDeclaration.errors.txt index 206e257745708..858d9e96713fc 100644 --- a/tests/baselines/reference/privateNameJsBadDeclaration.errors.txt +++ b/tests/baselines/reference/privateNameJsBadDeclaration.errors.txt @@ -1,19 +1,41 @@ tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(3,3): error TS18016: Private identifiers are not allowed outside class bodies. -tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(7,3): error TS18016: Private identifiers are not allowed outside class bodies. -tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(11,10): error TS2339: Property '#z' does not exist on type 'C'. +tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(4,3): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(5,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(5,7): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(9,3): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(10,3): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(11,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(11,7): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js(15,10): error TS2339: Property '#z' does not exist on type 'C'. -==== tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js (3 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameJsPrototype.js (9 errors) ==== function A() { } A.prototype = { - #x: 1 // Error + #x: 1, // Error ~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + #m() {}, // Error + ~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + get #p() { return "" } // Error + ~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~ !!! error TS18016: Private identifiers are not allowed outside class bodies. } class B { } B.prototype = { - #y: 2 // Error + #y: 2, // Error ~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + #m() {}, // Error + ~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + get #p() { return "" } // Error + ~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~ !!! error TS18016: Private identifiers are not allowed outside class bodies. } class C { diff --git a/tests/baselines/reference/privateNameJsBadDeclaration.symbols b/tests/baselines/reference/privateNameJsBadDeclaration.symbols index 33a45250dcec5..53c99fe4238ee 100644 --- a/tests/baselines/reference/privateNameJsBadDeclaration.symbols +++ b/tests/baselines/reference/privateNameJsBadDeclaration.symbols @@ -7,25 +7,37 @@ A.prototype = { >A : Symbol(A, Decl(privateNameJsPrototype.js, 0, 0), Decl(privateNameJsPrototype.js, 0, 16)) >prototype : Symbol(A.prototype, Decl(privateNameJsPrototype.js, 0, 16)) - #x: 1 // Error + #x: 1, // Error >#x : Symbol(#x, Decl(privateNameJsPrototype.js, 1, 15)) + + #m() {}, // Error +>#m : Symbol(#m, Decl(privateNameJsPrototype.js, 2, 8)) + + get #p() { return "" } // Error +>#p : Symbol(#p, Decl(privateNameJsPrototype.js, 3, 10)) } class B { } ->B : Symbol(B, Decl(privateNameJsPrototype.js, 3, 1), Decl(privateNameJsPrototype.js, 4, 11)) +>B : Symbol(B, Decl(privateNameJsPrototype.js, 5, 1), Decl(privateNameJsPrototype.js, 6, 11)) B.prototype = { ->B.prototype : Symbol(B.prototype, Decl(privateNameJsPrototype.js, 4, 11)) ->B : Symbol(B, Decl(privateNameJsPrototype.js, 3, 1), Decl(privateNameJsPrototype.js, 4, 11)) ->prototype : Symbol(B.prototype, Decl(privateNameJsPrototype.js, 4, 11)) +>B.prototype : Symbol(B.prototype, Decl(privateNameJsPrototype.js, 6, 11)) +>B : Symbol(B, Decl(privateNameJsPrototype.js, 5, 1), Decl(privateNameJsPrototype.js, 6, 11)) +>prototype : Symbol(B.prototype, Decl(privateNameJsPrototype.js, 6, 11)) + + #y: 2, // Error +>#y : Symbol(#y, Decl(privateNameJsPrototype.js, 7, 15)) + + #m() {}, // Error +>#m : Symbol(#m, Decl(privateNameJsPrototype.js, 8, 8)) - #y: 2 // Error ->#y : Symbol(#y, Decl(privateNameJsPrototype.js, 5, 15)) + get #p() { return "" } // Error +>#p : Symbol(#p, Decl(privateNameJsPrototype.js, 9, 10)) } class C { ->C : Symbol(C, Decl(privateNameJsPrototype.js, 7, 1)) +>C : Symbol(C, Decl(privateNameJsPrototype.js, 11, 1)) constructor() { this.#z = 3; ->this : Symbol(C, Decl(privateNameJsPrototype.js, 7, 1)) +>this : Symbol(C, Decl(privateNameJsPrototype.js, 11, 1)) } } diff --git a/tests/baselines/reference/privateNameJsBadDeclaration.types b/tests/baselines/reference/privateNameJsBadDeclaration.types index 0ccbbeef0a9ba..9799d7e6ad3f0 100644 --- a/tests/baselines/reference/privateNameJsBadDeclaration.types +++ b/tests/baselines/reference/privateNameJsBadDeclaration.types @@ -3,29 +3,43 @@ function A() { } >A : typeof A A.prototype = { ->A.prototype = { #x: 1 // Error} : {} +>A.prototype = { #x: 1, // Error #m() {}, // Error get #p() { return "" } // Error} : {} >A.prototype : {} >A : typeof A >prototype : {} ->{ #x: 1 // Error} : {} +>{ #x: 1, // Error #m() {}, // Error get #p() { return "" } // Error} : {} - #x: 1 // Error + #x: 1, // Error >#x : number >1 : 1 + + #m() {}, // Error +>#m : () => void + + get #p() { return "" } // Error +>#p : string +>"" : "" } class B { } >B : B B.prototype = { ->B.prototype = { #y: 2 // Error} : {} +>B.prototype = { #y: 2, // Error #m() {}, // Error get #p() { return "" } // Error} : {} >B.prototype : B >B : typeof B >prototype : B ->{ #y: 2 // Error} : {} +>{ #y: 2, // Error #m() {}, // Error get #p() { return "" } // Error} : {} - #y: 2 // Error + #y: 2, // Error >#y : number >2 : 2 + + #m() {}, // Error +>#m : () => void + + get #p() { return "" } // Error +>#p : string +>"" : "" } class C { >C : C diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.errors.txt b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.errors.txt new file mode 100644 index 0000000000000..7fb1cf6151750 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts(7,31): error TS18014: The property '#x' cannot be accessed on type 'Base' within this class because it is shadowed by another private identifier with the same spelling. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts (1 errors) ==== + class Base { + get #x() { return 1; }; + constructor() { + class Derived { + get #x() { return 1; }; + testBase(x: Base) { + console.log(x.#x); + ~~ +!!! error TS18014: The property '#x' cannot be accessed on type 'Base' within this class because it is shadowed by another private identifier with the same spelling. +!!! related TS18017 tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts:5:17: The shadowing declaration of '#x' is defined here +!!! related TS18018 tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts:2:9: The declaration of '#x' that you probably intended to use is defined here + } + testDerived(x: Derived) { + console.log(x.#x); + } + } + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js new file mode 100644 index 0000000000000..d7a1c97b33b26 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js @@ -0,0 +1,44 @@ +//// [privateNameNestedClassAccessorsShadowing.ts] +class Base { + get #x() { return 1; }; + constructor() { + class Derived { + get #x() { return 1; }; + testBase(x: Base) { + console.log(x.#x); + } + testDerived(x: Derived) { + console.log(x.#x); + } + } + } +} + + +//// [privateNameNestedClassAccessorsShadowing.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _x; +class Base { + constructor() { + var _x_1; + class Derived { + get () { return 1; } + ; + testBase(x) { + console.log(__classPrivateFieldGet(x, _x_1)); + } + testDerived(x) { + console.log(__classPrivateFieldGet(x, _x_1)); + } + } + _x_1 = new WeakMap(); + } + get () { return 1; } + ; +} +_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.symbols b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.symbols new file mode 100644 index 0000000000000..383c956598441 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.symbols @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts === +class Base { +>Base : Symbol(Base, Decl(privateNameNestedClassAccessorsShadowing.ts, 0, 0)) + + get #x() { return 1; }; +>#x : Symbol(Base.#x, Decl(privateNameNestedClassAccessorsShadowing.ts, 0, 12)) + + constructor() { + class Derived { +>Derived : Symbol(Derived, Decl(privateNameNestedClassAccessorsShadowing.ts, 2, 19)) + + get #x() { return 1; }; +>#x : Symbol(Derived.#x, Decl(privateNameNestedClassAccessorsShadowing.ts, 3, 23)) + + testBase(x: Base) { +>testBase : Symbol(Derived.testBase, Decl(privateNameNestedClassAccessorsShadowing.ts, 4, 35)) +>x : Symbol(x, Decl(privateNameNestedClassAccessorsShadowing.ts, 5, 21)) +>Base : Symbol(Base, Decl(privateNameNestedClassAccessorsShadowing.ts, 0, 0)) + + console.log(x.#x); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x : Symbol(x, Decl(privateNameNestedClassAccessorsShadowing.ts, 5, 21)) + } + testDerived(x: Derived) { +>testDerived : Symbol(Derived.testDerived, Decl(privateNameNestedClassAccessorsShadowing.ts, 7, 13)) +>x : Symbol(x, Decl(privateNameNestedClassAccessorsShadowing.ts, 8, 24)) +>Derived : Symbol(Derived, Decl(privateNameNestedClassAccessorsShadowing.ts, 2, 19)) + + console.log(x.#x); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x.#x : Symbol(Derived.#x, Decl(privateNameNestedClassAccessorsShadowing.ts, 3, 23)) +>x : Symbol(x, Decl(privateNameNestedClassAccessorsShadowing.ts, 8, 24)) + } + } + } +} + diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.types b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.types new file mode 100644 index 0000000000000..fb2ad9d941439 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.types @@ -0,0 +1,44 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts === +class Base { +>Base : Base + + get #x() { return 1; }; +>#x : number +>1 : 1 + + constructor() { + class Derived { +>Derived : Derived + + get #x() { return 1; }; +>#x : number +>1 : 1 + + testBase(x: Base) { +>testBase : (x: Base) => void +>x : Base + + console.log(x.#x); +>console.log(x.#x) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#x : any +>x : Base + } + testDerived(x: Derived) { +>testDerived : (x: Derived) => void +>x : Derived + + console.log(x.#x); +>console.log(x.#x) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#x : number +>x : Derived + } + } + } +} + diff --git a/tests/baselines/reference/privateNameUnused.errors.txt b/tests/baselines/reference/privateNameUnused.errors.txt index cb4bd1853f0d9..02ecbc9e60047 100644 --- a/tests/baselines/reference/privateNameUnused.errors.txt +++ b/tests/baselines/reference/privateNameUnused.errors.txt @@ -1,7 +1,9 @@ tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts(3,5): error TS6133: '#unused' is declared but its value is never read. +tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts(11,5): error TS6133: '#unused' is declared but its value is never read. +tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts(21,9): error TS6133: '#unused' is declared but its value is never read. -==== tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts (1 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts (3 errors) ==== export class A { #used = "used"; #unused = "unused"; @@ -11,4 +13,26 @@ tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts(3,5): console.log(this.#used); } } - \ No newline at end of file + + export class A2 { + #used() { }; + #unused() { }; + ~~~~~~~ +!!! error TS6133: '#unused' is declared but its value is never read. + constructor () { + console.log(this.#used()); + } + } + + export class A3 { + get #used() { return 0 }; + set #used(value: number) { }; + + get #unused() { return 0 }; + ~~~~~~~ +!!! error TS6133: '#unused' is declared but its value is never read. + set #unused(value: number) { }; + constructor () { + console.log(this.#used); + } + } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameUnused.symbols b/tests/baselines/reference/privateNameUnused.symbols index 4b85303d6f2ed..d8b834bd92f69 100644 --- a/tests/baselines/reference/privateNameUnused.symbols +++ b/tests/baselines/reference/privateNameUnused.symbols @@ -18,3 +18,48 @@ export class A { } } +export class A2 { +>A2 : Symbol(A2, Decl(privateNameUnused.ts, 6, 1)) + + #used() { }; +>#used : Symbol(A2.#used, Decl(privateNameUnused.ts, 8, 17)) + + #unused() { }; +>#unused : Symbol(A2.#unused, Decl(privateNameUnused.ts, 9, 17)) + + constructor () { + console.log(this.#used()); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>this.#used : Symbol(A2.#used, Decl(privateNameUnused.ts, 8, 17)) +>this : Symbol(A2, Decl(privateNameUnused.ts, 6, 1)) + } +} + +export class A3 { +>A3 : Symbol(A3, Decl(privateNameUnused.ts, 14, 1)) + + get #used() { return 0 }; +>#used : Symbol(A3.#used, Decl(privateNameUnused.ts, 16, 17), Decl(privateNameUnused.ts, 17, 29)) + + set #used(value: number) { }; +>#used : Symbol(A3.#used, Decl(privateNameUnused.ts, 16, 17), Decl(privateNameUnused.ts, 17, 29)) +>value : Symbol(value, Decl(privateNameUnused.ts, 18, 14)) + + get #unused() { return 0 }; +>#unused : Symbol(A3.#unused, Decl(privateNameUnused.ts, 18, 34), Decl(privateNameUnused.ts, 20, 31)) + + set #unused(value: number) { }; +>#unused : Symbol(A3.#unused, Decl(privateNameUnused.ts, 18, 34), Decl(privateNameUnused.ts, 20, 31)) +>value : Symbol(value, Decl(privateNameUnused.ts, 21, 16)) + + constructor () { + console.log(this.#used); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>this.#used : Symbol(A3.#used, Decl(privateNameUnused.ts, 16, 17), Decl(privateNameUnused.ts, 17, 29)) +>this : Symbol(A3, Decl(privateNameUnused.ts, 14, 1)) + } +} diff --git a/tests/baselines/reference/privateNameUnused.types b/tests/baselines/reference/privateNameUnused.types index dc56a8f2a9e47..66ab9cf92e9be 100644 --- a/tests/baselines/reference/privateNameUnused.types +++ b/tests/baselines/reference/privateNameUnused.types @@ -21,3 +21,53 @@ export class A { } } +export class A2 { +>A2 : A2 + + #used() { }; +>#used : () => void + + #unused() { }; +>#unused : () => void + + constructor () { + console.log(this.#used()); +>console.log(this.#used()) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>this.#used() : void +>this.#used : () => void +>this : this + } +} + +export class A3 { +>A3 : A3 + + get #used() { return 0 }; +>#used : number +>0 : 0 + + set #used(value: number) { }; +>#used : number +>value : number + + get #unused() { return 0 }; +>#unused : number +>0 : 0 + + set #unused(value: number) { }; +>#unused : number +>value : number + + constructor () { + console.log(this.#used); +>console.log(this.#used) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>this.#used : number +>this : this + } +} diff --git a/tests/baselines/reference/privateNamesAndkeyof.js b/tests/baselines/reference/privateNamesAndkeyof.js index 46750f78874dd..5a393e864d1fd 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.js +++ b/tests/baselines/reference/privateNamesAndkeyof.js @@ -1,21 +1,48 @@ //// [privateNamesAndkeyof.ts] class A { - #foo = 3; + #fooField = 3; + #fooMethod() { }; + get #fooProp() { return 1; }; + set #fooProp(value: number) { }; bar = 3; baz = 3; } -type T = keyof A // should not include '#foo' +type T = keyof A // should not include '#foo*' -//// [privateNamesAndkeyof.js] -"use strict"; -var _foo; -class A { - constructor() { - _foo.set(this, 3); - this.bar = 3; - this.baz = 3; +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(9,5): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(9,8): error TS1005: '=>' expected. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(11,12): error TS1005: ';' expected. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(13,17): error TS1005: ';' expected. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(15,1): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js (5 errors) ==== + "use strict"; + var _fooField, _fooMethod, _fooProp, _fooProp_1; + class A { + constructor() { + _fooField.set(this, 3); + this.bar = 3; + this.baz = 3; + } + () { } + ~ +!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. + ~ +!!! error TS1005: '=>' expected. + ; + get () { return 1; } + ~ +!!! error TS1005: ';' expected. + ; + set (value) { } + ~ +!!! error TS1005: ';' expected. + ; } -} -_foo = new WeakMap(); + ~ +!!! error TS1128: Declaration or statement expected. + _fooField = new WeakMap(), _fooMethod = new WeakMap(), _fooProp = new WeakMap(), _fooProp_1 = new WeakMap(); + \ No newline at end of file diff --git a/tests/baselines/reference/privateNamesAndkeyof.symbols b/tests/baselines/reference/privateNamesAndkeyof.symbols index dbad7e0aa748f..663c891517171 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.symbols +++ b/tests/baselines/reference/privateNamesAndkeyof.symbols @@ -2,17 +2,27 @@ class A { >A : Symbol(A, Decl(privateNamesAndkeyof.ts, 0, 0)) - #foo = 3; ->#foo : Symbol(A.#foo, Decl(privateNamesAndkeyof.ts, 0, 9)) + #fooField = 3; +>#fooField : Symbol(A.#fooField, Decl(privateNamesAndkeyof.ts, 0, 9)) + + #fooMethod() { }; +>#fooMethod : Symbol(A.#fooMethod, Decl(privateNamesAndkeyof.ts, 1, 18)) + + get #fooProp() { return 1; }; +>#fooProp : Symbol(A.#fooProp, Decl(privateNamesAndkeyof.ts, 2, 21), Decl(privateNamesAndkeyof.ts, 3, 33)) + + set #fooProp(value: number) { }; +>#fooProp : Symbol(A.#fooProp, Decl(privateNamesAndkeyof.ts, 2, 21), Decl(privateNamesAndkeyof.ts, 3, 33)) +>value : Symbol(value, Decl(privateNamesAndkeyof.ts, 4, 17)) bar = 3; ->bar : Symbol(A.bar, Decl(privateNamesAndkeyof.ts, 1, 13)) +>bar : Symbol(A.bar, Decl(privateNamesAndkeyof.ts, 4, 36)) baz = 3; ->baz : Symbol(A.baz, Decl(privateNamesAndkeyof.ts, 2, 12)) +>baz : Symbol(A.baz, Decl(privateNamesAndkeyof.ts, 5, 12)) } -type T = keyof A // should not include '#foo' ->T : Symbol(T, Decl(privateNamesAndkeyof.ts, 4, 1)) +type T = keyof A // should not include '#foo*' +>T : Symbol(T, Decl(privateNamesAndkeyof.ts, 7, 1)) >A : Symbol(A, Decl(privateNamesAndkeyof.ts, 0, 0)) diff --git a/tests/baselines/reference/privateNamesAndkeyof.types b/tests/baselines/reference/privateNamesAndkeyof.types index 3c063097dd464..706aaf68836f7 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.types +++ b/tests/baselines/reference/privateNamesAndkeyof.types @@ -2,10 +2,21 @@ class A { >A : A - #foo = 3; ->#foo : number + #fooField = 3; +>#fooField : number >3 : 3 + #fooMethod() { }; +>#fooMethod : () => void + + get #fooProp() { return 1; }; +>#fooProp : number +>1 : 1 + + set #fooProp(value: number) { }; +>#fooProp : number +>value : number + bar = 3; >bar : number >3 : 3 @@ -15,6 +26,6 @@ class A { >3 : 3 } -type T = keyof A // should not include '#foo' +type T = keyof A // should not include '#foo*' >T : keyof A diff --git a/tests/baselines/reference/privateNamesAssertion.js b/tests/baselines/reference/privateNamesAssertion.js index 66af365350b48..b6be4d5d4adf2 100644 --- a/tests/baselines/reference/privateNamesAssertion.js +++ b/tests/baselines/reference/privateNamesAssertion.js @@ -10,6 +10,18 @@ class Foo { v; } } + +class Foo2 { + #p1(v: any): asserts v is string { + if (typeof v !== "string") { + throw new Error(); + } + } + m1(v: unknown) { + this.#p1(v); + v; + } +} //// [privateNamesAssertion.js] @@ -28,3 +40,14 @@ class Foo { v; } } +class Foo2 { + #p1(v) { + if (typeof v !== "string") { + throw new Error(); + } + } + m1(v) { + this.#p1(v); + v; + } +} diff --git a/tests/baselines/reference/privateNamesAssertion.symbols b/tests/baselines/reference/privateNamesAssertion.symbols index 40d903912e734..2e0c423f2dd4d 100644 --- a/tests/baselines/reference/privateNamesAssertion.symbols +++ b/tests/baselines/reference/privateNamesAssertion.symbols @@ -29,3 +29,32 @@ class Foo { } } +class Foo2 { +>Foo2 : Symbol(Foo2, Decl(privateNamesAssertion.ts, 10, 1)) + + #p1(v: any): asserts v is string { +>#p1 : Symbol(Foo2.#p1, Decl(privateNamesAssertion.ts, 12, 12)) +>v : Symbol(v, Decl(privateNamesAssertion.ts, 13, 8)) +>v : Symbol(v, Decl(privateNamesAssertion.ts, 13, 8)) + + if (typeof v !== "string") { +>v : Symbol(v, Decl(privateNamesAssertion.ts, 13, 8)) + + throw new Error(); +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + } + } + m1(v: unknown) { +>m1 : Symbol(Foo2.m1, Decl(privateNamesAssertion.ts, 17, 5)) +>v : Symbol(v, Decl(privateNamesAssertion.ts, 18, 7)) + + this.#p1(v); +>this.#p1 : Symbol(Foo2.#p1, Decl(privateNamesAssertion.ts, 12, 12)) +>this : Symbol(Foo2, Decl(privateNamesAssertion.ts, 10, 1)) +>v : Symbol(v, Decl(privateNamesAssertion.ts, 18, 7)) + + v; +>v : Symbol(v, Decl(privateNamesAssertion.ts, 18, 7)) + } +} + diff --git a/tests/baselines/reference/privateNamesAssertion.types b/tests/baselines/reference/privateNamesAssertion.types index ff0dd98d40219..44a052728e9eb 100644 --- a/tests/baselines/reference/privateNamesAssertion.types +++ b/tests/baselines/reference/privateNamesAssertion.types @@ -34,3 +34,36 @@ class Foo { } } +class Foo2 { +>Foo2 : Foo2 + + #p1(v: any): asserts v is string { +>#p1 : (v: any) => asserts v is string +>v : any + + if (typeof v !== "string") { +>typeof v !== "string" : boolean +>typeof v : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +>v : any +>"string" : "string" + + throw new Error(); +>new Error() : Error +>Error : ErrorConstructor + } + } + m1(v: unknown) { +>m1 : (v: unknown) => void +>v : unknown + + this.#p1(v); +>this.#p1(v) : void +>this.#p1 : (v: any) => asserts v is string +>this : this +>v : unknown + + v; +>v : string + } +} + diff --git a/tests/baselines/reference/privateNamesInGenericClasses.errors.txt b/tests/baselines/reference/privateNamesInGenericClasses.errors.txt index d617432535020..ece16935004da 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.errors.txt +++ b/tests/baselines/reference/privateNamesInGenericClasses.errors.txt @@ -1,16 +1,30 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts(10,3): error TS18013: Property '#foo' is not accessible outside class 'C' because it has a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts(11,1): error TS2322: Type 'C' is not assignable to type 'C'. +tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts(22,3): error TS18013: Property '#foo' is not accessible outside class 'C' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts(23,3): error TS18013: Property '#method' is not accessible outside class 'C' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts(24,3): error TS18013: Property '#prop' is not accessible outside class 'C' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts(25,1): error TS2322: Type 'C' is not assignable to type 'C'. Type 'string' is not assignable to type 'number'. -tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts(12,1): error TS2322: Type 'C' is not assignable to type 'C'. +tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts(26,1): error TS2322: Type 'C' is not assignable to type 'C'. Type 'number' is not assignable to type 'string'. -==== tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts (3 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts (5 errors) ==== class C { #foo: T; + #method(): T { return this.#foo; } + get #prop(): T { return this.#foo; } + set #prop(value : T) { this.#foo = value; } + bar(x: C) { return x.#foo; } // OK + bar2(x: C) { return x.#method(); } // OK + bar3(x: C) { return x.#prop; } // OK + baz(x: C) { return x.#foo; } // OK + baz2(x: C) { return x.#method; } // OK + baz3(x: C) { return x.#prop; } // OK + quux(x: C) { return x.#foo; } // OK + quux2(x: C) { return x.#method; }// OK + quux3(x: C) { return x.#prop; } // OK } declare let a: C; @@ -18,6 +32,12 @@ tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasse a.#foo; // Error ~~~~ !!! error TS18013: Property '#foo' is not accessible outside class 'C' because it has a private identifier. + a.#method; // Error + ~~~~~~~ +!!! error TS18013: Property '#method' is not accessible outside class 'C' because it has a private identifier. + a.#prop; // Error + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'C' because it has a private identifier. a = b; // Error ~ !!! error TS2322: Type 'C' is not assignable to type 'C'. diff --git a/tests/baselines/reference/privateNamesInGenericClasses.js b/tests/baselines/reference/privateNamesInGenericClasses.js index 27227fc0218e7..fdabcf6787143 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.js +++ b/tests/baselines/reference/privateNamesInGenericClasses.js @@ -1,14 +1,28 @@ //// [privateNamesInGenericClasses.ts] class C { #foo: T; + #method(): T { return this.#foo; } + get #prop(): T { return this.#foo; } + set #prop(value : T) { this.#foo = value; } + bar(x: C) { return x.#foo; } // OK + bar2(x: C) { return x.#method(); } // OK + bar3(x: C) { return x.#prop; } // OK + baz(x: C) { return x.#foo; } // OK + baz2(x: C) { return x.#method; } // OK + baz3(x: C) { return x.#prop; } // OK + quux(x: C) { return x.#foo; } // OK + quux2(x: C) { return x.#method; }// OK + quux3(x: C) { return x.#prop; } // OK } declare let a: C; declare let b: C; a.#foo; // Error +a.#method; // Error +a.#prop; // Error a = b; // Error b = a; // Error @@ -21,16 +35,34 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +}; +var _foo, _method, _prop, _prop_1; class C { constructor() { _foo.set(this, void 0); } + () { return __classPrivateFieldGet(this, _foo); } + get () { return __classPrivateFieldGet(this, _foo); } + set (value) { __classPrivateFieldSet(this, _foo, value); } bar(x) { return __classPrivateFieldGet(x, _foo); } // OK + bar2(x) { return __classPrivateFieldGet(x, _method).call(x); } // OK + bar3(x) { return __classPrivateFieldGet(x, _prop_1); } // OK baz(x) { return __classPrivateFieldGet(x, _foo); } // OK + baz2(x) { return __classPrivateFieldGet(x, _method); } // OK + baz3(x) { return __classPrivateFieldGet(x, _prop_1); } // OK quux(x) { return __classPrivateFieldGet(x, _foo); } // OK + quux2(x) { return __classPrivateFieldGet(x, _method); } // OK + quux3(x) { return __classPrivateFieldGet(x, _prop_1); } // OK } -_foo = new WeakMap(); +_foo = new WeakMap(), _method = new WeakMap(), _prop = new WeakMap(), _prop_1 = new WeakMap(); +a.; // Error +a.; // Error a.; // Error a = b; // Error b = a; // Error diff --git a/tests/baselines/reference/privateNamesInGenericClasses.symbols b/tests/baselines/reference/privateNamesInGenericClasses.symbols index c697c06390869..9dac6c7484fa7 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.symbols +++ b/tests/baselines/reference/privateNamesInGenericClasses.symbols @@ -7,45 +7,115 @@ class C { >#foo : Symbol(C.#foo, Decl(privateNamesInGenericClasses.ts, 0, 12)) >T : Symbol(T, Decl(privateNamesInGenericClasses.ts, 0, 8)) + #method(): T { return this.#foo; } +>#method : Symbol(C.#method, Decl(privateNamesInGenericClasses.ts, 1, 12)) +>T : Symbol(T, Decl(privateNamesInGenericClasses.ts, 0, 8)) +>this.#foo : Symbol(C.#foo, Decl(privateNamesInGenericClasses.ts, 0, 12)) +>this : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) + + get #prop(): T { return this.#foo; } +>#prop : Symbol(C.#prop, Decl(privateNamesInGenericClasses.ts, 2, 38), Decl(privateNamesInGenericClasses.ts, 3, 40)) +>T : Symbol(T, Decl(privateNamesInGenericClasses.ts, 0, 8)) +>this.#foo : Symbol(C.#foo, Decl(privateNamesInGenericClasses.ts, 0, 12)) +>this : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) + + set #prop(value : T) { this.#foo = value; } +>#prop : Symbol(C.#prop, Decl(privateNamesInGenericClasses.ts, 2, 38), Decl(privateNamesInGenericClasses.ts, 3, 40)) +>value : Symbol(value, Decl(privateNamesInGenericClasses.ts, 4, 14)) +>T : Symbol(T, Decl(privateNamesInGenericClasses.ts, 0, 8)) +>this.#foo : Symbol(C.#foo, Decl(privateNamesInGenericClasses.ts, 0, 12)) +>this : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) +>value : Symbol(value, Decl(privateNamesInGenericClasses.ts, 4, 14)) + bar(x: C) { return x.#foo; } // OK ->bar : Symbol(C.bar, Decl(privateNamesInGenericClasses.ts, 1, 12)) ->x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 2, 8)) +>bar : Symbol(C.bar, Decl(privateNamesInGenericClasses.ts, 4, 47)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 6, 8)) >C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) >T : Symbol(T, Decl(privateNamesInGenericClasses.ts, 0, 8)) >x.#foo : Symbol(C.#foo, Decl(privateNamesInGenericClasses.ts, 0, 12)) ->x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 2, 8)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 6, 8)) + + bar2(x: C) { return x.#method(); } // OK +>bar2 : Symbol(C.bar2, Decl(privateNamesInGenericClasses.ts, 6, 35)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 7, 9)) +>C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) +>T : Symbol(T, Decl(privateNamesInGenericClasses.ts, 0, 8)) +>x.#method : Symbol(C.#method, Decl(privateNamesInGenericClasses.ts, 1, 12)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 7, 9)) + + bar3(x: C) { return x.#prop; } // OK +>bar3 : Symbol(C.bar3, Decl(privateNamesInGenericClasses.ts, 7, 41)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 8, 9)) +>C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) +>T : Symbol(T, Decl(privateNamesInGenericClasses.ts, 0, 8)) +>x.#prop : Symbol(C.#prop, Decl(privateNamesInGenericClasses.ts, 2, 38), Decl(privateNamesInGenericClasses.ts, 3, 40)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 8, 9)) baz(x: C) { return x.#foo; } // OK ->baz : Symbol(C.baz, Decl(privateNamesInGenericClasses.ts, 2, 35)) ->x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 3, 8)) +>baz : Symbol(C.baz, Decl(privateNamesInGenericClasses.ts, 8, 37)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 10, 8)) >C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) >x.#foo : Symbol(C.#foo, Decl(privateNamesInGenericClasses.ts, 0, 12)) ->x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 3, 8)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 10, 8)) + + baz2(x: C) { return x.#method; } // OK +>baz2 : Symbol(C.baz2, Decl(privateNamesInGenericClasses.ts, 10, 40)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 11, 9)) +>C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) +>x.#method : Symbol(C.#method, Decl(privateNamesInGenericClasses.ts, 1, 12)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 11, 9)) + + baz3(x: C) { return x.#prop; } // OK +>baz3 : Symbol(C.baz3, Decl(privateNamesInGenericClasses.ts, 11, 44)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 12, 9)) +>C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) +>x.#prop : Symbol(C.#prop, Decl(privateNamesInGenericClasses.ts, 2, 38), Decl(privateNamesInGenericClasses.ts, 3, 40)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 12, 9)) quux(x: C) { return x.#foo; } // OK ->quux : Symbol(C.quux, Decl(privateNamesInGenericClasses.ts, 3, 40)) ->x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 4, 9)) +>quux : Symbol(C.quux, Decl(privateNamesInGenericClasses.ts, 12, 42)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 14, 9)) >C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) >x.#foo : Symbol(C.#foo, Decl(privateNamesInGenericClasses.ts, 0, 12)) ->x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 4, 9)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 14, 9)) + + quux2(x: C) { return x.#method; }// OK +>quux2 : Symbol(C.quux2, Decl(privateNamesInGenericClasses.ts, 14, 41)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 15, 10)) +>C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) +>x.#method : Symbol(C.#method, Decl(privateNamesInGenericClasses.ts, 1, 12)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 15, 10)) + + quux3(x: C) { return x.#prop; } // OK +>quux3 : Symbol(C.quux3, Decl(privateNamesInGenericClasses.ts, 15, 45)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 16, 10)) +>C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) +>x.#prop : Symbol(C.#prop, Decl(privateNamesInGenericClasses.ts, 2, 38), Decl(privateNamesInGenericClasses.ts, 3, 40)) +>x : Symbol(x, Decl(privateNamesInGenericClasses.ts, 16, 10)) } declare let a: C; ->a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 7, 11)) +>a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 19, 11)) >C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) declare let b: C; ->b : Symbol(b, Decl(privateNamesInGenericClasses.ts, 8, 11)) +>b : Symbol(b, Decl(privateNamesInGenericClasses.ts, 20, 11)) >C : Symbol(C, Decl(privateNamesInGenericClasses.ts, 0, 0)) a.#foo; // Error ->a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 7, 11)) +>a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 19, 11)) + +a.#method; // Error +>a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 19, 11)) + +a.#prop; // Error +>a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 19, 11)) a = b; // Error ->a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 7, 11)) ->b : Symbol(b, Decl(privateNamesInGenericClasses.ts, 8, 11)) +>a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 19, 11)) +>b : Symbol(b, Decl(privateNamesInGenericClasses.ts, 20, 11)) b = a; // Error ->b : Symbol(b, Decl(privateNamesInGenericClasses.ts, 8, 11)) ->a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 7, 11)) +>b : Symbol(b, Decl(privateNamesInGenericClasses.ts, 20, 11)) +>a : Symbol(a, Decl(privateNamesInGenericClasses.ts, 19, 11)) diff --git a/tests/baselines/reference/privateNamesInGenericClasses.types b/tests/baselines/reference/privateNamesInGenericClasses.types index e0a29a45492c1..c8f2b95121fd6 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.types +++ b/tests/baselines/reference/privateNamesInGenericClasses.types @@ -5,22 +5,77 @@ class C { #foo: T; >#foo : T + #method(): T { return this.#foo; } +>#method : () => T +>this.#foo : T +>this : this + + get #prop(): T { return this.#foo; } +>#prop : T +>this.#foo : T +>this : this + + set #prop(value : T) { this.#foo = value; } +>#prop : T +>value : T +>this.#foo = value : T +>this.#foo : T +>this : this +>value : T + bar(x: C) { return x.#foo; } // OK >bar : (x: C) => T >x : C >x.#foo : T +>x : C + + bar2(x: C) { return x.#method(); } // OK +>bar2 : (x: C) => T +>x : C +>x.#method() : T +>x.#method : () => T +>x : C + + bar3(x: C) { return x.#prop; } // OK +>bar3 : (x: C) => T +>x : C +>x.#prop : T >x : C baz(x: C) { return x.#foo; } // OK >baz : (x: C) => number >x : C >x.#foo : number +>x : C + + baz2(x: C) { return x.#method; } // OK +>baz2 : (x: C) => () => number +>x : C +>x.#method : () => number +>x : C + + baz3(x: C) { return x.#prop; } // OK +>baz3 : (x: C) => number +>x : C +>x.#prop : number >x : C quux(x: C) { return x.#foo; } // OK >quux : (x: C) => string >x : C >x.#foo : string +>x : C + + quux2(x: C) { return x.#method; }// OK +>quux2 : (x: C) => () => string +>x : C +>x.#method : () => string +>x : C + + quux3(x: C) { return x.#prop; } // OK +>quux3 : (x: C) => string +>x : C +>x.#prop : string >x : C } @@ -34,6 +89,14 @@ a.#foo; // Error >a.#foo : any >a : C +a.#method; // Error +>a.#method : any +>a : C + +a.#prop; // Error +>a.#prop : any +>a : C + a = b; // Error >a = b : C >a : C diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.errors.txt b/tests/baselines/reference/privateNamesIncompatibleModifiers.errors.txt index 9aa840a2f49e5..f1f44a3d4f143 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.errors.txt +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.errors.txt @@ -1,11 +1,30 @@ +error TS2318: Cannot find global type 'AsyncIterableIterator'. tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(2,5): error TS18010: An accessibility modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(3,5): error TS18010: An accessibility modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(4,5): error TS18010: An accessibility modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(6,5): error TS18019: 'declare' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(10,5): error TS18019: 'abstract' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(8,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(9,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(10,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(11,5): error TS1024: 'readonly' modifier can only appear on a property declaration or index signature. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(12,5): error TS1031: 'declare' modifier cannot appear on class elements of this kind. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(17,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(18,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(19,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(20,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(21,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(22,5): error TS18010: An accessibility modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(23,5): error TS1024: 'readonly' modifier can only appear on a property declaration or index signature. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(24,5): error TS1024: 'readonly' modifier can only appear on a property declaration or index signature. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(25,5): error TS1031: 'declare' modifier cannot appear on class elements of this kind. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(26,5): error TS1031: 'declare' modifier cannot appear on class elements of this kind. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(27,5): error TS1042: 'async' modifier cannot be used here. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(28,5): error TS1042: 'async' modifier cannot be used here. +tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts(32,5): error TS18019: 'abstract' modifier cannot be used with a private identifier. -==== tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts (5 errors) ==== +!!! error TS2318: Cannot find global type 'AsyncIterableIterator'. +==== tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts (22 errors) ==== class A { public #foo = 3; // Error ~~~~~~ @@ -20,6 +39,62 @@ tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleMod declare #what: number; // Error ~~~~~~~ !!! error TS18019: 'declare' modifier cannot be used with a private identifier. + + public #fooMethod() { return 3; } // Error + ~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + private #barMethod() { return 3; } // Error + ~~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + protected #bazMethod() { return 3; } // Error + ~~~~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + readonly #quxMethod() { return 3; } // Error + ~~~~~~~~ +!!! error TS1024: 'readonly' modifier can only appear on a property declaration or index signature. + declare #whatMethod() // Error + ~~~~~~~ +!!! error TS1031: 'declare' modifier cannot appear on class elements of this kind. + async #asyncMethod() { return 1; } //OK + *#genMethod() { return 1; } //OK + async *#asyncGenMethod() { return 1; } //OK + + public get #fooProp() { return 3; } // Error + ~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + public set #fooProp(value: number) { } // Error + ~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + private get #barProp() { return 3; } // Error + ~~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + private set #barProp(value: number) { } // Error + ~~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + protected get #bazProp() { return 3; } // Error + ~~~~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + protected set #bazProp(value: number) { } // Error + ~~~~~~~~~ +!!! error TS18010: An accessibility modifier cannot be used with a private identifier. + readonly get #quxProp() { return 3; } // Error + ~~~~~~~~ +!!! error TS1024: 'readonly' modifier can only appear on a property declaration or index signature. + readonly set #quxProp(value: number) { } // Error + ~~~~~~~~ +!!! error TS1024: 'readonly' modifier can only appear on a property declaration or index signature. + declare get #whatProp() // Error + ~~~~~~~ +!!! error TS1031: 'declare' modifier cannot appear on class elements of this kind. + declare set #whatProp(value: number) // Error + ~~~~~~~ +!!! error TS1031: 'declare' modifier cannot appear on class elements of this kind. + async get #asyncProp() { return 1; } // Error + ~~~~~ +!!! error TS1042: 'async' modifier cannot be used here. + async set #asyncProp(value: number) { } // Error + ~~~~~ +!!! error TS1042: 'async' modifier cannot be used here. } abstract class B { diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.js b/tests/baselines/reference/privateNamesIncompatibleModifiers.js index f6e731d371d88..c7618c5c580ef 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.js +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.js @@ -5,6 +5,28 @@ class A { protected #baz = 3; // Error readonly #qux = 3; // OK declare #what: number; // Error + + public #fooMethod() { return 3; } // Error + private #barMethod() { return 3; } // Error + protected #bazMethod() { return 3; } // Error + readonly #quxMethod() { return 3; } // Error + declare #whatMethod() // Error + async #asyncMethod() { return 1; } //OK + *#genMethod() { return 1; } //OK + async *#asyncGenMethod() { return 1; } //OK + + public get #fooProp() { return 3; } // Error + public set #fooProp(value: number) { } // Error + private get #barProp() { return 3; } // Error + private set #barProp(value: number) { } // Error + protected get #bazProp() { return 3; } // Error + protected set #bazProp(value: number) { } // Error + readonly get #quxProp() { return 3; } // Error + readonly set #quxProp(value: number) { } // Error + declare get #whatProp() // Error + declare set #whatProp(value: number) // Error + async get #asyncProp() { return 1; } // Error + async set #asyncProp(value: number) { } // Error } abstract class B { @@ -14,7 +36,28 @@ abstract class B { //// [privateNamesIncompatibleModifiers.js] "use strict"; -var _foo, _bar, _baz, _qux; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +}; +var _foo, _bar, _baz, _qux, _fooMethod, _barMethod, _bazMethod, _quxMethod, _asyncMethod, _genMethod, _asyncGenMethod, _fooProp, _fooProp_1, _barProp, _barProp_1, _bazProp, _bazProp_1, _quxProp, _quxProp_1, _whatProp, _whatProp_1, _asyncProp, _asyncProp_1; class A { constructor() { _foo.set(this, 3); // Error @@ -22,7 +65,28 @@ class A { _baz.set(this, 3); // Error _qux.set(this, 3); // OK } + () { return 3; } // Error + () { return 3; } // Error + () { return 3; } // Error + () { return 3; } // Error + () { + return __awaiter(this, void 0, void 0, function* () { return 1; }); + } //OK + *() { return 1; } //OK + () { return __asyncGenerator(this, arguments, function* _a() { return yield __await(1); }); } //OK + get () { return 3; } // Error + set (value) { } // Error + get () { return 3; } // Error + set (value) { } // Error + get () { return 3; } // Error + set (value) { } // Error + get () { return 3; } // Error + set (value) { } // Error + get () { } // Error + set (value) { } // Error + get () { return 1; } // Error + set (value) { } // Error } -_foo = new WeakMap(), _bar = new WeakMap(), _baz = new WeakMap(), _qux = new WeakMap(); +_foo = new WeakMap(), _bar = new WeakMap(), _baz = new WeakMap(), _qux = new WeakMap(), _fooMethod = new WeakMap(), _barMethod = new WeakMap(), _bazMethod = new WeakMap(), _quxMethod = new WeakMap(), _asyncMethod = new WeakMap(), _genMethod = new WeakMap(), _asyncGenMethod = new WeakMap(), _fooProp = new WeakMap(), _fooProp_1 = new WeakMap(), _barProp = new WeakMap(), _barProp_1 = new WeakMap(), _bazProp = new WeakMap(), _bazProp_1 = new WeakMap(), _quxProp = new WeakMap(), _quxProp_1 = new WeakMap(), _whatProp = new WeakMap(), _whatProp_1 = new WeakMap(), _asyncProp = new WeakMap(), _asyncProp_1 = new WeakMap(); class B { } diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.symbols b/tests/baselines/reference/privateNamesIncompatibleModifiers.symbols index 65d665cb1d107..ffc3c0244c59b 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.symbols +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.symbols @@ -16,12 +16,78 @@ class A { declare #what: number; // Error >#what : Symbol(A.#what, Decl(privateNamesIncompatibleModifiers.ts, 4, 22)) + + public #fooMethod() { return 3; } // Error +>#fooMethod : Symbol(A.#fooMethod, Decl(privateNamesIncompatibleModifiers.ts, 5, 26)) + + private #barMethod() { return 3; } // Error +>#barMethod : Symbol(A.#barMethod, Decl(privateNamesIncompatibleModifiers.ts, 7, 38)) + + protected #bazMethod() { return 3; } // Error +>#bazMethod : Symbol(A.#bazMethod, Decl(privateNamesIncompatibleModifiers.ts, 8, 39)) + + readonly #quxMethod() { return 3; } // Error +>#quxMethod : Symbol(A.#quxMethod, Decl(privateNamesIncompatibleModifiers.ts, 9, 41)) + + declare #whatMethod() // Error +>#whatMethod : Symbol(A.#whatMethod, Decl(privateNamesIncompatibleModifiers.ts, 10, 40)) + + async #asyncMethod() { return 1; } //OK +>#asyncMethod : Symbol(A.#asyncMethod, Decl(privateNamesIncompatibleModifiers.ts, 11, 25)) + + *#genMethod() { return 1; } //OK +>#genMethod : Symbol(A.#genMethod, Decl(privateNamesIncompatibleModifiers.ts, 12, 38)) + + async *#asyncGenMethod() { return 1; } //OK +>#asyncGenMethod : Symbol(A.#asyncGenMethod, Decl(privateNamesIncompatibleModifiers.ts, 13, 31)) + + public get #fooProp() { return 3; } // Error +>#fooProp : Symbol(A.#fooProp, Decl(privateNamesIncompatibleModifiers.ts, 14, 42), Decl(privateNamesIncompatibleModifiers.ts, 16, 40)) + + public set #fooProp(value: number) { } // Error +>#fooProp : Symbol(A.#fooProp, Decl(privateNamesIncompatibleModifiers.ts, 14, 42), Decl(privateNamesIncompatibleModifiers.ts, 16, 40)) +>value : Symbol(value, Decl(privateNamesIncompatibleModifiers.ts, 17, 24)) + + private get #barProp() { return 3; } // Error +>#barProp : Symbol(A.#barProp, Decl(privateNamesIncompatibleModifiers.ts, 17, 43), Decl(privateNamesIncompatibleModifiers.ts, 18, 41)) + + private set #barProp(value: number) { } // Error +>#barProp : Symbol(A.#barProp, Decl(privateNamesIncompatibleModifiers.ts, 17, 43), Decl(privateNamesIncompatibleModifiers.ts, 18, 41)) +>value : Symbol(value, Decl(privateNamesIncompatibleModifiers.ts, 19, 25)) + + protected get #bazProp() { return 3; } // Error +>#bazProp : Symbol(A.#bazProp, Decl(privateNamesIncompatibleModifiers.ts, 19, 44), Decl(privateNamesIncompatibleModifiers.ts, 20, 43)) + + protected set #bazProp(value: number) { } // Error +>#bazProp : Symbol(A.#bazProp, Decl(privateNamesIncompatibleModifiers.ts, 19, 44), Decl(privateNamesIncompatibleModifiers.ts, 20, 43)) +>value : Symbol(value, Decl(privateNamesIncompatibleModifiers.ts, 21, 27)) + + readonly get #quxProp() { return 3; } // Error +>#quxProp : Symbol(A.#quxProp, Decl(privateNamesIncompatibleModifiers.ts, 21, 46), Decl(privateNamesIncompatibleModifiers.ts, 22, 42)) + + readonly set #quxProp(value: number) { } // Error +>#quxProp : Symbol(A.#quxProp, Decl(privateNamesIncompatibleModifiers.ts, 21, 46), Decl(privateNamesIncompatibleModifiers.ts, 22, 42)) +>value : Symbol(value, Decl(privateNamesIncompatibleModifiers.ts, 23, 26)) + + declare get #whatProp() // Error +>#whatProp : Symbol(A.#whatProp, Decl(privateNamesIncompatibleModifiers.ts, 23, 45), Decl(privateNamesIncompatibleModifiers.ts, 24, 27)) + + declare set #whatProp(value: number) // Error +>#whatProp : Symbol(A.#whatProp, Decl(privateNamesIncompatibleModifiers.ts, 23, 45), Decl(privateNamesIncompatibleModifiers.ts, 24, 27)) +>value : Symbol(value, Decl(privateNamesIncompatibleModifiers.ts, 25, 26)) + + async get #asyncProp() { return 1; } // Error +>#asyncProp : Symbol(A.#asyncProp, Decl(privateNamesIncompatibleModifiers.ts, 25, 40), Decl(privateNamesIncompatibleModifiers.ts, 26, 40)) + + async set #asyncProp(value: number) { } // Error +>#asyncProp : Symbol(A.#asyncProp, Decl(privateNamesIncompatibleModifiers.ts, 25, 40), Decl(privateNamesIncompatibleModifiers.ts, 26, 40)) +>value : Symbol(value, Decl(privateNamesIncompatibleModifiers.ts, 27, 25)) } abstract class B { ->B : Symbol(B, Decl(privateNamesIncompatibleModifiers.ts, 6, 1)) +>B : Symbol(B, Decl(privateNamesIncompatibleModifiers.ts, 28, 1)) abstract #quux = 3; // Error ->#quux : Symbol(B.#quux, Decl(privateNamesIncompatibleModifiers.ts, 8, 18)) +>#quux : Symbol(B.#quux, Decl(privateNamesIncompatibleModifiers.ts, 30, 18)) } diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.types b/tests/baselines/reference/privateNamesIncompatibleModifiers.types index ac2f60f67ff18..2b4f2ac2a456a 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.types +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.types @@ -20,6 +20,84 @@ class A { declare #what: number; // Error >#what : number + + public #fooMethod() { return 3; } // Error +>#fooMethod : () => number +>3 : 3 + + private #barMethod() { return 3; } // Error +>#barMethod : () => number +>3 : 3 + + protected #bazMethod() { return 3; } // Error +>#bazMethod : () => number +>3 : 3 + + readonly #quxMethod() { return 3; } // Error +>#quxMethod : () => number +>3 : 3 + + declare #whatMethod() // Error +>#whatMethod : () => any + + async #asyncMethod() { return 1; } //OK +>#asyncMethod : () => Promise +>1 : 1 + + *#genMethod() { return 1; } //OK +>#genMethod : () => Generator +>1 : 1 + + async *#asyncGenMethod() { return 1; } //OK +>#asyncGenMethod : () => {} +>1 : 1 + + public get #fooProp() { return 3; } // Error +>#fooProp : number +>3 : 3 + + public set #fooProp(value: number) { } // Error +>#fooProp : number +>value : number + + private get #barProp() { return 3; } // Error +>#barProp : number +>3 : 3 + + private set #barProp(value: number) { } // Error +>#barProp : number +>value : number + + protected get #bazProp() { return 3; } // Error +>#bazProp : number +>3 : 3 + + protected set #bazProp(value: number) { } // Error +>#bazProp : number +>value : number + + readonly get #quxProp() { return 3; } // Error +>#quxProp : number +>3 : 3 + + readonly set #quxProp(value: number) { } // Error +>#quxProp : number +>value : number + + declare get #whatProp() // Error +>#whatProp : number + + declare set #whatProp(value: number) // Error +>#whatProp : number +>value : number + + async get #asyncProp() { return 1; } // Error +>#asyncProp : number +>1 : 1 + + async set #asyncProp(value: number) { } // Error +>#asyncProp : number +>value : number } abstract class B { diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.errors.txt b/tests/baselines/reference/privateNamesUseBeforeDef.errors.txt index 7105d8d9481e8..fdf69c642e2c8 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.errors.txt +++ b/tests/baselines/reference/privateNamesUseBeforeDef.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts(2,17): error TS2729: Property '#bar' is used before its initialization. -tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts(7,17): error TS2729: Property '#bar' is used before its initialization. +tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts(17,17): error TS2729: Property '#bar' is used before its initialization. ==== tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts (2 errors) ==== @@ -11,11 +11,21 @@ tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts #bar = 3; } + class A2 { + #foo = this.#bar(); // No Error + #bar() { return 3 }; + } + + class A3 { + #foo = this.#bar; // No Error + get #bar() { return 3 }; + } + class B { #foo = this.#bar; // Error ~~~~ !!! error TS2729: Property '#bar' is used before its initialization. -!!! related TS2728 tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts:8:5: '#bar' is declared here. +!!! related TS2728 tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts:18:5: '#bar' is declared here. #bar = this.#foo; } \ No newline at end of file diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.js b/tests/baselines/reference/privateNamesUseBeforeDef.js index 06b5316189dce..3edacd1f870d5 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.js +++ b/tests/baselines/reference/privateNamesUseBeforeDef.js @@ -4,6 +4,16 @@ class A { #bar = 3; } +class A2 { + #foo = this.#bar(); // No Error + #bar() { return 3 }; +} + +class A3 { + #foo = this.#bar; // No Error + get #bar() { return 3 }; +} + class B { #foo = this.#bar; // Error #bar = this.#foo; @@ -17,7 +27,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _bar, _foo_1, _bar_1; +var _foo, _bar, _foo_1, _bar_1, _foo_2, _bar_2, _foo_3, _bar_3; class A { constructor() { _foo.set(this, __classPrivateFieldGet(this, _bar)); // Error @@ -25,10 +35,26 @@ class A { } } _foo = new WeakMap(), _bar = new WeakMap(); -class B { +class A2 { constructor() { - _foo_1.set(this, __classPrivateFieldGet(this, _bar_1)); // Error - _bar_1.set(this, __classPrivateFieldGet(this, _foo_1)); + _foo_1.set(this, __classPrivateFieldGet(this, _bar_1).call(this)); // No Error } + () { return 3; } + ; } _foo_1 = new WeakMap(), _bar_1 = new WeakMap(); +class A3 { + constructor() { + _foo_2.set(this, __classPrivateFieldGet(this, _bar_2)); // No Error + } + get () { return 3; } + ; +} +_foo_2 = new WeakMap(), _bar_2 = new WeakMap(); +class B { + constructor() { + _foo_3.set(this, __classPrivateFieldGet(this, _bar_3)); // Error + _bar_3.set(this, __classPrivateFieldGet(this, _foo_3)); + } +} +_foo_3 = new WeakMap(), _bar_3 = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.symbols b/tests/baselines/reference/privateNamesUseBeforeDef.symbols index 21df1931d9760..025f8625c39c9 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.symbols +++ b/tests/baselines/reference/privateNamesUseBeforeDef.symbols @@ -11,17 +11,41 @@ class A { >#bar : Symbol(A.#bar, Decl(privateNamesUseBeforeDef.ts, 1, 21)) } +class A2 { +>A2 : Symbol(A2, Decl(privateNamesUseBeforeDef.ts, 3, 1)) + + #foo = this.#bar(); // No Error +>#foo : Symbol(A2.#foo, Decl(privateNamesUseBeforeDef.ts, 5, 10)) +>this.#bar : Symbol(A2.#bar, Decl(privateNamesUseBeforeDef.ts, 6, 23)) +>this : Symbol(A2, Decl(privateNamesUseBeforeDef.ts, 3, 1)) + + #bar() { return 3 }; +>#bar : Symbol(A2.#bar, Decl(privateNamesUseBeforeDef.ts, 6, 23)) +} + +class A3 { +>A3 : Symbol(A3, Decl(privateNamesUseBeforeDef.ts, 8, 1)) + + #foo = this.#bar; // No Error +>#foo : Symbol(A3.#foo, Decl(privateNamesUseBeforeDef.ts, 10, 10)) +>this.#bar : Symbol(A3.#bar, Decl(privateNamesUseBeforeDef.ts, 11, 21)) +>this : Symbol(A3, Decl(privateNamesUseBeforeDef.ts, 8, 1)) + + get #bar() { return 3 }; +>#bar : Symbol(A3.#bar, Decl(privateNamesUseBeforeDef.ts, 11, 21)) +} + class B { ->B : Symbol(B, Decl(privateNamesUseBeforeDef.ts, 3, 1)) +>B : Symbol(B, Decl(privateNamesUseBeforeDef.ts, 13, 1)) #foo = this.#bar; // Error ->#foo : Symbol(B.#foo, Decl(privateNamesUseBeforeDef.ts, 5, 9)) ->this.#bar : Symbol(B.#bar, Decl(privateNamesUseBeforeDef.ts, 6, 21)) ->this : Symbol(B, Decl(privateNamesUseBeforeDef.ts, 3, 1)) +>#foo : Symbol(B.#foo, Decl(privateNamesUseBeforeDef.ts, 15, 9)) +>this.#bar : Symbol(B.#bar, Decl(privateNamesUseBeforeDef.ts, 16, 21)) +>this : Symbol(B, Decl(privateNamesUseBeforeDef.ts, 13, 1)) #bar = this.#foo; ->#bar : Symbol(B.#bar, Decl(privateNamesUseBeforeDef.ts, 6, 21)) ->this.#foo : Symbol(B.#foo, Decl(privateNamesUseBeforeDef.ts, 5, 9)) ->this : Symbol(B, Decl(privateNamesUseBeforeDef.ts, 3, 1)) +>#bar : Symbol(B.#bar, Decl(privateNamesUseBeforeDef.ts, 16, 21)) +>this.#foo : Symbol(B.#foo, Decl(privateNamesUseBeforeDef.ts, 15, 9)) +>this : Symbol(B, Decl(privateNamesUseBeforeDef.ts, 13, 1)) } diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.types b/tests/baselines/reference/privateNamesUseBeforeDef.types index 4f43c5b48234c..d729927e47b8d 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.types +++ b/tests/baselines/reference/privateNamesUseBeforeDef.types @@ -12,6 +12,33 @@ class A { >3 : 3 } +class A2 { +>A2 : A2 + + #foo = this.#bar(); // No Error +>#foo : number +>this.#bar() : number +>this.#bar : () => number +>this : this + + #bar() { return 3 }; +>#bar : () => number +>3 : 3 +} + +class A3 { +>A3 : A3 + + #foo = this.#bar; // No Error +>#foo : number +>this.#bar : number +>this : this + + get #bar() { return 3 }; +>#bar : number +>3 : 3 +} + class B { >B : B diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAccessors.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAccessors.ts new file mode 100644 index 0000000000000..451d017fdca99 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAccessors.ts @@ -0,0 +1,16 @@ +// @strict: true +// @target: es6 + +class A1 { + get #prop() { return ""; } + set #prop(param: string) { } + + get #roProp() { return ""; } + + constructor(name: string) { + this.#prop = ""; + this.#roProp = ""; // Error + console.log(this.#prop); + console.log(this.#roProp); + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts new file mode 100644 index 0000000000000..7480a87ce545e --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAccessorsAccess.ts @@ -0,0 +1,26 @@ +// @target: es2015 + +class A2 { + get #prop() { return ""; } + set #prop(param: string) { } + + constructor() { + console.log(this.#prop); + let a: A2 = this; + a.#prop; + function foo (){ + a.#prop; + } + } +} +new A2().#prop; // Error + +function foo (){ + new A2().#prop; // Error +} + +class B2 { + m() { + new A2().#prop; + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.ts new file mode 100644 index 0000000000000..ce7dae715b6fa --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.ts @@ -0,0 +1,20 @@ +// @target: es2015 + +class A { + get #fieldFunc() { return function() { this.x = 10; } } + get #fieldFunc2() { return function(a, ...b) {}; } + x = 1; + test() { + this.#fieldFunc(); + const func = this.#fieldFunc; + func(); + new this.#fieldFunc(); + + const arr = [ 1, 2 ]; + this.#fieldFunc2(0, ...arr, 3); + const b = new this.#fieldFunc2(0, ...arr, 3); + const str = this.#fieldFunc2`head${1}middle${2}tail`; + this.getInstance().#fieldFunc2`test${1}and${2}`; + } + getInstance() { return new A(); } +} \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAccessorssDerivedClasses.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAccessorssDerivedClasses.ts new file mode 100644 index 0000000000000..80140cf63d1dd --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAccessorssDerivedClasses.ts @@ -0,0 +1,13 @@ +// @target: es2015 + +class Base { + get #prop(): number { return 123; } + static method(x: Derived) { + console.log(x.#prop); + } +} +class Derived extends Base { + static method(x: Derived) { + console.log(x.#prop); + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts index fc6c20828556c..7df8691185114 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAndPropertySignature.ts @@ -1,16 +1,20 @@ type A = { - #foo: string + #foo: string; + #bar(): string; } interface B { #foo: string; + #bar(): string; } declare const x: { #foo: number; bar: { #baz: string; + #taz(): string; } + #baz(): string; }; declare const y: [{ qux: { #quux: 3 } }]; diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts b/tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts index 2a8c589b11da9..b1b2c493e304b 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameBadDeclaration.ts @@ -1,10 +1,14 @@ function A() { } A.prototype = { - #x: 1 // Error + #x: 1, // Error + #m() {}, // Error + get #p() { return "" } // Error } class B { } B.prototype = { - #y: 2 // Error + #y: 2, // Error + #m() {}, // Error + get #p() { return "" } // Error } class C { constructor() { diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts b/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts index 45ed8f020d757..e2b911b0afd40 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts @@ -5,3 +5,32 @@ class A { #foo = "foo"; #foo = "foo"; } + +class A2 { + #foo = "foo"; + #foo() {} +} + + +class A3 { + #foo = "foo"; + get #foo() { return ""} +} + +class A4 { + #foo() { return ""} + #foo() { return ""} +} + + +class A5 { + #foo() { return ""} + get #foo() { return ""} +} + + +class A6 { + #foo = "foo"; + #foo() { return ""} + get #foo() { return ""} +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts b/tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts new file mode 100644 index 0000000000000..8323d7d18ff0a --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameInObjectLiteral-3.ts @@ -0,0 +1,5 @@ +const obj = { + get #foo() { + return "" + } +}; diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameJsBadDeclaration.ts b/tests/cases/conformance/classes/members/privateNames/privateNameJsBadDeclaration.ts index 90e6197c6b3cc..b26cd5a2bbd73 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameJsBadDeclaration.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameJsBadDeclaration.ts @@ -5,11 +5,15 @@ function A() { } A.prototype = { - #x: 1 // Error + #x: 1, // Error + #m() {}, // Error + get #p() { return "" } // Error } class B { } B.prototype = { - #y: 2 // Error + #y: 2, // Error + #m() {}, // Error + get #p() { return "" } // Error } class C { constructor() { diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts b/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts new file mode 100644 index 0000000000000..b5d235f5a11e8 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameNestedClassAccessorsShadowing.ts @@ -0,0 +1,16 @@ +// @target: es2015 + +class Base { + get #x() { return 1; }; + constructor() { + class Derived { + get #x() { return 1; }; + testBase(x: Base) { + console.log(x.#x); + } + testDerived(x: Derived) { + console.log(x.#x); + } + } + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts b/tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts index f7bb388043ac7..76365a4da449f 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameUnused.ts @@ -9,3 +9,22 @@ export class A { console.log(this.#used); } } + +export class A2 { + #used() { }; + #unused() { }; + constructor () { + console.log(this.#used()); + } +} + +export class A3 { + get #used() { return 0 }; + set #used(value: number) { }; + + get #unused() { return 0 }; + set #unused(value: number) { }; + constructor () { + console.log(this.#used); + } +} \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts b/tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts index 1ea2826e0470e..4f04a5ca588e9 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts @@ -2,9 +2,12 @@ // @target: es6 class A { - #foo = 3; + #fooField = 3; + #fooMethod() { }; + get #fooProp() { return 1; }; + set #fooProp(value: number) { }; bar = 3; baz = 3; } -type T = keyof A // should not include '#foo' +type T = keyof A // should not include '#foo*' diff --git a/tests/cases/conformance/classes/members/privateNames/privateNamesAssertion.ts b/tests/cases/conformance/classes/members/privateNames/privateNamesAssertion.ts index 69d552b6f0b65..acce5ff55a7f9 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNamesAssertion.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNamesAssertion.ts @@ -12,3 +12,15 @@ class Foo { v; } } + +class Foo2 { + #p1(v: any): asserts v is string { + if (typeof v !== "string") { + throw new Error(); + } + } + m1(v: unknown) { + this.#p1(v); + v; + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts b/tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts index 225a6d071980d..134b38c3b60a1 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNamesInGenericClasses.ts @@ -4,13 +4,27 @@ class C { #foo: T; + #method(): T { return this.#foo; } + get #prop(): T { return this.#foo; } + set #prop(value : T) { this.#foo = value; } + bar(x: C) { return x.#foo; } // OK + bar2(x: C) { return x.#method(); } // OK + bar3(x: C) { return x.#prop; } // OK + baz(x: C) { return x.#foo; } // OK + baz2(x: C) { return x.#method; } // OK + baz3(x: C) { return x.#prop; } // OK + quux(x: C) { return x.#foo; } // OK + quux2(x: C) { return x.#method; }// OK + quux3(x: C) { return x.#prop; } // OK } declare let a: C; declare let b: C; a.#foo; // Error +a.#method; // Error +a.#prop; // Error a = b; // Error b = a; // Error diff --git a/tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts b/tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts index ef4341ab56752..2db87b88945e5 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNamesIncompatibleModifiers.ts @@ -7,6 +7,28 @@ class A { protected #baz = 3; // Error readonly #qux = 3; // OK declare #what: number; // Error + + public #fooMethod() { return 3; } // Error + private #barMethod() { return 3; } // Error + protected #bazMethod() { return 3; } // Error + readonly #quxMethod() { return 3; } // Error + declare #whatMethod() // Error + async #asyncMethod() { return 1; } //OK + *#genMethod() { return 1; } //OK + async *#asyncGenMethod() { return 1; } //OK + + public get #fooProp() { return 3; } // Error + public set #fooProp(value: number) { } // Error + private get #barProp() { return 3; } // Error + private set #barProp(value: number) { } // Error + protected get #bazProp() { return 3; } // Error + protected set #bazProp(value: number) { } // Error + readonly get #quxProp() { return 3; } // Error + readonly set #quxProp(value: number) { } // Error + declare get #whatProp() // Error + declare set #whatProp(value: number) // Error + async get #asyncProp() { return 1; } // Error + async set #asyncProp(value: number) { } // Error } abstract class B { diff --git a/tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts b/tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts index cc0c3bf8980f9..c47e709c284f1 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNamesUseBeforeDef.ts @@ -5,6 +5,16 @@ class A { #bar = 3; } +class A2 { + #foo = this.#bar(); // No Error + #bar() { return 3 }; +} + +class A3 { + #foo = this.#bar; // No Error + get #bar() { return 3 }; +} + class B { #foo = this.#bar; // Error #bar = this.#foo; diff --git a/tests/cases/fourslash/completionListPrivateNamesAccessors.ts b/tests/cases/fourslash/completionListPrivateNamesAccessors.ts new file mode 100644 index 0000000000000..1fc143eb836c6 --- /dev/null +++ b/tests/cases/fourslash/completionListPrivateNamesAccessors.ts @@ -0,0 +1,37 @@ +/// + +//// class Foo { +//// get #x() { return 1 }; +//// set #x(value: number) { }; +//// y() {}; +//// } +//// class Bar extends Foo { +//// get #z() { return 1 }; +//// set #z(value: number) { }; +//// t() {}; +//// l; +//// constructor() { +//// this./*1*/ +//// class Baz { +//// get #z() { return 1 }; +//// set #z(value: number) { }; +//// get #u() { return 1 }; +//// set #u(value: number) { }; +//// v() {}; +//// k; +//// constructor() { +//// this./*2*/ +//// new Bar()./*3*/ +//// } +//// } +//// } +//// } +//// +//// new Foo()./*4*/ + + + +verify.completions({ marker: "1", exact: ["#z", "t", "l", "y"] }); +verify.completions({ marker: "2", exact: ["#z", "#u", "v", "k"] }); +verify.completions({ marker: "3", exact: ["#z", "t", "l", "y"] }); +verify.completions({ marker: "4", exact: ["y"] }); diff --git a/tests/cases/fourslash/findAllRefsPrivateNameAccessors.ts b/tests/cases/fourslash/findAllRefsPrivateNameAccessors.ts new file mode 100644 index 0000000000000..5fc76f402407c --- /dev/null +++ b/tests/cases/fourslash/findAllRefsPrivateNameAccessors.ts @@ -0,0 +1,27 @@ +/// + +////class C { +//// [|get [|{|"isDefinition": true, "isWriteAccess":true, "contextRangeIndex": 0 |}#foo|](){ return 1; }|] +//// [|set [|{|"isDefinition": true, "isWriteAccess":true, "contextRangeIndex": 2 |}#foo|](value: number){ }|] +//// constructor() { +//// this.[|#foo|](); +//// } +////} +////class D extends C { +//// constructor() { +//// super() +//// this.#foo = 20; +//// } +////} +////class E { +//// [|get [|{|"isDefinition": true, "isWriteAccess":true, "contextRangeIndex": 5 |}#foo|](){ return 1; }|] +//// [|set [|{|"isDefinition": true, "isWriteAccess":true, "contextRangeIndex": 7 |}#foo|](value: number){ }|] +//// constructor() { +//// this.[|#foo|](); +//// } +////} + +const [rC0DefGet, rC0Get, rC0DefSet, rC0Set, rC1, + rE0GetDef, rE0Get, rE0SetDef, rE0Set, rE1] = test.ranges(); +verify.singleReferenceGroup("(property) C.#foo: number", [rC0Get, rC0Set, rC1]); +verify.singleReferenceGroup("(property) E.#foo: number", [rE0Get, rE0Set, rE1]); diff --git a/tests/cases/fourslash/goToDefinitionPrivateName.ts b/tests/cases/fourslash/goToDefinitionPrivateName.ts index c03b4fe179c2e..6a551819569c5 100644 --- a/tests/cases/fourslash/goToDefinitionPrivateName.ts +++ b/tests/cases/fourslash/goToDefinitionPrivateName.ts @@ -3,13 +3,17 @@ //// class A { //// [|/*pnMethodDecl*/#method|]() { } //// [|/*pnFieldDecl*/#foo|] = 3; +//// get [|/*pnPropGetDecl*/#prop|]() { return ""; } +//// set [|/*pnPropSetDecl*/#prop|](value: string) { } //// constructor() { //// this.[|/*pnFieldUse*/#foo|] //// this.[|/*pnMethodUse*/#method|] +//// this.[|/*pnPropUse*/#prop|] //// } //// } verify.goToDefinition({ pnFieldUse: "pnFieldDecl", - pnMethodUse: "pnMethodDecl" + pnMethodUse: "pnMethodDecl", + pnPropUse: ["pnPropGetDecl", "pnPropSetDecl"] }); diff --git a/tests/cases/fourslash/renamePrivateAccessor.ts b/tests/cases/fourslash/renamePrivateAccessor.ts new file mode 100644 index 0000000000000..46a5cd39828d7 --- /dev/null +++ b/tests/cases/fourslash/renamePrivateAccessor.ts @@ -0,0 +1,14 @@ +/// + +////class Foo { +//// [|get [|{| "contextRangeIndex": 0 |}#foo|]() { return 1 }|] +//// [|set [|{| "contextRangeIndex": 2 |}#foo|](value: number) { }|] +//// retFoo() { +//// return this.[|#foo|]; +//// } +////} + +const ranges = test.rangesByText().get("#foo"); +verify.renameLocations(ranges, { + ranges +}); From 2760ed830b9e6d649eb380e6c59cd04d3f1c9a09 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Mon, 25 Jan 2021 15:49:58 +0000 Subject: [PATCH 05/73] Transform private methods Signed-off-by: Kubilay Kahveci --- src/compiler/factory/emitHelpers.ts | 42 ++++- src/compiler/transformers/classFields.ts | 209 ++++++++++++++++++++--- src/compiler/transformers/utilities.ts | 21 +++ 3 files changed, 244 insertions(+), 28 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 4333272616da6..2cace67076460 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -34,6 +34,8 @@ namespace ts { // Class Fields Helpers createClassPrivateFieldGetHelper(receiver: Expression, privateField: Identifier): Expression; createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression): Expression; + createClassPrivateMethodGetHelper(receiver: Expression, accessCheck: Identifier, fn: Identifier): Expression; + createClassPrivateReadonlyHelper(): Expression; } export function createEmitHelperFactory(context: TransformationContext): EmitHelperFactory { @@ -72,6 +74,8 @@ namespace ts { // Class Fields Helpers createClassPrivateFieldGetHelper, createClassPrivateFieldSetHelper, + createClassPrivateMethodGetHelper, + createClassPrivateReadonlyHelper, }; /** @@ -377,6 +381,17 @@ namespace ts { context.requestEmitHelper(classPrivateFieldSetHelper); return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldSet"), /*typeArguments*/ undefined, [receiver, privateField, value]); } + + function createClassPrivateMethodGetHelper(receiver: Expression, accessCheck: Identifier, fn: Identifier) { + context.requestEmitHelper(classPrivateMethodGetHelper); + return factory.createCallExpression(getUnscopedHelperName("__classPrivateMethodGet"), /*typeArguments*/ undefined, [receiver, accessCheck, fn]); + } + + function createClassPrivateReadonlyHelper() { + context.requestEmitHelper(classPrivateReadonlyHelper); + return factory.createCallExpression(getUnscopedHelperName("__classPrivateReadonly"), /*typeArguments*/ undefined, []); + } + } /* @internal */ @@ -844,6 +859,29 @@ namespace ts { };` }; + export const classPrivateMethodGetHelper: UnscopedEmitHelper = { + name: "typescript:classPrivateMethodGet", + importName: "__classPrivateMethodGet", + scoped: false, + text: ` + var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; + };` + }; + + export const classPrivateReadonlyHelper: UnscopedEmitHelper = { + name: "typescript:classPrivateReadonly", + importName: "__classPrivateReadonly", + scoped: false, + text: ` + var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { + throw new TypeError("private element is not writable"); + };` + }; + let allUnscopedEmitHelpers: ReadonlyESMap | undefined; export function getAllUnscopedEmitHelpers() { @@ -869,6 +907,8 @@ namespace ts { exportStarHelper, classPrivateFieldGetHelper, classPrivateFieldSetHelper, + classPrivateMethodGetHelper, + classPrivateReadonlyHelper, createBindingHelper, setModuleDefaultHelper ], helper => helper.name)); @@ -897,4 +937,4 @@ namespace ts { && (getEmitFlags(firstSegment.expression) & EmitFlags.HelperName) && firstSegment.expression.escapedText === helperName; } -} \ No newline at end of file +} diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index da8c8f35c4aeb..42d47bfcd008d 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -9,16 +9,25 @@ namespace ts { } const enum PrivateIdentifierPlacement { - InstanceField + InstanceField, + InstanceMethod, } - type PrivateIdentifierInfo = PrivateIdentifierInstanceField; + type PrivateIdentifierInfo = + | PrivateIdentifierInstanceField + | PrivateIdentifierInstanceMethod; interface PrivateIdentifierInstanceField { placement: PrivateIdentifierPlacement.InstanceField; weakMapName: Identifier; } + interface PrivateIdentifierInstanceMethod { + placement: PrivateIdentifierPlacement.InstanceMethod; + weakSetName: Identifier; + functionName: Identifier; + } + /** * A mapping of private names to information needed for transformation. */ @@ -147,10 +156,12 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - case SyntaxKind.MethodDeclaration: // Visit the name of the member (if it's a computed property name). return visitEachChild(node, classElementVisitor, context); + case SyntaxKind.MethodDeclaration: + return visitMethodDeclaration(node as MethodDeclaration); + case SyntaxKind.PropertyDeclaration: return visitPropertyDeclaration(node as PropertyDeclaration); @@ -192,6 +203,46 @@ namespace ts { return node; } + function visitMethodDeclaration(node: MethodDeclaration) { + Debug.assert(!some(node.decorators)); + const transformedMethod = visitEachChild(node, classElementVisitor, context); + + if (!shouldTransformPrivateFields || !isPrivateIdentifier(node.name) || !transformedMethod.body) { + return transformedMethod; + } + + const functionName = getHoistedFunctionName(node); + getPendingExpressions().push( + factory.createAssignment( + functionName, + factory.createFunctionExpression( + transformedMethod.modifiers, + transformedMethod.asteriskToken, + functionName, + transformedMethod.typeParameters, + transformedMethod.parameters, + transformedMethod.type, + transformedMethod.body + ) + ) + ); + + // remove method declaration from class + return undefined; + } + + function getHoistedFunctionName(node: MethodDeclaration) { + Debug.assert(isPrivateIdentifier(node.name)); + const privateIdentifierInfo = accessPrivateIdentifier(node.name); + Debug.assert(privateIdentifierInfo, "Undeclared private name for property declaration."); + + if (privateIdentifierInfo.placement === PrivateIdentifierPlacement.InstanceMethod) { + return privateIdentifierInfo.functionName; + } + + Debug.fail("Unexpected private identifier placement"); + } + function visitPropertyDeclaration(node: PropertyDeclaration) { Debug.assert(!some(node.decorators)); if (!shouldTransformPrivateFields && isPrivateIdentifier(node.name)) { @@ -218,12 +269,20 @@ namespace ts { function createPrivateIdentifierAccess(info: PrivateIdentifierInfo, receiver: Expression): Expression { receiver = visitNode(receiver, visitor, isExpression); + const synthesizedReceiver = nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver); + switch (info.placement) { case PrivateIdentifierPlacement.InstanceField: return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( - nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver), + synthesizedReceiver, info.weakMapName ); + case PrivateIdentifierPlacement.InstanceMethod: + return context.getEmitHelperFactory().createClassPrivateMethodGetHelper( + synthesizedReceiver, + info.weakSetName, + info.functionName + ); default: return Debug.fail("Unexpected private identifier placement"); } } @@ -406,9 +465,10 @@ namespace ts { function createPrivateIdentifierAssignment(info: PrivateIdentifierInfo, receiver: Expression, right: Expression, operator: AssignmentOperator) { switch (info.placement) { - case PrivateIdentifierPlacement.InstanceField: { + case PrivateIdentifierPlacement.InstanceField: return createPrivateIdentifierInstanceFieldAssignment(info, receiver, right, operator); - } + case PrivateIdentifierPlacement.InstanceMethod: + return createPrivateIdentifierInstanceMethodAssignment(); default: return Debug.fail("Unexpected private identifier placement"); } } @@ -433,6 +493,10 @@ namespace ts { } } + function createPrivateIdentifierInstanceMethodAssignment() { + return context.getEmitHelperFactory().createClassPrivateReadonlyHelper(); + } + /** * Set up the environment for a class. */ @@ -571,7 +635,7 @@ namespace ts { // Declare private names. for (const member of node.members) { if (isPrivateIdentifierClassElementDeclaration(member)) { - addPrivateIdentifierToEnvironment(member.name); + addPrivateIdentifierToEnvironment(member); } } } @@ -585,8 +649,8 @@ namespace ts { return setTextRange(factory.createNodeArray(members), /*location*/ node.members); } - function isPropertyDeclarationThatRequiresConstructorStatement(member: ClassElement): member is PropertyDeclaration { - if (!isPropertyDeclaration(member) || hasStaticModifier(member) || hasSyntacticModifier(getOriginalNode(member), ModifierFlags.Abstract)) { + function isClassElementThatRequiresConstructorStatement(member: ClassElement) { + if (hasStaticModifier(member) || hasSyntacticModifier(getOriginalNode(member), ModifierFlags.Abstract)) { return false; } if (context.getCompilerOptions().useDefineForClassFields) { @@ -599,8 +663,8 @@ namespace ts { function transformConstructor(node: ClassDeclaration | ClassExpression, isDerivedClass: boolean) { const constructor = visitNode(getFirstConstructorWithBody(node), visitor, isConstructorDeclaration); - const properties = node.members.filter(isPropertyDeclarationThatRequiresConstructorStatement); - if (!some(properties)) { + const elements = node.members.filter(isClassElementThatRequiresConstructorStatement); + if (!some(elements)) { return constructor; } const parameters = visitParameterList(constructor ? constructor.parameters : undefined, visitor, context); @@ -631,9 +695,11 @@ namespace ts { properties = filter(properties, property => !!property.initializer || isPrivateIdentifier(property.name)); } + const privateMethods = filter(getMethods(node, /*isStatic*/ false), method => isPrivateIdentifier(method.name)); + const needsConstructorBody = some(properties) || some(privateMethods); // Only generate synthetic constructor when there are property initializers to move. - if (!constructor && !some(properties)) { + if (!constructor && !needsConstructorBody) { return visitFunctionBody(/*node*/ undefined, visitor, context); } @@ -683,7 +749,10 @@ namespace ts { indexOfFirstStatement = afterParameterProperties; } } - addPropertyStatements(statements, properties, factory.createThis()); + const receiver = factory.createThis(); + // private methods can be called in property initializers, they should execute first. + addMethodStatements(statements, privateMethods, receiver); + addPropertyStatements(statements, properties, receiver); // Add existing statements, skipping the initial super call. if (constructor) { @@ -771,6 +840,7 @@ namespace ts { privateIdentifierInfo.weakMapName ); } + default: return Debug.fail("Unexpected private identifier placement"); } } else { @@ -781,10 +851,6 @@ namespace ts { return undefined; } - if (isPrivateIdentifier(propertyName) && !property.initializer) { - return undefined; - } - const propertyOriginalNode = getOriginalNode(property); if (hasSyntacticModifier(propertyOriginalNode, ModifierFlags.Abstract)) { return undefined; @@ -819,6 +885,51 @@ namespace ts { } } + /** + * Generates access-control initializer for private methods. + * + * @param methods An array of method declarations to transform. + * @param receiver The receiver on which each method should be assigned. + */ + function addMethodStatements(statements: Statement[], methods: readonly (MethodDeclaration)[], receiver: LeftHandSideExpression) { + for (const method of methods) { + const expression = transformMethod(method, receiver); + if (!expression) { + continue; + } + const statement = factory.createExpressionStatement(expression); + statements.push(statement); + } + } + + /** + * Transforms a method declaration to access-control initializer. + * + * @param method The method declaration. + * @param receiver The receiver on which the method should be assigned. + */ + function transformMethod(method: MethodDeclaration, receiver: LeftHandSideExpression) { + if (!shouldTransformPrivateFields || !isPrivateIdentifier(method.name)) { + return; + } + + const privateIdentifierInfo = accessPrivateIdentifier(method.name); + if (privateIdentifierInfo) { + switch (privateIdentifierInfo.placement){ + case PrivateIdentifierPlacement.InstanceMethod: { + return createPrivateInstanceMethodInitializer( + receiver, + privateIdentifierInfo.weakSetName + ); + } + default: return Debug.fail("Unexpected private identifier placement"); + } + } + else { + Debug.fail("Undeclared private name for method declaration."); + } + } + /** * Hooks node substitutions. * @@ -907,21 +1018,57 @@ namespace ts { return pendingExpressions || (pendingExpressions = []); } - function addPrivateIdentifierToEnvironment(name: PrivateIdentifier) { - const text = getTextOfPropertyName(name) as string; - const weakMapName = factory.createUniqueName("_" + text.substring(1), GeneratedIdentifierFlags.Optimistic | GeneratedIdentifierFlags.ReservedInNestedScopes); - hoistVariableDeclaration(weakMapName); - getPrivateIdentifierEnvironment().set(name.escapedText, { placement: PrivateIdentifierPlacement.InstanceField, weakMapName }); - getPendingExpressions().push( - factory.createAssignment( - weakMapName, + function addPrivateIdentifierToEnvironment(node: PrivateClassElementDeclaration) { + const text = getTextOfPropertyName(node.name) as string; + const accessControlObject = createHoistedVariableForPrivateName(text); + let info: PrivateIdentifierInfo; + const assignmentExpressions: Expression[] = []; + + if (isPropertyDeclaration(node)) { + info = { + placement: PrivateIdentifierPlacement.InstanceField, + weakMapName: accessControlObject + }; + + assignmentExpressions.push(factory.createAssignment( + accessControlObject, factory.createNewExpression( factory.createIdentifier("WeakMap"), /*typeArguments*/ undefined, [] ) - ) - ); + )); + } + else if (isMethodDeclaration(node)) { + const functionName = createHoistedVariableForPrivateName(text); + + info = { + placement: PrivateIdentifierPlacement.InstanceMethod, + weakSetName: accessControlObject, + functionName + }; + + assignmentExpressions.push(factory.createAssignment( + accessControlObject, + factory.createNewExpression( + factory.createIdentifier("WeakSet"), + /*typeArguments*/ undefined, + [] + ) + )); + } + else { + return; + } + + getPrivateIdentifierEnvironment().set(node.name.escapedText, info); + getPendingExpressions().push(...assignmentExpressions); + } + + function createHoistedVariableForPrivateName(privateName: string): Identifier { + const name = factory.createUniqueName("_" + privateName.substring(1), GeneratedIdentifierFlags.Optimistic); + hoistVariableDeclaration(name); + return name; } function accessPrivateIdentifier(name: PrivateIdentifier) { @@ -1073,4 +1220,12 @@ namespace ts { [receiver, initializer || factory.createVoidZero()] ); } + + function createPrivateInstanceMethodInitializer(receiver: LeftHandSideExpression, weakSetName: Identifier) { + return factory.createCallExpression( + factory.createPropertyAccessExpression(weakSetName, "add"), + /*typeArguments*/ undefined, + [receiver] + ); + } } diff --git a/src/compiler/transformers/utilities.ts b/src/compiler/transformers/utilities.ts index a52cf7c68cdf7..a97b7a084e9f8 100644 --- a/src/compiler/transformers/utilities.ts +++ b/src/compiler/transformers/utilities.ts @@ -343,6 +343,16 @@ namespace ts { return filter(node.members, m => isInitializedOrStaticProperty(m, requireInitializer, isStatic)) as PropertyDeclaration[]; } + /** + * Gets all the static or all the instance method declarations of a class. + * + * @param node The class node. + * @param isStatic A value indicating whether to get properties from the static or instance side of the class. + */ + export function getMethods(node: ClassExpression | ClassDeclaration, isStatic: boolean): readonly MethodDeclaration[] { + return filter(node.members, m => isStaticMethodDeclaration(m, isStatic)) as MethodDeclaration[]; + } + /** * Is a class element either a static or an instance property declaration with an initializer? * @@ -365,4 +375,15 @@ namespace ts { return member.kind === SyntaxKind.PropertyDeclaration && (member).initializer !== undefined; } + + /** + * Gets a value indicating whether a class element is either a static or an instance method declaration. + * + * @param member The class element node. + * @param isStatic A value indicating whether the member should be a static or instance member. + */ + export function isStaticMethodDeclaration(member: ClassElement, isStatic: boolean): member is MethodDeclaration { + return isMethodDeclaration(member) && hasStaticModifier(member) === isStatic; + } + } From 04af85d4730b3939ce63e400a5feaf4d9f47ddaa Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Mon, 25 Jan 2021 15:50:12 +0000 Subject: [PATCH 06/73] Rename shouldTransformPrivateFields Signed-off-by: Kubilay Kahveci --- src/compiler/transformers/classFields.ts | 34 ++++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 42d47bfcd008d..8bb9889479b8f 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -51,7 +51,7 @@ namespace ts { const compilerOptions = context.getCompilerOptions(); const languageVersion = getEmitScriptTarget(compilerOptions); - const shouldTransformPrivateFields = languageVersion < ScriptTarget.ESNext; + const shouldTransformPrivateElements = languageVersion < ScriptTarget.ESNext; const previousOnSubstituteNode = context.onSubstituteNode; context.onSubstituteNode = onSubstituteNode; @@ -136,7 +136,7 @@ namespace ts { * Replace it with an empty identifier to indicate a problem with the code. */ function visitPrivateIdentifier(node: PrivateIdentifier) { - if (!shouldTransformPrivateFields) { + if (!shouldTransformPrivateElements) { return node; } return setOriginalNode(factory.createIdentifier(""), node); @@ -207,7 +207,7 @@ namespace ts { Debug.assert(!some(node.decorators)); const transformedMethod = visitEachChild(node, classElementVisitor, context); - if (!shouldTransformPrivateFields || !isPrivateIdentifier(node.name) || !transformedMethod.body) { + if (!shouldTransformPrivateElements || !isPrivateIdentifier(node.name) || !transformedMethod.body) { return transformedMethod; } @@ -245,7 +245,7 @@ namespace ts { function visitPropertyDeclaration(node: PropertyDeclaration) { Debug.assert(!some(node.decorators)); - if (!shouldTransformPrivateFields && isPrivateIdentifier(node.name)) { + if (!shouldTransformPrivateElements && isPrivateIdentifier(node.name)) { // Initializer is elided as the field is initialized in transformConstructor. return factory.updatePropertyDeclaration( node, @@ -288,7 +288,7 @@ namespace ts { } function visitPropertyAccessExpression(node: PropertyAccessExpression) { - if (shouldTransformPrivateFields && isPrivateIdentifier(node.name)) { + if (shouldTransformPrivateElements && isPrivateIdentifier(node.name)) { const privateIdentifierInfo = accessPrivateIdentifier(node.name); if (privateIdentifierInfo) { return setOriginalNode( @@ -301,7 +301,7 @@ namespace ts { } function visitPrefixUnaryExpression(node: PrefixUnaryExpression) { - if (shouldTransformPrivateFields && isPrivateIdentifierPropertyAccessExpression(node.operand)) { + if (shouldTransformPrivateElements && isPrivateIdentifierPropertyAccessExpression(node.operand)) { const operator = node.operator === SyntaxKind.PlusPlusToken ? SyntaxKind.PlusToken : node.operator === SyntaxKind.MinusMinusToken ? SyntaxKind.MinusToken : undefined; @@ -327,7 +327,7 @@ namespace ts { } function visitPostfixUnaryExpression(node: PostfixUnaryExpression, valueIsDiscarded: boolean) { - if (shouldTransformPrivateFields && isPrivateIdentifierPropertyAccessExpression(node.operand)) { + if (shouldTransformPrivateElements && isPrivateIdentifierPropertyAccessExpression(node.operand)) { const operator = node.operator === SyntaxKind.PlusPlusToken ? SyntaxKind.PlusToken : node.operator === SyntaxKind.MinusMinusToken ? SyntaxKind.MinusToken : undefined; @@ -393,7 +393,7 @@ namespace ts { } function visitCallExpression(node: CallExpression) { - if (shouldTransformPrivateFields && isPrivateIdentifierPropertyAccessExpression(node.expression)) { + if (shouldTransformPrivateElements && isPrivateIdentifierPropertyAccessExpression(node.expression)) { // Transform call expressions of private names to properly bind the `this` parameter. const { thisArg, target } = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion); if (isCallChain(node)) { @@ -416,7 +416,7 @@ namespace ts { } function visitTaggedTemplateExpression(node: TaggedTemplateExpression) { - if (shouldTransformPrivateFields && isPrivateIdentifierPropertyAccessExpression(node.tag)) { + if (shouldTransformPrivateElements && isPrivateIdentifierPropertyAccessExpression(node.tag)) { // Bind the `this` correctly for tagged template literals when the tag is a private identifier property access. const { thisArg, target } = factory.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion); return factory.updateTaggedTemplateExpression( @@ -434,7 +434,7 @@ namespace ts { } function visitBinaryExpression(node: BinaryExpression) { - if (shouldTransformPrivateFields) { + if (shouldTransformPrivateElements) { if (isDestructuringAssignment(node)) { const savedPendingExpressions = pendingExpressions; pendingExpressions = undefined!; @@ -503,7 +503,7 @@ namespace ts { function visitClassLike(node: ClassLikeDeclaration) { const savedPendingExpressions = pendingExpressions; pendingExpressions = undefined; - if (shouldTransformPrivateFields) { + if (shouldTransformPrivateElements) { startPrivateIdentifierEnvironment(); } @@ -511,7 +511,7 @@ namespace ts { visitClassDeclaration(node) : visitClassExpression(node); - if (shouldTransformPrivateFields) { + if (shouldTransformPrivateElements) { endPrivateIdentifierEnvironment(); } pendingExpressions = savedPendingExpressions; @@ -519,7 +519,7 @@ namespace ts { } function doesClassElementNeedTransform(node: ClassElement) { - return isPropertyDeclaration(node) || (shouldTransformPrivateFields && node.name && isPrivateIdentifier(node.name)); + return isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && isPrivateIdentifier(node.name)); } function visitClassDeclaration(node: ClassDeclaration) { @@ -631,7 +631,7 @@ namespace ts { } function transformClassMembers(node: ClassDeclaration | ClassExpression, isDerivedClass: boolean) { - if (shouldTransformPrivateFields) { + if (shouldTransformPrivateElements) { // Declare private names. for (const member of node.members) { if (isPrivateIdentifierClassElementDeclaration(member)) { @@ -658,7 +658,7 @@ namespace ts { // then we don't need to transform any class properties. return languageVersion < ScriptTarget.ESNext; } - return isInitializedProperty(member) || shouldTransformPrivateFields && isPrivateIdentifierClassElementDeclaration(member); + return isInitializedProperty(member) || shouldTransformPrivateElements && isPrivateIdentifierClassElementDeclaration(member); } function transformConstructor(node: ClassDeclaration | ClassExpression, isDerivedClass: boolean) { @@ -829,7 +829,7 @@ namespace ts { ? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name)) : property.name; - if (shouldTransformPrivateFields && isPrivateIdentifier(propertyName)) { + if (shouldTransformPrivateElements && isPrivateIdentifier(propertyName)) { const privateIdentifierInfo = accessPrivateIdentifier(propertyName); if (privateIdentifierInfo) { switch (privateIdentifierInfo.placement) { @@ -909,7 +909,7 @@ namespace ts { * @param receiver The receiver on which the method should be assigned. */ function transformMethod(method: MethodDeclaration, receiver: LeftHandSideExpression) { - if (!shouldTransformPrivateFields || !isPrivateIdentifier(method.name)) { + if (!shouldTransformPrivateElements || !isPrivateIdentifier(method.name)) { return; } From f048d721a0f2e3aca56fe150cc798a35f8dbcaaa Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Mon, 25 Jan 2021 15:50:22 +0000 Subject: [PATCH 07/73] Accept baseline Signed-off-by: Kubilay Kahveci --- .../reference/privateNameAccessors.js | 22 +---- .../reference/privateNameAccessorsAccess.js | 13 +-- .../privateNameAccessorsCallExpression.js | 73 ++++++++++------ .../privateNameAccessorssDerivedClasses.js | 9 +- .../privateNameConstructorReserved.js | 8 +- .../privateNameES5Ban(target=es3).js | 7 +- .../privateNameES5Ban(target=es5).js | 7 +- .../baselines/reference/privateNameMethod.js | 24 ++--- .../reference/privateNameMethodAccess.js | 20 ++--- .../reference/privateNameMethodAssignment.js | 36 ++++---- .../privateNameMethodCallExpression.js | 87 +++++++------------ .../privateNameMethodsDerivedClasses.js | 18 ++-- ...rivateNameNestedClassAccessorsShadowing.js | 12 +-- .../privateNameNestedClassMethodShadowing.js | 26 +++--- .../reference/privateNamesAndDecorators.js | 6 +- .../privateNamesAndGenericClasses-2.js | 18 ++-- .../reference/privateNamesAndkeyof.js | 50 ++++------- .../reference/privateNamesInGenericClasses.js | 24 +++-- .../privateNamesIncompatibleModifiers.js | 22 ++--- .../reference/privateNamesUseBeforeDef.js | 24 +++-- 20 files changed, 232 insertions(+), 274 deletions(-) diff --git a/tests/baselines/reference/privateNameAccessors.js b/tests/baselines/reference/privateNameAccessors.js index 19376cb013e37..6e25fb62c47de 100644 --- a/tests/baselines/reference/privateNameAccessors.js +++ b/tests/baselines/reference/privateNameAccessors.js @@ -16,29 +16,15 @@ class A1 { //// [privateNameAccessors.js] "use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; -}; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; var _prop, _prop_1, _roProp; class A1 { constructor(name) { - __classPrivateFieldSet(this, _prop_1, ""); - __classPrivateFieldSet(this, _roProp, ""); // Error - console.log(__classPrivateFieldGet(this, _prop_1)); - console.log(__classPrivateFieldGet(this, _roProp)); + this. = ""; + this. = ""; // Error + console.log(this.); + console.log(this.); } get () { return ""; } set (param) { } get () { return ""; } } -_prop = new WeakMap(), _prop_1 = new WeakMap(), _roProp = new WeakMap(); diff --git a/tests/baselines/reference/privateNameAccessorsAccess.js b/tests/baselines/reference/privateNameAccessorsAccess.js index 1e650648b504b..2550a386096fa 100644 --- a/tests/baselines/reference/privateNameAccessorsAccess.js +++ b/tests/baselines/reference/privateNameAccessorsAccess.js @@ -26,26 +26,19 @@ class B2 { //// [privateNameAccessorsAccess.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; var _prop, _prop_1; class A2 { constructor() { - console.log(__classPrivateFieldGet(this, _prop_1)); + console.log(this.); let a = this; - __classPrivateFieldGet(a, _prop_1); + a.; function foo() { - __classPrivateFieldGet(a, _prop_1); + a.; } } get () { return ""; } set (param) { } } -_prop = new WeakMap(), _prop_1 = new WeakMap(); new A2().; // Error function foo() { new A2().; // Error diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.js b/tests/baselines/reference/privateNameAccessorsCallExpression.js index cc113bc5d513c..297c6b72eea07 100644 --- a/tests/baselines/reference/privateNameAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.js @@ -18,32 +18,49 @@ class A { getInstance() { return new A(); } } -//// [privateNameAccessorsCallExpression.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; -var _fieldFunc, _fieldFunc2; -class A { - constructor() { - this.x = 1; - } - get () { return function () { this.x = 10; }; } - get () { return function (a, ...b) { }; } - test() { - var _a; - __classPrivateFieldGet(this, _fieldFunc).call(this); - const func = __classPrivateFieldGet(this, _fieldFunc); - func(); - new (__classPrivateFieldGet(this, _fieldFunc))(); - const arr = [1, 2]; - __classPrivateFieldGet(this, _fieldFunc2).call(this, 0, ...arr, 3); - const b = new (__classPrivateFieldGet(this, _fieldFunc2))(0, ...arr, 3); - const str = __classPrivateFieldGet(this, _fieldFunc2).bind(this) `head${1}middle${2}tail`; - __classPrivateFieldGet((_a = this.getInstance()), _fieldFunc2).bind(_a) `test${1}and${2}`; +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(10,14): error TS1003: Identifier expected. +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(11,27): error TS1003: Identifier expected. +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(13,18): error TS1003: Identifier expected. +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(15,14): error TS1003: Identifier expected. +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(16,28): error TS1003: Identifier expected. +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(17,26): error TS1003: Identifier expected. +tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(18,35): error TS1003: Identifier expected. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js (7 errors) ==== + var _fieldFunc, _fieldFunc2; + class A { + constructor() { + this.x = 1; + } + get () { return function () { this.x = 10; }; } + get () { return function (a, ...b) { }; } + test() { + var _a; + this..call(this); + ~ +!!! error TS1003: Identifier expected. + const func = this.; + ~ +!!! error TS1003: Identifier expected. + func(); + new this.(); + ~ +!!! error TS1003: Identifier expected. + const arr = [1, 2]; + this..call(this, 0, ...arr, 3); + ~ +!!! error TS1003: Identifier expected. + const b = new this.(0, ...arr, 3); + ~ +!!! error TS1003: Identifier expected. + const str = this..bind(this) `head${1}middle${2}tail`; + ~ +!!! error TS1003: Identifier expected. + (_a = this.getInstance())..bind(_a) `test${1}and${2}`; + ~ +!!! error TS1003: Identifier expected. + } + getInstance() { return new A(); } } - getInstance() { return new A(); } -} -_fieldFunc = new WeakMap(), _fieldFunc2 = new WeakMap(); + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js index f88ea3e4d7b6d..bce3c2b53f3a9 100644 --- a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js @@ -13,20 +13,13 @@ class Derived extends Base { //// [privateNameAccessorssDerivedClasses.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; var _prop; class Base { get () { return 123; } static method(x) { - console.log(__classPrivateFieldGet(x, _prop)); + console.log(x.); } } -_prop = new WeakMap(); class Derived extends Base { static method(x) { console.log(x.); diff --git a/tests/baselines/reference/privateNameConstructorReserved.js b/tests/baselines/reference/privateNameConstructorReserved.js index ea3c83b9eaae3..03520a377abe2 100644 --- a/tests/baselines/reference/privateNameConstructorReserved.js +++ b/tests/baselines/reference/privateNameConstructorReserved.js @@ -5,8 +5,10 @@ class A { //// [privateNameConstructorReserved.js] -var _constructor; +var _constructor, _constructor_1; class A { - () { } // Error: `#constructor` is a reserved word. + constructor() { + _constructor.add(this); + } } -_constructor = new WeakMap(); +_constructor = new WeakSet(), _constructor_1 = function _constructor_1() { }; diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index 431eaba29e7cf..7db5b048b8314 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -16,10 +16,9 @@ class A { //// [privateNameES5Ban.js] var A = /** @class */ (function () { function A() { + _method.add(this); _field.set(this, 123); } - A.prototype. = function () { }; - A. = function () { }; Object.defineProperty(A.prototype, "", { get: function () { return ""; }, set: function (x) { }, @@ -32,8 +31,8 @@ var A = /** @class */ (function () { enumerable: false, configurable: true }); - var _field, _method, _sField, _sMethod, _acc, _acc_1, _sAcc, _sAcc_1; - _field = new WeakMap(), _method = new WeakMap(), _sField = new WeakMap(), _sMethod = new WeakMap(), _acc = new WeakMap(), _acc_1 = new WeakMap(), _sAcc = new WeakMap(), _sAcc_1 = new WeakMap(); + var _field, _method, _method_1, _sField, _sMethod, _sMethod_1, _acc, _acc_1, _sAcc, _sAcc_1; + _field = new WeakMap(), _method = new WeakSet(), _sField = new WeakMap(), _sMethod = new WeakSet(), _method_1 = function _method_1() { }, _sMethod_1 = function _sMethod_1() { }; _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 431eaba29e7cf..7db5b048b8314 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -16,10 +16,9 @@ class A { //// [privateNameES5Ban.js] var A = /** @class */ (function () { function A() { + _method.add(this); _field.set(this, 123); } - A.prototype. = function () { }; - A. = function () { }; Object.defineProperty(A.prototype, "", { get: function () { return ""; }, set: function (x) { }, @@ -32,8 +31,8 @@ var A = /** @class */ (function () { enumerable: false, configurable: true }); - var _field, _method, _sField, _sMethod, _acc, _acc_1, _sAcc, _sAcc_1; - _field = new WeakMap(), _method = new WeakMap(), _sField = new WeakMap(), _sMethod = new WeakMap(), _acc = new WeakMap(), _acc_1 = new WeakMap(), _sAcc = new WeakMap(), _sAcc_1 = new WeakMap(); + var _field, _method, _method_1, _sField, _sMethod, _sMethod_1, _acc, _acc_1, _sAcc, _sAcc_1; + _field = new WeakMap(), _method = new WeakSet(), _sField = new WeakMap(), _sMethod = new WeakSet(), _method_1 = function _method_1() { }, _sMethod_1 = function _sMethod_1() { }; _sField.set(A, "hello world"); return A; }()); diff --git a/tests/baselines/reference/privateNameMethod.js b/tests/baselines/reference/privateNameMethod.js index 47fcf7964d955..cd56a5854583e 100644 --- a/tests/baselines/reference/privateNameMethod.js +++ b/tests/baselines/reference/privateNameMethod.js @@ -14,22 +14,22 @@ class A1 { //// [privateNameMethod.js] "use strict"; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); } - return privateMap.get(receiver); + return fn; }; -var _method; +var _method, _method_1; class A1 { constructor(name) { - __classPrivateFieldGet(this, _method).call(this, ""); - __classPrivateFieldGet(this, _method).call(this, 1); // Error - __classPrivateFieldGet(this, _method).call(// Error + _method.add(this); + __classPrivateMethodGet(this, _method, _method_1).call(this, ""); + __classPrivateMethodGet(this, _method, _method_1).call(this, 1); // Error + __classPrivateMethodGet(this, _method, _method_1).call(// Error this); // Error } - (param) { - return ""; - } } -_method = new WeakMap(); +_method = new WeakSet(), _method_1 = function _method_1(param) { + return ""; +}; diff --git a/tests/baselines/reference/privateNameMethodAccess.js b/tests/baselines/reference/privateNameMethodAccess.js index 2a42bead50f92..c458a0b48f24c 100644 --- a/tests/baselines/reference/privateNameMethodAccess.js +++ b/tests/baselines/reference/privateNameMethodAccess.js @@ -24,25 +24,25 @@ class B2 { //// [privateNameMethodAccess.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); } - return privateMap.get(receiver); + return fn; }; -var _method, _a; +var _method, _method_1, _a; class A2 { constructor() { - console.log(__classPrivateFieldGet(this, _method)); + _method.add(this); + console.log(__classPrivateMethodGet(this, _method, _method_1)); let a = this; - __classPrivateFieldGet(a, _method).call(a); + __classPrivateMethodGet(a, _method, _method_1).call(a); function foo() { - __classPrivateFieldGet(a, _method).call(a); + __classPrivateMethodGet(a, _method, _method_1).call(a); } } - () { return ""; } } -_method = new WeakMap(); +_method = new WeakSet(), _method_1 = function _method_1() { return ""; }; (_a = new A2())..call(_a); // Error function foo() { var _a; diff --git a/tests/baselines/reference/privateNameMethodAssignment.js b/tests/baselines/reference/privateNameMethodAssignment.js index 407206bee54c0..0b410dba47ff1 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.js +++ b/tests/baselines/reference/privateNameMethodAssignment.js @@ -13,33 +13,27 @@ class A3 { //// [privateNameMethodAssignment.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { + throw new TypeError("private element is not writable"); }; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); } - return privateMap.get(receiver); + return fn; }; -var _method; +var _method, _method_1; class A3 { constructor(a, b) { var _a, _b; - __classPrivateFieldSet(this, _method, () => { }); // Error, not writable - __classPrivateFieldSet(// Error, not writable - a, _method, () => { }); // Error, not writable - __classPrivateFieldSet(// Error, not writable - b, _method, () => { }); //Error, not writable - (_a = this, { x: ({ set value(_b) { __classPrivateFieldSet(_a, _method, _b); } }).value } = { x: () => { } }); //Error, not writable - let x = __classPrivateFieldGet(this, _method); - __classPrivateFieldSet(_b = b, _method, +__classPrivateFieldGet(_b, _method) + 1); //Error, not writable + _method.add(this); + __classPrivateReadonly(); // Error, not writable + __classPrivateReadonly(); // Error, not writable + __classPrivateReadonly(); //Error, not writable + (_a = this, { x: ({ set value(_b) { __classPrivateReadonly(); } }).value } = { x: () => { } }); //Error, not writable + let x = __classPrivateMethodGet(this, _method, _method_1); + __classPrivateReadonly(); //Error, not writable } - () { } ; } -_method = new WeakMap(); +_method = new WeakSet(), _method_1 = function _method_1() { }; diff --git a/tests/baselines/reference/privateNameMethodCallExpression.js b/tests/baselines/reference/privateNameMethodCallExpression.js index f9ee44f4b73c7..f3621470dfd2e 100644 --- a/tests/baselines/reference/privateNameMethodCallExpression.js +++ b/tests/baselines/reference/privateNameMethodCallExpression.js @@ -24,58 +24,37 @@ class AA { } -tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(12,5): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. -tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(12,8): error TS1005: '=>' expected. -tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(14,15): error TS1005: '=>' expected. -tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(16,12): error TS1005: ';' expected. -tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(31,19): error TS1005: ';' expected. -tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js(32,1): error TS1128: Declaration or statement expected. - - -==== tests/cases/conformance/classes/members/privateNames/privateNameMethodCallExpression.js (6 errors) ==== - var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); - }; - var _method, _method2; - class AA { - constructor() { - this.x = 1; - } - () { this.x = 10; } - ~ -!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. - ~ -!!! error TS1005: '=>' expected. - ; - (a, ...b) { } - ~ -!!! error TS1005: '=>' expected. - ; - test() { - ~ -!!! error TS1005: ';' expected. - var _a, _b, _c; - __classPrivateFieldGet(this, _method).call(this); - const func = __classPrivateFieldGet(this, _method); - func(); - new (__classPrivateFieldGet(this, _method))(); - const arr = [1, 2]; - __classPrivateFieldGet(this, _method2).call(this, 0, ...arr, 3); - const b = new (__classPrivateFieldGet(this, _method2))(0, ...arr, 3); //Error - const str = __classPrivateFieldGet(this, _method2).bind(this) `head${1}middle${2}tail`; - __classPrivateFieldGet((_a = this.getInstance()), _method2).bind(_a) `test${1}and${2}`; - __classPrivateFieldGet((_b = this.getInstance()), _method2).call(_b, 0, ...arr, 3); - const b2 = new (__classPrivateFieldGet(this.getInstance(), _method2))(0, ...arr, 3); //Error - const str2 = __classPrivateFieldGet((_c = this.getInstance()), _method2).bind(_c) `head${1}middle${2}tail`; - } - getInstance() { return new AA(); } - ~ -!!! error TS1005: ';' expected. +//// [privateNameMethodCallExpression.js] +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; +}; +var _method, _method_1, _method2, _method2_1; +class AA { + constructor() { + _method.add(this); + _method2.add(this); + this.x = 1; + } + ; + ; + test() { + var _a, _b, _c; + __classPrivateMethodGet(this, _method, _method_1).call(this); + const func = __classPrivateMethodGet(this, _method, _method_1); + func(); + new (__classPrivateMethodGet(this, _method, _method_1))(); + const arr = [1, 2]; + __classPrivateMethodGet(this, _method2, _method2_1).call(this, 0, ...arr, 3); + const b = new (__classPrivateMethodGet(this, _method2, _method2_1))(0, ...arr, 3); //Error + const str = __classPrivateMethodGet(this, _method2, _method2_1).bind(this) `head${1}middle${2}tail`; + __classPrivateMethodGet((_a = this.getInstance()), _method2, _method2_1).bind(_a) `test${1}and${2}`; + __classPrivateMethodGet((_b = this.getInstance()), _method2, _method2_1).call(_b, 0, ...arr, 3); + const b2 = new (__classPrivateMethodGet(this.getInstance(), _method2, _method2_1))(0, ...arr, 3); //Error + const str2 = __classPrivateMethodGet((_c = this.getInstance()), _method2, _method2_1).bind(_c) `head${1}middle${2}tail`; } - ~ -!!! error TS1128: Declaration or statement expected. - _method = new WeakMap(), _method2 = new WeakMap(); - \ No newline at end of file + getInstance() { return new AA(); } +} +_method = new WeakSet(), _method2 = new WeakSet(), _method_1 = function _method_1() { this.x = 10; }, _method2_1 = function _method2_1(a, ...b) { }; diff --git a/tests/baselines/reference/privateNameMethodsDerivedClasses.js b/tests/baselines/reference/privateNameMethodsDerivedClasses.js index 44fe2875de037..f9ef2fd785799 100644 --- a/tests/baselines/reference/privateNameMethodsDerivedClasses.js +++ b/tests/baselines/reference/privateNameMethodsDerivedClasses.js @@ -13,20 +13,22 @@ class Derived extends Base { //// [privateNameMethodsDerivedClasses.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); } - return privateMap.get(receiver); + return fn; }; -var _prop; +var _prop, _prop_1; class Base { - () { return 123; } + constructor() { + _prop.add(this); + } static method(x) { - console.log(__classPrivateFieldGet(x, _prop).call(x)); + console.log(__classPrivateMethodGet(x, _prop, _prop_1).call(x)); } } -_prop = new WeakMap(); +_prop = new WeakSet(), _prop_1 = function _prop_1() { return 123; }; class Derived extends Base { static method(x) { console.log(x..call(x)); diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js index d7a1c97b33b26..8fcf71948a055 100644 --- a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js @@ -16,12 +16,6 @@ class Base { //// [privateNameNestedClassAccessorsShadowing.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; var _x; class Base { constructor() { @@ -30,15 +24,13 @@ class Base { get () { return 1; } ; testBase(x) { - console.log(__classPrivateFieldGet(x, _x_1)); + console.log(x.); } testDerived(x) { - console.log(__classPrivateFieldGet(x, _x_1)); + console.log(x.); } } - _x_1 = new WeakMap(); } get () { return 1; } ; } -_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js index 3ad246554754b..0c27933904bcb 100644 --- a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js @@ -16,29 +16,31 @@ class Base { //// [privateNameNestedClassMethodShadowing.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); } - return privateMap.get(receiver); + return fn; }; -var _x; +var _x, _x_1; class Base { constructor() { - var _x_1; + var _x_2, _x_3; + _x.add(this); class Derived { - () { } + constructor() { + _x_2.add(this); + } ; testBase(x) { - console.log(__classPrivateFieldGet(x, _x_1)); + console.log(__classPrivateMethodGet(x, _x_2, _x_3)); } testDerived(x) { - console.log(__classPrivateFieldGet(x, _x_1)); + console.log(__classPrivateMethodGet(x, _x_2, _x_3)); } } - _x_1 = new WeakMap(); + _x_2 = new WeakSet(), _x_3 = function _x_3() { }; } - () { } ; } -_x = new WeakMap(); +_x = new WeakSet(), _x_1 = function _x_1() { }; diff --git a/tests/baselines/reference/privateNamesAndDecorators.js b/tests/baselines/reference/privateNamesAndDecorators.js index 65011d85f169d..980a929454ef9 100644 --- a/tests/baselines/reference/privateNamesAndDecorators.js +++ b/tests/baselines/reference/privateNamesAndDecorators.js @@ -10,12 +10,12 @@ class A { //// [privateNamesAndDecorators.js] -var _foo, _bar; +var _foo, _bar, _bar_1; var A = /** @class */ (function () { function A() { + _bar.add(this); _foo.set(this, 1); } - A.prototype. = function () { }; return A; }()); -_foo = new WeakMap(), _bar = new WeakMap(); +_foo = new WeakMap(), _bar = new WeakSet(), _bar_1 = function _bar_1() { }; diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.js b/tests/baselines/reference/privateNamesAndGenericClasses-2.js index 84710604b9dcc..c2ddf072fdcf1 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.js +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.js @@ -36,21 +36,25 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; +}; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver); }; -var _foo, _bar; +var _foo, _bar, _bar_1; class C { constructor(t) { + _bar.add(this); _foo.set(this, void 0); __classPrivateFieldSet(this, _foo, t); - t = __classPrivateFieldGet(this, _bar).call(this); - } - () { - return __classPrivateFieldGet(this, _foo); + t = __classPrivateMethodGet(this, _bar, _bar_1).call(this); } set baz(t) { __classPrivateFieldSet(this, _foo, t); @@ -59,7 +63,9 @@ class C { return __classPrivateFieldGet(this, _foo); } } -_foo = new WeakMap(), _bar = new WeakMap(); +_foo = new WeakMap(), _bar = new WeakSet(), _bar_1 = function _bar_1() { + return __classPrivateFieldGet(this, _foo); +}; let a = new C(3); let b = new C("hello"); a.baz = 5; // OK diff --git a/tests/baselines/reference/privateNamesAndkeyof.js b/tests/baselines/reference/privateNamesAndkeyof.js index 5a393e864d1fd..46d4bcf36cb41 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.js +++ b/tests/baselines/reference/privateNamesAndkeyof.js @@ -11,38 +11,20 @@ class A { type T = keyof A // should not include '#foo*' -tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(9,5): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. -tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(9,8): error TS1005: '=>' expected. -tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(11,12): error TS1005: ';' expected. -tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(13,17): error TS1005: ';' expected. -tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js(15,1): error TS1128: Declaration or statement expected. - - -==== tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.js (5 errors) ==== - "use strict"; - var _fooField, _fooMethod, _fooProp, _fooProp_1; - class A { - constructor() { - _fooField.set(this, 3); - this.bar = 3; - this.baz = 3; - } - () { } - ~ -!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. - ~ -!!! error TS1005: '=>' expected. - ; - get () { return 1; } - ~ -!!! error TS1005: ';' expected. - ; - set (value) { } - ~ -!!! error TS1005: ';' expected. - ; +//// [privateNamesAndkeyof.js] +"use strict"; +var _fooField, _fooMethod, _fooMethod_1, _fooProp, _fooProp_1; +class A { + constructor() { + _fooMethod.add(this); + _fooField.set(this, 3); + this.bar = 3; + this.baz = 3; } - ~ -!!! error TS1128: Declaration or statement expected. - _fooField = new WeakMap(), _fooMethod = new WeakMap(), _fooProp = new WeakMap(), _fooProp_1 = new WeakMap(); - \ No newline at end of file + ; + get () { return 1; } + ; + set (value) { } + ; +} +_fooField = new WeakMap(), _fooMethod = new WeakSet(), _fooMethod_1 = function _fooMethod_1() { }; diff --git a/tests/baselines/reference/privateNamesInGenericClasses.js b/tests/baselines/reference/privateNamesInGenericClasses.js index fdabcf6787143..cdf92030f3742 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.js +++ b/tests/baselines/reference/privateNamesInGenericClasses.js @@ -42,25 +42,31 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _foo, _method, _prop, _prop_1; +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; +}; +var _foo, _method, _method_1, _prop, _prop_1; class C { constructor() { + _method.add(this); _foo.set(this, void 0); } - () { return __classPrivateFieldGet(this, _foo); } get () { return __classPrivateFieldGet(this, _foo); } set (value) { __classPrivateFieldSet(this, _foo, value); } bar(x) { return __classPrivateFieldGet(x, _foo); } // OK - bar2(x) { return __classPrivateFieldGet(x, _method).call(x); } // OK - bar3(x) { return __classPrivateFieldGet(x, _prop_1); } // OK + bar2(x) { return __classPrivateMethodGet(x, _method, _method_1).call(x); } // OK + bar3(x) { return x.; } // OK baz(x) { return __classPrivateFieldGet(x, _foo); } // OK - baz2(x) { return __classPrivateFieldGet(x, _method); } // OK - baz3(x) { return __classPrivateFieldGet(x, _prop_1); } // OK + baz2(x) { return __classPrivateMethodGet(x, _method, _method_1); } // OK + baz3(x) { return x.; } // OK quux(x) { return __classPrivateFieldGet(x, _foo); } // OK - quux2(x) { return __classPrivateFieldGet(x, _method); } // OK - quux3(x) { return __classPrivateFieldGet(x, _prop_1); } // OK + quux2(x) { return __classPrivateMethodGet(x, _method, _method_1); } // OK + quux3(x) { return x.; } // OK } -_foo = new WeakMap(), _method = new WeakMap(), _prop = new WeakMap(), _prop_1 = new WeakMap(); +_foo = new WeakMap(), _method = new WeakSet(), _method_1 = function _method_1() { return __classPrivateFieldGet(this, _foo); }; a.; // Error a.; // Error a.; // Error diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.js b/tests/baselines/reference/privateNamesIncompatibleModifiers.js index c7618c5c580ef..6068d8ea69098 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.js +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.js @@ -57,23 +57,21 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; -var _foo, _bar, _baz, _qux, _fooMethod, _barMethod, _bazMethod, _quxMethod, _asyncMethod, _genMethod, _asyncGenMethod, _fooProp, _fooProp_1, _barProp, _barProp_1, _bazProp, _bazProp_1, _quxProp, _quxProp_1, _whatProp, _whatProp_1, _asyncProp, _asyncProp_1; +var _foo, _bar, _baz, _qux, _fooMethod, _fooMethod_1, _barMethod, _barMethod_1, _bazMethod, _bazMethod_1, _quxMethod, _quxMethod_1, _asyncMethod, _asyncMethod_1, _genMethod, _genMethod_1, _asyncGenMethod, _asyncGenMethod_1, _fooProp, _fooProp_1, _barProp, _barProp_1, _bazProp, _bazProp_1, _quxProp, _quxProp_1, _whatProp, _whatProp_1, _asyncProp, _asyncProp_1; class A { constructor() { + _fooMethod.add(this); + _barMethod.add(this); + _bazMethod.add(this); + _quxMethod.add(this); + _asyncMethod.add(this); + _genMethod.add(this); + _asyncGenMethod.add(this); _foo.set(this, 3); // Error _bar.set(this, 3); // Error _baz.set(this, 3); // Error _qux.set(this, 3); // OK } - () { return 3; } // Error - () { return 3; } // Error - () { return 3; } // Error - () { return 3; } // Error - () { - return __awaiter(this, void 0, void 0, function* () { return 1; }); - } //OK - *() { return 1; } //OK - () { return __asyncGenerator(this, arguments, function* _a() { return yield __await(1); }); } //OK get () { return 3; } // Error set (value) { } // Error get () { return 3; } // Error @@ -87,6 +85,8 @@ class A { get () { return 1; } // Error set (value) { } // Error } -_foo = new WeakMap(), _bar = new WeakMap(), _baz = new WeakMap(), _qux = new WeakMap(), _fooMethod = new WeakMap(), _barMethod = new WeakMap(), _bazMethod = new WeakMap(), _quxMethod = new WeakMap(), _asyncMethod = new WeakMap(), _genMethod = new WeakMap(), _asyncGenMethod = new WeakMap(), _fooProp = new WeakMap(), _fooProp_1 = new WeakMap(), _barProp = new WeakMap(), _barProp_1 = new WeakMap(), _bazProp = new WeakMap(), _bazProp_1 = new WeakMap(), _quxProp = new WeakMap(), _quxProp_1 = new WeakMap(), _whatProp = new WeakMap(), _whatProp_1 = new WeakMap(), _asyncProp = new WeakMap(), _asyncProp_1 = new WeakMap(); +_foo = new WeakMap(), _bar = new WeakMap(), _baz = new WeakMap(), _qux = new WeakMap(), _fooMethod = new WeakSet(), _barMethod = new WeakSet(), _bazMethod = new WeakSet(), _quxMethod = new WeakSet(), _asyncMethod = new WeakSet(), _genMethod = new WeakSet(), _asyncGenMethod = new WeakSet(), _fooMethod_1 = function _fooMethod_1() { return 3; }, _barMethod_1 = function _barMethod_1() { return 3; }, _bazMethod_1 = function _bazMethod_1() { return 3; }, _quxMethod_1 = function _quxMethod_1() { return 3; }, _asyncMethod_1 = function _asyncMethod_1() { + return __awaiter(this, void 0, void 0, function* () { return 1; }); +}, _genMethod_1 = function* _genMethod_1() { return 1; }, _asyncGenMethod_1 = function _asyncGenMethod_1() { return __asyncGenerator(this, arguments, function* _asyncGenMethod_1_1() { return yield __await(1); }); }; class B { } diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.js b/tests/baselines/reference/privateNamesUseBeforeDef.js index 3edacd1f870d5..9c9aa7fab81de 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.js +++ b/tests/baselines/reference/privateNamesUseBeforeDef.js @@ -27,7 +27,13 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _bar, _foo_1, _bar_1, _foo_2, _bar_2, _foo_3, _bar_3; +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { + if (!accessCheck.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; +}; +var _foo, _bar, _foo_1, _bar_1, _bar_2, _foo_2, _bar_3, _foo_3, _bar_4; class A { constructor() { _foo.set(this, __classPrivateFieldGet(this, _bar)); // Error @@ -37,24 +43,24 @@ class A { _foo = new WeakMap(), _bar = new WeakMap(); class A2 { constructor() { - _foo_1.set(this, __classPrivateFieldGet(this, _bar_1).call(this)); // No Error + _bar_1.add(this); + _foo_1.set(this, __classPrivateMethodGet(this, _bar_1, _bar_2).call(this)); // No Error } - () { return 3; } ; } -_foo_1 = new WeakMap(), _bar_1 = new WeakMap(); +_foo_1 = new WeakMap(), _bar_1 = new WeakSet(), _bar_2 = function _bar_2() { return 3; }; class A3 { constructor() { - _foo_2.set(this, __classPrivateFieldGet(this, _bar_2)); // No Error + _foo_2.set(this, this.); // No Error } get () { return 3; } ; } -_foo_2 = new WeakMap(), _bar_2 = new WeakMap(); +_foo_2 = new WeakMap(); class B { constructor() { - _foo_3.set(this, __classPrivateFieldGet(this, _bar_3)); // Error - _bar_3.set(this, __classPrivateFieldGet(this, _foo_3)); + _foo_3.set(this, __classPrivateFieldGet(this, _bar_4)); // Error + _bar_4.set(this, __classPrivateFieldGet(this, _foo_3)); } } -_foo_3 = new WeakMap(), _bar_3 = new WeakMap(); +_foo_3 = new WeakMap(), _bar_4 = new WeakMap(); From f8cfb8175b86527d70c17ac78aaf578f6b5131ef Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 26 Jan 2021 11:35:43 +0000 Subject: [PATCH 08/73] Use a single WeakSet for brand-check Signed-off-by: Kubilay Kahveci --- src/compiler/factory/emitHelpers.ts | 10 +-- src/compiler/transformers/classFields.ts | 105 ++++++++++++++++------- 2 files changed, 79 insertions(+), 36 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 2cace67076460..3fa1d500aa826 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -34,7 +34,7 @@ namespace ts { // Class Fields Helpers createClassPrivateFieldGetHelper(receiver: Expression, privateField: Identifier): Expression; createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression): Expression; - createClassPrivateMethodGetHelper(receiver: Expression, accessCheck: Identifier, fn: Identifier): Expression; + createClassPrivateMethodGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; createClassPrivateReadonlyHelper(): Expression; } @@ -382,9 +382,9 @@ namespace ts { return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldSet"), /*typeArguments*/ undefined, [receiver, privateField, value]); } - function createClassPrivateMethodGetHelper(receiver: Expression, accessCheck: Identifier, fn: Identifier) { + function createClassPrivateMethodGetHelper(receiver: Expression, instances: Identifier, fn: Identifier) { context.requestEmitHelper(classPrivateMethodGetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateMethodGet"), /*typeArguments*/ undefined, [receiver, accessCheck, fn]); + return factory.createCallExpression(getUnscopedHelperName("__classPrivateMethodGet"), /*typeArguments*/ undefined, [receiver, instances, fn]); } function createClassPrivateReadonlyHelper() { @@ -864,8 +864,8 @@ namespace ts { importName: "__classPrivateMethodGet", scoped: false, text: ` - var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { + var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 8bb9889479b8f..18e18ab60c45a 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -24,14 +24,24 @@ namespace ts { interface PrivateIdentifierInstanceMethod { placement: PrivateIdentifierPlacement.InstanceMethod; - weakSetName: Identifier; functionName: Identifier; } - /** - * A mapping of private names to information needed for transformation. - */ - type PrivateIdentifierEnvironment = UnderscoreEscapedMap; + interface PrivateIdentifierEnvironment { + /** + * Used for prefixing generated variable names. + */ + className: string; + hasPrivateMethods: boolean; + /** + * Used for brand check on private methods. + */ + weakSetName: Identifier; + /** + * A mapping of private names to information needed for transformation. + */ + identifiers: UnderscoreEscapedMap + } /** * Transforms ECMAScript Class Syntax. @@ -280,7 +290,7 @@ namespace ts { case PrivateIdentifierPlacement.InstanceMethod: return context.getEmitHelperFactory().createClassPrivateMethodGetHelper( synthesizedReceiver, - info.weakSetName, + getPrivateIdentifierEnvironment().weakSetName, info.functionName ); default: return Debug.fail("Unexpected private identifier placement"); @@ -505,6 +515,11 @@ namespace ts { pendingExpressions = undefined; if (shouldTransformPrivateElements) { startPrivateIdentifierEnvironment(); + + const name = getNameOfDeclaration(node); + if (name && isIdentifier(name)) { + getPrivateIdentifierEnvironment().className = name.escapedText as string; + } } const result = isClassDeclaration(node) ? @@ -638,6 +653,8 @@ namespace ts { addPrivateIdentifierToEnvironment(member); } } + + createBrandCheckWeakSetForPrivateMethods(); } const members: ClassElement[] = []; @@ -649,6 +666,27 @@ namespace ts { return setTextRange(factory.createNodeArray(members), /*location*/ node.members); } + function createBrandCheckWeakSetForPrivateMethods() { + const env = getPrivateIdentifierEnvironment(); + if (!env.hasPrivateMethods) { + return; + } + + const weakSetName = createHoistedVariableForClass("instances"); + env.weakSetName = weakSetName; + + getPendingExpressions().push( + factory.createAssignment( + env.weakSetName, + factory.createNewExpression( + factory.createIdentifier("WeakSet"), + /*typeArguments*/ undefined, + [] + ) + ) + ); + } + function isClassElementThatRequiresConstructorStatement(member: ClassElement) { if (hasStaticModifier(member) || hasSyntacticModifier(getOriginalNode(member), ModifierFlags.Abstract)) { return false; @@ -886,7 +924,7 @@ namespace ts { } /** - * Generates access-control initializer for private methods. + * Generates brand-check initializer for private methods. * * @param methods An array of method declarations to transform. * @param receiver The receiver on which each method should be assigned. @@ -903,7 +941,7 @@ namespace ts { } /** - * Transforms a method declaration to access-control initializer. + * Transforms a method declaration to brand-check initializer. * * @param method The method declaration. * @param receiver The receiver on which the method should be assigned. @@ -919,7 +957,7 @@ namespace ts { case PrivateIdentifierPlacement.InstanceMethod: { return createPrivateInstanceMethodInitializer( receiver, - privateIdentifierInfo.weakSetName + getPrivateIdentifierEnvironment().weakSetName ); } default: return Debug.fail("Unexpected private identifier placement"); @@ -1011,7 +1049,16 @@ namespace ts { } function getPrivateIdentifierEnvironment() { - return currentPrivateIdentifierEnvironment || (currentPrivateIdentifierEnvironment = new Map()); + if (!currentPrivateIdentifierEnvironment) { + currentPrivateIdentifierEnvironment = { + className: "", + hasPrivateMethods: false, + weakSetName: factory.createUniqueName("_instances", GeneratedIdentifierFlags.Optimistic), + identifiers: new Map() + }; + } + + return currentPrivateIdentifierEnvironment; } function getPendingExpressions() { @@ -1020,18 +1067,18 @@ namespace ts { function addPrivateIdentifierToEnvironment(node: PrivateClassElementDeclaration) { const text = getTextOfPropertyName(node.name) as string; - const accessControlObject = createHoistedVariableForPrivateName(text); + const uniqueVariableName = createHoistedVariableForPrivateName(text); let info: PrivateIdentifierInfo; const assignmentExpressions: Expression[] = []; if (isPropertyDeclaration(node)) { info = { placement: PrivateIdentifierPlacement.InstanceField, - weakMapName: accessControlObject + weakMapName: uniqueVariableName }; assignmentExpressions.push(factory.createAssignment( - accessControlObject, + uniqueVariableName, factory.createNewExpression( factory.createIdentifier("WeakMap"), /*typeArguments*/ undefined, @@ -1040,40 +1087,36 @@ namespace ts { )); } else if (isMethodDeclaration(node)) { - const functionName = createHoistedVariableForPrivateName(text); - info = { placement: PrivateIdentifierPlacement.InstanceMethod, - weakSetName: accessControlObject, - functionName + functionName: uniqueVariableName }; - assignmentExpressions.push(factory.createAssignment( - accessControlObject, - factory.createNewExpression( - factory.createIdentifier("WeakSet"), - /*typeArguments*/ undefined, - [] - ) - )); + getPrivateIdentifierEnvironment().hasPrivateMethods = true; } else { return; } - getPrivateIdentifierEnvironment().set(node.name.escapedText, info); + getPrivateIdentifierEnvironment().identifiers.set(node.name.escapedText, info); getPendingExpressions().push(...assignmentExpressions); } + function createHoistedVariableForClass(name: string): Identifier { + const { className } = getPrivateIdentifierEnvironment(); + const prefix = className ? `_${className}` : ""; + const identifier = factory.createUniqueName(`${prefix}_${name}`, GeneratedIdentifierFlags.Optimistic); + hoistVariableDeclaration(identifier); + return identifier; + } + function createHoistedVariableForPrivateName(privateName: string): Identifier { - const name = factory.createUniqueName("_" + privateName.substring(1), GeneratedIdentifierFlags.Optimistic); - hoistVariableDeclaration(name); - return name; + return createHoistedVariableForClass(privateName.substring(1)); } function accessPrivateIdentifier(name: PrivateIdentifier) { if (currentPrivateIdentifierEnvironment) { - const info = currentPrivateIdentifierEnvironment.get(name.escapedText); + const info = currentPrivateIdentifierEnvironment.identifiers.get(name.escapedText); if (info) { return info; } @@ -1083,7 +1126,7 @@ namespace ts { if (!env) { continue; } - const info = env.get(name.escapedText); + const info = env.identifiers.get(name.escapedText); if (info) { return info; } From 4aa4c3b29a47eb6f54be57baa0b813f2d549db70 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 26 Jan 2021 11:57:26 +0000 Subject: [PATCH 09/73] Accept baseline Signed-off-by: Kubilay Kahveci --- tests/baselines/reference/importHelpersES6.js | 8 +-- .../privateFieldAssignabilityFromUnknown.js | 6 +- .../reference/privateNameAccessors.js | 2 +- .../reference/privateNameAccessorsAccess.js | 2 +- .../privateNameAccessorsCallExpression.js | 2 +- .../privateNameAccessorssDerivedClasses.js | 2 +- .../baselines/reference/privateNameAndAny.js | 8 +-- .../reference/privateNameAndIndexSignature.js | 6 +- .../privateNameAndObjectRestSpread.js | 10 ++-- ...NameAndStaticInitializer(target=es2015).js | 8 +-- .../reference/privateNameBadAssignment.js | 8 +-- .../reference/privateNameBadSuper.js | 6 +- .../reference/privateNameCircularReference.js | 8 +-- ...ameComputedPropertyName1(target=es2015).js | 30 +++++----- ...ameComputedPropertyName2(target=es2015).js | 6 +- ...ameComputedPropertyName3(target=es2015).js | 18 +++--- .../privateNameConstructorReserved.js | 6 +- .../privateNameConstructorSignature.js | 8 +-- .../reference/privateNameDeclaration.js | 8 +-- .../privateNameDeclarationMerging.js | 10 ++-- .../privateNameES5Ban(target=es3).js | 10 ++-- .../privateNameES5Ban(target=es5).js | 10 ++-- tests/baselines/reference/privateNameField.js | 8 +-- .../reference/privateNameFieldAccess.js | 8 +-- .../reference/privateNameFieldAssignment.js | 58 +++++++++---------- .../privateNameFieldCallExpression.js | 24 ++++---- .../privateNameFieldClassExpression.js | 8 +-- .../privateNameFieldDerivedClasses.js | 8 +-- ...FieldDestructuredBinding(target=es2015).js | 22 +++---- .../reference/privateNameFieldInitializer.js | 8 +-- .../privateNameFieldUnaryMutation.js | 46 +++++++-------- .../privateNameInLhsReceiverExpression.js | 10 ++-- tests/baselines/reference/privateNameJsx.js | 6 +- .../baselines/reference/privateNameMethod.js | 16 ++--- .../reference/privateNameMethodAccess.js | 16 ++--- .../privateNameMethodAssignment.errors.txt | 20 +++---- .../reference/privateNameMethodAssignment.js | 12 ++-- .../privateNameMethodCallExpression.js | 32 +++++----- .../privateNameMethodsDerivedClasses.js | 12 ++-- ...rivateNameNestedClassAccessorsShadowing.js | 4 +- .../privateNameNestedClassFieldShadowing.js | 16 ++--- .../privateNameNestedClassMethodShadowing.js | 20 +++---- .../privateNameNestedClassNameConflict.js | 12 ++-- ...teNameNotAccessibleOutsideDefiningClass.js | 6 +- .../reference/privateNameWeakMapCollision.js | 6 +- .../reference/privateNamesAndDecorators.js | 8 +-- .../reference/privateNamesAndFields.js | 14 ++--- .../privateNamesAndGenericClasses-2.js | 22 +++---- .../reference/privateNamesAndIndexedAccess.js | 6 +- .../reference/privateNamesAndStaticFields.js | 14 ++--- .../reference/privateNamesAndkeyof.js | 8 +-- .../privateNamesConstructorChain-1.js | 18 +++--- .../privateNamesConstructorChain-2.js | 18 +++--- .../reference/privateNamesInGenericClasses.js | 28 ++++----- .../privateNamesInNestedClasses-1.js | 20 +++---- .../privateNamesInNestedClasses-2.js | 14 ++--- .../privateNamesIncompatibleModifiers.js | 28 ++++----- .../privateNamesInterfaceExtendingClass.js | 8 +-- .../reference/privateNamesNoDelete.js | 8 +-- .../reference/privateNamesUnique-1.js | 10 ++-- .../reference/privateNamesUnique-2.js | 14 ++--- .../reference/privateNamesUnique-3.js | 14 ++--- .../reference/privateNamesUnique-4.js | 6 +- .../reference/privateNamesUnique-5.js | 10 ++-- .../reference/privateNamesUseBeforeDef.js | 28 ++++----- .../reference/strictPropertyInitialization.js | 54 ++++++++--------- 66 files changed, 455 insertions(+), 455 deletions(-) diff --git a/tests/baselines/reference/importHelpersES6.js b/tests/baselines/reference/importHelpersES6.js index 293ee8e28875b..a93ecc8c0281b 100644 --- a/tests/baselines/reference/importHelpersES6.js +++ b/tests/baselines/reference/importHelpersES6.js @@ -20,17 +20,17 @@ export declare function __classPrivateFieldGet(): any; export declare function __classPrivateFieldSet(): any; //// [a.js] -var _x; +var _A_x; import { __awaiter, __classPrivateFieldGet, __classPrivateFieldSet, __decorate } from "tslib"; let A = class A { constructor() { - _x.set(this, 1); + _A_x.set(this, 1); } f() { - return __awaiter(this, void 0, void 0, function* () { __classPrivateFieldSet(this, _x, yield __classPrivateFieldGet(this, _x)); }); + return __awaiter(this, void 0, void 0, function* () { __classPrivateFieldSet(this, _A_x, yield __classPrivateFieldGet(this, _A_x)); }); } }; -_x = new WeakMap(); +_A_x = new WeakMap(); A = __decorate([ dec ], A); diff --git a/tests/baselines/reference/privateFieldAssignabilityFromUnknown.js b/tests/baselines/reference/privateFieldAssignabilityFromUnknown.js index b63ff22f93255..206b1d827b20a 100644 --- a/tests/baselines/reference/privateFieldAssignabilityFromUnknown.js +++ b/tests/baselines/reference/privateFieldAssignabilityFromUnknown.js @@ -8,15 +8,15 @@ const task: Class = {} as unknown; //// [privateFieldAssignabilityFromUnknown.js] "use strict"; -var _field; +var _Class_field; exports.__esModule = true; exports.Class = void 0; var Class = /** @class */ (function () { function Class() { - _field.set(this, void 0); + _Class_field.set(this, void 0); } return Class; }()); exports.Class = Class; -_field = new WeakMap(); +_Class_field = new WeakMap(); var task = {}; diff --git a/tests/baselines/reference/privateNameAccessors.js b/tests/baselines/reference/privateNameAccessors.js index 6e25fb62c47de..7113a0d3a8102 100644 --- a/tests/baselines/reference/privateNameAccessors.js +++ b/tests/baselines/reference/privateNameAccessors.js @@ -16,7 +16,7 @@ class A1 { //// [privateNameAccessors.js] "use strict"; -var _prop, _prop_1, _roProp; +var _A1_prop, _A1_prop_1, _A1_roProp; class A1 { constructor(name) { this. = ""; diff --git a/tests/baselines/reference/privateNameAccessorsAccess.js b/tests/baselines/reference/privateNameAccessorsAccess.js index 2550a386096fa..471938900c62b 100644 --- a/tests/baselines/reference/privateNameAccessorsAccess.js +++ b/tests/baselines/reference/privateNameAccessorsAccess.js @@ -26,7 +26,7 @@ class B2 { //// [privateNameAccessorsAccess.js] -var _prop, _prop_1; +var _A2_prop, _A2_prop_1; class A2 { constructor() { console.log(this.); diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.js b/tests/baselines/reference/privateNameAccessorsCallExpression.js index 297c6b72eea07..f901647fbb02e 100644 --- a/tests/baselines/reference/privateNameAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.js @@ -28,7 +28,7 @@ tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExp ==== tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js (7 errors) ==== - var _fieldFunc, _fieldFunc2; + var _A_fieldFunc, _A_fieldFunc2; class A { constructor() { this.x = 1; diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js index bce3c2b53f3a9..4da1a9941cd93 100644 --- a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js @@ -13,7 +13,7 @@ class Derived extends Base { //// [privateNameAccessorssDerivedClasses.js] -var _prop; +var _Base_prop; class Base { get () { return 123; } static method(x) { diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index 83399f4aa4c8c..5a681c6dc0156 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -16,15 +16,15 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo; +var _A_foo; class A { constructor() { - _foo.set(this, true); + _A_foo.set(this, true); } method(thing) { - __classPrivateFieldGet(thing, _foo); // OK + __classPrivateFieldGet(thing, _A_foo); // OK thing.; // Error } } -_foo = new WeakMap(); +_A_foo = new WeakMap(); ; diff --git a/tests/baselines/reference/privateNameAndIndexSignature.js b/tests/baselines/reference/privateNameAndIndexSignature.js index 693c3900e954f..4724aaea0f5c5 100644 --- a/tests/baselines/reference/privateNameAndIndexSignature.js +++ b/tests/baselines/reference/privateNameAndIndexSignature.js @@ -13,13 +13,13 @@ class A { //// [privateNameAndIndexSignature.js] "use strict"; -var _foo; +var _A_foo; class A { constructor(message) { - _foo.set(this, 3); + _A_foo.set(this, 3); this["#bar"] = this["#bar"]; // Error (private identifiers should not prevent circularity checking for computeds) this. = 3; // Error (index signatures do not implicitly declare private names) this["#foo"] = 3; // Okay (type has index signature and "#foo" does not collide with private identifier #foo) } } -_foo = new WeakMap(); +_A_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.js b/tests/baselines/reference/privateNameAndObjectRestSpread.js index 98a109257ae1e..cc8c64619e1c5 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.js +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.js @@ -29,16 +29,16 @@ var __rest = (this && this.__rest) || function (s, e) { } return t; }; -var _prop; +var _C_prop; class C { constructor() { - _prop.set(this, 1); + _C_prop.set(this, 1); } method(other) { const obj = Object.assign({}, other); - __classPrivateFieldGet(obj, _prop); + __classPrivateFieldGet(obj, _C_prop); const rest = __rest(other, []); - __classPrivateFieldGet(rest, _prop); + __classPrivateFieldGet(rest, _C_prop); } } -_prop = new WeakMap(); +_C_prop = new WeakMap(); diff --git a/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js b/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js index caeb43d15a3e9..b430336781640 100644 --- a/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js +++ b/tests/baselines/reference/privateNameAndStaticInitializer(target=es2015).js @@ -8,12 +8,12 @@ class A { //// [privateNameAndStaticInitializer.js] -var _foo, _prop; +var _A_foo, _A_prop; class A { constructor() { - _foo.set(this, 1); - _prop.set(this, 2); + _A_foo.set(this, 1); + _A_prop.set(this, 2); } } -_foo = new WeakMap(), _prop = new WeakMap(); +_A_foo = new WeakMap(), _A_prop = new WeakMap(); A.inst = new A(); diff --git a/tests/baselines/reference/privateNameBadAssignment.js b/tests/baselines/reference/privateNameBadAssignment.js index a3f937396b0f6..7d13cbd05de64 100644 --- a/tests/baselines/reference/privateNameBadAssignment.js +++ b/tests/baselines/reference/privateNameBadAssignment.js @@ -23,7 +23,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _bar; +var _C_bar; exports. = 1; // Error (outside class body) function A() { } A.prototype. = 2; // Error (outside class body) @@ -32,9 +32,9 @@ class B { B. = 3; // Error (outside class body) class C { constructor() { - _bar.set(this, 6); - __classPrivateFieldSet(exports, _bar, 6); // Error + _C_bar.set(this, 6); + __classPrivateFieldSet(exports, _C_bar, 6); // Error this. = 3; // Error (undeclared) } } -_bar = new WeakMap(); +_C_bar = new WeakMap(); diff --git a/tests/baselines/reference/privateNameBadSuper.js b/tests/baselines/reference/privateNameBadSuper.js index 07d8c2324f5cf..ac4a4a80695f1 100644 --- a/tests/baselines/reference/privateNameBadSuper.js +++ b/tests/baselines/reference/privateNameBadSuper.js @@ -9,7 +9,7 @@ class A extends B { } //// [privateNameBadSuper.js] -var _x; +var _A_x; class B { } ; @@ -17,7 +17,7 @@ class A extends B { constructor() { void 0; // Error: 'super' call must come first super(); - _x.set(this, void 0); + _A_x.set(this, void 0); } } -_x = new WeakMap(); +_A_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameCircularReference.js b/tests/baselines/reference/privateNameCircularReference.js index 7d3ef6d1d022d..c74ba4d84e9b2 100644 --- a/tests/baselines/reference/privateNameCircularReference.js +++ b/tests/baselines/reference/privateNameCircularReference.js @@ -14,12 +14,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _bar; +var _A_foo, _A_bar; class A { constructor() { - _foo.set(this, __classPrivateFieldGet(this, _bar)); - _bar.set(this, __classPrivateFieldGet(this, _foo)); + _A_foo.set(this, __classPrivateFieldGet(this, _A_bar)); + _A_bar.set(this, __classPrivateFieldGet(this, _A_foo)); this["#baz"] = this["#baz"]; // Error (should *not* be private name error) } } -_foo = new WeakMap(), _bar = new WeakMap(); +_A_foo = new WeakMap(), _A_bar = new WeakMap(); diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js index 966a81e23a1b0..3392289b5bc4c 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js @@ -51,28 +51,28 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _a, _b, _c, _d, _e; +var _A_a, _A_b, _A_c, _A_d, _A_e; class A { constructor() { - _a.set(this, 'a'); - _b.set(this, void 0); - _c.set(this, 'c'); - _d.set(this, void 0); - _e.set(this, ''); - __classPrivateFieldSet(this, _b, 'b'); - __classPrivateFieldSet(this, _d, 'd'); + _A_a.set(this, 'a'); + _A_b.set(this, void 0); + _A_c.set(this, 'c'); + _A_d.set(this, void 0); + _A_e.set(this, ''); + __classPrivateFieldSet(this, _A_b, 'b'); + __classPrivateFieldSet(this, _A_d, 'd'); } test() { const data = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; - const { [__classPrivateFieldGet(this, _a)]: a, [__classPrivateFieldGet(this, _b)]: b, [__classPrivateFieldGet(this, _c)]: c, [__classPrivateFieldGet(this, _d)]: d, [__classPrivateFieldSet(this, _e, 'e')]: e, } = data; + const { [__classPrivateFieldGet(this, _A_a)]: a, [__classPrivateFieldGet(this, _A_b)]: b, [__classPrivateFieldGet(this, _A_c)]: c, [__classPrivateFieldGet(this, _A_d)]: d, [__classPrivateFieldSet(this, _A_e, 'e')]: e, } = data; console.log(a, b, c, d, e); - const a1 = data[__classPrivateFieldGet(this, _a)]; - const b1 = data[__classPrivateFieldGet(this, _b)]; - const c1 = data[__classPrivateFieldGet(this, _c)]; - const d1 = data[__classPrivateFieldGet(this, _d)]; - const e1 = data[__classPrivateFieldGet(this, _e)]; + const a1 = data[__classPrivateFieldGet(this, _A_a)]; + const b1 = data[__classPrivateFieldGet(this, _A_b)]; + const c1 = data[__classPrivateFieldGet(this, _A_c)]; + const d1 = data[__classPrivateFieldGet(this, _A_d)]; + const e1 = data[__classPrivateFieldGet(this, _A_e)]; console.log(a1, b1, c1, d1); } } -_a = new WeakMap(), _b = new WeakMap(), _c = new WeakMap(), _d = new WeakMap(), _e = new WeakMap(); +_A_a = new WeakMap(), _A_b = new WeakMap(), _A_c = new WeakMap(), _A_d = new WeakMap(), _A_e = new WeakMap(); new A().test(); diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js index fcb4dc6d17f3d..23a34074d441d 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js @@ -16,12 +16,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _x; +var _A_x; let getX; class A { constructor() { - _x.set(this, 100); + _A_x.set(this, 100); } - [(_x = new WeakMap(), (getX = (a) => __classPrivateFieldGet(a, _x), "_"))]() { } + [(_A_x = new WeakMap(), (getX = (a) => __classPrivateFieldGet(a, _A_x), "_"))]() { } } console.log(getX(new A)); diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js index bb6bc692a330f..f404487ac3501 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js @@ -38,25 +38,25 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _name; +var _Foo_name; class Foo { constructor(name) { - _name.set(this, void 0); - __classPrivateFieldSet(this, _name, name); + _Foo_name.set(this, void 0); + __classPrivateFieldSet(this, _Foo_name, name); } getValue(x) { - var _y; + var _Bar_y; const obj = this; class Bar { constructor() { - _y.set(this, 100); + _Bar_y.set(this, 100); } - [(_y = new WeakMap(), __classPrivateFieldGet(obj, _name))]() { - return x + __classPrivateFieldGet(this, _y); + [(_Bar_y = new WeakMap(), __classPrivateFieldGet(obj, _Foo_name))]() { + return x + __classPrivateFieldGet(this, _Bar_y); } } - return new Bar()[__classPrivateFieldGet(obj, _name)](); + return new Bar()[__classPrivateFieldGet(obj, _Foo_name)](); } } -_name = new WeakMap(); +_Foo_name = new WeakMap(); console.log(new Foo("NAME").getValue(100)); diff --git a/tests/baselines/reference/privateNameConstructorReserved.js b/tests/baselines/reference/privateNameConstructorReserved.js index 03520a377abe2..b3e48fdb5bf69 100644 --- a/tests/baselines/reference/privateNameConstructorReserved.js +++ b/tests/baselines/reference/privateNameConstructorReserved.js @@ -5,10 +5,10 @@ class A { //// [privateNameConstructorReserved.js] -var _constructor, _constructor_1; +var _A_constructor, _A_instances; class A { constructor() { - _constructor.add(this); + _A_instances.add(this); } } -_constructor = new WeakSet(), _constructor_1 = function _constructor_1() { }; +_A_instances = new WeakSet(), _A_constructor = function _A_constructor() { }; diff --git a/tests/baselines/reference/privateNameConstructorSignature.js b/tests/baselines/reference/privateNameConstructorSignature.js index d468fc32d31a5..adc58b3d9b8e0 100644 --- a/tests/baselines/reference/privateNameConstructorSignature.js +++ b/tests/baselines/reference/privateNameConstructorSignature.js @@ -25,16 +25,16 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _x; +var _C_x; class C { constructor() { - _x.set(this, void 0); + _C_x.set(this, void 0); } static test() { - __classPrivateFieldSet(new C(), _x, 10); + __classPrivateFieldSet(new C(), _C_x, 10); const y = new C(); const z = new y(); z.x = 123; } } -_x = new WeakMap(); +_C_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameDeclaration.js b/tests/baselines/reference/privateNameDeclaration.js index f8d5f0a017ec3..288f9c8a95f0a 100644 --- a/tests/baselines/reference/privateNameDeclaration.js +++ b/tests/baselines/reference/privateNameDeclaration.js @@ -11,17 +11,17 @@ class A { //// [privateNameDeclaration.js] -var _foo, _bar; +var _A_foo, _A_bar; class A { constructor() { - _foo.set(this, void 0); - _bar.set(this, 6); + _A_foo.set(this, void 0); + _A_bar.set(this, 6); this.qux = 6; } quux() { } } -_foo = new WeakMap(), _bar = new WeakMap(); +_A_foo = new WeakMap(), _A_bar = new WeakMap(); //// [privateNameDeclaration.d.ts] diff --git a/tests/baselines/reference/privateNameDeclarationMerging.js b/tests/baselines/reference/privateNameDeclarationMerging.js index 1d278bfed2954..0927854a50f29 100644 --- a/tests/baselines/reference/privateNameDeclarationMerging.js +++ b/tests/baselines/reference/privateNameDeclarationMerging.js @@ -22,19 +22,19 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _x; +var _C_x; class D { } ; class C { constructor() { - _x.set(this, void 0); + _C_x.set(this, void 0); } foo() { const c = new C(); - __classPrivateFieldGet(c, _x); // OK + __classPrivateFieldGet(c, _C_x); // OK const d = new C(); - __classPrivateFieldGet(d, _x); // Error + __classPrivateFieldGet(d, _C_x); // Error } } -_x = new WeakMap(); +_C_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index 7db5b048b8314..da50a83aed130 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -16,8 +16,8 @@ class A { //// [privateNameES5Ban.js] var A = /** @class */ (function () { function A() { - _method.add(this); - _field.set(this, 123); + _A_instances.add(this); + _A_field.set(this, 123); } Object.defineProperty(A.prototype, "", { get: function () { return ""; }, @@ -31,8 +31,8 @@ var A = /** @class */ (function () { enumerable: false, configurable: true }); - var _field, _method, _method_1, _sField, _sMethod, _sMethod_1, _acc, _acc_1, _sAcc, _sAcc_1; - _field = new WeakMap(), _method = new WeakSet(), _sField = new WeakMap(), _sMethod = new WeakSet(), _method_1 = function _method_1() { }, _sMethod_1 = function _sMethod_1() { }; - _sField.set(A, "hello world"); + var _A_field, _A_method, _A_sField, _A_sMethod, _A_acc, _A_acc_1, _A_sAcc, _A_sAcc_1, _A_instances; + _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }; + _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 7db5b048b8314..da50a83aed130 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -16,8 +16,8 @@ class A { //// [privateNameES5Ban.js] var A = /** @class */ (function () { function A() { - _method.add(this); - _field.set(this, 123); + _A_instances.add(this); + _A_field.set(this, 123); } Object.defineProperty(A.prototype, "", { get: function () { return ""; }, @@ -31,8 +31,8 @@ var A = /** @class */ (function () { enumerable: false, configurable: true }); - var _field, _method, _method_1, _sField, _sMethod, _sMethod_1, _acc, _acc_1, _sAcc, _sAcc_1; - _field = new WeakMap(), _method = new WeakSet(), _sField = new WeakMap(), _sMethod = new WeakSet(), _method_1 = function _method_1() { }, _sMethod_1 = function _sMethod_1() { }; - _sField.set(A, "hello world"); + var _A_field, _A_method, _A_sField, _A_sMethod, _A_acc, _A_acc_1, _A_sAcc, _A_sAcc_1, _A_instances; + _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }; + _A_sField.set(A, "hello world"); return A; }()); diff --git a/tests/baselines/reference/privateNameField.js b/tests/baselines/reference/privateNameField.js index 8803d856771ae..96a11b48cdb7b 100644 --- a/tests/baselines/reference/privateNameField.js +++ b/tests/baselines/reference/privateNameField.js @@ -16,11 +16,11 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _name; +var _A_name; class A { constructor(name) { - _name.set(this, void 0); - __classPrivateFieldSet(this, _name, name); + _A_name.set(this, void 0); + __classPrivateFieldSet(this, _A_name, name); } } -_name = new WeakMap(); +_A_name = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldAccess.js b/tests/baselines/reference/privateNameFieldAccess.js index 35f418690881c..1c8d1920c6de1 100644 --- a/tests/baselines/reference/privateNameFieldAccess.js +++ b/tests/baselines/reference/privateNameFieldAccess.js @@ -14,11 +14,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _myField; +var _A_myField; class A { constructor() { - _myField.set(this, "hello world"); - console.log(__classPrivateFieldGet(this, _myField)); + _A_myField.set(this, "hello world"); + console.log(__classPrivateFieldGet(this, _A_myField)); } } -_myField = new WeakMap(); +_A_myField = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldAssignment.js b/tests/baselines/reference/privateNameFieldAssignment.js index 3442958b508ec..717d782cd3e48 100644 --- a/tests/baselines/reference/privateNameFieldAssignment.js +++ b/tests/baselines/reference/privateNameFieldAssignment.js @@ -49,40 +49,40 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _field; +var _A_field; class A { constructor() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; - _field.set(this, 0); - __classPrivateFieldSet(this, _field, 1); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) + 2); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) - 3); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) / 4); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) * 5); - __classPrivateFieldSet(this, _field, Math.pow(__classPrivateFieldGet(this, _field), 6)); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) % 7); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) << 8); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) >> 9); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) >>> 10); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) & 11); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) | 12); - __classPrivateFieldSet(this, _field, __classPrivateFieldGet(this, _field) ^ 13); - __classPrivateFieldSet(A.getInstance(), _field, 1); - __classPrivateFieldSet(_a = A.getInstance(), _field, __classPrivateFieldGet(_a, _field) + 2); - __classPrivateFieldSet(_b = A.getInstance(), _field, __classPrivateFieldGet(_b, _field) - 3); - __classPrivateFieldSet(_c = A.getInstance(), _field, __classPrivateFieldGet(_c, _field) / 4); - __classPrivateFieldSet(_d = A.getInstance(), _field, __classPrivateFieldGet(_d, _field) * 5); - __classPrivateFieldSet(_e = A.getInstance(), _field, Math.pow(__classPrivateFieldGet(_e, _field), 6)); - __classPrivateFieldSet(_f = A.getInstance(), _field, __classPrivateFieldGet(_f, _field) % 7); - __classPrivateFieldSet(_g = A.getInstance(), _field, __classPrivateFieldGet(_g, _field) << 8); - __classPrivateFieldSet(_h = A.getInstance(), _field, __classPrivateFieldGet(_h, _field) >> 9); - __classPrivateFieldSet(_j = A.getInstance(), _field, __classPrivateFieldGet(_j, _field) >>> 10); - __classPrivateFieldSet(_k = A.getInstance(), _field, __classPrivateFieldGet(_k, _field) & 11); - __classPrivateFieldSet(_l = A.getInstance(), _field, __classPrivateFieldGet(_l, _field) | 12); - __classPrivateFieldSet(_m = A.getInstance(), _field, __classPrivateFieldGet(_m, _field) ^ 13); + _A_field.set(this, 0); + __classPrivateFieldSet(this, _A_field, 1); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) + 2); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) - 3); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) / 4); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) * 5); + __classPrivateFieldSet(this, _A_field, Math.pow(__classPrivateFieldGet(this, _A_field), 6)); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) % 7); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) << 8); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) >> 9); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) >>> 10); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) & 11); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) | 12); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) ^ 13); + __classPrivateFieldSet(A.getInstance(), _A_field, 1); + __classPrivateFieldSet(_a = A.getInstance(), _A_field, __classPrivateFieldGet(_a, _A_field) + 2); + __classPrivateFieldSet(_b = A.getInstance(), _A_field, __classPrivateFieldGet(_b, _A_field) - 3); + __classPrivateFieldSet(_c = A.getInstance(), _A_field, __classPrivateFieldGet(_c, _A_field) / 4); + __classPrivateFieldSet(_d = A.getInstance(), _A_field, __classPrivateFieldGet(_d, _A_field) * 5); + __classPrivateFieldSet(_e = A.getInstance(), _A_field, Math.pow(__classPrivateFieldGet(_e, _A_field), 6)); + __classPrivateFieldSet(_f = A.getInstance(), _A_field, __classPrivateFieldGet(_f, _A_field) % 7); + __classPrivateFieldSet(_g = A.getInstance(), _A_field, __classPrivateFieldGet(_g, _A_field) << 8); + __classPrivateFieldSet(_h = A.getInstance(), _A_field, __classPrivateFieldGet(_h, _A_field) >> 9); + __classPrivateFieldSet(_j = A.getInstance(), _A_field, __classPrivateFieldGet(_j, _A_field) >>> 10); + __classPrivateFieldSet(_k = A.getInstance(), _A_field, __classPrivateFieldGet(_k, _A_field) & 11); + __classPrivateFieldSet(_l = A.getInstance(), _A_field, __classPrivateFieldGet(_l, _A_field) | 12); + __classPrivateFieldSet(_m = A.getInstance(), _A_field, __classPrivateFieldGet(_m, _A_field) ^ 13); } static getInstance() { return new A(); } } -_field = new WeakMap(); +_A_field = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldCallExpression.js b/tests/baselines/reference/privateNameFieldCallExpression.js index e4b9a413672fc..47026bcc59e59 100644 --- a/tests/baselines/reference/privateNameFieldCallExpression.js +++ b/tests/baselines/reference/privateNameFieldCallExpression.js @@ -27,27 +27,27 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _fieldFunc, _fieldFunc2; +var _A_fieldFunc, _A_fieldFunc2; class A { constructor() { - _fieldFunc.set(this, function () { this.x = 10; }); - _fieldFunc2.set(this, function (a, ...b) { }); + _A_fieldFunc.set(this, function () { this.x = 10; }); + _A_fieldFunc2.set(this, function (a, ...b) { }); this.x = 1; } test() { var _a; var _b; - __classPrivateFieldGet(this, _fieldFunc).call(this); - (_a = __classPrivateFieldGet(this, _fieldFunc)) === null || _a === void 0 ? void 0 : _a.call(this); - const func = __classPrivateFieldGet(this, _fieldFunc); + __classPrivateFieldGet(this, _A_fieldFunc).call(this); + (_a = __classPrivateFieldGet(this, _A_fieldFunc)) === null || _a === void 0 ? void 0 : _a.call(this); + const func = __classPrivateFieldGet(this, _A_fieldFunc); func(); - new (__classPrivateFieldGet(this, _fieldFunc))(); + new (__classPrivateFieldGet(this, _A_fieldFunc))(); const arr = [1, 2]; - __classPrivateFieldGet(this, _fieldFunc2).call(this, 0, ...arr, 3); - const b = new (__classPrivateFieldGet(this, _fieldFunc2))(0, ...arr, 3); - const str = __classPrivateFieldGet(this, _fieldFunc2).bind(this) `head${1}middle${2}tail`; - __classPrivateFieldGet((_b = this.getInstance()), _fieldFunc2).bind(_b) `test${1}and${2}`; + __classPrivateFieldGet(this, _A_fieldFunc2).call(this, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(this, _A_fieldFunc2))(0, ...arr, 3); + const str = __classPrivateFieldGet(this, _A_fieldFunc2).bind(this) `head${1}middle${2}tail`; + __classPrivateFieldGet((_b = this.getInstance()), _A_fieldFunc2).bind(_b) `test${1}and${2}`; } getInstance() { return new A(); } } -_fieldFunc = new WeakMap(), _fieldFunc2 = new WeakMap(); +_A_fieldFunc = new WeakMap(), _A_fieldFunc2 = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldClassExpression.js b/tests/baselines/reference/privateNameFieldClassExpression.js index 2d1641da71244..b62835d6fe036 100644 --- a/tests/baselines/reference/privateNameFieldClassExpression.js +++ b/tests/baselines/reference/privateNameFieldClassExpression.js @@ -15,21 +15,21 @@ class B { //// [privateNameFieldClassExpression.js] -var _foo, _foo2; +var _B_foo, _B_foo2; class B { constructor() { var _a, _b; - _foo.set(this, (_a = class { + _B_foo.set(this, (_a = class { constructor() { console.log("hello"); } }, _a.test = 123, _a)); - _foo2.set(this, (_b = class Foo { + _B_foo2.set(this, (_b = class Foo { }, _b.otherClass = 123, _b)); } } -_foo = new WeakMap(), _foo2 = new WeakMap(); +_B_foo = new WeakMap(), _B_foo2 = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldDerivedClasses.js b/tests/baselines/reference/privateNameFieldDerivedClasses.js index f38db5914e9ba..8241accdcb85d 100644 --- a/tests/baselines/reference/privateNameFieldDerivedClasses.js +++ b/tests/baselines/reference/privateNameFieldDerivedClasses.js @@ -20,16 +20,16 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _prop; +var _Base_prop; class Base { constructor() { - _prop.set(this, 123); + _Base_prop.set(this, 123); } static method(x) { - console.log(__classPrivateFieldGet(x, _prop)); + console.log(__classPrivateFieldGet(x, _Base_prop)); } } -_prop = new WeakMap(); +_Base_prop = new WeakMap(); class Derived extends Base { static method(x) { console.log(x.); diff --git a/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js b/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js index b45ccaedfe481..618ab2c02897b 100644 --- a/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js +++ b/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js @@ -32,20 +32,20 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _field; +var _A_field; class A { constructor() { var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; - _field.set(this, 1); + _A_field.set(this, 1); this.otherObject = new A(); let y; - (_b = this, { x: ({ set value(_m) { __classPrivateFieldSet(_b, _field, _m); } }).value, y } = this.testObject()); - (_c = this, [({ set value(_m) { __classPrivateFieldSet(_c, _field, _m); } }).value, y] = this.testArray()); - (_d = this, _e = this, { a: ({ set value(_m) { __classPrivateFieldSet(_d, _field, _m); } }).value, b: [({ set value(_m) { __classPrivateFieldSet(_e, _field, _m); } }).value] } = { a: 1, b: [2] }); - _f = this, _g = this, [({ set value(_m) { __classPrivateFieldSet(_f, _field, _m); } }).value, [({ set value(_m) { __classPrivateFieldSet(_g, _field, _m); } }).value]] = [1, [2]]; - (_h = this, _j = this, { a: ({ set value(_m) { __classPrivateFieldSet(_h, _field, _m); } }).value = 1, b: [({ set value(_m) { __classPrivateFieldSet(_j, _field, _m); } }).value = 1] } = { b: [] }); - _k = this, [({ set value(_m) { __classPrivateFieldSet(_k, _field, _m); } }).value = 2] = []; - _l = this.otherObject, [({ set value(_m) { __classPrivateFieldSet(_l, _field, _m); } }).value = 2] = []; + (_b = this, { x: ({ set value(_m) { __classPrivateFieldSet(_b, _A_field, _m); } }).value, y } = this.testObject()); + (_c = this, [({ set value(_m) { __classPrivateFieldSet(_c, _A_field, _m); } }).value, y] = this.testArray()); + (_d = this, _e = this, { a: ({ set value(_m) { __classPrivateFieldSet(_d, _A_field, _m); } }).value, b: [({ set value(_m) { __classPrivateFieldSet(_e, _A_field, _m); } }).value] } = { a: 1, b: [2] }); + _f = this, _g = this, [({ set value(_m) { __classPrivateFieldSet(_f, _A_field, _m); } }).value, [({ set value(_m) { __classPrivateFieldSet(_g, _A_field, _m); } }).value]] = [1, [2]]; + (_h = this, _j = this, { a: ({ set value(_m) { __classPrivateFieldSet(_h, _A_field, _m); } }).value = 1, b: [({ set value(_m) { __classPrivateFieldSet(_j, _A_field, _m); } }).value = 1] } = { b: [] }); + _k = this, [({ set value(_m) { __classPrivateFieldSet(_k, _A_field, _m); } }).value = 2] = []; + _l = this.otherObject, [({ set value(_m) { __classPrivateFieldSet(_l, _A_field, _m); } }).value = 2] = []; } testObject() { return { x: 10, y: 6 }; @@ -54,7 +54,7 @@ class A { return [10, 11]; } static test(_a) { - [({ set value(_b) { __classPrivateFieldSet(_a, _field, _b); } }).value] = [2]; + [({ set value(_b) { __classPrivateFieldSet(_a, _A_field, _b); } }).value] = [2]; } } -_field = new WeakMap(); +_A_field = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldInitializer.js b/tests/baselines/reference/privateNameFieldInitializer.js index 36aaae4851217..0fd9fd1b4235d 100644 --- a/tests/baselines/reference/privateNameFieldInitializer.js +++ b/tests/baselines/reference/privateNameFieldInitializer.js @@ -6,11 +6,11 @@ class A { //// [privateNameFieldInitializer.js] -var _field, _uninitialized; +var _A_field, _A_uninitialized; class A { constructor() { - _field.set(this, 10); - _uninitialized.set(this, void 0); + _A_field.set(this, 10); + _A_uninitialized.set(this, void 0); } } -_field = new WeakMap(), _uninitialized = new WeakMap(); +_A_field = new WeakMap(), _A_uninitialized = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldUnaryMutation.js b/tests/baselines/reference/privateNameFieldUnaryMutation.js index 91d4faecb4584..43e87ce7e6ac0 100644 --- a/tests/baselines/reference/privateNameFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameFieldUnaryMutation.js @@ -43,35 +43,35 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _test; +var _C_test; class C { constructor() { var _a, _b; - _test.set(this, 24); - __classPrivateFieldSet(this, _test, +__classPrivateFieldGet(this, _test) + 1); - __classPrivateFieldSet(this, _test, +__classPrivateFieldGet(this, _test) - 1); - __classPrivateFieldSet(this, _test, +__classPrivateFieldGet(this, _test) + 1); - __classPrivateFieldSet(this, _test, +__classPrivateFieldGet(this, _test) - 1); - const a = (__classPrivateFieldSet(this, _test, (_a = +__classPrivateFieldGet(this, _test)) + 1), _a); - const b = (__classPrivateFieldSet(this, _test, (_b = +__classPrivateFieldGet(this, _test)) - 1), _b); - const c = __classPrivateFieldSet(this, _test, +__classPrivateFieldGet(this, _test) + 1); - const d = __classPrivateFieldSet(this, _test, +__classPrivateFieldGet(this, _test) - 1); - for (__classPrivateFieldSet(this, _test, 0); __classPrivateFieldGet(this, _test) < 10; __classPrivateFieldSet(this, _test, +__classPrivateFieldGet(this, _test) + 1)) { } - for (__classPrivateFieldSet(this, _test, 0); __classPrivateFieldGet(this, _test) < 10; __classPrivateFieldSet(this, _test, +__classPrivateFieldGet(this, _test) + 1)) { } + _C_test.set(this, 24); + __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1); + __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) - 1); + __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1); + __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) - 1); + const a = (__classPrivateFieldSet(this, _C_test, (_a = +__classPrivateFieldGet(this, _C_test)) + 1), _a); + const b = (__classPrivateFieldSet(this, _C_test, (_b = +__classPrivateFieldGet(this, _C_test)) - 1), _b); + const c = __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1); + const d = __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) - 1); + for (__classPrivateFieldSet(this, _C_test, 0); __classPrivateFieldGet(this, _C_test) < 10; __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1)) { } + for (__classPrivateFieldSet(this, _C_test, 0); __classPrivateFieldGet(this, _C_test) < 10; __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1)) { } } test() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; - __classPrivateFieldSet(_a = this.getInstance(), _test, +__classPrivateFieldGet(_a, _test) + 1); - __classPrivateFieldSet(_b = this.getInstance(), _test, +__classPrivateFieldGet(_b, _test) - 1); - __classPrivateFieldSet(_c = this.getInstance(), _test, +__classPrivateFieldGet(_c, _test) + 1); - __classPrivateFieldSet(_d = this.getInstance(), _test, +__classPrivateFieldGet(_d, _test) - 1); - const a = (__classPrivateFieldSet(_e = this.getInstance(), _test, (_f = +__classPrivateFieldGet(_e, _test)) + 1), _f); - const b = (__classPrivateFieldSet(_g = this.getInstance(), _test, (_h = +__classPrivateFieldGet(_g, _test)) - 1), _h); - const c = __classPrivateFieldSet(_j = this.getInstance(), _test, +__classPrivateFieldGet(_j, _test) + 1); - const d = __classPrivateFieldSet(_k = this.getInstance(), _test, +__classPrivateFieldGet(_k, _test) - 1); - for (__classPrivateFieldSet(this.getInstance(), _test, 0); __classPrivateFieldGet(this.getInstance(), _test) < 10; __classPrivateFieldSet(_l = this.getInstance(), _test, +__classPrivateFieldGet(_l, _test) + 1)) { } - for (__classPrivateFieldSet(this.getInstance(), _test, 0); __classPrivateFieldGet(this.getInstance(), _test) < 10; __classPrivateFieldSet(_m = this.getInstance(), _test, +__classPrivateFieldGet(_m, _test) + 1)) { } + __classPrivateFieldSet(_a = this.getInstance(), _C_test, +__classPrivateFieldGet(_a, _C_test) + 1); + __classPrivateFieldSet(_b = this.getInstance(), _C_test, +__classPrivateFieldGet(_b, _C_test) - 1); + __classPrivateFieldSet(_c = this.getInstance(), _C_test, +__classPrivateFieldGet(_c, _C_test) + 1); + __classPrivateFieldSet(_d = this.getInstance(), _C_test, +__classPrivateFieldGet(_d, _C_test) - 1); + const a = (__classPrivateFieldSet(_e = this.getInstance(), _C_test, (_f = +__classPrivateFieldGet(_e, _C_test)) + 1), _f); + const b = (__classPrivateFieldSet(_g = this.getInstance(), _C_test, (_h = +__classPrivateFieldGet(_g, _C_test)) - 1), _h); + const c = __classPrivateFieldSet(_j = this.getInstance(), _C_test, +__classPrivateFieldGet(_j, _C_test) + 1); + const d = __classPrivateFieldSet(_k = this.getInstance(), _C_test, +__classPrivateFieldGet(_k, _C_test) - 1); + for (__classPrivateFieldSet(this.getInstance(), _C_test, 0); __classPrivateFieldGet(this.getInstance(), _C_test) < 10; __classPrivateFieldSet(_l = this.getInstance(), _C_test, +__classPrivateFieldGet(_l, _C_test) + 1)) { } + for (__classPrivateFieldSet(this.getInstance(), _C_test, 0); __classPrivateFieldGet(this.getInstance(), _C_test) < 10; __classPrivateFieldSet(_m = this.getInstance(), _C_test, +__classPrivateFieldGet(_m, _C_test) + 1)) { } } getInstance() { return new C(); } } -_test = new WeakMap(); +_C_test = new WeakMap(); diff --git a/tests/baselines/reference/privateNameInLhsReceiverExpression.js b/tests/baselines/reference/privateNameInLhsReceiverExpression.js index 1f1fa882554c3..9a12ec666de0c 100644 --- a/tests/baselines/reference/privateNameInLhsReceiverExpression.js +++ b/tests/baselines/reference/privateNameInLhsReceiverExpression.js @@ -23,10 +23,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _y; +var _Test_y; class Test { constructor() { - _y.set(this, 123); + _Test_y.set(this, 123); } static something(obj) { var _x, _a, _x_1, _b, _c; @@ -37,7 +37,7 @@ class Test { } }, _x = new WeakMap(), - _a)).s], _y, 1); + _a)).s], _Test_y, 1); __classPrivateFieldSet(_c = obj[(new (_b = class { constructor() { _x_1.set(this, 1); @@ -45,7 +45,7 @@ class Test { } }, _x_1 = new WeakMap(), - _b)).s], _y, __classPrivateFieldGet(_c, _y) + 1); + _b)).s], _Test_y, __classPrivateFieldGet(_c, _Test_y) + 1); } } -_y = new WeakMap(); +_Test_y = new WeakMap(); diff --git a/tests/baselines/reference/privateNameJsx.js b/tests/baselines/reference/privateNameJsx.js index 9b4098f1e196b..6cdf5be703879 100644 --- a/tests/baselines/reference/privateNameJsx.js +++ b/tests/baselines/reference/privateNameJsx.js @@ -9,14 +9,14 @@ class Test { //// [privateNameJsx.jsx] -var _prop; +var _Test_prop; var Test = /** @class */ (function () { function Test() { - _prop.set(this, function () { return
; }); + _Test_prop.set(this, function () { return
; }); } Test.prototype.render = function () { return ; }; return Test; }()); -_prop = new WeakMap(); +_Test_prop = new WeakMap(); diff --git a/tests/baselines/reference/privateNameMethod.js b/tests/baselines/reference/privateNameMethod.js index cd56a5854583e..1fda4cb711940 100644 --- a/tests/baselines/reference/privateNameMethod.js +++ b/tests/baselines/reference/privateNameMethod.js @@ -14,22 +14,22 @@ class A1 { //// [privateNameMethod.js] "use strict"; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; }; -var _method, _method_1; +var _A1_method, _A1_instances; class A1 { constructor(name) { - _method.add(this); - __classPrivateMethodGet(this, _method, _method_1).call(this, ""); - __classPrivateMethodGet(this, _method, _method_1).call(this, 1); // Error - __classPrivateMethodGet(this, _method, _method_1).call(// Error + _A1_instances.add(this); + __classPrivateMethodGet(this, _A1_instances, _A1_method).call(this, ""); + __classPrivateMethodGet(this, _A1_instances, _A1_method).call(this, 1); // Error + __classPrivateMethodGet(this, _A1_instances, _A1_method).call(// Error this); // Error } } -_method = new WeakSet(), _method_1 = function _method_1(param) { +_A1_instances = new WeakSet(), _A1_method = function _A1_method(param) { return ""; }; diff --git a/tests/baselines/reference/privateNameMethodAccess.js b/tests/baselines/reference/privateNameMethodAccess.js index c458a0b48f24c..ce3d039c67fd0 100644 --- a/tests/baselines/reference/privateNameMethodAccess.js +++ b/tests/baselines/reference/privateNameMethodAccess.js @@ -24,25 +24,25 @@ class B2 { //// [privateNameMethodAccess.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; }; -var _method, _method_1, _a; +var _A2_method, _A2_instances, _a; class A2 { constructor() { - _method.add(this); - console.log(__classPrivateMethodGet(this, _method, _method_1)); + _A2_instances.add(this); + console.log(__classPrivateMethodGet(this, _A2_instances, _A2_method)); let a = this; - __classPrivateMethodGet(a, _method, _method_1).call(a); + __classPrivateMethodGet(a, _A2_instances, _A2_method).call(a); function foo() { - __classPrivateMethodGet(a, _method, _method_1).call(a); + __classPrivateMethodGet(a, _A2_instances, _A2_method).call(a); } } } -_method = new WeakSet(), _method_1 = function _method_1() { return ""; }; +_A2_instances = new WeakSet(), _A2_method = function _A2_method() { return ""; }; (_a = new A2())..call(_a); // Error function foo() { var _a; diff --git a/tests/baselines/reference/privateNameMethodAssignment.errors.txt b/tests/baselines/reference/privateNameMethodAssignment.errors.txt index d25297e3672ee..46d714ba467ec 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.errors.txt +++ b/tests/baselines/reference/privateNameMethodAssignment.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(4,14): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(5,11): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(6,11): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(7,20): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(9,11): error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(4,14): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(5,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(6,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(7,20): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(9,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. ==== tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts (5 errors) ==== @@ -11,20 +11,20 @@ tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment constructor(a: A3, b: any) { this.#method = () => {} // Error, not writable ~~~~~~~ -!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. a.#method = () => { }; // Error, not writable ~~~~~~~ -!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. b.#method = () => { } //Error, not writable ~~~~~~~ -!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. ({ x: this.#method } = { x: () => {}}); //Error, not writable ~~~~~~~ -!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. let x = this.#method; b.#method++ //Error, not writable ~~~~~~~ -!!! error TS2798: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. } } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameMethodAssignment.js b/tests/baselines/reference/privateNameMethodAssignment.js index 0b410dba47ff1..85f31b9956db4 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.js +++ b/tests/baselines/reference/privateNameMethodAssignment.js @@ -16,24 +16,24 @@ class A3 { var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { throw new TypeError("private element is not writable"); }; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; }; -var _method, _method_1; +var _A3_method, _A3_instances; class A3 { constructor(a, b) { var _a, _b; - _method.add(this); + _A3_instances.add(this); __classPrivateReadonly(); // Error, not writable __classPrivateReadonly(); // Error, not writable __classPrivateReadonly(); //Error, not writable (_a = this, { x: ({ set value(_b) { __classPrivateReadonly(); } }).value } = { x: () => { } }); //Error, not writable - let x = __classPrivateMethodGet(this, _method, _method_1); + let x = __classPrivateMethodGet(this, _A3_instances, _A3_method); __classPrivateReadonly(); //Error, not writable } ; } -_method = new WeakSet(), _method_1 = function _method_1() { }; +_A3_instances = new WeakSet(), _A3_method = function _A3_method() { }; diff --git a/tests/baselines/reference/privateNameMethodCallExpression.js b/tests/baselines/reference/privateNameMethodCallExpression.js index f3621470dfd2e..59612f5a435a6 100644 --- a/tests/baselines/reference/privateNameMethodCallExpression.js +++ b/tests/baselines/reference/privateNameMethodCallExpression.js @@ -25,36 +25,36 @@ class AA { //// [privateNameMethodCallExpression.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; }; -var _method, _method_1, _method2, _method2_1; +var _AA_method, _AA_method2, _AA_instances; class AA { constructor() { - _method.add(this); - _method2.add(this); + _AA_instances.add(this); + _AA_instances.add(this); this.x = 1; } ; ; test() { var _a, _b, _c; - __classPrivateMethodGet(this, _method, _method_1).call(this); - const func = __classPrivateMethodGet(this, _method, _method_1); + __classPrivateMethodGet(this, _AA_instances, _AA_method).call(this); + const func = __classPrivateMethodGet(this, _AA_instances, _AA_method); func(); - new (__classPrivateMethodGet(this, _method, _method_1))(); + new (__classPrivateMethodGet(this, _AA_instances, _AA_method))(); const arr = [1, 2]; - __classPrivateMethodGet(this, _method2, _method2_1).call(this, 0, ...arr, 3); - const b = new (__classPrivateMethodGet(this, _method2, _method2_1))(0, ...arr, 3); //Error - const str = __classPrivateMethodGet(this, _method2, _method2_1).bind(this) `head${1}middle${2}tail`; - __classPrivateMethodGet((_a = this.getInstance()), _method2, _method2_1).bind(_a) `test${1}and${2}`; - __classPrivateMethodGet((_b = this.getInstance()), _method2, _method2_1).call(_b, 0, ...arr, 3); - const b2 = new (__classPrivateMethodGet(this.getInstance(), _method2, _method2_1))(0, ...arr, 3); //Error - const str2 = __classPrivateMethodGet((_c = this.getInstance()), _method2, _method2_1).bind(_c) `head${1}middle${2}tail`; + __classPrivateMethodGet(this, _AA_instances, _AA_method2).call(this, 0, ...arr, 3); + const b = new (__classPrivateMethodGet(this, _AA_instances, _AA_method2))(0, ...arr, 3); //Error + const str = __classPrivateMethodGet(this, _AA_instances, _AA_method2).bind(this) `head${1}middle${2}tail`; + __classPrivateMethodGet((_a = this.getInstance()), _AA_instances, _AA_method2).bind(_a) `test${1}and${2}`; + __classPrivateMethodGet((_b = this.getInstance()), _AA_instances, _AA_method2).call(_b, 0, ...arr, 3); + const b2 = new (__classPrivateMethodGet(this.getInstance(), _AA_instances, _AA_method2))(0, ...arr, 3); //Error + const str2 = __classPrivateMethodGet((_c = this.getInstance()), _AA_instances, _AA_method2).bind(_c) `head${1}middle${2}tail`; } getInstance() { return new AA(); } } -_method = new WeakSet(), _method2 = new WeakSet(), _method_1 = function _method_1() { this.x = 10; }, _method2_1 = function _method2_1(a, ...b) { }; +_AA_instances = new WeakSet(), _AA_method = function _AA_method() { this.x = 10; }, _AA_method2 = function _AA_method2(a, ...b) { }; diff --git a/tests/baselines/reference/privateNameMethodsDerivedClasses.js b/tests/baselines/reference/privateNameMethodsDerivedClasses.js index f9ef2fd785799..cff6820a5cae7 100644 --- a/tests/baselines/reference/privateNameMethodsDerivedClasses.js +++ b/tests/baselines/reference/privateNameMethodsDerivedClasses.js @@ -13,22 +13,22 @@ class Derived extends Base { //// [privateNameMethodsDerivedClasses.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; }; -var _prop, _prop_1; +var _Base_prop, _Base_instances; class Base { constructor() { - _prop.add(this); + _Base_instances.add(this); } static method(x) { - console.log(__classPrivateMethodGet(x, _prop, _prop_1).call(x)); + console.log(__classPrivateMethodGet(x, _Base_instances, _Base_prop).call(x)); } } -_prop = new WeakSet(), _prop_1 = function _prop_1() { return 123; }; +_Base_instances = new WeakSet(), _Base_prop = function _Base_prop() { return 123; }; class Derived extends Base { static method(x) { console.log(x..call(x)); diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js index 8fcf71948a055..4d4829a85603d 100644 --- a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js @@ -16,10 +16,10 @@ class Base { //// [privateNameNestedClassAccessorsShadowing.js] -var _x; +var _Base_x; class Base { constructor() { - var _x_1; + var _Derived_x; class Derived { get () { return 1; } ; diff --git a/tests/baselines/reference/privateNameNestedClassFieldShadowing.js b/tests/baselines/reference/privateNameNestedClassFieldShadowing.js index ae661e3230b6a..f55944d9e53aa 100644 --- a/tests/baselines/reference/privateNameNestedClassFieldShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassFieldShadowing.js @@ -22,23 +22,23 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _x; +var _Base_x; class Base { constructor() { - var _x_1; - _x.set(this, void 0); + var _Derived_x; + _Base_x.set(this, void 0); class Derived { constructor() { - _x_1.set(this, void 0); + _Derived_x.set(this, void 0); } testBase(x) { - console.log(__classPrivateFieldGet(x, _x_1)); + console.log(__classPrivateFieldGet(x, _Derived_x)); } testDerived(x) { - console.log(__classPrivateFieldGet(x, _x_1)); + console.log(__classPrivateFieldGet(x, _Derived_x)); } } - _x_1 = new WeakMap(); + _Derived_x = new WeakMap(); } } -_x = new WeakMap(); +_Base_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js index 0c27933904bcb..b8141f77f69f9 100644 --- a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js @@ -16,31 +16,31 @@ class Base { //// [privateNameNestedClassMethodShadowing.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; }; -var _x, _x_1; +var _Base_x, _Base_instances; class Base { constructor() { - var _x_2, _x_3; - _x.add(this); + var _Derived_x, _Derived_instances; + _Base_instances.add(this); class Derived { constructor() { - _x_2.add(this); + _Derived_instances.add(this); } ; testBase(x) { - console.log(__classPrivateMethodGet(x, _x_2, _x_3)); + console.log(__classPrivateMethodGet(x, _Derived_instances, _Derived_x)); } testDerived(x) { - console.log(__classPrivateMethodGet(x, _x_2, _x_3)); + console.log(__classPrivateMethodGet(x, _Derived_instances, _Derived_x)); } } - _x_2 = new WeakSet(), _x_3 = function _x_3() { }; + _Derived_instances = new WeakSet(), _Derived_x = function _Derived_x() { }; } ; } -_x = new WeakSet(), _x_1 = function _x_1() { }; +_Base_instances = new WeakSet(), _Base_x = function _Base_x() { }; diff --git a/tests/baselines/reference/privateNameNestedClassNameConflict.js b/tests/baselines/reference/privateNameNestedClassNameConflict.js index 23bbeeaae8838..5716c3ccb5327 100644 --- a/tests/baselines/reference/privateNameNestedClassNameConflict.js +++ b/tests/baselines/reference/privateNameNestedClassNameConflict.js @@ -10,17 +10,17 @@ class A { //// [privateNameNestedClassNameConflict.js] -var _foo; +var _A_foo; class A { constructor() { - var _foo_1; - _foo.set(this, void 0); + var _A_foo_1; + _A_foo.set(this, void 0); class A { constructor() { - _foo_1.set(this, void 0); + _A_foo_1.set(this, void 0); } } - _foo_1 = new WeakMap(); + _A_foo_1 = new WeakMap(); } } -_foo = new WeakMap(); +_A_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNameNotAccessibleOutsideDefiningClass.js b/tests/baselines/reference/privateNameNotAccessibleOutsideDefiningClass.js index 3bb84305a4ac8..d2464aada4cdb 100644 --- a/tests/baselines/reference/privateNameNotAccessibleOutsideDefiningClass.js +++ b/tests/baselines/reference/privateNameNotAccessibleOutsideDefiningClass.js @@ -8,11 +8,11 @@ new A().#foo = 4; // Error //// [privateNameNotAccessibleOutsideDefiningClass.js] "use strict"; -var _foo; +var _A_foo; class A { constructor() { - _foo.set(this, 3); + _A_foo.set(this, 3); } } -_foo = new WeakMap(); +_A_foo = new WeakMap(); new A(). = 4; // Error diff --git a/tests/baselines/reference/privateNameWeakMapCollision.js b/tests/baselines/reference/privateNameWeakMapCollision.js index 8b810f62240ae..b8f24089dd974 100644 --- a/tests/baselines/reference/privateNameWeakMapCollision.js +++ b/tests/baselines/reference/privateNameWeakMapCollision.js @@ -9,12 +9,12 @@ function test() { //// [privateNameWeakMapCollision.js] function test() { - var _x; + var _C_x; let WeakMap; class C { constructor() { - _x.set(this, void 0); + _C_x.set(this, void 0); } } - _x = new WeakMap(); + _C_x = new WeakMap(); } diff --git a/tests/baselines/reference/privateNamesAndDecorators.js b/tests/baselines/reference/privateNamesAndDecorators.js index 980a929454ef9..9fd8181f6f006 100644 --- a/tests/baselines/reference/privateNamesAndDecorators.js +++ b/tests/baselines/reference/privateNamesAndDecorators.js @@ -10,12 +10,12 @@ class A { //// [privateNamesAndDecorators.js] -var _foo, _bar, _bar_1; +var _A_foo, _A_bar, _A_instances; var A = /** @class */ (function () { function A() { - _bar.add(this); - _foo.set(this, 1); + _A_instances.add(this); + _A_foo.set(this, 1); } return A; }()); -_foo = new WeakMap(), _bar = new WeakSet(), _bar_1 = function _bar_1() { }; +_A_foo = new WeakMap(), _A_instances = new WeakSet(), _A_bar = function _A_bar() { }; diff --git a/tests/baselines/reference/privateNamesAndFields.js b/tests/baselines/reference/privateNamesAndFields.js index 5af74f92ab9a0..c2eb9e45e71ca 100644 --- a/tests/baselines/reference/privateNamesAndFields.js +++ b/tests/baselines/reference/privateNamesAndFields.js @@ -24,19 +24,19 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _foo, _foo_1; +var _A_foo, _B_foo; class A { constructor() { - _foo.set(this, void 0); - __classPrivateFieldSet(this, _foo, 3); + _A_foo.set(this, void 0); + __classPrivateFieldSet(this, _A_foo, 3); } } -_foo = new WeakMap(); +_A_foo = new WeakMap(); class B extends A { constructor() { super(); - _foo_1.set(this, void 0); - __classPrivateFieldSet(this, _foo_1, "some string"); + _B_foo.set(this, void 0); + __classPrivateFieldSet(this, _B_foo, "some string"); } } -_foo_1 = new WeakMap(); +_B_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.js b/tests/baselines/reference/privateNamesAndGenericClasses-2.js index c2ddf072fdcf1..f9901a710c269 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.js +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.js @@ -36,8 +36,8 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; @@ -48,23 +48,23 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _bar, _bar_1; +var _C_foo, _C_bar, _C_instances; class C { constructor(t) { - _bar.add(this); - _foo.set(this, void 0); - __classPrivateFieldSet(this, _foo, t); - t = __classPrivateMethodGet(this, _bar, _bar_1).call(this); + _C_instances.add(this); + _C_foo.set(this, void 0); + __classPrivateFieldSet(this, _C_foo, t); + t = __classPrivateMethodGet(this, _C_instances, _C_bar).call(this); } set baz(t) { - __classPrivateFieldSet(this, _foo, t); + __classPrivateFieldSet(this, _C_foo, t); } get baz() { - return __classPrivateFieldGet(this, _foo); + return __classPrivateFieldGet(this, _C_foo); } } -_foo = new WeakMap(), _bar = new WeakSet(), _bar_1 = function _bar_1() { - return __classPrivateFieldGet(this, _foo); +_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_bar = function _C_bar() { + return __classPrivateFieldGet(this, _C_foo); }; let a = new C(3); let b = new C("hello"); diff --git a/tests/baselines/reference/privateNamesAndIndexedAccess.js b/tests/baselines/reference/privateNamesAndIndexedAccess.js index 19487e81479cb..1b36a27bf0c11 100644 --- a/tests/baselines/reference/privateNamesAndIndexedAccess.js +++ b/tests/baselines/reference/privateNamesAndIndexedAccess.js @@ -14,11 +14,11 @@ class C { //// [privateNamesAndIndexedAccess.js] "use strict"; -var _bar; +var _C_bar; class C { constructor() { this.foo = 3; - _bar.set(this, 3); + _C_bar.set(this, 3); const ok = 3; // not supported yet, could support in future: const badForNow, #bar; @@ -27,4 +27,4 @@ class C { const badAlways = 3; // Error } } -_bar = new WeakMap(); +_C_bar = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesAndStaticFields.js b/tests/baselines/reference/privateNamesAndStaticFields.js index 5b3458d049a7f..b6adb45a818dd 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.js +++ b/tests/baselines/reference/privateNamesAndStaticFields.js @@ -37,22 +37,22 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _bar, _foo_1; +var _A_foo, _A_bar, _B_foo; class A { constructor() { - __classPrivateFieldSet(A, _foo, 3); - __classPrivateFieldGet(B, _foo); // Error - __classPrivateFieldGet(B, _bar); // Error + __classPrivateFieldSet(A, _A_foo, 3); + __classPrivateFieldGet(B, _A_foo); // Error + __classPrivateFieldGet(B, _A_bar); // Error } } -_foo = new WeakMap(), _bar = new WeakMap(); +_A_foo = new WeakMap(), _A_bar = new WeakMap(); class B extends A { constructor() { super(); - __classPrivateFieldSet(B, _foo_1, "some string"); + __classPrivateFieldSet(B, _B_foo, "some string"); } } -_foo_1 = new WeakMap(); +_B_foo = new WeakMap(); // We currently filter out static private identifier fields in `getUnmatchedProperties`. // We will need a more robust solution when we support static fields const willErrorSomeDay = class { diff --git a/tests/baselines/reference/privateNamesAndkeyof.js b/tests/baselines/reference/privateNamesAndkeyof.js index 46d4bcf36cb41..c726cbfccd4c4 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.js +++ b/tests/baselines/reference/privateNamesAndkeyof.js @@ -13,11 +13,11 @@ type T = keyof A // should not include '#foo*' //// [privateNamesAndkeyof.js] "use strict"; -var _fooField, _fooMethod, _fooMethod_1, _fooProp, _fooProp_1; +var _A_fooField, _A_fooMethod, _A_fooProp, _A_fooProp_1, _A_instances; class A { constructor() { - _fooMethod.add(this); - _fooField.set(this, 3); + _A_instances.add(this); + _A_fooField.set(this, 3); this.bar = 3; this.baz = 3; } @@ -27,4 +27,4 @@ class A { set (value) { } ; } -_fooField = new WeakMap(), _fooMethod = new WeakSet(), _fooMethod_1 = function _fooMethod_1() { }; +_A_fooField = new WeakMap(), _A_instances = new WeakSet(), _A_fooMethod = function _A_fooMethod() { }; diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index dfba142f9aa53..a3676eb8e4c9c 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -21,23 +21,23 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _bar, _foo_1, _bar_1; +var _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; class Parent { constructor() { - _foo.set(this, 3); + _Parent_foo.set(this, 3); } accessChildProps() { - __classPrivateFieldGet(new Child(), _foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(Child, _bar); // Error: not found + __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) + __classPrivateFieldGet(Child, _Parent_bar); // Error: not found } } -_foo = new WeakMap(), _bar = new WeakMap(); -_bar.set(Parent, 5); +_Parent_foo = new WeakMap(), _Parent_bar = new WeakMap(); +_Parent_bar.set(Parent, 5); class Child extends Parent { constructor() { super(...arguments); - _foo_1.set(this, "foo"); // OK (Child's #foo does not conflict, as `Parent`'s `#foo` is not accessible) - _bar_1.set(this, "bar"); // OK + _Child_foo.set(this, "foo"); // OK (Child's #foo does not conflict, as `Parent`'s `#foo` is not accessible) + _Child_bar.set(this, "bar"); // OK } } -_foo_1 = new WeakMap(), _bar_1 = new WeakMap(); +_Child_foo = new WeakMap(), _Child_bar = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index 0d0069a47a9ad..7b4f40b8de8ef 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -23,24 +23,24 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _bar, _foo_1, _bar_1; +var _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; class Parent { constructor() { - _foo.set(this, 3); + _Parent_foo.set(this, 3); } accessChildProps() { - __classPrivateFieldGet(new Child(), _foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(Child, _bar); // Error: not found + __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) + __classPrivateFieldGet(Child, _Parent_bar); // Error: not found } } -_foo = new WeakMap(), _bar = new WeakMap(); -_bar.set(Parent, 5); +_Parent_foo = new WeakMap(), _Parent_bar = new WeakMap(); +_Parent_bar.set(Parent, 5); class Child extends Parent { constructor() { super(...arguments); - _foo_1.set(this, "foo"); // OK (Child's #foo does not conflict, as `Parent`'s `#foo` is not accessible) - _bar_1.set(this, "bar"); // OK + _Child_foo.set(this, "foo"); // OK (Child's #foo does not conflict, as `Parent`'s `#foo` is not accessible) + _Child_bar.set(this, "bar"); // OK } } -_foo_1 = new WeakMap(), _bar_1 = new WeakMap(); +_Child_foo = new WeakMap(), _Child_bar = new WeakMap(); new Parent().accessChildProps(); diff --git a/tests/baselines/reference/privateNamesInGenericClasses.js b/tests/baselines/reference/privateNamesInGenericClasses.js index cdf92030f3742..ee64cee48f85e 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.js +++ b/tests/baselines/reference/privateNamesInGenericClasses.js @@ -42,31 +42,31 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; }; -var _foo, _method, _method_1, _prop, _prop_1; +var _C_foo, _C_method, _C_prop, _C_prop_1, _C_instances; class C { constructor() { - _method.add(this); - _foo.set(this, void 0); + _C_instances.add(this); + _C_foo.set(this, void 0); } - get () { return __classPrivateFieldGet(this, _foo); } - set (value) { __classPrivateFieldSet(this, _foo, value); } - bar(x) { return __classPrivateFieldGet(x, _foo); } // OK - bar2(x) { return __classPrivateMethodGet(x, _method, _method_1).call(x); } // OK + get () { return __classPrivateFieldGet(this, _C_foo); } + set (value) { __classPrivateFieldSet(this, _C_foo, value); } + bar(x) { return __classPrivateFieldGet(x, _C_foo); } // OK + bar2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method).call(x); } // OK bar3(x) { return x.; } // OK - baz(x) { return __classPrivateFieldGet(x, _foo); } // OK - baz2(x) { return __classPrivateMethodGet(x, _method, _method_1); } // OK + baz(x) { return __classPrivateFieldGet(x, _C_foo); } // OK + baz2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method); } // OK baz3(x) { return x.; } // OK - quux(x) { return __classPrivateFieldGet(x, _foo); } // OK - quux2(x) { return __classPrivateMethodGet(x, _method, _method_1); } // OK + quux(x) { return __classPrivateFieldGet(x, _C_foo); } // OK + quux2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method); } // OK quux3(x) { return x.; } // OK } -_foo = new WeakMap(), _method = new WeakSet(), _method_1 = function _method_1() { return __classPrivateFieldGet(this, _foo); }; +_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_method = function _C_method() { return __classPrivateFieldGet(this, _C_foo); }; a.; // Error a.; // Error a.; // Error diff --git a/tests/baselines/reference/privateNamesInNestedClasses-1.js b/tests/baselines/reference/privateNamesInNestedClasses-1.js index 12804200745da..22730b36fcf49 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-1.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-1.js @@ -34,29 +34,29 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _bar; +var _A_foo, _A_bar; class A { constructor() { - _foo.set(this, "A's #foo"); - _bar.set(this, "A's #bar"); + _A_foo.set(this, "A's #foo"); + _A_bar.set(this, "A's #bar"); } method() { - var _foo_1; + var _B_foo; class B { constructor() { - _foo_1.set(this, "B's #foo"); + _B_foo.set(this, "B's #foo"); } bar(a) { - __classPrivateFieldGet(a, _foo_1); // OK, no compile-time error, don't know what `a` is + __classPrivateFieldGet(a, _B_foo); // OK, no compile-time error, don't know what `a` is } baz(a) { - __classPrivateFieldGet(a, _foo_1); // compile-time error, shadowed + __classPrivateFieldGet(a, _B_foo); // compile-time error, shadowed } quux(b) { - __classPrivateFieldGet(b, _foo_1); // OK + __classPrivateFieldGet(b, _B_foo); // OK } } - _foo_1 = new WeakMap(); + _B_foo = new WeakMap(); const a = new A(); new B().bar(a); new B().baz(a); @@ -64,5 +64,5 @@ class A { new B().quux(b); } } -_foo = new WeakMap(), _bar = new WeakMap(); +_A_foo = new WeakMap(), _A_bar = new WeakMap(); new A().method(); diff --git a/tests/baselines/reference/privateNamesInNestedClasses-2.js b/tests/baselines/reference/privateNamesInNestedClasses-2.js index 896beb6308339..a01a20f452981 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-2.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-2.js @@ -24,22 +24,22 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _x; +var _A_x; class A { constructor() { - var _x_1; + var _B_x; class B { constructor() { - _x_1.set(this, 5); + _B_x.set(this, 5); class C { constructor() { - __classPrivateFieldGet(A, _x_1); // error + __classPrivateFieldGet(A, _B_x); // error } } } } - _x_1 = new WeakMap(); + _B_x = new WeakMap(); } } -_x = new WeakMap(); -_x.set(A, 5); +_A_x = new WeakMap(); +_A_x.set(A, 5); diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.js b/tests/baselines/reference/privateNamesIncompatibleModifiers.js index 6068d8ea69098..c537d2bdb85bd 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.js +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.js @@ -57,20 +57,20 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; -var _foo, _bar, _baz, _qux, _fooMethod, _fooMethod_1, _barMethod, _barMethod_1, _bazMethod, _bazMethod_1, _quxMethod, _quxMethod_1, _asyncMethod, _asyncMethod_1, _genMethod, _genMethod_1, _asyncGenMethod, _asyncGenMethod_1, _fooProp, _fooProp_1, _barProp, _barProp_1, _bazProp, _bazProp_1, _quxProp, _quxProp_1, _whatProp, _whatProp_1, _asyncProp, _asyncProp_1; +var _A_foo, _A_bar, _A_baz, _A_qux, _A_fooMethod, _A_barMethod, _A_bazMethod, _A_quxMethod, _A_asyncMethod, _A_genMethod, _A_asyncGenMethod, _A_fooProp, _A_fooProp_1, _A_barProp, _A_barProp_1, _A_bazProp, _A_bazProp_1, _A_quxProp, _A_quxProp_1, _A_whatProp, _A_whatProp_1, _A_asyncProp, _A_asyncProp_1, _A_instances; class A { constructor() { - _fooMethod.add(this); - _barMethod.add(this); - _bazMethod.add(this); - _quxMethod.add(this); - _asyncMethod.add(this); - _genMethod.add(this); - _asyncGenMethod.add(this); - _foo.set(this, 3); // Error - _bar.set(this, 3); // Error - _baz.set(this, 3); // Error - _qux.set(this, 3); // OK + _A_instances.add(this); + _A_instances.add(this); + _A_instances.add(this); + _A_instances.add(this); + _A_instances.add(this); + _A_instances.add(this); + _A_instances.add(this); + _A_foo.set(this, 3); // Error + _A_bar.set(this, 3); // Error + _A_baz.set(this, 3); // Error + _A_qux.set(this, 3); // OK } get () { return 3; } // Error set (value) { } // Error @@ -85,8 +85,8 @@ class A { get () { return 1; } // Error set (value) { } // Error } -_foo = new WeakMap(), _bar = new WeakMap(), _baz = new WeakMap(), _qux = new WeakMap(), _fooMethod = new WeakSet(), _barMethod = new WeakSet(), _bazMethod = new WeakSet(), _quxMethod = new WeakSet(), _asyncMethod = new WeakSet(), _genMethod = new WeakSet(), _asyncGenMethod = new WeakSet(), _fooMethod_1 = function _fooMethod_1() { return 3; }, _barMethod_1 = function _barMethod_1() { return 3; }, _bazMethod_1 = function _bazMethod_1() { return 3; }, _quxMethod_1 = function _quxMethod_1() { return 3; }, _asyncMethod_1 = function _asyncMethod_1() { +_A_foo = new WeakMap(), _A_bar = new WeakMap(), _A_baz = new WeakMap(), _A_qux = new WeakMap(), _A_instances = new WeakSet(), _A_fooMethod = function _A_fooMethod() { return 3; }, _A_barMethod = function _A_barMethod() { return 3; }, _A_bazMethod = function _A_bazMethod() { return 3; }, _A_quxMethod = function _A_quxMethod() { return 3; }, _A_asyncMethod = function _A_asyncMethod() { return __awaiter(this, void 0, void 0, function* () { return 1; }); -}, _genMethod_1 = function* _genMethod_1() { return 1; }, _asyncGenMethod_1 = function _asyncGenMethod_1() { return __asyncGenerator(this, arguments, function* _asyncGenMethod_1_1() { return yield __await(1); }); }; +}, _A_genMethod = function* _A_genMethod() { return 1; }, _A_asyncGenMethod = function _A_asyncGenMethod() { return __asyncGenerator(this, arguments, function* _A_asyncGenMethod_1() { return yield __await(1); }); }; class B { } diff --git a/tests/baselines/reference/privateNamesInterfaceExtendingClass.js b/tests/baselines/reference/privateNamesInterfaceExtendingClass.js index f6bbc9fa54dc8..3958fa5ab2b26 100644 --- a/tests/baselines/reference/privateNamesInterfaceExtendingClass.js +++ b/tests/baselines/reference/privateNamesInterfaceExtendingClass.js @@ -21,16 +21,16 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _prop; +var _C_prop; class C { constructor() { - _prop.set(this, void 0); + _C_prop.set(this, void 0); } func(x) { - __classPrivateFieldSet(x, _prop, 123); + __classPrivateFieldSet(x, _C_prop, 123); } } -_prop = new WeakMap(); +_C_prop = new WeakMap(); function func(x) { x. = 123; } diff --git a/tests/baselines/reference/privateNamesNoDelete.js b/tests/baselines/reference/privateNamesNoDelete.js index 22aecf24cca31..1614af7f8850b 100644 --- a/tests/baselines/reference/privateNamesNoDelete.js +++ b/tests/baselines/reference/privateNamesNoDelete.js @@ -15,11 +15,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _v; +var _A_v; class A { constructor() { - _v.set(this, 1); - delete __classPrivateFieldGet(this, _v); // Error: The operand of a delete operator cannot be a private name. + _A_v.set(this, 1); + delete __classPrivateFieldGet(this, _A_v); // Error: The operand of a delete operator cannot be a private name. } } -_v = new WeakMap(); +_A_v = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesUnique-1.js b/tests/baselines/reference/privateNamesUnique-1.js index 1fb8b7255c9bf..cab1354d7b004 100644 --- a/tests/baselines/reference/privateNamesUnique-1.js +++ b/tests/baselines/reference/privateNamesUnique-1.js @@ -12,17 +12,17 @@ const b: A = new B(); // Error: Property #foo is missing //// [privateNamesUnique-1.js] "use strict"; -var _foo, _foo_1; +var _A_foo, _B_foo; class A { constructor() { - _foo.set(this, void 0); + _A_foo.set(this, void 0); } } -_foo = new WeakMap(); +_A_foo = new WeakMap(); class B { constructor() { - _foo_1.set(this, void 0); + _B_foo.set(this, void 0); } } -_foo_1 = new WeakMap(); +_B_foo = new WeakMap(); const b = new B(); // Error: Property #foo is missing diff --git a/tests/baselines/reference/privateNamesUnique-2.js b/tests/baselines/reference/privateNamesUnique-2.js index 4f772551b544a..b973c3fa3e5cf 100644 --- a/tests/baselines/reference/privateNamesUnique-2.js +++ b/tests/baselines/reference/privateNamesUnique-2.js @@ -23,13 +23,13 @@ a.copy(b); // error //// [b.js] -var _x; +var _Foo_x; export class Foo { constructor() { - _x.set(this, void 0); + _Foo_x.set(this, void 0); } } -_x = new WeakMap(); +_Foo_x = new WeakMap(); //// [a.js] var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { if (!privateMap.has(receiver)) { @@ -37,16 +37,16 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _x; +var _Foo_x; export class Foo { constructor() { - _x.set(this, void 0); + _Foo_x.set(this, void 0); } copy(other) { - __classPrivateFieldGet(other, _x); // error + __classPrivateFieldGet(other, _Foo_x); // error } } -_x = new WeakMap(); +_Foo_x = new WeakMap(); //// [main.js] import { Foo as A } from "./a"; import { Foo as B } from "./b"; diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index 9575d6d89c57d..3368aff5ed039 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -21,21 +21,21 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _foo, _foo_1, _foo_2; +var _A_foo, _A_foo_1, _B_foo; class A { constructor() { - _foo_1.set(this, 1); + _A_foo_1.set(this, 1); // because static and instance private names // share the same lexical scope // https://tc39.es/proposal-class-fields/#prod-ClassBody } } -_foo = new WeakMap(), _foo_1 = new WeakMap(); -_foo_1.set(A, true); // error (duplicate) +_A_foo = new WeakMap(), _A_foo_1 = new WeakMap(); +_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) + __classPrivateFieldGet(x, _B_foo); // error (#foo is a static property on B, not an instance property) } } -_foo_2 = new WeakMap(); -_foo_2.set(B, true); +_B_foo = new WeakMap(); +_B_foo.set(B, true); diff --git a/tests/baselines/reference/privateNamesUnique-4.js b/tests/baselines/reference/privateNamesUnique-4.js index 38db50f3475bf..15ca00f318b01 100644 --- a/tests/baselines/reference/privateNamesUnique-4.js +++ b/tests/baselines/reference/privateNamesUnique-4.js @@ -8,13 +8,13 @@ const c: C = a; //// [privateNamesUnique-4.js] -var _something; +var _C_something; class A1 { } class C { constructor() { - _something.set(this, void 0); + _C_something.set(this, void 0); } } -_something = new WeakMap(); +_C_something = new WeakMap(); const c = a; diff --git a/tests/baselines/reference/privateNamesUnique-5.js b/tests/baselines/reference/privateNamesUnique-5.js index 75d378c1f1d03..fa8eb5639a966 100644 --- a/tests/baselines/reference/privateNamesUnique-5.js +++ b/tests/baselines/reference/privateNamesUnique-5.js @@ -16,17 +16,17 @@ const b: A2 = new B(); //// [privateNamesUnique-5.js] "use strict"; // same as privateNamesUnique-1, but with an interface -var _foo, _foo_1; +var _A_foo, _B_foo; class A { constructor() { - _foo.set(this, void 0); + _A_foo.set(this, void 0); } } -_foo = new WeakMap(); +_A_foo = new WeakMap(); class B { constructor() { - _foo_1.set(this, void 0); + _B_foo.set(this, void 0); } } -_foo_1 = new WeakMap(); +_B_foo = new WeakMap(); const b = new B(); diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.js b/tests/baselines/reference/privateNamesUseBeforeDef.js index 9c9aa7fab81de..b55b9b2077db3 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.js +++ b/tests/baselines/reference/privateNamesUseBeforeDef.js @@ -27,40 +27,40 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, accessCheck, fn) { - if (!accessCheck.has(receiver)) { +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { throw new TypeError("attempted to get private method on non-instance"); } return fn; }; -var _foo, _bar, _foo_1, _bar_1, _bar_2, _foo_2, _bar_3, _foo_3, _bar_4; +var _A_foo, _A_bar, _A2_foo, _A2_bar, _A2_instances, _A3_foo, _A3_bar, _B_foo, _B_bar; class A { constructor() { - _foo.set(this, __classPrivateFieldGet(this, _bar)); // Error - _bar.set(this, 3); + _A_foo.set(this, __classPrivateFieldGet(this, _A_bar)); // Error + _A_bar.set(this, 3); } } -_foo = new WeakMap(), _bar = new WeakMap(); +_A_foo = new WeakMap(), _A_bar = new WeakMap(); class A2 { constructor() { - _bar_1.add(this); - _foo_1.set(this, __classPrivateMethodGet(this, _bar_1, _bar_2).call(this)); // No Error + _A2_instances.add(this); + _A2_foo.set(this, __classPrivateMethodGet(this, _A2_instances, _A2_bar).call(this)); // No Error } ; } -_foo_1 = new WeakMap(), _bar_1 = new WeakSet(), _bar_2 = function _bar_2() { return 3; }; +_A2_foo = new WeakMap(), _A2_instances = new WeakSet(), _A2_bar = function _A2_bar() { return 3; }; class A3 { constructor() { - _foo_2.set(this, this.); // No Error + _A3_foo.set(this, this.); // No Error } get () { return 3; } ; } -_foo_2 = new WeakMap(); +_A3_foo = new WeakMap(); class B { constructor() { - _foo_3.set(this, __classPrivateFieldGet(this, _bar_4)); // Error - _bar_4.set(this, __classPrivateFieldGet(this, _foo_3)); + _B_foo.set(this, __classPrivateFieldGet(this, _B_bar)); // Error + _B_bar.set(this, __classPrivateFieldGet(this, _B_foo)); } } -_foo_3 = new WeakMap(), _bar_4 = new WeakMap(); +_B_foo = new WeakMap(), _B_bar = new WeakMap(); diff --git a/tests/baselines/reference/strictPropertyInitialization.js b/tests/baselines/reference/strictPropertyInitialization.js index 86d29d3ad90f2..23505b7087f47 100644 --- a/tests/baselines/reference/strictPropertyInitialization.js +++ b/tests/baselines/reference/strictPropertyInitialization.js @@ -150,16 +150,16 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _f, _g, _h, _i, _d, _e, _f_1, _b, _b_1, _b_2, _d_1, _b_3; +var _C1_f, _C1_g, _C1_h, _C1_i, _C4_d, _C4_e, _C4_f, _C5_b, _C6_b, _C7_b, _C10_d, _C11_b; class C1 { constructor() { - _f.set(this, void 0); //Error - _g.set(this, void 0); - _h.set(this, void 0); //Error - _i.set(this, void 0); + _C1_f.set(this, void 0); //Error + _C1_g.set(this, void 0); + _C1_h.set(this, void 0); //Error + _C1_i.set(this, void 0); } } -_f = new WeakMap(), _g = new WeakMap(), _h = new WeakMap(), _i = new WeakMap(); +_C1_f = new WeakMap(), _C1_g = new WeakMap(), _C1_h = new WeakMap(), _C1_i = new WeakMap(); // No strict initialization checks for static members class C3 { } @@ -169,46 +169,46 @@ class C4 { this.a = 0; this.b = 0; this.c = "abc"; - _d.set(this, 0); - _e.set(this, 0); - _f_1.set(this, "abc"); + _C4_d.set(this, 0); + _C4_e.set(this, 0); + _C4_f.set(this, "abc"); } } -_d = new WeakMap(), _e = new WeakMap(), _f_1 = new WeakMap(); +_C4_d = new WeakMap(), _C4_e = new WeakMap(), _C4_f = new WeakMap(); // Assignment in constructor satisfies strict initialization check class C5 { constructor() { - _b.set(this, void 0); + _C5_b.set(this, void 0); this.a = 0; - __classPrivateFieldSet(this, _b, 0); + __classPrivateFieldSet(this, _C5_b, 0); } } -_b = new WeakMap(); +_C5_b = new WeakMap(); // All code paths must contain assignment class C6 { constructor(cond) { - _b_1.set(this, void 0); + _C6_b.set(this, void 0); if (cond) { return; } this.a = 0; - __classPrivateFieldSet(this, _b_1, 0); + __classPrivateFieldSet(this, _C6_b, 0); } } -_b_1 = new WeakMap(); +_C6_b = new WeakMap(); class C7 { constructor(cond) { - _b_2.set(this, void 0); + _C7_b.set(this, void 0); if (cond) { this.a = 1; - __classPrivateFieldSet(this, _b_2, 1); + __classPrivateFieldSet(this, _C7_b, 1); return; } this.a = 0; - __classPrivateFieldSet(this, _b_2, 1); + __classPrivateFieldSet(this, _C7_b, 1); } } -_b_2 = new WeakMap(); +_C7_b = new WeakMap(); // Properties with string literal names aren't checked class C8 { } @@ -219,24 +219,24 @@ class C9 { // within their constructor class C10 { constructor() { - _d_1.set(this, void 0); + _C10_d.set(this, void 0); let x = this.a; // Error this.a = this.b; // Error - this.b = __classPrivateFieldGet(this, _d_1); //Error + this.b = __classPrivateFieldGet(this, _C10_d); //Error this.b = x; - __classPrivateFieldSet(this, _d_1, x); + __classPrivateFieldSet(this, _C10_d, x); let y = this.c; } } -_d_1 = new WeakMap(); +_C10_d = new WeakMap(); class C11 { constructor() { - _b_3.set(this, void 0); + _C11_b.set(this, void 0); this.a = someValue(); - __classPrivateFieldSet(this, _b_3, someValue()); + __classPrivateFieldSet(this, _C11_b, someValue()); } } -_b_3 = new WeakMap(); +_C11_b = new WeakMap(); //// [strictPropertyInitialization.d.ts] From 0ac12711a50ec5422d8db0edf49346f14636f9af Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 26 Jan 2021 14:52:26 +0000 Subject: [PATCH 10/73] Add a test for using private methods in static field initializers Signed-off-by: Kubilay Kahveci --- .../privateNameMethodInStaticFieldInit.js | 25 +++++++++++++++++++ ...privateNameMethodInStaticFieldInit.symbols | 21 ++++++++++++++++ .../privateNameMethodInStaticFieldInit.types | 25 +++++++++++++++++++ .../privateNameMethodInStaticFieldInit.ts | 8 ++++++ 4 files changed, 79 insertions(+) create mode 100644 tests/baselines/reference/privateNameMethodInStaticFieldInit.js create mode 100644 tests/baselines/reference/privateNameMethodInStaticFieldInit.symbols create mode 100644 tests/baselines/reference/privateNameMethodInStaticFieldInit.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameMethodInStaticFieldInit.ts diff --git a/tests/baselines/reference/privateNameMethodInStaticFieldInit.js b/tests/baselines/reference/privateNameMethodInStaticFieldInit.js new file mode 100644 index 0000000000000..4ea2c49e6ba85 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodInStaticFieldInit.js @@ -0,0 +1,25 @@ +//// [privateNameMethodInStaticFieldInit.ts] +class C { + static s = new C().#method(); + #method() { return 42; } +} + +console.log(C.s); + + +//// [privateNameMethodInStaticFieldInit.js] +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; +}; +var _C_method, _C_instances, _a; +class C { + constructor() { + _C_instances.add(this); + } +} +_C_instances = new WeakSet(), _C_method = function _C_method() { return 42; }; +C.s = __classPrivateMethodGet((_a = new C()), _C_instances, _C_method).call(_a); +console.log(C.s); diff --git a/tests/baselines/reference/privateNameMethodInStaticFieldInit.symbols b/tests/baselines/reference/privateNameMethodInStaticFieldInit.symbols new file mode 100644 index 0000000000000..ad742e35da81c --- /dev/null +++ b/tests/baselines/reference/privateNameMethodInStaticFieldInit.symbols @@ -0,0 +1,21 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodInStaticFieldInit.ts === +class C { +>C : Symbol(C, Decl(privateNameMethodInStaticFieldInit.ts, 0, 0)) + + static s = new C().#method(); +>s : Symbol(C.s, Decl(privateNameMethodInStaticFieldInit.ts, 0, 9)) +>new C().#method : Symbol(C.#method, Decl(privateNameMethodInStaticFieldInit.ts, 1, 33)) +>C : Symbol(C, Decl(privateNameMethodInStaticFieldInit.ts, 0, 0)) + + #method() { return 42; } +>#method : Symbol(C.#method, Decl(privateNameMethodInStaticFieldInit.ts, 1, 33)) +} + +console.log(C.s); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>C.s : Symbol(C.s, Decl(privateNameMethodInStaticFieldInit.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameMethodInStaticFieldInit.ts, 0, 0)) +>s : Symbol(C.s, Decl(privateNameMethodInStaticFieldInit.ts, 0, 9)) + diff --git a/tests/baselines/reference/privateNameMethodInStaticFieldInit.types b/tests/baselines/reference/privateNameMethodInStaticFieldInit.types new file mode 100644 index 0000000000000..7319a1f3082a0 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodInStaticFieldInit.types @@ -0,0 +1,25 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodInStaticFieldInit.ts === +class C { +>C : C + + static s = new C().#method(); +>s : number +>new C().#method() : number +>new C().#method : () => number +>new C() : C +>C : typeof C + + #method() { return 42; } +>#method : () => number +>42 : 42 +} + +console.log(C.s); +>console.log(C.s) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>C.s : number +>C : typeof C +>s : number + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameMethodInStaticFieldInit.ts b/tests/cases/conformance/classes/members/privateNames/privateNameMethodInStaticFieldInit.ts new file mode 100644 index 0000000000000..440ddb0cf1a71 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameMethodInStaticFieldInit.ts @@ -0,0 +1,8 @@ +// @target: es2015 + +class C { + static s = new C().#method(); + #method() { return 42; } +} + +console.log(C.s); From 7da5bd99e0f4d138b10c47b495c44eddc333ca43 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 26 Jan 2021 15:51:07 +0000 Subject: [PATCH 11/73] Add breaking checker test Private methods inside class expressions should not error. Signed-off-by: Kubilay Kahveci --- ...rivateNameMethodClassExpression.errors.txt | 24 +++++++++ .../privateNameMethodClassExpression.js | 44 +++++++++++++++ .../privateNameMethodClassExpression.symbols | 43 +++++++++++++++ .../privateNameMethodClassExpression.types | 54 +++++++++++++++++++ .../privateNameMethodClassExpression.ts | 13 +++++ 5 files changed, 178 insertions(+) create mode 100644 tests/baselines/reference/privateNameMethodClassExpression.errors.txt create mode 100644 tests/baselines/reference/privateNameMethodClassExpression.js create mode 100644 tests/baselines/reference/privateNameMethodClassExpression.symbols create mode 100644 tests/baselines/reference/privateNameMethodClassExpression.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts diff --git a/tests/baselines/reference/privateNameMethodClassExpression.errors.txt b/tests/baselines/reference/privateNameMethodClassExpression.errors.txt new file mode 100644 index 0000000000000..c03f18b10696b --- /dev/null +++ b/tests/baselines/reference/privateNameMethodClassExpression.errors.txt @@ -0,0 +1,24 @@ +tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts(3,5): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts(9,17): error TS18013: Property '#method' is not accessible outside class '(anonymous)' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts(10,17): error TS18013: Property '#field' is not accessible outside class '(anonymous)' because it has a private identifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts (3 errors) ==== + const C = class { + #field = this.#method(); + #method() { return 42; } + ~~~~~~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + static getInstance() { return new C(); } + getField() { return this.#field }; + } + + console.log(C.getInstance().getField()); + C.getInstance().#method; // Error + ~~~~~~~ +!!! error TS18013: Property '#method' is not accessible outside class '(anonymous)' because it has a private identifier. + C.getInstance().#field; // Error + ~~~~~~ +!!! error TS18013: Property '#field' is not accessible outside class '(anonymous)' because it has a private identifier. + + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameMethodClassExpression.js b/tests/baselines/reference/privateNameMethodClassExpression.js new file mode 100644 index 0000000000000..e4a327c16d219 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodClassExpression.js @@ -0,0 +1,44 @@ +//// [privateNameMethodClassExpression.ts] +const C = class { + #field = this.#method(); + #method() { return 42; } + static getInstance() { return new C(); } + getField() { return this.#field }; +} + +console.log(C.getInstance().getField()); +C.getInstance().#method; // Error +C.getInstance().#field; // Error + + + +//// [privateNameMethodClassExpression.js] +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _C_field, _C_method, _C_instances, _a; +const C = (_a = class { + constructor() { + _C_instances.add(this); + _C_field.set(this, __classPrivateMethodGet(this, _C_instances, _C_method).call(this)); + } + static getInstance() { return new C(); } + getField() { return __classPrivateFieldGet(this, _C_field); } + ; + }, + _C_field = new WeakMap(), + _C_instances = new WeakSet(), + _C_method = function _C_method() { return 42; }, + _a); +console.log(C.getInstance().getField()); +C.getInstance().; // Error +C.getInstance().; // Error diff --git a/tests/baselines/reference/privateNameMethodClassExpression.symbols b/tests/baselines/reference/privateNameMethodClassExpression.symbols new file mode 100644 index 0000000000000..b24d490bdebbb --- /dev/null +++ b/tests/baselines/reference/privateNameMethodClassExpression.symbols @@ -0,0 +1,43 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts === +const C = class { +>C : Symbol(C, Decl(privateNameMethodClassExpression.ts, 0, 5)) + + #field = this.#method(); +>#field : Symbol(C.#field, Decl(privateNameMethodClassExpression.ts, 0, 17)) +>this.#method : Symbol(C.#method, Decl(privateNameMethodClassExpression.ts, 1, 28)) +>this : Symbol(C, Decl(privateNameMethodClassExpression.ts, 0, 9)) + + #method() { return 42; } +>#method : Symbol(C.#method, Decl(privateNameMethodClassExpression.ts, 1, 28)) + + static getInstance() { return new C(); } +>getInstance : Symbol(C.getInstance, Decl(privateNameMethodClassExpression.ts, 2, 28)) +>C : Symbol(C, Decl(privateNameMethodClassExpression.ts, 0, 5)) + + getField() { return this.#field }; +>getField : Symbol(C.getField, Decl(privateNameMethodClassExpression.ts, 3, 44)) +>this.#field : Symbol(C.#field, Decl(privateNameMethodClassExpression.ts, 0, 17)) +>this : Symbol(C, Decl(privateNameMethodClassExpression.ts, 0, 9)) +} + +console.log(C.getInstance().getField()); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>C.getInstance().getField : Symbol(C.getField, Decl(privateNameMethodClassExpression.ts, 3, 44)) +>C.getInstance : Symbol(C.getInstance, Decl(privateNameMethodClassExpression.ts, 2, 28)) +>C : Symbol(C, Decl(privateNameMethodClassExpression.ts, 0, 5)) +>getInstance : Symbol(C.getInstance, Decl(privateNameMethodClassExpression.ts, 2, 28)) +>getField : Symbol(C.getField, Decl(privateNameMethodClassExpression.ts, 3, 44)) + +C.getInstance().#method; // Error +>C.getInstance : Symbol(C.getInstance, Decl(privateNameMethodClassExpression.ts, 2, 28)) +>C : Symbol(C, Decl(privateNameMethodClassExpression.ts, 0, 5)) +>getInstance : Symbol(C.getInstance, Decl(privateNameMethodClassExpression.ts, 2, 28)) + +C.getInstance().#field; // Error +>C.getInstance : Symbol(C.getInstance, Decl(privateNameMethodClassExpression.ts, 2, 28)) +>C : Symbol(C, Decl(privateNameMethodClassExpression.ts, 0, 5)) +>getInstance : Symbol(C.getInstance, Decl(privateNameMethodClassExpression.ts, 2, 28)) + + diff --git a/tests/baselines/reference/privateNameMethodClassExpression.types b/tests/baselines/reference/privateNameMethodClassExpression.types new file mode 100644 index 0000000000000..4800eefe52279 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodClassExpression.types @@ -0,0 +1,54 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts === +const C = class { +>C : typeof C +>class { #field = this.#method(); #method() { return 42; } static getInstance() { return new C(); } getField() { return this.#field };} : typeof C + + #field = this.#method(); +>#field : number +>this.#method() : number +>this.#method : () => number +>this : this + + #method() { return 42; } +>#method : () => number +>42 : 42 + + static getInstance() { return new C(); } +>getInstance : () => C +>new C() : C +>C : typeof C + + getField() { return this.#field }; +>getField : () => number +>this.#field : number +>this : this +} + +console.log(C.getInstance().getField()); +>console.log(C.getInstance().getField()) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>C.getInstance().getField() : number +>C.getInstance().getField : () => number +>C.getInstance() : C +>C.getInstance : () => C +>C : typeof C +>getInstance : () => C +>getField : () => number + +C.getInstance().#method; // Error +>C.getInstance().#method : any +>C.getInstance() : C +>C.getInstance : () => C +>C : typeof C +>getInstance : () => C + +C.getInstance().#field; // Error +>C.getInstance().#field : any +>C.getInstance() : C +>C.getInstance : () => C +>C : typeof C +>getInstance : () => C + + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts new file mode 100644 index 0000000000000..503761c73414c --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts @@ -0,0 +1,13 @@ +// @target: es2015 + +const C = class { + #field = this.#method(); + #method() { return 42; } + static getInstance() { return new C(); } + getField() { return this.#field }; +} + +console.log(C.getInstance().getField()); +C.getInstance().#method; // Error +C.getInstance().#field; // Error + From e133f602fbbb8286351d1843d885b143cf335da3 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 26 Jan 2021 15:59:37 +0000 Subject: [PATCH 12/73] Add to instances once per-instance Signed-off-by: Kubilay Kahveci --- src/compiler/transformers/classFields.ts | 41 ++++-------------------- 1 file changed, 7 insertions(+), 34 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 18e18ab60c45a..76e836ba58e14 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -926,46 +926,19 @@ namespace ts { /** * Generates brand-check initializer for private methods. * - * @param methods An array of method declarations to transform. + * @param methods An array of method declarations. * @param receiver The receiver on which each method should be assigned. */ function addMethodStatements(statements: Statement[], methods: readonly (MethodDeclaration)[], receiver: LeftHandSideExpression) { - for (const method of methods) { - const expression = transformMethod(method, receiver); - if (!expression) { - continue; - } - const statement = factory.createExpressionStatement(expression); - statements.push(statement); - } - } - - /** - * Transforms a method declaration to brand-check initializer. - * - * @param method The method declaration. - * @param receiver The receiver on which the method should be assigned. - */ - function transformMethod(method: MethodDeclaration, receiver: LeftHandSideExpression) { - if (!shouldTransformPrivateElements || !isPrivateIdentifier(method.name)) { + if (!shouldTransformPrivateElements || !some(methods)) { return; } - const privateIdentifierInfo = accessPrivateIdentifier(method.name); - if (privateIdentifierInfo) { - switch (privateIdentifierInfo.placement){ - case PrivateIdentifierPlacement.InstanceMethod: { - return createPrivateInstanceMethodInitializer( - receiver, - getPrivateIdentifierEnvironment().weakSetName - ); - } - default: return Debug.fail("Unexpected private identifier placement"); - } - } - else { - Debug.fail("Undeclared private name for method declaration."); - } + statements.push( + factory.createExpressionStatement( + createPrivateInstanceMethodInitializer(receiver, getPrivateIdentifierEnvironment().weakSetName) + ) + ); } /** From aa5dd8a5600a69086cf99b78fcae4691b6e17fe5 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 26 Jan 2021 15:59:43 +0000 Subject: [PATCH 13/73] Accept baseline Signed-off-by: Kubilay Kahveci --- .../baselines/reference/privateNameMethodCallExpression.js | 1 - .../reference/privateNamesIncompatibleModifiers.js | 6 ------ 2 files changed, 7 deletions(-) diff --git a/tests/baselines/reference/privateNameMethodCallExpression.js b/tests/baselines/reference/privateNameMethodCallExpression.js index 59612f5a435a6..b97b529024177 100644 --- a/tests/baselines/reference/privateNameMethodCallExpression.js +++ b/tests/baselines/reference/privateNameMethodCallExpression.js @@ -34,7 +34,6 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function var _AA_method, _AA_method2, _AA_instances; class AA { constructor() { - _AA_instances.add(this); _AA_instances.add(this); this.x = 1; } diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.js b/tests/baselines/reference/privateNamesIncompatibleModifiers.js index c537d2bdb85bd..3fb686c0f5313 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.js +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.js @@ -60,12 +60,6 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar var _A_foo, _A_bar, _A_baz, _A_qux, _A_fooMethod, _A_barMethod, _A_bazMethod, _A_quxMethod, _A_asyncMethod, _A_genMethod, _A_asyncGenMethod, _A_fooProp, _A_fooProp_1, _A_barProp, _A_barProp_1, _A_bazProp, _A_bazProp_1, _A_quxProp, _A_quxProp_1, _A_whatProp, _A_whatProp_1, _A_asyncProp, _A_asyncProp_1, _A_instances; class A { constructor() { - _A_instances.add(this); - _A_instances.add(this); - _A_instances.add(this); - _A_instances.add(this); - _A_instances.add(this); - _A_instances.add(this); _A_instances.add(this); _A_foo.set(this, 3); // Error _A_bar.set(this, 3); // Error From a3889a778213b352cf7456d2cc5a21d59f4193fb Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 26 Jan 2021 17:20:27 +0000 Subject: [PATCH 14/73] fix: evaluate receiver and rhs expressions before throwing on readonly assignment Signed-off-by: Kubilay Kahveci --- src/compiler/factory/emitHelpers.ts | 6 +-- src/compiler/transformers/classFields.ts | 51 ++++++++++++------------ 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 3fa1d500aa826..c2070debc7e7e 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -35,7 +35,7 @@ namespace ts { createClassPrivateFieldGetHelper(receiver: Expression, privateField: Identifier): Expression; createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression): Expression; createClassPrivateMethodGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; - createClassPrivateReadonlyHelper(): Expression; + createClassPrivateReadonlyHelper(receiver: Expression, value: Expression): Expression; } export function createEmitHelperFactory(context: TransformationContext): EmitHelperFactory { @@ -387,9 +387,9 @@ namespace ts { return factory.createCallExpression(getUnscopedHelperName("__classPrivateMethodGet"), /*typeArguments*/ undefined, [receiver, instances, fn]); } - function createClassPrivateReadonlyHelper() { + function createClassPrivateReadonlyHelper(receiver: Expression, value: Expression) { context.requestEmitHelper(classPrivateReadonlyHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateReadonly"), /*typeArguments*/ undefined, []); + return factory.createCallExpression(getUnscopedHelperName("__classPrivateReadonly"), /*typeArguments*/ undefined, [receiver, value]); } } diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 76e836ba58e14..9613acaac794b 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -280,16 +280,19 @@ namespace ts { function createPrivateIdentifierAccess(info: PrivateIdentifierInfo, receiver: Expression): Expression { receiver = visitNode(receiver, visitor, isExpression); const synthesizedReceiver = nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver); + return createPrivateIdentifierAccessHelper(info, synthesizedReceiver); + } + function createPrivateIdentifierAccessHelper(info: PrivateIdentifierInfo, receiver: Expression): Expression { switch (info.placement) { case PrivateIdentifierPlacement.InstanceField: return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( - synthesizedReceiver, + receiver, info.weakMapName ); case PrivateIdentifierPlacement.InstanceMethod: return context.getEmitHelperFactory().createClassPrivateMethodGetHelper( - synthesizedReceiver, + receiver, getPrivateIdentifierEnvironment().weakSetName, info.functionName ); @@ -474,37 +477,33 @@ namespace ts { } function createPrivateIdentifierAssignment(info: PrivateIdentifierInfo, receiver: Expression, right: Expression, operator: AssignmentOperator) { - switch (info.placement) { - case PrivateIdentifierPlacement.InstanceField: - return createPrivateIdentifierInstanceFieldAssignment(info, receiver, right, operator); - case PrivateIdentifierPlacement.InstanceMethod: - return createPrivateIdentifierInstanceMethodAssignment(); - default: return Debug.fail("Unexpected private identifier placement"); - } - } - - function createPrivateIdentifierInstanceFieldAssignment(info: PrivateIdentifierInstanceField, receiver: Expression, right: Expression, operator: AssignmentOperator) { receiver = visitNode(receiver, visitor, isExpression); right = visitNode(right, visitor, isExpression); + if (isCompoundAssignment(operator)) { const { readExpression, initializeExpression } = createCopiableReceiverExpr(receiver); - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( - initializeExpression || readExpression, - info.weakMapName, - factory.createBinaryExpression( - context.getEmitHelperFactory().createClassPrivateFieldGetHelper(readExpression, info.weakMapName), - getNonAssignmentOperatorForCompoundAssignment(operator), - right - ) + receiver = initializeExpression || readExpression; + right = factory.createBinaryExpression( + createPrivateIdentifierAccessHelper(info, readExpression), + getNonAssignmentOperatorForCompoundAssignment(operator), + right ); } - else { - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper(receiver, info.weakMapName, right); - } - } - function createPrivateIdentifierInstanceMethodAssignment() { - return context.getEmitHelperFactory().createClassPrivateReadonlyHelper(); + switch (info.placement) { + case PrivateIdentifierPlacement.InstanceField: + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + receiver, + info.weakMapName, + right + ); + case PrivateIdentifierPlacement.InstanceMethod: + return context.getEmitHelperFactory().createClassPrivateReadonlyHelper( + receiver, + right + ); + default: return Debug.fail("Unexpected private identifier placement"); + } } /** From 8952caa32f42af226608b195ddb6a8421920eff2 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 26 Jan 2021 17:20:48 +0000 Subject: [PATCH 15/73] Add a test for evaluating rhs before readonly assignment Signed-off-by: Kubilay Kahveci --- .../reference/privateNameMethodAssignment.js | 12 ++++--- .../reference/privateNameReadonly.errors.txt | 21 ++++++++++++ .../reference/privateNameReadonly.js | 28 +++++++++++++++ .../reference/privateNameReadonly.symbols | 27 +++++++++++++++ .../reference/privateNameReadonly.types | 34 +++++++++++++++++++ .../privateNames/privateNameReadonly.ts | 10 ++++++ 6 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 tests/baselines/reference/privateNameReadonly.errors.txt create mode 100644 tests/baselines/reference/privateNameReadonly.js create mode 100644 tests/baselines/reference/privateNameReadonly.symbols create mode 100644 tests/baselines/reference/privateNameReadonly.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts diff --git a/tests/baselines/reference/privateNameMethodAssignment.js b/tests/baselines/reference/privateNameMethodAssignment.js index 85f31b9956db4..2b1618e9938c7 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.js +++ b/tests/baselines/reference/privateNameMethodAssignment.js @@ -27,12 +27,14 @@ class A3 { constructor(a, b) { var _a, _b; _A3_instances.add(this); - __classPrivateReadonly(); // Error, not writable - __classPrivateReadonly(); // Error, not writable - __classPrivateReadonly(); //Error, not writable - (_a = this, { x: ({ set value(_b) { __classPrivateReadonly(); } }).value } = { x: () => { } }); //Error, not writable + __classPrivateReadonly(this, () => { }); // Error, not writable + __classPrivateReadonly(// Error, not writable + a, () => { }); // Error, not writable + __classPrivateReadonly(// Error, not writable + b, () => { }); //Error, not writable + (_a = this, { x: ({ set value(_b) { __classPrivateReadonly(_a, _b); } }).value } = { x: () => { } }); //Error, not writable let x = __classPrivateMethodGet(this, _A3_instances, _A3_method); - __classPrivateReadonly(); //Error, not writable + __classPrivateReadonly(_b = b, +__classPrivateMethodGet(_b, _A3_instances, _A3_method) + 1); //Error, not writable } ; } diff --git a/tests/baselines/reference/privateNameReadonly.errors.txt b/tests/baselines/reference/privateNameReadonly.errors.txt new file mode 100644 index 0000000000000..df4adc632a809 --- /dev/null +++ b/tests/baselines/reference/privateNameReadonly.errors.txt @@ -0,0 +1,21 @@ +tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(2,5): error TS18016: Private identifiers are not allowed outside class bodies. +tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,9): error TS2322: Type 'void' is not assignable to type '() => void'. +tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,14): error TS2798: Cannot assign to private method '#bar'. Private methods are not writable. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts (3 errors) ==== + const C = class { + #bar() {} + ~~~~ +!!! error TS18016: Private identifiers are not allowed outside class bodies. + foo() { + this.#bar = console.log("should log this then throw"); + ~~~~~~~~~ +!!! error TS2322: Type 'void' is not assignable to type '() => void'. + ~~~~ +!!! error TS2798: Cannot assign to private method '#bar'. Private methods are not writable. + } + } + + console.log(new C().foo()); + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameReadonly.js b/tests/baselines/reference/privateNameReadonly.js new file mode 100644 index 0000000000000..53d39ac5c7164 --- /dev/null +++ b/tests/baselines/reference/privateNameReadonly.js @@ -0,0 +1,28 @@ +//// [privateNameReadonly.ts] +const C = class { + #bar() {} + foo() { + this.#bar = console.log("should log this then throw"); + } +} + +console.log(new C().foo()); + + +//// [privateNameReadonly.js] +var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { + throw new TypeError("private element is not writable"); +}; +var _C_bar, _C_instances, _a; +const C = (_a = class { + constructor() { + _C_instances.add(this); + } + foo() { + __classPrivateReadonly(this, console.log("should log this then throw")); + } + }, + _C_instances = new WeakSet(), + _C_bar = function _C_bar() { }, + _a); +console.log(new C().foo()); diff --git a/tests/baselines/reference/privateNameReadonly.symbols b/tests/baselines/reference/privateNameReadonly.symbols new file mode 100644 index 0000000000000..1f4e58cdfd038 --- /dev/null +++ b/tests/baselines/reference/privateNameReadonly.symbols @@ -0,0 +1,27 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts === +const C = class { +>C : Symbol(C, Decl(privateNameReadonly.ts, 0, 5)) + + #bar() {} +>#bar : Symbol(C.#bar, Decl(privateNameReadonly.ts, 0, 17)) + + foo() { +>foo : Symbol(C.foo, Decl(privateNameReadonly.ts, 1, 13)) + + this.#bar = console.log("should log this then throw"); +>this.#bar : Symbol(C.#bar, Decl(privateNameReadonly.ts, 0, 17)) +>this : Symbol(C, Decl(privateNameReadonly.ts, 0, 9)) +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) + } +} + +console.log(new C().foo()); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>new C().foo : Symbol(C.foo, Decl(privateNameReadonly.ts, 1, 13)) +>C : Symbol(C, Decl(privateNameReadonly.ts, 0, 5)) +>foo : Symbol(C.foo, Decl(privateNameReadonly.ts, 1, 13)) + diff --git a/tests/baselines/reference/privateNameReadonly.types b/tests/baselines/reference/privateNameReadonly.types new file mode 100644 index 0000000000000..e4e460df3a51c --- /dev/null +++ b/tests/baselines/reference/privateNameReadonly.types @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts === +const C = class { +>C : typeof C +>class { #bar() {} foo() { this.#bar = console.log("should log this then throw"); }} : typeof C + + #bar() {} +>#bar : () => void + + foo() { +>foo : () => void + + this.#bar = console.log("should log this then throw"); +>this.#bar = console.log("should log this then throw") : void +>this.#bar : () => void +>this : this +>console.log("should log this then throw") : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>"should log this then throw" : "should log this then throw" + } +} + +console.log(new C().foo()); +>console.log(new C().foo()) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>new C().foo() : void +>new C().foo : () => void +>new C() : C +>C : typeof C +>foo : () => void + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts b/tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts new file mode 100644 index 0000000000000..b9e373f19e57d --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts @@ -0,0 +1,10 @@ +// @target: es2015 + +const C = class { + #bar() {} + foo() { + this.#bar = console.log("should log this then throw"); + } +} + +console.log(new C().foo()); From dee87bb6a0e8ea0181de4f44f0dc08ab2f309029 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 27 Jan 2021 11:07:47 +0000 Subject: [PATCH 16/73] Transpile private accessors Signed-off-by: Kubilay Kahveci --- src/compiler/factory/emitHelpers.ts | 41 ++++++++++++ src/compiler/transformers/classFields.ts | 80 ++++++++++++++++++++---- src/compiler/transformers/utilities.ts | 21 ++++++- 3 files changed, 130 insertions(+), 12 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index c2070debc7e7e..df86a7344740d 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -36,6 +36,8 @@ namespace ts { createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression): Expression; createClassPrivateMethodGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; createClassPrivateReadonlyHelper(receiver: Expression, value: Expression): Expression; + createClassPrivateAccessorGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; + createClassPrivateAccessorSetHelper(receiver: Expression, instances: Identifier, fn: Identifier, value: Expression): Expression; } export function createEmitHelperFactory(context: TransformationContext): EmitHelperFactory { @@ -76,6 +78,8 @@ namespace ts { createClassPrivateFieldSetHelper, createClassPrivateMethodGetHelper, createClassPrivateReadonlyHelper, + createClassPrivateAccessorGetHelper, + createClassPrivateAccessorSetHelper, }; /** @@ -392,6 +396,15 @@ namespace ts { return factory.createCallExpression(getUnscopedHelperName("__classPrivateReadonly"), /*typeArguments*/ undefined, [receiver, value]); } + function createClassPrivateAccessorGetHelper(receiver: Expression, instances: Identifier, fn: Identifier) { + context.requestEmitHelper(classPrivateAccessorGetHelper); + return factory.createCallExpression(getUnscopedHelperName("__classPrivateAccessorGet"), /*typeArguments*/ undefined, [receiver, instances, fn]); + } + + function createClassPrivateAccessorSetHelper(receiver: Expression, instances: Identifier, fn: Identifier, value: Expression) { + context.requestEmitHelper(classPrivateAccessorSetHelper); + return factory.createCallExpression(getUnscopedHelperName("__classPrivateAccessorSet"), /*typeArguments*/ undefined, [receiver, instances, fn, value]); + } } /* @internal */ @@ -882,6 +895,32 @@ namespace ts { };` }; + export const classPrivateAccessorGetHelper: UnscopedEmitHelper = { + name: "typescript:classPrivateAccessorGet", + importName: "__classPrivateAccessorGet", + scoped: false, + text: ` + var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); + };` + }; + + export const classPrivateAccessorSetHelper: UnscopedEmitHelper = { + name: "typescript:classPrivateAccessorSet", + importName: "__classPrivateAccessorSet", + scoped: false, + text: ` + var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to set private accessor on non-instance"); + } + return fn.call(receiver, value); + };` + }; + let allUnscopedEmitHelpers: ReadonlyESMap | undefined; export function getAllUnscopedEmitHelpers() { @@ -909,6 +948,8 @@ namespace ts { classPrivateFieldSetHelper, classPrivateMethodGetHelper, classPrivateReadonlyHelper, + classPrivateAccessorGetHelper, + classPrivateAccessorSetHelper, createBindingHelper, setModuleDefaultHelper ], helper => helper.name)); diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 9613acaac794b..848064c76df17 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -11,11 +11,13 @@ namespace ts { const enum PrivateIdentifierPlacement { InstanceField, InstanceMethod, + InstanceAccessor } type PrivateIdentifierInfo = | PrivateIdentifierInstanceField - | PrivateIdentifierInstanceMethod; + | PrivateIdentifierInstanceMethod + | PrivateIdentifierInstanceAccessor; interface PrivateIdentifierInstanceField { placement: PrivateIdentifierPlacement.InstanceField; @@ -27,6 +29,12 @@ namespace ts { functionName: Identifier; } + interface PrivateIdentifierInstanceAccessor { + placement: PrivateIdentifierPlacement.InstanceAccessor; + getterName?: Identifier; + setterName?: Identifier; + } + interface PrivateIdentifierEnvironment { /** * Used for prefixing generated variable names. @@ -166,8 +174,7 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - // Visit the name of the member (if it's a computed property name). - return visitEachChild(node, classElementVisitor, context); + return visitMethodDeclaration(node as AccessorDeclaration); case SyntaxKind.MethodDeclaration: return visitMethodDeclaration(node as MethodDeclaration); @@ -213,7 +220,7 @@ namespace ts { return node; } - function visitMethodDeclaration(node: MethodDeclaration) { + function visitMethodDeclaration(node: MethodDeclaration | AccessorDeclaration) { Debug.assert(!some(node.decorators)); const transformedMethod = visitEachChild(node, classElementVisitor, context); @@ -241,7 +248,7 @@ namespace ts { return undefined; } - function getHoistedFunctionName(node: MethodDeclaration) { + function getHoistedFunctionName(node: MethodDeclaration | AccessorDeclaration) { Debug.assert(isPrivateIdentifier(node.name)); const privateIdentifierInfo = accessPrivateIdentifier(node.name); Debug.assert(privateIdentifierInfo, "Undeclared private name for property declaration."); @@ -250,6 +257,17 @@ namespace ts { return privateIdentifierInfo.functionName; } + if (privateIdentifierInfo.placement === PrivateIdentifierPlacement.InstanceAccessor) { + if (isGetAccessor(node)) { + Debug.assert(privateIdentifierInfo.getterName); + return privateIdentifierInfo.getterName; + } + if (isSetAccessor(node)) { + Debug.assert(privateIdentifierInfo.setterName); + return privateIdentifierInfo.setterName; + } + } + Debug.fail("Unexpected private identifier placement"); } @@ -296,6 +314,13 @@ namespace ts { getPrivateIdentifierEnvironment().weakSetName, info.functionName ); + case PrivateIdentifierPlacement.InstanceAccessor: { + return context.getEmitHelperFactory().createClassPrivateAccessorGetHelper( + receiver, + getPrivateIdentifierEnvironment().weakSetName, + info.getterName! // TODO: TypeError is missing + ); + } default: return Debug.fail("Unexpected private identifier placement"); } } @@ -502,6 +527,13 @@ namespace ts { receiver, right ); + case PrivateIdentifierPlacement.InstanceAccessor: + return context.getEmitHelperFactory().createClassPrivateAccessorSetHelper( + receiver, + getPrivateIdentifierEnvironment().weakSetName, + info.setterName!, // TODO: TypeError if missing + right + ); default: return Debug.fail("Unexpected private identifier placement"); } } @@ -732,7 +764,10 @@ namespace ts { properties = filter(properties, property => !!property.initializer || isPrivateIdentifier(property.name)); } - const privateMethods = filter(getMethods(node, /*isStatic*/ false), method => isPrivateIdentifier(method.name)); + const privateMethods = filter( + [...getMethods(node, /*isStatic*/ false), ...getAccessors(node, /*isStatic*/ false)], + method => isPrivateIdentifier(method.name) + ); const needsConstructorBody = some(properties) || some(privateMethods); // Only generate synthetic constructor when there are property initializers to move. @@ -928,7 +963,7 @@ namespace ts { * @param methods An array of method declarations. * @param receiver The receiver on which each method should be assigned. */ - function addMethodStatements(statements: Statement[], methods: readonly (MethodDeclaration)[], receiver: LeftHandSideExpression) { + function addMethodStatements(statements: Statement[], methods: readonly (MethodDeclaration | AccessorDeclaration)[], receiver: LeftHandSideExpression) { if (!shouldTransformPrivateElements || !some(methods)) { return; } @@ -1039,18 +1074,18 @@ namespace ts { function addPrivateIdentifierToEnvironment(node: PrivateClassElementDeclaration) { const text = getTextOfPropertyName(node.name) as string; - const uniqueVariableName = createHoistedVariableForPrivateName(text); let info: PrivateIdentifierInfo; const assignmentExpressions: Expression[] = []; if (isPropertyDeclaration(node)) { + const weakMapName = createHoistedVariableForPrivateName(text); info = { placement: PrivateIdentifierPlacement.InstanceField, - weakMapName: uniqueVariableName + weakMapName, }; assignmentExpressions.push(factory.createAssignment( - uniqueVariableName, + weakMapName, factory.createNewExpression( factory.createIdentifier("WeakMap"), /*typeArguments*/ undefined, @@ -1061,11 +1096,27 @@ namespace ts { else if (isMethodDeclaration(node)) { info = { placement: PrivateIdentifierPlacement.InstanceMethod, - functionName: uniqueVariableName + functionName: createHoistedVariableForPrivateName(text) }; getPrivateIdentifierEnvironment().hasPrivateMethods = true; } + else if (isAccessor(node)) { + const previousInfo = findPreviousAccessorInfo(node); + info = { + ...previousInfo, + placement: PrivateIdentifierPlacement.InstanceAccessor, + }; + + if (isGetAccessor(node)) { + info.getterName = createHoistedVariableForPrivateName(text + "_get"); + } + else { + info.setterName = createHoistedVariableForPrivateName(text + "_set");; + } + + getPrivateIdentifierEnvironment().hasPrivateMethods = true; + } else { return; } @@ -1074,6 +1125,13 @@ namespace ts { getPendingExpressions().push(...assignmentExpressions); } + function findPreviousAccessorInfo(node: PrivateIdentifierGetAccessorDeclaration | PrivateIdentifierSetAccessorDeclaration): PrivateIdentifierInstanceAccessor | undefined { + const info = getPrivateIdentifierEnvironment().identifiers.get(node.name.escapedText); + if (info && info.placement === PrivateIdentifierPlacement.InstanceAccessor) { + return info; + } + } + function createHoistedVariableForClass(name: string): Identifier { const { className } = getPrivateIdentifierEnvironment(); const prefix = className ? `_${className}` : ""; diff --git a/src/compiler/transformers/utilities.ts b/src/compiler/transformers/utilities.ts index a97b7a084e9f8..30dc004a59850 100644 --- a/src/compiler/transformers/utilities.ts +++ b/src/compiler/transformers/utilities.ts @@ -347,12 +347,22 @@ namespace ts { * Gets all the static or all the instance method declarations of a class. * * @param node The class node. - * @param isStatic A value indicating whether to get properties from the static or instance side of the class. + * @param isStatic A value indicating whether to get methods from the static or instance side of the class. */ export function getMethods(node: ClassExpression | ClassDeclaration, isStatic: boolean): readonly MethodDeclaration[] { return filter(node.members, m => isStaticMethodDeclaration(m, isStatic)) as MethodDeclaration[]; } + /** + * Gets all the static or all the instance accessor declarations of a class. + * + * @param node The class node. + * @param isStatic A value indicating whether to get accessors from the static or instance side of the class. + */ + export function getAccessors(node: ClassExpression | ClassDeclaration, isStatic: boolean): readonly AccessorDeclaration[] { + return filter(node.members, m => isStaticAccessorDeclaration(m, isStatic)) as AccessorDeclaration[]; + } + /** * Is a class element either a static or an instance property declaration with an initializer? * @@ -386,4 +396,13 @@ namespace ts { return isMethodDeclaration(member) && hasStaticModifier(member) === isStatic; } + /** + * Gets a value indicating whether a class element is either a static or an instance accessor declaration. + * + * @param member The class element node. + * @param isStatic A value indicating whether the member should be a static or instance member. + */ + export function isStaticAccessorDeclaration(member: ClassElement, isStatic: boolean): member is AccessorDeclaration { + return isGetOrSetAccessorDeclaration(member) && hasStaticModifier(member) === isStatic; + } } From aec7e9bd4b1a4f4bcbdca5e250e9a3fb9f334513 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 27 Jan 2021 11:17:42 +0000 Subject: [PATCH 17/73] Accept baseline Signed-off-by: Kubilay Kahveci --- .../reference/privateNameAccessorsAccess.js | 18 +++-- .../privateNameAccessorsCallExpression.js | 72 +++++++------------ .../privateNameAccessorssDerivedClasses.js | 15 +++- .../privateNameES5Ban(target=es3).js | 16 +---- .../privateNameES5Ban(target=es5).js | 16 +---- ...rivateNameNestedClassAccessorsShadowing.js | 22 ++++-- .../reference/privateNamesAndkeyof.js | 6 +- .../reference/privateNamesInGenericClasses.js | 18 +++-- .../privateNamesIncompatibleModifiers.js | 20 ++---- .../reference/privateNamesUseBeforeDef.js | 14 ++-- 10 files changed, 100 insertions(+), 117 deletions(-) diff --git a/tests/baselines/reference/privateNameAccessorsAccess.js b/tests/baselines/reference/privateNameAccessorsAccess.js index 471938900c62b..06f2cde867b75 100644 --- a/tests/baselines/reference/privateNameAccessorsAccess.js +++ b/tests/baselines/reference/privateNameAccessorsAccess.js @@ -26,19 +26,25 @@ class B2 { //// [privateNameAccessorsAccess.js] -var _A2_prop, _A2_prop_1; +var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); +}; +var _A2_prop_get, _A2_prop_set, _A2_instances; class A2 { constructor() { - console.log(this.); + _A2_instances.add(this); + console.log(__classPrivateAccessorGet(this, _A2_instances, _A2_prop_get)); let a = this; - a.; + __classPrivateAccessorGet(a, _A2_instances, _A2_prop_get); function foo() { - a.; + __classPrivateAccessorGet(a, _A2_instances, _A2_prop_get); } } - get () { return ""; } - set (param) { } } +_A2_instances = new WeakSet(), _A2_prop_get = function _A2_prop_get() { return ""; }, _A2_prop_set = function _A2_prop_set(param) { }; new A2().; // Error function foo() { new A2().; // Error diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.js b/tests/baselines/reference/privateNameAccessorsCallExpression.js index f901647fbb02e..f3cf7687d6438 100644 --- a/tests/baselines/reference/privateNameAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.js @@ -18,49 +18,31 @@ class A { getInstance() { return new A(); } } -tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(10,14): error TS1003: Identifier expected. -tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(11,27): error TS1003: Identifier expected. -tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(13,18): error TS1003: Identifier expected. -tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(15,14): error TS1003: Identifier expected. -tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(16,28): error TS1003: Identifier expected. -tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(17,26): error TS1003: Identifier expected. -tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js(18,35): error TS1003: Identifier expected. - - -==== tests/cases/conformance/classes/members/privateNames/privateNameAccessorsCallExpression.js (7 errors) ==== - var _A_fieldFunc, _A_fieldFunc2; - class A { - constructor() { - this.x = 1; - } - get () { return function () { this.x = 10; }; } - get () { return function (a, ...b) { }; } - test() { - var _a; - this..call(this); - ~ -!!! error TS1003: Identifier expected. - const func = this.; - ~ -!!! error TS1003: Identifier expected. - func(); - new this.(); - ~ -!!! error TS1003: Identifier expected. - const arr = [1, 2]; - this..call(this, 0, ...arr, 3); - ~ -!!! error TS1003: Identifier expected. - const b = new this.(0, ...arr, 3); - ~ -!!! error TS1003: Identifier expected. - const str = this..bind(this) `head${1}middle${2}tail`; - ~ -!!! error TS1003: Identifier expected. - (_a = this.getInstance())..bind(_a) `test${1}and${2}`; - ~ -!!! error TS1003: Identifier expected. - } - getInstance() { return new A(); } +//// [privateNameAccessorsCallExpression.js] +var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); +}; +var _A_fieldFunc_get, _A_fieldFunc2_get, _A_instances; +class A { + constructor() { + _A_instances.add(this); + this.x = 1; } - \ No newline at end of file + test() { + var _a; + __classPrivateAccessorGet(this, _A_instances, _A_fieldFunc_get).call(this); + const func = __classPrivateAccessorGet(this, _A_instances, _A_fieldFunc_get); + func(); + new (__classPrivateAccessorGet(this, _A_instances, _A_fieldFunc_get))(); + const arr = [1, 2]; + __classPrivateAccessorGet(this, _A_instances, _A_fieldFunc2_get).call(this, 0, ...arr, 3); + const b = new (__classPrivateAccessorGet(this, _A_instances, _A_fieldFunc2_get))(0, ...arr, 3); + const str = __classPrivateAccessorGet(this, _A_instances, _A_fieldFunc2_get).bind(this) `head${1}middle${2}tail`; + __classPrivateAccessorGet((_a = this.getInstance()), _A_instances, _A_fieldFunc2_get).bind(_a) `test${1}and${2}`; + } + getInstance() { return new A(); } +} +_A_instances = new WeakSet(), _A_fieldFunc_get = function _A_fieldFunc_get() { return function () { this.x = 10; }; }, _A_fieldFunc2_get = function _A_fieldFunc2_get() { return function (a, ...b) { }; }; diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js index 4da1a9941cd93..42e518dd1e827 100644 --- a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js @@ -13,13 +13,22 @@ class Derived extends Base { //// [privateNameAccessorssDerivedClasses.js] -var _Base_prop; +var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); +}; +var _Base_prop_get, _Base_instances; class Base { - get () { return 123; } + constructor() { + _Base_instances.add(this); + } static method(x) { - console.log(x.); + console.log(__classPrivateAccessorGet(x, _Base_instances, _Base_prop_get)); } } +_Base_instances = new WeakSet(), _Base_prop_get = function _Base_prop_get() { return 123; }; class Derived extends Base { static method(x) { console.log(x.); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index da50a83aed130..24a301e676033 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -19,20 +19,8 @@ var A = /** @class */ (function () { _A_instances.add(this); _A_field.set(this, 123); } - Object.defineProperty(A.prototype, "", { - get: function () { return ""; }, - set: function (x) { }, - enumerable: false, - configurable: true - }); - Object.defineProperty(A, "", { - get: function () { return 0; }, - set: function (x) { }, - enumerable: false, - configurable: true - }); - var _A_field, _A_method, _A_sField, _A_sMethod, _A_acc, _A_acc_1, _A_sAcc, _A_sAcc_1, _A_instances; - _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }; + var _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set, _A_instances; + _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; _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 da50a83aed130..24a301e676033 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -19,20 +19,8 @@ var A = /** @class */ (function () { _A_instances.add(this); _A_field.set(this, 123); } - Object.defineProperty(A.prototype, "", { - get: function () { return ""; }, - set: function (x) { }, - enumerable: false, - configurable: true - }); - Object.defineProperty(A, "", { - get: function () { return 0; }, - set: function (x) { }, - enumerable: false, - configurable: true - }); - var _A_field, _A_method, _A_sField, _A_sMethod, _A_acc, _A_acc_1, _A_sAcc, _A_sAcc_1, _A_instances; - _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }; + var _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set, _A_instances; + _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; _A_sField.set(A, "hello world"); return A; }()); diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js index 4d4829a85603d..b650ce90b7d2d 100644 --- a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js @@ -16,21 +16,31 @@ class Base { //// [privateNameNestedClassAccessorsShadowing.js] -var _Base_x; +var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); +}; +var _Base_x_get, _Base_instances; class Base { constructor() { - var _Derived_x; + var _Derived_x_get, _Derived_instances; + _Base_instances.add(this); class Derived { - get () { return 1; } + constructor() { + _Derived_instances.add(this); + } ; testBase(x) { - console.log(x.); + console.log(__classPrivateAccessorGet(x, _Derived_instances, _Derived_x_get)); } testDerived(x) { - console.log(x.); + console.log(__classPrivateAccessorGet(x, _Derived_instances, _Derived_x_get)); } } + _Derived_instances = new WeakSet(), _Derived_x_get = function _Derived_x_get() { return 1; }; } - get () { return 1; } ; } +_Base_instances = new WeakSet(), _Base_x_get = function _Base_x_get() { return 1; }; diff --git a/tests/baselines/reference/privateNamesAndkeyof.js b/tests/baselines/reference/privateNamesAndkeyof.js index c726cbfccd4c4..20d4e1122013c 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.js +++ b/tests/baselines/reference/privateNamesAndkeyof.js @@ -13,7 +13,7 @@ type T = keyof A // should not include '#foo*' //// [privateNamesAndkeyof.js] "use strict"; -var _A_fooField, _A_fooMethod, _A_fooProp, _A_fooProp_1, _A_instances; +var _A_fooField, _A_fooMethod, _A_fooProp_get, _A_fooProp_set, _A_instances; class A { constructor() { _A_instances.add(this); @@ -22,9 +22,7 @@ class A { this.baz = 3; } ; - get () { return 1; } ; - set (value) { } ; } -_A_fooField = new WeakMap(), _A_instances = new WeakSet(), _A_fooMethod = function _A_fooMethod() { }; +_A_fooField = new WeakMap(), _A_instances = new WeakSet(), _A_fooMethod = function _A_fooMethod() { }, _A_fooProp_get = function _A_fooProp_get() { return 1; }, _A_fooProp_set = function _A_fooProp_set(value) { }; diff --git a/tests/baselines/reference/privateNamesInGenericClasses.js b/tests/baselines/reference/privateNamesInGenericClasses.js index ee64cee48f85e..e1ea4b49d09b0 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.js +++ b/tests/baselines/reference/privateNamesInGenericClasses.js @@ -48,25 +48,29 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _C_foo, _C_method, _C_prop, _C_prop_1, _C_instances; +var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); +}; +var _C_foo, _C_method, _C_prop_get, _C_prop_set, _C_instances; class C { constructor() { _C_instances.add(this); _C_foo.set(this, void 0); } - get () { return __classPrivateFieldGet(this, _C_foo); } - set (value) { __classPrivateFieldSet(this, _C_foo, value); } bar(x) { return __classPrivateFieldGet(x, _C_foo); } // OK bar2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method).call(x); } // OK - bar3(x) { return x.; } // OK + bar3(x) { return __classPrivateAccessorGet(x, _C_instances, _C_prop_get); } // OK baz(x) { return __classPrivateFieldGet(x, _C_foo); } // OK baz2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method); } // OK - baz3(x) { return x.; } // OK + baz3(x) { return __classPrivateAccessorGet(x, _C_instances, _C_prop_get); } // OK quux(x) { return __classPrivateFieldGet(x, _C_foo); } // OK quux2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method); } // OK - quux3(x) { return x.; } // OK + quux3(x) { return __classPrivateAccessorGet(x, _C_instances, _C_prop_get); } // OK } -_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_method = function _C_method() { return __classPrivateFieldGet(this, _C_foo); }; +_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_method = function _C_method() { return __classPrivateFieldGet(this, _C_foo); }, _C_prop_get = function _C_prop_get() { return __classPrivateFieldGet(this, _C_foo); }, _C_prop_set = function _C_prop_set(value) { __classPrivateFieldSet(this, _C_foo, value); }; a.; // Error a.; // Error a.; // Error diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.js b/tests/baselines/reference/privateNamesIncompatibleModifiers.js index 3fb686c0f5313..32a249ac3c5ed 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.js +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.js @@ -57,7 +57,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; -var _A_foo, _A_bar, _A_baz, _A_qux, _A_fooMethod, _A_barMethod, _A_bazMethod, _A_quxMethod, _A_asyncMethod, _A_genMethod, _A_asyncGenMethod, _A_fooProp, _A_fooProp_1, _A_barProp, _A_barProp_1, _A_bazProp, _A_bazProp_1, _A_quxProp, _A_quxProp_1, _A_whatProp, _A_whatProp_1, _A_asyncProp, _A_asyncProp_1, _A_instances; +var _A_foo, _A_bar, _A_baz, _A_qux, _A_fooMethod, _A_barMethod, _A_bazMethod, _A_quxMethod, _A_asyncMethod, _A_genMethod, _A_asyncGenMethod, _A_fooProp_get, _A_fooProp_set, _A_barProp_get, _A_barProp_set, _A_bazProp_get, _A_bazProp_set, _A_quxProp_get, _A_quxProp_set, _A_whatProp_get, _A_whatProp_set, _A_asyncProp_get, _A_asyncProp_set, _A_instances; class A { constructor() { _A_instances.add(this); @@ -66,21 +66,13 @@ class A { _A_baz.set(this, 3); // Error _A_qux.set(this, 3); // OK } - get () { return 3; } // Error - set (value) { } // Error - get () { return 3; } // Error - set (value) { } // Error - get () { return 3; } // Error - set (value) { } // Error - get () { return 3; } // Error - set (value) { } // Error - get () { } // Error - set (value) { } // Error - get () { return 1; } // Error - set (value) { } // Error } _A_foo = new WeakMap(), _A_bar = new WeakMap(), _A_baz = new WeakMap(), _A_qux = new WeakMap(), _A_instances = new WeakSet(), _A_fooMethod = function _A_fooMethod() { return 3; }, _A_barMethod = function _A_barMethod() { return 3; }, _A_bazMethod = function _A_bazMethod() { return 3; }, _A_quxMethod = function _A_quxMethod() { return 3; }, _A_asyncMethod = function _A_asyncMethod() { return __awaiter(this, void 0, void 0, function* () { return 1; }); -}, _A_genMethod = function* _A_genMethod() { return 1; }, _A_asyncGenMethod = function _A_asyncGenMethod() { return __asyncGenerator(this, arguments, function* _A_asyncGenMethod_1() { return yield __await(1); }); }; +}, _A_genMethod = function* _A_genMethod() { return 1; }, _A_asyncGenMethod = function _A_asyncGenMethod() { return __asyncGenerator(this, arguments, function* _A_asyncGenMethod_1() { return yield __await(1); }); }, _A_fooProp_get = function _A_fooProp_get() { return 3; }, _A_fooProp_set = function _A_fooProp_set(value) { }, _A_barProp_get = function _A_barProp_get() { return 3; }, _A_barProp_set = function _A_barProp_set(value) { }, _A_bazProp_get = function _A_bazProp_get() { return 3; }, _A_bazProp_set = function _A_bazProp_set(value) { }, _A_quxProp_get = function _A_quxProp_get() { return 3; }, _A_quxProp_set = function _A_quxProp_set(value) { }, _A_whatProp_get = function _A_whatProp_get() { }, _A_whatProp_set = function _A_whatProp_set(value) { }, _A_asyncProp_get = function _A_asyncProp_get() { + return __awaiter(this, void 0, void 0, function* () { return 1; }); +}, _A_asyncProp_set = function _A_asyncProp_set(value) { + return __awaiter(this, void 0, void 0, function* () { }); +}; class B { } diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.js b/tests/baselines/reference/privateNamesUseBeforeDef.js index b55b9b2077db3..271cde160438e 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.js +++ b/tests/baselines/reference/privateNamesUseBeforeDef.js @@ -33,7 +33,13 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _A_foo, _A_bar, _A2_foo, _A2_bar, _A2_instances, _A3_foo, _A3_bar, _B_foo, _B_bar; +var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); +}; +var _A_foo, _A_bar, _A2_foo, _A2_bar, _A2_instances, _A3_foo, _A3_bar_get, _A3_instances, _B_foo, _B_bar; class A { constructor() { _A_foo.set(this, __classPrivateFieldGet(this, _A_bar)); // Error @@ -51,12 +57,12 @@ class A2 { _A2_foo = new WeakMap(), _A2_instances = new WeakSet(), _A2_bar = function _A2_bar() { return 3; }; class A3 { constructor() { - _A3_foo.set(this, this.); // No Error + _A3_instances.add(this); + _A3_foo.set(this, __classPrivateAccessorGet(this, _A3_instances, _A3_bar_get)); // No Error } - get () { return 3; } ; } -_A3_foo = new WeakMap(); +_A3_foo = new WeakMap(), _A3_instances = new WeakSet(), _A3_bar_get = function _A3_bar_get() { return 3; }; class B { constructor() { _B_foo.set(this, __classPrivateFieldGet(this, _B_bar)); // Error From f3bbf0f6f7e4e0121df3d03ee8b10c6ad83d7408 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Thu, 28 Jan 2021 11:31:50 +0000 Subject: [PATCH 18/73] fix: handle readonly/writeonly accessors Signed-off-by: Kubilay Kahveci --- src/compiler/factory/emitHelpers.ts | 17 +++ src/compiler/transformers/classFields.ts | 142 +++++++++++++++-------- 2 files changed, 112 insertions(+), 47 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index df86a7344740d..33d5d57278806 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -36,6 +36,7 @@ namespace ts { createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression): Expression; createClassPrivateMethodGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; createClassPrivateReadonlyHelper(receiver: Expression, value: Expression): Expression; + createClassPrivateWriteonlyHelper(receiver: Expression): Expression; createClassPrivateAccessorGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; createClassPrivateAccessorSetHelper(receiver: Expression, instances: Identifier, fn: Identifier, value: Expression): Expression; } @@ -78,6 +79,7 @@ namespace ts { createClassPrivateFieldSetHelper, createClassPrivateMethodGetHelper, createClassPrivateReadonlyHelper, + createClassPrivateWriteonlyHelper, createClassPrivateAccessorGetHelper, createClassPrivateAccessorSetHelper, }; @@ -396,6 +398,11 @@ namespace ts { return factory.createCallExpression(getUnscopedHelperName("__classPrivateReadonly"), /*typeArguments*/ undefined, [receiver, value]); } + function createClassPrivateWriteonlyHelper(receiver: Expression) { + context.requestEmitHelper(classPrivateWriteonlyHelper); + return factory.createCallExpression(getUnscopedHelperName("__classPrivateWriteonly"), /*typeArguments*/ undefined, [receiver]); + } + function createClassPrivateAccessorGetHelper(receiver: Expression, instances: Identifier, fn: Identifier) { context.requestEmitHelper(classPrivateAccessorGetHelper); return factory.createCallExpression(getUnscopedHelperName("__classPrivateAccessorGet"), /*typeArguments*/ undefined, [receiver, instances, fn]); @@ -895,6 +902,16 @@ namespace ts { };` }; + export const classPrivateWriteonlyHelper: UnscopedEmitHelper = { + name: "typescript:classPrivateWriteonly", + importName: "__classPrivateWriteonly", + scoped: false, + text: ` + var __classPrivateWriteonly = (this && this.__classPrivateWriteonly) || function () { + throw new TypeError("private element was defined without a getter"); + };` + }; + export const classPrivateAccessorGetHelper: UnscopedEmitHelper = { name: "typescript:classPrivateAccessorGet", importName: "__classPrivateAccessorGet", diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 848064c76df17..3dacb2de108f0 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -11,13 +11,17 @@ namespace ts { const enum PrivateIdentifierPlacement { InstanceField, InstanceMethod, - InstanceAccessor + InstanceGetterOnly, + InstanceSetterOnly, + InstanceGetterAndSetter } type PrivateIdentifierInfo = | PrivateIdentifierInstanceField | PrivateIdentifierInstanceMethod - | PrivateIdentifierInstanceAccessor; + | PrivateIdentifierInstanceGetterOnly + | PrivateIdentifierInstanceSetterOnly + | PrivateIdentifierInstanceGetterAndSetter; interface PrivateIdentifierInstanceField { placement: PrivateIdentifierPlacement.InstanceField; @@ -29,10 +33,20 @@ namespace ts { functionName: Identifier; } - interface PrivateIdentifierInstanceAccessor { - placement: PrivateIdentifierPlacement.InstanceAccessor; - getterName?: Identifier; - setterName?: Identifier; + interface PrivateIdentifierInstanceGetterOnly { + placement: PrivateIdentifierPlacement.InstanceGetterOnly; + getterName: Identifier; + } + + interface PrivateIdentifierInstanceSetterOnly { + placement: PrivateIdentifierPlacement.InstanceSetterOnly; + setterName: Identifier; + } + + interface PrivateIdentifierInstanceGetterAndSetter { + placement: PrivateIdentifierPlacement.InstanceGetterAndSetter; + getterName: Identifier; + setterName: Identifier; } interface PrivateIdentifierEnvironment { @@ -229,20 +243,22 @@ namespace ts { } const functionName = getHoistedFunctionName(node); - getPendingExpressions().push( - factory.createAssignment( - functionName, - factory.createFunctionExpression( - transformedMethod.modifiers, - transformedMethod.asteriskToken, + if (functionName) { + getPendingExpressions().push( + factory.createAssignment( functionName, - transformedMethod.typeParameters, - transformedMethod.parameters, - transformedMethod.type, - transformedMethod.body + factory.createFunctionExpression( + transformedMethod.modifiers, + transformedMethod.asteriskToken, + functionName, + transformedMethod.typeParameters, + transformedMethod.parameters, + transformedMethod.type, + transformedMethod.body + ) ) - ) - ); + ); + } // remove method declaration from class return undefined; @@ -250,25 +266,23 @@ namespace ts { function getHoistedFunctionName(node: MethodDeclaration | AccessorDeclaration) { Debug.assert(isPrivateIdentifier(node.name)); - const privateIdentifierInfo = accessPrivateIdentifier(node.name); - Debug.assert(privateIdentifierInfo, "Undeclared private name for property declaration."); + const info = accessPrivateIdentifier(node.name); + Debug.assert(info, "Undeclared private name for property declaration."); - if (privateIdentifierInfo.placement === PrivateIdentifierPlacement.InstanceMethod) { - return privateIdentifierInfo.functionName; + if (info.placement === PrivateIdentifierPlacement.InstanceMethod) { + return info.functionName; } - if (privateIdentifierInfo.placement === PrivateIdentifierPlacement.InstanceAccessor) { - if (isGetAccessor(node)) { - Debug.assert(privateIdentifierInfo.getterName); - return privateIdentifierInfo.getterName; - } - if (isSetAccessor(node)) { - Debug.assert(privateIdentifierInfo.setterName); - return privateIdentifierInfo.setterName; - } + if (isGetAccessor(node) && + (info.placement === PrivateIdentifierPlacement.InstanceGetterOnly || + info.placement === PrivateIdentifierPlacement.InstanceGetterAndSetter)) { + return info.getterName; + } + if (isSetAccessor(node) && + (info.placement === PrivateIdentifierPlacement.InstanceSetterOnly || + info.placement === PrivateIdentifierPlacement.InstanceGetterAndSetter)) { + return info.setterName; } - - Debug.fail("Unexpected private identifier placement"); } function visitPropertyDeclaration(node: PropertyDeclaration) { @@ -314,13 +328,17 @@ namespace ts { getPrivateIdentifierEnvironment().weakSetName, info.functionName ); - case PrivateIdentifierPlacement.InstanceAccessor: { + case PrivateIdentifierPlacement.InstanceGetterOnly: + case PrivateIdentifierPlacement.InstanceGetterAndSetter: return context.getEmitHelperFactory().createClassPrivateAccessorGetHelper( receiver, getPrivateIdentifierEnvironment().weakSetName, - info.getterName! // TODO: TypeError is missing + info.getterName + ); + case PrivateIdentifierPlacement.InstanceSetterOnly: + return context.getEmitHelperFactory().createClassPrivateWriteonlyHelper( + receiver ); - } default: return Debug.fail("Unexpected private identifier placement"); } } @@ -523,15 +541,17 @@ namespace ts { right ); case PrivateIdentifierPlacement.InstanceMethod: + case PrivateIdentifierPlacement.InstanceGetterOnly: return context.getEmitHelperFactory().createClassPrivateReadonlyHelper( receiver, right ); - case PrivateIdentifierPlacement.InstanceAccessor: + case PrivateIdentifierPlacement.InstanceSetterOnly: + case PrivateIdentifierPlacement.InstanceGetterAndSetter: return context.getEmitHelperFactory().createClassPrivateAccessorSetHelper( receiver, getPrivateIdentifierEnvironment().weakSetName, - info.setterName!, // TODO: TypeError if missing + info.setterName, right ); default: return Debug.fail("Unexpected private identifier placement"); @@ -912,7 +932,6 @@ namespace ts { privateIdentifierInfo.weakMapName ); } - default: return Debug.fail("Unexpected private identifier placement"); } } else { @@ -1103,16 +1122,42 @@ namespace ts { } else if (isAccessor(node)) { const previousInfo = findPreviousAccessorInfo(node); - info = { - ...previousInfo, - placement: PrivateIdentifierPlacement.InstanceAccessor, - }; if (isGetAccessor(node)) { - info.getterName = createHoistedVariableForPrivateName(text + "_get"); + const getterName = createHoistedVariableForPrivateName(text + "_get"); + + if (previousInfo) { + Debug.assert(previousInfo.placement === PrivateIdentifierPlacement.InstanceSetterOnly); + info = { + placement: PrivateIdentifierPlacement.InstanceGetterAndSetter, + getterName, + setterName: previousInfo.setterName + }; + } + else { + info = { + placement: PrivateIdentifierPlacement.InstanceGetterOnly, + getterName + }; + } } else { - info.setterName = createHoistedVariableForPrivateName(text + "_set");; + const setterName = createHoistedVariableForPrivateName(text + "_set"); + + if (previousInfo) { + Debug.assert(previousInfo.placement === PrivateIdentifierPlacement.InstanceGetterOnly); + info = { + placement: PrivateIdentifierPlacement.InstanceGetterAndSetter, + setterName, + getterName: previousInfo.getterName + }; + } + else { + info = { + placement: PrivateIdentifierPlacement.InstanceSetterOnly, + setterName + }; + } } getPrivateIdentifierEnvironment().hasPrivateMethods = true; @@ -1125,9 +1170,12 @@ namespace ts { getPendingExpressions().push(...assignmentExpressions); } - function findPreviousAccessorInfo(node: PrivateIdentifierGetAccessorDeclaration | PrivateIdentifierSetAccessorDeclaration): PrivateIdentifierInstanceAccessor | undefined { + function findPreviousAccessorInfo( + node: PrivateIdentifierGetAccessorDeclaration | PrivateIdentifierSetAccessorDeclaration + ): PrivateIdentifierInstanceGetterOnly | PrivateIdentifierInstanceSetterOnly | undefined { const info = getPrivateIdentifierEnvironment().identifiers.get(node.name.escapedText); - if (info && info.placement === PrivateIdentifierPlacement.InstanceAccessor) { + if (info?.placement === PrivateIdentifierPlacement.InstanceGetterOnly || + info?.placement === PrivateIdentifierPlacement.InstanceSetterOnly) { return info; } } From a1b59cd4fb4649ee00581cc3a8f28d2fe9625055 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Thu, 28 Jan 2021 12:22:30 +0000 Subject: [PATCH 19/73] accept baseline Signed-off-by: Kubilay Kahveci --- .../reference/privateNameAccessors.js | 30 ++++++++++---- .../reference/privateNameDuplicateField.js | 41 ++++++++++--------- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/tests/baselines/reference/privateNameAccessors.js b/tests/baselines/reference/privateNameAccessors.js index 7113a0d3a8102..d08be3efc3678 100644 --- a/tests/baselines/reference/privateNameAccessors.js +++ b/tests/baselines/reference/privateNameAccessors.js @@ -16,15 +16,29 @@ class A1 { //// [privateNameAccessors.js] "use strict"; -var _A1_prop, _A1_prop_1, _A1_roProp; +var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to set private accessor on non-instance"); + } + return fn.call(receiver, value); +}; +var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { + throw new TypeError("private element is not writable"); +}; +var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); +}; +var _A1_prop_get, _A1_prop_set, _A1_roProp_get, _A1_instances; class A1 { constructor(name) { - this. = ""; - this. = ""; // Error - console.log(this.); - console.log(this.); + _A1_instances.add(this); + __classPrivateAccessorSet(this, _A1_instances, _A1_prop_set, ""); + __classPrivateReadonly(this, ""); // Error + console.log(__classPrivateAccessorGet(this, _A1_instances, _A1_prop_get)); + console.log(__classPrivateAccessorGet(this, _A1_instances, _A1_roProp_get)); } - get () { return ""; } - set (param) { } - get () { return ""; } } +_A1_instances = new WeakSet(), _A1_prop_get = function _A1_prop_get() { return ""; }, _A1_prop_set = function _A1_prop_set(param) { }, _A1_roProp_get = function _A1_roProp_get() { return ""; }; diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index bfc66c2cfc743..38760b303ebba 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -36,43 +36,44 @@ class A6 { //// [privateNameDuplicateField.js] "use strict"; -var _foo, _foo_1, _foo_2, _foo_3, _foo_4, _foo_5, _foo_6, _foo_7, _foo_8, _foo_9, _foo_10, _foo_11, _foo_12; +var _A_foo, _A_foo_1, _A2_foo, _A2_foo_1, _A2_instances, _A3_foo, _A3_foo_get, _A3_instances, _A4_foo, _A4_foo_1, _A4_instances, _A5_foo, _A5_foo_get, _A5_instances, _A6_foo, _A6_foo_1, _A6_foo_get, _A6_instances; class A { constructor() { - _foo_1.set(this, "foo"); - _foo_1.set(this, "foo"); + _A_foo_1.set(this, "foo"); + _A_foo_1.set(this, "foo"); } } -_foo = new WeakMap(), _foo_1 = new WeakMap(); +_A_foo = new WeakMap(), _A_foo_1 = new WeakMap(); class A2 { constructor() { - _foo_3.set(this, "foo"); + _A2_instances.add(this); + this.#foo = "foo"; } - () { } } -_foo_2 = new WeakMap(), _foo_3 = new WeakMap(); +_A2_foo = new WeakMap(), _A2_instances = new WeakSet(), _A2_foo_1 = function _A2_foo_1() { }; class A3 { constructor() { - _foo_5.set(this, "foo"); + _A3_instances.add(this); + this.#foo = "foo"; } - get () { return ""; } } -_foo_4 = new WeakMap(), _foo_5 = new WeakMap(); +_A3_foo = new WeakMap(), _A3_instances = new WeakSet(), _A3_foo_get = function _A3_foo_get() { return ""; }; class A4 { - () { return ""; } - () { return ""; } + constructor() { + _A4_instances.add(this); + } } -_foo_6 = new WeakMap(), _foo_7 = new WeakMap(); +_A4_instances = new WeakSet(), _A4_foo_1 = function _A4_foo_1() { return ""; }, _A4_foo_1 = function _A4_foo_1() { return ""; }; class A5 { - () { return ""; } - get () { return ""; } + constructor() { + _A5_instances.add(this); + } } -_foo_8 = new WeakMap(), _foo_9 = new WeakMap(); +_A5_instances = new WeakSet(), _A5_foo_get = function _A5_foo_get() { return ""; }; class A6 { constructor() { - _foo_12.set(this, "foo"); + _A6_instances.add(this); + this.#foo = "foo"; } - () { return ""; } - get () { return ""; } } -_foo_10 = new WeakMap(), _foo_11 = new WeakMap(), _foo_12 = new WeakMap(); +_A6_foo = new WeakMap(), _A6_instances = new WeakSet(), _A6_foo_get = function _A6_foo_get() { return ""; }; From 6b74498c02cd4296f51c02cb448114438dc14b37 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Thu, 28 Jan 2021 13:49:21 +0000 Subject: [PATCH 20/73] add a test for private setter without a getter Signed-off-by: Kubilay Kahveci --- .../reference/privateNameSetterNoGetter.js | 34 +++++++++++++++++++ .../privateNameSetterNoGetter.symbols | 25 ++++++++++++++ .../reference/privateNameSetterNoGetter.types | 31 +++++++++++++++++ .../privateNames/privateNameSetterNoGetter.ts | 10 ++++++ 4 files changed, 100 insertions(+) create mode 100644 tests/baselines/reference/privateNameSetterNoGetter.js create mode 100644 tests/baselines/reference/privateNameSetterNoGetter.symbols create mode 100644 tests/baselines/reference/privateNameSetterNoGetter.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameSetterNoGetter.ts diff --git a/tests/baselines/reference/privateNameSetterNoGetter.js b/tests/baselines/reference/privateNameSetterNoGetter.js new file mode 100644 index 0000000000000..0a94778f30ffc --- /dev/null +++ b/tests/baselines/reference/privateNameSetterNoGetter.js @@ -0,0 +1,34 @@ +//// [privateNameSetterNoGetter.ts] +const C = class { + set #x(x) {} + m() { + this.#x += 2; // Error + } +} + +console.log(new C().m()); + + +//// [privateNameSetterNoGetter.js] +var __classPrivateWriteonly = (this && this.__classPrivateWriteonly) || function () { + throw new TypeError("private element was defined without a getter"); +}; +var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to set private accessor on non-instance"); + } + return fn.call(receiver, value); +}; +var _C_x_set, _C_instances, _a; +const C = (_a = class { + constructor() { + _C_instances.add(this); + } + m() { + __classPrivateAccessorSet(this, _C_instances, _C_x_set, __classPrivateWriteonly(this) + 2); // Error + } + }, + _C_instances = new WeakSet(), + _C_x_set = function _C_x_set(x) { }, + _a); +console.log(new C().m()); diff --git a/tests/baselines/reference/privateNameSetterNoGetter.symbols b/tests/baselines/reference/privateNameSetterNoGetter.symbols new file mode 100644 index 0000000000000..95f0f4f73e99f --- /dev/null +++ b/tests/baselines/reference/privateNameSetterNoGetter.symbols @@ -0,0 +1,25 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameSetterNoGetter.ts === +const C = class { +>C : Symbol(C, Decl(privateNameSetterNoGetter.ts, 0, 5)) + + set #x(x) {} +>#x : Symbol(C.#x, Decl(privateNameSetterNoGetter.ts, 0, 17)) +>x : Symbol(x, Decl(privateNameSetterNoGetter.ts, 1, 11)) + + m() { +>m : Symbol(C.m, Decl(privateNameSetterNoGetter.ts, 1, 16)) + + this.#x += 2; // Error +>this.#x : Symbol(C.#x, Decl(privateNameSetterNoGetter.ts, 0, 17)) +>this : Symbol(C, Decl(privateNameSetterNoGetter.ts, 0, 9)) + } +} + +console.log(new C().m()); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>new C().m : Symbol(C.m, Decl(privateNameSetterNoGetter.ts, 1, 16)) +>C : Symbol(C, Decl(privateNameSetterNoGetter.ts, 0, 5)) +>m : Symbol(C.m, Decl(privateNameSetterNoGetter.ts, 1, 16)) + diff --git a/tests/baselines/reference/privateNameSetterNoGetter.types b/tests/baselines/reference/privateNameSetterNoGetter.types new file mode 100644 index 0000000000000..542069f49ad5e --- /dev/null +++ b/tests/baselines/reference/privateNameSetterNoGetter.types @@ -0,0 +1,31 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameSetterNoGetter.ts === +const C = class { +>C : typeof C +>class { set #x(x) {} m() { this.#x += 2; // Error }} : typeof C + + set #x(x) {} +>#x : any +>x : any + + m() { +>m : () => void + + this.#x += 2; // Error +>this.#x += 2 : any +>this.#x : any +>this : this +>2 : 2 + } +} + +console.log(new C().m()); +>console.log(new C().m()) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>new C().m() : void +>new C().m : () => void +>new C() : C +>C : typeof C +>m : () => void + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameSetterNoGetter.ts b/tests/cases/conformance/classes/members/privateNames/privateNameSetterNoGetter.ts new file mode 100644 index 0000000000000..ae0aeda5efd5e --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameSetterNoGetter.ts @@ -0,0 +1,10 @@ +// @target: es2015 + +const C = class { + set #x(x) {} + m() { + this.#x += 2; // Error + } +} + +console.log(new C().m()); From d51f6cd70168b703cc93256a173d205cf5a9edc5 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Thu, 28 Jan 2021 17:27:05 +0000 Subject: [PATCH 21/73] fix: getAllUnscopedEmitHelpers Signed-off-by: Kubilay Kahveci --- src/compiler/factory/emitHelpers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 33d5d57278806..80576e9aabb11 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -965,6 +965,7 @@ namespace ts { classPrivateFieldSetHelper, classPrivateMethodGetHelper, classPrivateReadonlyHelper, + classPrivateWriteonlyHelper, classPrivateAccessorGetHelper, classPrivateAccessorSetHelper, createBindingHelper, From c1757708a563456e329e8fda7bfecee68f6b75a9 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Fri, 29 Jan 2021 13:56:52 +0000 Subject: [PATCH 22/73] fix: better handling of duplicate names Signed-off-by: Kubilay Kahveci --- src/compiler/transformers/classFields.ts | 2 ++ tests/baselines/reference/privateNameDuplicateField.js | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 3dacb2de108f0..284a72aa2357e 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -932,6 +932,8 @@ namespace ts { privateIdentifierInfo.weakMapName ); } + default: + return undefined; } } else { diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index 38760b303ebba..c4fef233f801b 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -47,14 +47,12 @@ _A_foo = new WeakMap(), _A_foo_1 = new WeakMap(); class A2 { constructor() { _A2_instances.add(this); - this.#foo = "foo"; } } _A2_foo = new WeakMap(), _A2_instances = new WeakSet(), _A2_foo_1 = function _A2_foo_1() { }; class A3 { constructor() { _A3_instances.add(this); - this.#foo = "foo"; } } _A3_foo = new WeakMap(), _A3_instances = new WeakSet(), _A3_foo_get = function _A3_foo_get() { return ""; }; @@ -73,7 +71,6 @@ _A5_instances = new WeakSet(), _A5_foo_get = function _A5_foo_get() { return ""; class A6 { constructor() { _A6_instances.add(this); - this.#foo = "foo"; } } _A6_foo = new WeakMap(), _A6_instances = new WeakSet(), _A6_foo_get = function _A6_foo_get() { return ""; }; From 4301af504c646161d32c7d1571e46fa4b43a049c Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Mon, 1 Feb 2021 12:36:58 +0200 Subject: [PATCH 23/73] Fixed wrong error message for private methods in class expressions. --- src/compiler/checker.ts | 2 +- .../reference/privateNameMethodClassExpression.errors.txt | 5 +---- tests/baselines/reference/privateNameReadonly.errors.txt | 5 +---- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 0627820809b8b..25fdbac8b3bda 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -32315,7 +32315,7 @@ namespace ts { } // Private named methods are only allowed in class declarations - if (isPrivateIdentifier(node.name) && !isClassDeclaration(node.parent)) { + if (isPrivateIdentifier(node.name) && !getContainingClass(node)) { error(node, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); } } diff --git a/tests/baselines/reference/privateNameMethodClassExpression.errors.txt b/tests/baselines/reference/privateNameMethodClassExpression.errors.txt index c03f18b10696b..2b44629ccabbf 100644 --- a/tests/baselines/reference/privateNameMethodClassExpression.errors.txt +++ b/tests/baselines/reference/privateNameMethodClassExpression.errors.txt @@ -1,14 +1,11 @@ -tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts(3,5): error TS18016: Private identifiers are not allowed outside class bodies. tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts(9,17): error TS18013: Property '#method' is not accessible outside class '(anonymous)' because it has a private identifier. tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts(10,17): error TS18013: Property '#field' is not accessible outside class '(anonymous)' because it has a private identifier. -==== tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts (3 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameMethodClassExpression.ts (2 errors) ==== const C = class { #field = this.#method(); #method() { return 42; } - ~~~~~~~ -!!! error TS18016: Private identifiers are not allowed outside class bodies. static getInstance() { return new C(); } getField() { return this.#field }; } diff --git a/tests/baselines/reference/privateNameReadonly.errors.txt b/tests/baselines/reference/privateNameReadonly.errors.txt index df4adc632a809..7f2ea879ec8c6 100644 --- a/tests/baselines/reference/privateNameReadonly.errors.txt +++ b/tests/baselines/reference/privateNameReadonly.errors.txt @@ -1,13 +1,10 @@ -tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(2,5): error TS18016: Private identifiers are not allowed outside class bodies. tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,9): error TS2322: Type 'void' is not assignable to type '() => void'. tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,14): error TS2798: Cannot assign to private method '#bar'. Private methods are not writable. -==== tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts (3 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts (2 errors) ==== const C = class { #bar() {} - ~~~~ -!!! error TS18016: Private identifiers are not allowed outside class bodies. foo() { this.#bar = console.log("should log this then throw"); ~~~~~~~~~ From 3a056b251814227d59bb0e722512537e7a33c2fc Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Mon, 1 Feb 2021 12:35:37 +0000 Subject: [PATCH 24/73] change error message Signed-off-by: Kubilay Kahveci --- src/compiler/factory/emitHelpers.ts | 2 +- tests/baselines/reference/privateNameSetterNoGetter.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 80576e9aabb11..1dc40b01c7b1e 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -908,7 +908,7 @@ namespace ts { scoped: false, text: ` var __classPrivateWriteonly = (this && this.__classPrivateWriteonly) || function () { - throw new TypeError("private element was defined without a getter"); + throw new TypeError("private setter was defined without a getter"); };` }; diff --git a/tests/baselines/reference/privateNameSetterNoGetter.js b/tests/baselines/reference/privateNameSetterNoGetter.js index 0a94778f30ffc..938f74b0f608e 100644 --- a/tests/baselines/reference/privateNameSetterNoGetter.js +++ b/tests/baselines/reference/privateNameSetterNoGetter.js @@ -11,7 +11,7 @@ console.log(new C().m()); //// [privateNameSetterNoGetter.js] var __classPrivateWriteonly = (this && this.__classPrivateWriteonly) || function () { - throw new TypeError("private element was defined without a getter"); + throw new TypeError("private setter was defined without a getter"); }; var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { if (!instances.has(receiver)) { From 95df2d14285cb89a6d9b086d03625022ab1f5dbd Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Mon, 1 Feb 2021 13:32:56 +0000 Subject: [PATCH 25/73] add a test for async private methods with a higher target Signed-off-by: Kubilay Kahveci --- .../reference/privateNameMethodAsync.js | 41 +++++++++ .../reference/privateNameMethodAsync.symbols | 56 ++++++++++++ .../reference/privateNameMethodAsync.types | 86 +++++++++++++++++++ .../privateNames/privateNameMethodAsync.ts | 15 ++++ 4 files changed, 198 insertions(+) create mode 100644 tests/baselines/reference/privateNameMethodAsync.js create mode 100644 tests/baselines/reference/privateNameMethodAsync.symbols create mode 100644 tests/baselines/reference/privateNameMethodAsync.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameMethodAsync.ts diff --git a/tests/baselines/reference/privateNameMethodAsync.js b/tests/baselines/reference/privateNameMethodAsync.js new file mode 100644 index 0000000000000..becbf7b0bcc79 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAsync.js @@ -0,0 +1,41 @@ +//// [privateNameMethodAsync.ts] +const C = class { + async #bar() { return await Promise.resolve(42); } + async foo() { + const b = await this.#bar(); + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); + } + *#baz() { yield 42; } + async *#qux() { + yield (await Promise.resolve(42)); + } +} + +new C().foo().then(console.log); + + +//// [privateNameMethodAsync.js] +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; +}; +var _C_bar, _C_baz, _C_qux, _C_instances, _a; +const C = (_a = class { + constructor() { + _C_instances.add(this); + } + async foo() { + const b = await __classPrivateMethodGet(this, _C_instances, _C_bar).call(this); + return b + (__classPrivateMethodGet(this, _C_instances, _C_baz).call(this).next().value || 0) + ((await __classPrivateMethodGet(this, _C_instances, _C_qux).call(this).next()).value || 0); + } + }, + _C_instances = new WeakSet(), + _C_bar = async function _C_bar() { return await Promise.resolve(42); }, + _C_baz = function* _C_baz() { yield 42; }, + _C_qux = async function* _C_qux() { + yield (await Promise.resolve(42)); + }, + _a); +new C().foo().then(console.log); diff --git a/tests/baselines/reference/privateNameMethodAsync.symbols b/tests/baselines/reference/privateNameMethodAsync.symbols new file mode 100644 index 0000000000000..f3c70cb19eda7 --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAsync.symbols @@ -0,0 +1,56 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodAsync.ts === +const C = class { +>C : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 5)) + + async #bar() { return await Promise.resolve(42); } +>#bar : Symbol(C.#bar, Decl(privateNameMethodAsync.ts, 0, 17)) +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) + + async foo() { +>foo : Symbol(C.foo, Decl(privateNameMethodAsync.ts, 1, 54)) + + const b = await this.#bar(); +>b : Symbol(b, Decl(privateNameMethodAsync.ts, 3, 13)) +>this.#bar : Symbol(C.#bar, Decl(privateNameMethodAsync.ts, 0, 17)) +>this : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 9)) + + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); +>b : Symbol(b, Decl(privateNameMethodAsync.ts, 3, 13)) +>this.#baz().next().value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>this.#baz().next : Symbol(Generator.next, Decl(lib.es2015.generator.d.ts, --, --)) +>this.#baz : Symbol(C.#baz, Decl(privateNameMethodAsync.ts, 5, 5)) +>this : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 9)) +>next : Symbol(Generator.next, Decl(lib.es2015.generator.d.ts, --, --)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>(await this.#qux().next()).value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>this.#qux().next : Symbol(AsyncGenerator.next, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) +>this.#qux : Symbol(C.#qux, Decl(privateNameMethodAsync.ts, 6, 25)) +>this : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 9)) +>next : Symbol(AsyncGenerator.next, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + } + *#baz() { yield 42; } +>#baz : Symbol(C.#baz, Decl(privateNameMethodAsync.ts, 5, 5)) + + async *#qux() { +>#qux : Symbol(C.#qux, Decl(privateNameMethodAsync.ts, 6, 25)) + + yield (await Promise.resolve(42)); +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) + } +} + +new C().foo().then(console.log); +>new C().foo().then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --)) +>new C().foo : Symbol(C.foo, Decl(privateNameMethodAsync.ts, 1, 54)) +>C : Symbol(C, Decl(privateNameMethodAsync.ts, 0, 5)) +>foo : Symbol(C.foo, Decl(privateNameMethodAsync.ts, 1, 54)) +>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --)) +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) + diff --git a/tests/baselines/reference/privateNameMethodAsync.types b/tests/baselines/reference/privateNameMethodAsync.types new file mode 100644 index 0000000000000..3ac547af0404c --- /dev/null +++ b/tests/baselines/reference/privateNameMethodAsync.types @@ -0,0 +1,86 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameMethodAsync.ts === +const C = class { +>C : typeof C +>class { async #bar() { return await Promise.resolve(42); } async foo() { const b = await this.#bar(); return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); } *#baz() { yield 42; } async *#qux() { yield (await Promise.resolve(42)); }} : typeof C + + async #bar() { return await Promise.resolve(42); } +>#bar : () => Promise +>await Promise.resolve(42) : number +>Promise.resolve(42) : Promise +>Promise.resolve : { (): Promise; (value: T | PromiseLike): Promise; } +>Promise : PromiseConstructor +>resolve : { (): Promise; (value: T | PromiseLike): Promise; } +>42 : 42 + + async foo() { +>foo : () => Promise + + const b = await this.#bar(); +>b : number +>await this.#bar() : number +>this.#bar() : Promise +>this.#bar : () => Promise +>this : this + + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); +>b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0) : number +>b + (this.#baz().next().value || 0) : number +>b : number +>(this.#baz().next().value || 0) : number +>this.#baz().next().value || 0 : number +>this.#baz().next().value : number | void +>this.#baz().next() : IteratorResult +>this.#baz().next : (...args: [] | [unknown]) => IteratorResult +>this.#baz() : Generator +>this.#baz : () => Generator +>this : this +>next : (...args: [] | [unknown]) => IteratorResult +>value : number | void +>0 : 0 +>((await this.#qux().next()).value || 0) : number +>(await this.#qux().next()).value || 0 : number +>(await this.#qux().next()).value : number | void +>(await this.#qux().next()) : IteratorResult +>await this.#qux().next() : IteratorResult +>this.#qux().next() : Promise> +>this.#qux().next : (...args: [] | [unknown]) => Promise> +>this.#qux() : AsyncGenerator +>this.#qux : () => AsyncGenerator +>this : this +>next : (...args: [] | [unknown]) => Promise> +>value : number | void +>0 : 0 + } + *#baz() { yield 42; } +>#baz : () => Generator +>yield 42 : any +>42 : 42 + + async *#qux() { +>#qux : () => AsyncGenerator + + yield (await Promise.resolve(42)); +>yield (await Promise.resolve(42)) : any +>(await Promise.resolve(42)) : number +>await Promise.resolve(42) : number +>Promise.resolve(42) : Promise +>Promise.resolve : { (): Promise; (value: T | PromiseLike): Promise; } +>Promise : PromiseConstructor +>resolve : { (): Promise; (value: T | PromiseLike): Promise; } +>42 : 42 + } +} + +new C().foo().then(console.log); +>new C().foo().then(console.log) : Promise +>new C().foo().then : (onfulfilled?: (value: number) => TResult1 | PromiseLike, onrejected?: (reason: any) => TResult2 | PromiseLike) => Promise +>new C().foo() : Promise +>new C().foo : () => Promise +>new C() : C +>C : typeof C +>foo : () => Promise +>then : (onfulfilled?: (value: number) => TResult1 | PromiseLike, onrejected?: (reason: any) => TResult2 | PromiseLike) => Promise +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameMethodAsync.ts b/tests/cases/conformance/classes/members/privateNames/privateNameMethodAsync.ts new file mode 100644 index 0000000000000..1b1cc59d99d42 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameMethodAsync.ts @@ -0,0 +1,15 @@ +// @target: es2019 + +const C = class { + async #bar() { return await Promise.resolve(42); } + async foo() { + const b = await this.#bar(); + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); + } + *#baz() { yield 42; } + async *#qux() { + yield (await Promise.resolve(42)); + } +} + +new C().foo().then(console.log); From 590124e22528b7f43b33a59738a241b2aa66ac1b Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 3 Feb 2021 10:01:22 +0000 Subject: [PATCH 26/73] fix: setter assignment returns rhs value Signed-off-by: Kubilay Kahveci --- src/compiler/factory/emitHelpers.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 1dc40b01c7b1e..8e629bb96e663 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -934,7 +934,8 @@ namespace ts { if (!instances.has(receiver)) { throw new TypeError("attempted to set private accessor on non-instance"); } - return fn.call(receiver, value); + fn.call(receiver, value); + return value; };` }; From 219ea8340f510034bdbfc161c880616a87197da7 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 3 Feb 2021 10:02:45 +0000 Subject: [PATCH 27/73] add a test for setter assignment return value Signed-off-by: Kubilay Kahveci --- .../reference/privateNameAccessors.js | 3 +- .../privateNameSetterExprReturnValue.js | 32 ++++++++++++++++ .../privateNameSetterExprReturnValue.symbols | 29 +++++++++++++++ .../privateNameSetterExprReturnValue.types | 37 +++++++++++++++++++ .../reference/privateNameSetterNoGetter.js | 3 +- .../privateNameSetterExprReturnValue.ts | 11 ++++++ 6 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/privateNameSetterExprReturnValue.js create mode 100644 tests/baselines/reference/privateNameSetterExprReturnValue.symbols create mode 100644 tests/baselines/reference/privateNameSetterExprReturnValue.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameSetterExprReturnValue.ts diff --git a/tests/baselines/reference/privateNameAccessors.js b/tests/baselines/reference/privateNameAccessors.js index d08be3efc3678..dd0b577b5a754 100644 --- a/tests/baselines/reference/privateNameAccessors.js +++ b/tests/baselines/reference/privateNameAccessors.js @@ -20,7 +20,8 @@ var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || func if (!instances.has(receiver)) { throw new TypeError("attempted to set private accessor on non-instance"); } - return fn.call(receiver, value); + fn.call(receiver, value); + return value; }; var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { throw new TypeError("private element is not writable"); diff --git a/tests/baselines/reference/privateNameSetterExprReturnValue.js b/tests/baselines/reference/privateNameSetterExprReturnValue.js new file mode 100644 index 0000000000000..06d8d9cc5807e --- /dev/null +++ b/tests/baselines/reference/privateNameSetterExprReturnValue.js @@ -0,0 +1,32 @@ +//// [privateNameSetterExprReturnValue.ts] +class C { + set #foo(a: number) {} + bar() { + let x = (this.#foo = 42 * 2); + console.log(x); // 84 + } +} + +new C().bar(); + + +//// [privateNameSetterExprReturnValue.js] +var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to set private accessor on non-instance"); + } + fn.call(receiver, value); + return value; +}; +var _C_foo_set, _C_instances; +class C { + constructor() { + _C_instances.add(this); + } + bar() { + let x = (__classPrivateAccessorSet(this, _C_instances, _C_foo_set, 42 * 2)); + console.log(x); // 84 + } +} +_C_instances = new WeakSet(), _C_foo_set = function _C_foo_set(a) { }; +new C().bar(); diff --git a/tests/baselines/reference/privateNameSetterExprReturnValue.symbols b/tests/baselines/reference/privateNameSetterExprReturnValue.symbols new file mode 100644 index 0000000000000..56f6e1099bff2 --- /dev/null +++ b/tests/baselines/reference/privateNameSetterExprReturnValue.symbols @@ -0,0 +1,29 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameSetterExprReturnValue.ts === +class C { +>C : Symbol(C, Decl(privateNameSetterExprReturnValue.ts, 0, 0)) + + set #foo(a: number) {} +>#foo : Symbol(C.#foo, Decl(privateNameSetterExprReturnValue.ts, 0, 9)) +>a : Symbol(a, Decl(privateNameSetterExprReturnValue.ts, 1, 13)) + + bar() { +>bar : Symbol(C.bar, Decl(privateNameSetterExprReturnValue.ts, 1, 26)) + + let x = (this.#foo = 42 * 2); +>x : Symbol(x, Decl(privateNameSetterExprReturnValue.ts, 3, 11)) +>this.#foo : Symbol(C.#foo, Decl(privateNameSetterExprReturnValue.ts, 0, 9)) +>this : Symbol(C, Decl(privateNameSetterExprReturnValue.ts, 0, 0)) + + console.log(x); // 84 +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x : Symbol(x, Decl(privateNameSetterExprReturnValue.ts, 3, 11)) + } +} + +new C().bar(); +>new C().bar : Symbol(C.bar, Decl(privateNameSetterExprReturnValue.ts, 1, 26)) +>C : Symbol(C, Decl(privateNameSetterExprReturnValue.ts, 0, 0)) +>bar : Symbol(C.bar, Decl(privateNameSetterExprReturnValue.ts, 1, 26)) + diff --git a/tests/baselines/reference/privateNameSetterExprReturnValue.types b/tests/baselines/reference/privateNameSetterExprReturnValue.types new file mode 100644 index 0000000000000..2713756c0ab69 --- /dev/null +++ b/tests/baselines/reference/privateNameSetterExprReturnValue.types @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameSetterExprReturnValue.ts === +class C { +>C : C + + set #foo(a: number) {} +>#foo : number +>a : number + + bar() { +>bar : () => void + + let x = (this.#foo = 42 * 2); +>x : number +>(this.#foo = 42 * 2) : number +>this.#foo = 42 * 2 : number +>this.#foo : number +>this : this +>42 * 2 : number +>42 : 42 +>2 : 2 + + console.log(x); // 84 +>console.log(x) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x : number + } +} + +new C().bar(); +>new C().bar() : void +>new C().bar : () => void +>new C() : C +>C : typeof C +>bar : () => void + diff --git a/tests/baselines/reference/privateNameSetterNoGetter.js b/tests/baselines/reference/privateNameSetterNoGetter.js index 938f74b0f608e..2d3823faef87e 100644 --- a/tests/baselines/reference/privateNameSetterNoGetter.js +++ b/tests/baselines/reference/privateNameSetterNoGetter.js @@ -17,7 +17,8 @@ var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || func if (!instances.has(receiver)) { throw new TypeError("attempted to set private accessor on non-instance"); } - return fn.call(receiver, value); + fn.call(receiver, value); + return value; }; var _C_x_set, _C_instances, _a; const C = (_a = class { diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameSetterExprReturnValue.ts b/tests/cases/conformance/classes/members/privateNames/privateNameSetterExprReturnValue.ts new file mode 100644 index 0000000000000..c9def078b2994 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameSetterExprReturnValue.ts @@ -0,0 +1,11 @@ +// @target: es2019 + +class C { + set #foo(a: number) {} + bar() { + let x = (this.#foo = 42 * 2); + console.log(x); // 84 + } +} + +new C().bar(); From 25da8caf53ce241a61d1b876fa8c857a966b86b2 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 3 Feb 2021 10:08:43 +0000 Subject: [PATCH 28/73] fix: handle duplicate accessors Signed-off-by: Kubilay Kahveci --- src/compiler/transformers/classFields.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 284a72aa2357e..01b7e6281efe9 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -1128,8 +1128,7 @@ namespace ts { if (isGetAccessor(node)) { const getterName = createHoistedVariableForPrivateName(text + "_get"); - if (previousInfo) { - Debug.assert(previousInfo.placement === PrivateIdentifierPlacement.InstanceSetterOnly); + if (previousInfo?.placement === PrivateIdentifierPlacement.InstanceSetterOnly) { info = { placement: PrivateIdentifierPlacement.InstanceGetterAndSetter, getterName, @@ -1146,8 +1145,7 @@ namespace ts { else { const setterName = createHoistedVariableForPrivateName(text + "_set"); - if (previousInfo) { - Debug.assert(previousInfo.placement === PrivateIdentifierPlacement.InstanceGetterOnly); + if (previousInfo?.placement === PrivateIdentifierPlacement.InstanceGetterOnly) { info = { placement: PrivateIdentifierPlacement.InstanceGetterAndSetter, setterName, From a2228bed99f5d96cae93d1f1e8c423dab09fa5df Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 3 Feb 2021 10:12:58 +0000 Subject: [PATCH 29/73] add tests for duplicate accessors Signed-off-by: Kubilay Kahveci --- .../privateNameDuplicateField.errors.txt | 43 +++++++++++++++++- .../reference/privateNameDuplicateField.js | 37 +++++++++++++++- .../privateNameDuplicateField.symbols | 40 +++++++++++++++++ .../reference/privateNameDuplicateField.types | 44 +++++++++++++++++++ .../privateNames/privateNameDuplicateField.ts | 17 +++++++ 5 files changed, 179 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/privateNameDuplicateField.errors.txt b/tests/baselines/reference/privateNameDuplicateField.errors.txt index 519a2b85f2657..c724fd80b6713 100644 --- a/tests/baselines/reference/privateNameDuplicateField.errors.txt +++ b/tests/baselines/reference/privateNameDuplicateField.errors.txt @@ -10,9 +10,17 @@ tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.t tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(30,5): error TS2300: Duplicate identifier '#foo'. tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(31,5): error TS2300: Duplicate identifier '#foo'. tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(32,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(36,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(37,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(41,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(42,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(46,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(47,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(48,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(49,9): error TS2300: Duplicate identifier '#foo'. -==== tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts (12 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts (20 errors) ==== class A { #foo = "foo"; #foo = "foo"; @@ -70,4 +78,37 @@ tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.t ~~~~ !!! error TS2300: Duplicate identifier '#foo'. } + + class A7 { + get #foo() { return ""; } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + get #foo() { return ""; } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + class A8 { + set #foo(a: string) {} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + set #foo(a: string) {} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + class A9 { + get #foo() { return ""; } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + set #foo(a: string) {} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + get #foo() { return ""; } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + set #foo(a: string) {} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index c4fef233f801b..820f9e76f6fdb 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -32,11 +32,28 @@ class A6 { #foo() { return ""} get #foo() { return ""} } + +class A7 { + get #foo() { return ""; } + get #foo() { return ""; } +} + +class A8 { + set #foo(a: string) {} + set #foo(a: string) {} +} + +class A9 { + get #foo() { return ""; } + set #foo(a: string) {} + get #foo() { return ""; } + set #foo(a: string) {} +} //// [privateNameDuplicateField.js] "use strict"; -var _A_foo, _A_foo_1, _A2_foo, _A2_foo_1, _A2_instances, _A3_foo, _A3_foo_get, _A3_instances, _A4_foo, _A4_foo_1, _A4_instances, _A5_foo, _A5_foo_get, _A5_instances, _A6_foo, _A6_foo_1, _A6_foo_get, _A6_instances; +var _A_foo, _A_foo_1, _A2_foo, _A2_foo_1, _A2_instances, _A3_foo, _A3_foo_get, _A3_instances, _A4_foo, _A4_foo_1, _A4_instances, _A5_foo, _A5_foo_get, _A5_instances, _A6_foo, _A6_foo_1, _A6_foo_get, _A6_instances, _A7_foo_get, _A7_foo_get_1, _A7_instances, _A8_foo_set, _A8_foo_set_1, _A8_instances, _A9_foo_get, _A9_foo_set, _A9_foo_get_1, _A9_foo_set_1, _A9_instances; class A { constructor() { _A_foo_1.set(this, "foo"); @@ -74,3 +91,21 @@ class A6 { } } _A6_foo = new WeakMap(), _A6_instances = new WeakSet(), _A6_foo_get = function _A6_foo_get() { return ""; }; +class A7 { + constructor() { + _A7_instances.add(this); + } +} +_A7_instances = new WeakSet(), _A7_foo_get_1 = function _A7_foo_get_1() { return ""; }, _A7_foo_get_1 = function _A7_foo_get_1() { return ""; }; +class A8 { + constructor() { + _A8_instances.add(this); + } +} +_A8_instances = new WeakSet(), _A8_foo_set_1 = function _A8_foo_set_1(a) { }, _A8_foo_set_1 = function _A8_foo_set_1(a) { }; +class A9 { + constructor() { + _A9_instances.add(this); + } +} +_A9_instances = new WeakSet(), _A9_foo_get_1 = function _A9_foo_get_1() { return ""; }, _A9_foo_set_1 = function _A9_foo_set_1(a) { }, _A9_foo_get_1 = function _A9_foo_get_1() { return ""; }, _A9_foo_set_1 = function _A9_foo_set_1(a) { }; diff --git a/tests/baselines/reference/privateNameDuplicateField.symbols b/tests/baselines/reference/privateNameDuplicateField.symbols index 85c8eb0ecb05d..bc037e01e8119 100644 --- a/tests/baselines/reference/privateNameDuplicateField.symbols +++ b/tests/baselines/reference/privateNameDuplicateField.symbols @@ -65,3 +65,43 @@ class A6 { >#foo : Symbol(A6.#foo, Decl(privateNameDuplicateField.ts, 30, 23)) } +class A7 { +>A7 : Symbol(A7, Decl(privateNameDuplicateField.ts, 32, 1)) + + get #foo() { return ""; } +>#foo : Symbol(A7.#foo, Decl(privateNameDuplicateField.ts, 34, 10)) + + get #foo() { return ""; } +>#foo : Symbol(A7.#foo, Decl(privateNameDuplicateField.ts, 35, 29)) +} + +class A8 { +>A8 : Symbol(A8, Decl(privateNameDuplicateField.ts, 37, 1)) + + set #foo(a: string) {} +>#foo : Symbol(A8.#foo, Decl(privateNameDuplicateField.ts, 39, 10)) +>a : Symbol(a, Decl(privateNameDuplicateField.ts, 40, 13)) + + set #foo(a: string) {} +>#foo : Symbol(A8.#foo, Decl(privateNameDuplicateField.ts, 40, 26)) +>a : Symbol(a, Decl(privateNameDuplicateField.ts, 41, 13)) +} + +class A9 { +>A9 : Symbol(A9, Decl(privateNameDuplicateField.ts, 42, 1)) + + get #foo() { return ""; } +>#foo : Symbol(A9.#foo, Decl(privateNameDuplicateField.ts, 44, 10), Decl(privateNameDuplicateField.ts, 45, 29)) + + set #foo(a: string) {} +>#foo : Symbol(A9.#foo, Decl(privateNameDuplicateField.ts, 44, 10), Decl(privateNameDuplicateField.ts, 45, 29)) +>a : Symbol(a, Decl(privateNameDuplicateField.ts, 46, 13)) + + get #foo() { return ""; } +>#foo : Symbol(A9.#foo, Decl(privateNameDuplicateField.ts, 46, 26)) + + set #foo(a: string) {} +>#foo : Symbol(A9.#foo, Decl(privateNameDuplicateField.ts, 47, 29)) +>a : Symbol(a, Decl(privateNameDuplicateField.ts, 48, 13)) +} + diff --git a/tests/baselines/reference/privateNameDuplicateField.types b/tests/baselines/reference/privateNameDuplicateField.types index 962b1282c5c5a..7b60a0bb2fca5 100644 --- a/tests/baselines/reference/privateNameDuplicateField.types +++ b/tests/baselines/reference/privateNameDuplicateField.types @@ -77,3 +77,47 @@ class A6 { >"" : "" } +class A7 { +>A7 : A7 + + get #foo() { return ""; } +>#foo : string +>"" : "" + + get #foo() { return ""; } +>#foo : string +>"" : "" +} + +class A8 { +>A8 : A8 + + set #foo(a: string) {} +>#foo : string +>a : string + + set #foo(a: string) {} +>#foo : string +>a : string +} + +class A9 { +>A9 : A9 + + get #foo() { return ""; } +>#foo : string +>"" : "" + + set #foo(a: string) {} +>#foo : string +>a : string + + get #foo() { return ""; } +>#foo : string +>"" : "" + + set #foo(a: string) {} +>#foo : string +>a : string +} + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts b/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts index e2b911b0afd40..3959fcdb8b85f 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts @@ -34,3 +34,20 @@ class A6 { #foo() { return ""} get #foo() { return ""} } + +class A7 { + get #foo() { return ""; } + get #foo() { return ""; } +} + +class A8 { + set #foo(a: string) {} + set #foo(a: string) {} +} + +class A9 { + get #foo() { return ""; } + set #foo(a: string) {} + get #foo() { return ""; } + set #foo(a: string) {} +} From ff4f73785e0e03c197bf373a4a43337b6c7ed274 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 3 Feb 2021 10:59:45 +0000 Subject: [PATCH 30/73] docs: add missing parameter docs Signed-off-by: Kubilay Kahveci --- src/compiler/transformers/classFields.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 01b7e6281efe9..f14866f4b90b2 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -981,6 +981,7 @@ namespace ts { /** * Generates brand-check initializer for private methods. * + * @param statements Statement list that should be used to append new statements. * @param methods An array of method declarations. * @param receiver The receiver on which each method should be assigned. */ From 704727cb24b949658baa4e252b4f11a07a177244 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Wed, 3 Feb 2021 19:38:40 +0200 Subject: [PATCH 31/73] Fixed failing test. --- tests/baselines/reference/privateNameReadonly.errors.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/privateNameReadonly.errors.txt b/tests/baselines/reference/privateNameReadonly.errors.txt index 7f2ea879ec8c6..6cdef381c04aa 100644 --- a/tests/baselines/reference/privateNameReadonly.errors.txt +++ b/tests/baselines/reference/privateNameReadonly.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,9): error TS2322: Type 'void' is not assignable to type '() => void'. -tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,14): error TS2798: Cannot assign to private method '#bar'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,14): error TS2801: Cannot assign to private method '#bar'. Private methods are not writable. ==== tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts (2 errors) ==== @@ -10,7 +10,7 @@ tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,14 ~~~~~~~~~ !!! error TS2322: Type 'void' is not assignable to type '() => void'. ~~~~ -!!! error TS2798: Cannot assign to private method '#bar'. Private methods are not writable. +!!! error TS2801: Cannot assign to private method '#bar'. Private methods are not writable. } } From 73925dcc1c523c53770da809a48f6628ccf96c23 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Feb 2021 13:18:27 +0000 Subject: [PATCH 32/73] baseline-accept: ordering changes Signed-off-by: Kubilay Kahveci --- tests/baselines/reference/privateNameAccessors.js | 2 +- tests/baselines/reference/privateNameAccessorsAccess.js | 2 +- .../baselines/reference/privateNameAccessorsCallExpression.js | 2 +- .../reference/privateNameAccessorssDerivedClasses.js | 2 +- tests/baselines/reference/privateNameConstructorReserved.js | 2 +- tests/baselines/reference/privateNameDuplicateField.js | 2 +- tests/baselines/reference/privateNameES5Ban(target=es3).js | 2 +- tests/baselines/reference/privateNameES5Ban(target=es5).js | 2 +- tests/baselines/reference/privateNameMethod.js | 2 +- tests/baselines/reference/privateNameMethodAccess.js | 2 +- tests/baselines/reference/privateNameMethodAssignment.js | 2 +- tests/baselines/reference/privateNameMethodAsync.js | 2 +- tests/baselines/reference/privateNameMethodCallExpression.js | 2 +- tests/baselines/reference/privateNameMethodClassExpression.js | 2 +- .../baselines/reference/privateNameMethodInStaticFieldInit.js | 2 +- tests/baselines/reference/privateNameMethodsDerivedClasses.js | 2 +- .../reference/privateNameNestedClassAccessorsShadowing.js | 4 ++-- .../reference/privateNameNestedClassMethodShadowing.js | 4 ++-- tests/baselines/reference/privateNameReadonly.js | 2 +- tests/baselines/reference/privateNameSetterExprReturnValue.js | 2 +- tests/baselines/reference/privateNameSetterNoGetter.js | 2 +- tests/baselines/reference/privateNamesAndDecorators.js | 2 +- tests/baselines/reference/privateNamesAndGenericClasses-2.js | 2 +- tests/baselines/reference/privateNamesAndkeyof.js | 2 +- tests/baselines/reference/privateNamesInGenericClasses.js | 2 +- .../baselines/reference/privateNamesIncompatibleModifiers.js | 2 +- tests/baselines/reference/privateNamesUseBeforeDef.js | 2 +- 27 files changed, 29 insertions(+), 29 deletions(-) diff --git a/tests/baselines/reference/privateNameAccessors.js b/tests/baselines/reference/privateNameAccessors.js index dd0b577b5a754..f2c736fa52376 100644 --- a/tests/baselines/reference/privateNameAccessors.js +++ b/tests/baselines/reference/privateNameAccessors.js @@ -32,7 +32,7 @@ var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || func } return fn.call(receiver); }; -var _A1_prop_get, _A1_prop_set, _A1_roProp_get, _A1_instances; +var _A1_instances, _A1_prop_get, _A1_prop_set, _A1_roProp_get; class A1 { constructor(name) { _A1_instances.add(this); diff --git a/tests/baselines/reference/privateNameAccessorsAccess.js b/tests/baselines/reference/privateNameAccessorsAccess.js index 06f2cde867b75..5420d8bec82bb 100644 --- a/tests/baselines/reference/privateNameAccessorsAccess.js +++ b/tests/baselines/reference/privateNameAccessorsAccess.js @@ -32,7 +32,7 @@ var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || func } return fn.call(receiver); }; -var _A2_prop_get, _A2_prop_set, _A2_instances; +var _A2_instances, _A2_prop_get, _A2_prop_set; class A2 { constructor() { _A2_instances.add(this); diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.js b/tests/baselines/reference/privateNameAccessorsCallExpression.js index f3cf7687d6438..edfc6ae9aa08c 100644 --- a/tests/baselines/reference/privateNameAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.js @@ -25,7 +25,7 @@ var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || func } return fn.call(receiver); }; -var _A_fieldFunc_get, _A_fieldFunc2_get, _A_instances; +var _A_instances, _A_fieldFunc_get, _A_fieldFunc2_get; class A { constructor() { _A_instances.add(this); diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js index 42e518dd1e827..445716f35f753 100644 --- a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js @@ -19,7 +19,7 @@ var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || func } return fn.call(receiver); }; -var _Base_prop_get, _Base_instances; +var _Base_instances, _Base_prop_get; class Base { constructor() { _Base_instances.add(this); diff --git a/tests/baselines/reference/privateNameConstructorReserved.js b/tests/baselines/reference/privateNameConstructorReserved.js index b3e48fdb5bf69..d1de278658b38 100644 --- a/tests/baselines/reference/privateNameConstructorReserved.js +++ b/tests/baselines/reference/privateNameConstructorReserved.js @@ -5,7 +5,7 @@ class A { //// [privateNameConstructorReserved.js] -var _A_constructor, _A_instances; +var _A_instances, _A_constructor; class A { constructor() { _A_instances.add(this); diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index 820f9e76f6fdb..4120187527a1f 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -53,7 +53,7 @@ class A9 { //// [privateNameDuplicateField.js] "use strict"; -var _A_foo, _A_foo_1, _A2_foo, _A2_foo_1, _A2_instances, _A3_foo, _A3_foo_get, _A3_instances, _A4_foo, _A4_foo_1, _A4_instances, _A5_foo, _A5_foo_get, _A5_instances, _A6_foo, _A6_foo_1, _A6_foo_get, _A6_instances, _A7_foo_get, _A7_foo_get_1, _A7_instances, _A8_foo_set, _A8_foo_set_1, _A8_instances, _A9_foo_get, _A9_foo_set, _A9_foo_get_1, _A9_foo_set_1, _A9_instances; +var _A_foo, _A_foo_1, _A2_instances, _A2_foo, _A2_foo_1, _A3_instances, _A3_foo, _A3_foo_get, _A4_instances, _A4_foo, _A4_foo_1, _A5_instances, _A5_foo, _A5_foo_get, _A6_instances, _A6_foo, _A6_foo_1, _A6_foo_get, _A7_instances, _A7_foo_get, _A7_foo_get_1, _A8_instances, _A8_foo_set, _A8_foo_set_1, _A9_instances, _A9_foo_get, _A9_foo_set, _A9_foo_get_1, _A9_foo_set_1; class A { constructor() { _A_foo_1.set(this, "foo"); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index 24a301e676033..d32433a42867e 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -19,7 +19,7 @@ var A = /** @class */ (function () { _A_instances.add(this); _A_field.set(this, 123); } - var _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set, _A_instances; + var _A_instances, _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set; _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; _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 24a301e676033..d32433a42867e 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -19,7 +19,7 @@ var A = /** @class */ (function () { _A_instances.add(this); _A_field.set(this, 123); } - var _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set, _A_instances; + var _A_instances, _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set; _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; _A_sField.set(A, "hello world"); return A; diff --git a/tests/baselines/reference/privateNameMethod.js b/tests/baselines/reference/privateNameMethod.js index 1fda4cb711940..204ea377e1590 100644 --- a/tests/baselines/reference/privateNameMethod.js +++ b/tests/baselines/reference/privateNameMethod.js @@ -20,7 +20,7 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _A1_method, _A1_instances; +var _A1_instances, _A1_method; class A1 { constructor(name) { _A1_instances.add(this); diff --git a/tests/baselines/reference/privateNameMethodAccess.js b/tests/baselines/reference/privateNameMethodAccess.js index ce3d039c67fd0..7d07b2275238e 100644 --- a/tests/baselines/reference/privateNameMethodAccess.js +++ b/tests/baselines/reference/privateNameMethodAccess.js @@ -30,7 +30,7 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _A2_method, _A2_instances, _a; +var _A2_instances, _A2_method, _a; class A2 { constructor() { _A2_instances.add(this); diff --git a/tests/baselines/reference/privateNameMethodAssignment.js b/tests/baselines/reference/privateNameMethodAssignment.js index 2b1618e9938c7..3e1041bad4e47 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.js +++ b/tests/baselines/reference/privateNameMethodAssignment.js @@ -22,7 +22,7 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _A3_method, _A3_instances; +var _A3_instances, _A3_method; class A3 { constructor(a, b) { var _a, _b; diff --git a/tests/baselines/reference/privateNameMethodAsync.js b/tests/baselines/reference/privateNameMethodAsync.js index becbf7b0bcc79..1e9924c5e35d0 100644 --- a/tests/baselines/reference/privateNameMethodAsync.js +++ b/tests/baselines/reference/privateNameMethodAsync.js @@ -21,7 +21,7 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _C_bar, _C_baz, _C_qux, _C_instances, _a; +var _C_instances, _C_bar, _C_baz, _C_qux, _a; const C = (_a = class { constructor() { _C_instances.add(this); diff --git a/tests/baselines/reference/privateNameMethodCallExpression.js b/tests/baselines/reference/privateNameMethodCallExpression.js index b97b529024177..7d1ac5e672104 100644 --- a/tests/baselines/reference/privateNameMethodCallExpression.js +++ b/tests/baselines/reference/privateNameMethodCallExpression.js @@ -31,7 +31,7 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _AA_method, _AA_method2, _AA_instances; +var _AA_instances, _AA_method, _AA_method2; class AA { constructor() { _AA_instances.add(this); diff --git a/tests/baselines/reference/privateNameMethodClassExpression.js b/tests/baselines/reference/privateNameMethodClassExpression.js index e4a327c16d219..af2caf339cef9 100644 --- a/tests/baselines/reference/privateNameMethodClassExpression.js +++ b/tests/baselines/reference/privateNameMethodClassExpression.js @@ -25,7 +25,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _C_field, _C_method, _C_instances, _a; +var _C_instances, _C_field, _C_method, _a; const C = (_a = class { constructor() { _C_instances.add(this); diff --git a/tests/baselines/reference/privateNameMethodInStaticFieldInit.js b/tests/baselines/reference/privateNameMethodInStaticFieldInit.js index 4ea2c49e6ba85..0b330e3ed2109 100644 --- a/tests/baselines/reference/privateNameMethodInStaticFieldInit.js +++ b/tests/baselines/reference/privateNameMethodInStaticFieldInit.js @@ -14,7 +14,7 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _C_method, _C_instances, _a; +var _C_instances, _C_method, _a; class C { constructor() { _C_instances.add(this); diff --git a/tests/baselines/reference/privateNameMethodsDerivedClasses.js b/tests/baselines/reference/privateNameMethodsDerivedClasses.js index cff6820a5cae7..509e385aec786 100644 --- a/tests/baselines/reference/privateNameMethodsDerivedClasses.js +++ b/tests/baselines/reference/privateNameMethodsDerivedClasses.js @@ -19,7 +19,7 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _Base_prop, _Base_instances; +var _Base_instances, _Base_prop; class Base { constructor() { _Base_instances.add(this); diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js index b650ce90b7d2d..c41b08adf1506 100644 --- a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js @@ -22,10 +22,10 @@ var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || func } return fn.call(receiver); }; -var _Base_x_get, _Base_instances; +var _Base_instances, _Base_x_get; class Base { constructor() { - var _Derived_x_get, _Derived_instances; + var _Derived_instances, _Derived_x_get; _Base_instances.add(this); class Derived { constructor() { diff --git a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js index b8141f77f69f9..da45fba97e18d 100644 --- a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js @@ -22,10 +22,10 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _Base_x, _Base_instances; +var _Base_instances, _Base_x; class Base { constructor() { - var _Derived_x, _Derived_instances; + var _Derived_instances, _Derived_x; _Base_instances.add(this); class Derived { constructor() { diff --git a/tests/baselines/reference/privateNameReadonly.js b/tests/baselines/reference/privateNameReadonly.js index 53d39ac5c7164..b87dd98372218 100644 --- a/tests/baselines/reference/privateNameReadonly.js +++ b/tests/baselines/reference/privateNameReadonly.js @@ -13,7 +13,7 @@ console.log(new C().foo()); var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { throw new TypeError("private element is not writable"); }; -var _C_bar, _C_instances, _a; +var _C_instances, _C_bar, _a; const C = (_a = class { constructor() { _C_instances.add(this); diff --git a/tests/baselines/reference/privateNameSetterExprReturnValue.js b/tests/baselines/reference/privateNameSetterExprReturnValue.js index 06d8d9cc5807e..f4ef50f2d28d2 100644 --- a/tests/baselines/reference/privateNameSetterExprReturnValue.js +++ b/tests/baselines/reference/privateNameSetterExprReturnValue.js @@ -18,7 +18,7 @@ var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || func fn.call(receiver, value); return value; }; -var _C_foo_set, _C_instances; +var _C_instances, _C_foo_set; class C { constructor() { _C_instances.add(this); diff --git a/tests/baselines/reference/privateNameSetterNoGetter.js b/tests/baselines/reference/privateNameSetterNoGetter.js index 2d3823faef87e..3a4c9e97ea619 100644 --- a/tests/baselines/reference/privateNameSetterNoGetter.js +++ b/tests/baselines/reference/privateNameSetterNoGetter.js @@ -20,7 +20,7 @@ var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || func fn.call(receiver, value); return value; }; -var _C_x_set, _C_instances, _a; +var _C_instances, _C_x_set, _a; const C = (_a = class { constructor() { _C_instances.add(this); diff --git a/tests/baselines/reference/privateNamesAndDecorators.js b/tests/baselines/reference/privateNamesAndDecorators.js index 9fd8181f6f006..087ad2bb9a512 100644 --- a/tests/baselines/reference/privateNamesAndDecorators.js +++ b/tests/baselines/reference/privateNamesAndDecorators.js @@ -10,7 +10,7 @@ class A { //// [privateNamesAndDecorators.js] -var _A_foo, _A_bar, _A_instances; +var _A_instances, _A_foo, _A_bar; var A = /** @class */ (function () { function A() { _A_instances.add(this); diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.js b/tests/baselines/reference/privateNamesAndGenericClasses-2.js index f9901a710c269..ba3bb5e3942b1 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.js +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.js @@ -48,7 +48,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _C_foo, _C_bar, _C_instances; +var _C_instances, _C_foo, _C_bar; class C { constructor(t) { _C_instances.add(this); diff --git a/tests/baselines/reference/privateNamesAndkeyof.js b/tests/baselines/reference/privateNamesAndkeyof.js index 20d4e1122013c..c250a02741afd 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.js +++ b/tests/baselines/reference/privateNamesAndkeyof.js @@ -13,7 +13,7 @@ type T = keyof A // should not include '#foo*' //// [privateNamesAndkeyof.js] "use strict"; -var _A_fooField, _A_fooMethod, _A_fooProp_get, _A_fooProp_set, _A_instances; +var _A_instances, _A_fooField, _A_fooMethod, _A_fooProp_get, _A_fooProp_set; class A { constructor() { _A_instances.add(this); diff --git a/tests/baselines/reference/privateNamesInGenericClasses.js b/tests/baselines/reference/privateNamesInGenericClasses.js index e1ea4b49d09b0..efb0b6e96d90e 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.js +++ b/tests/baselines/reference/privateNamesInGenericClasses.js @@ -54,7 +54,7 @@ var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || func } return fn.call(receiver); }; -var _C_foo, _C_method, _C_prop_get, _C_prop_set, _C_instances; +var _C_instances, _C_foo, _C_method, _C_prop_get, _C_prop_set; class C { constructor() { _C_instances.add(this); diff --git a/tests/baselines/reference/privateNamesIncompatibleModifiers.js b/tests/baselines/reference/privateNamesIncompatibleModifiers.js index 32a249ac3c5ed..23a87dd94c8a9 100644 --- a/tests/baselines/reference/privateNamesIncompatibleModifiers.js +++ b/tests/baselines/reference/privateNamesIncompatibleModifiers.js @@ -57,7 +57,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; -var _A_foo, _A_bar, _A_baz, _A_qux, _A_fooMethod, _A_barMethod, _A_bazMethod, _A_quxMethod, _A_asyncMethod, _A_genMethod, _A_asyncGenMethod, _A_fooProp_get, _A_fooProp_set, _A_barProp_get, _A_barProp_set, _A_bazProp_get, _A_bazProp_set, _A_quxProp_get, _A_quxProp_set, _A_whatProp_get, _A_whatProp_set, _A_asyncProp_get, _A_asyncProp_set, _A_instances; +var _A_instances, _A_foo, _A_bar, _A_baz, _A_qux, _A_fooMethod, _A_barMethod, _A_bazMethod, _A_quxMethod, _A_asyncMethod, _A_genMethod, _A_asyncGenMethod, _A_fooProp_get, _A_fooProp_set, _A_barProp_get, _A_barProp_set, _A_bazProp_get, _A_bazProp_set, _A_quxProp_get, _A_quxProp_set, _A_whatProp_get, _A_whatProp_set, _A_asyncProp_get, _A_asyncProp_set; class A { constructor() { _A_instances.add(this); diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.js b/tests/baselines/reference/privateNamesUseBeforeDef.js index 271cde160438e..90146102f9e35 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.js +++ b/tests/baselines/reference/privateNamesUseBeforeDef.js @@ -39,7 +39,7 @@ var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || func } return fn.call(receiver); }; -var _A_foo, _A_bar, _A2_foo, _A2_bar, _A2_instances, _A3_foo, _A3_bar_get, _A3_instances, _B_foo, _B_bar; +var _A_foo, _A_bar, _A2_instances, _A2_foo, _A2_bar, _A3_instances, _A3_foo, _A3_bar_get, _B_foo, _B_bar; class A { constructor() { _A_foo.set(this, __classPrivateFieldGet(this, _A_bar)); // Error From 67fd38df0474d13cb127526e934cd20cfebebe66 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Feb 2021 13:24:12 +0000 Subject: [PATCH 33/73] fix: attach weakSetName to property declaration Signed-off-by: Kubilay Kahveci --- src/compiler/transformers/classFields.ts | 54 +++++++++++++----------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index f14866f4b90b2..d9be7159454d7 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -30,21 +30,25 @@ namespace ts { interface PrivateIdentifierInstanceMethod { placement: PrivateIdentifierPlacement.InstanceMethod; + weakSetName: Identifier; functionName: Identifier; } interface PrivateIdentifierInstanceGetterOnly { placement: PrivateIdentifierPlacement.InstanceGetterOnly; + weakSetName: Identifier; getterName: Identifier; } interface PrivateIdentifierInstanceSetterOnly { placement: PrivateIdentifierPlacement.InstanceSetterOnly; + weakSetName: Identifier; setterName: Identifier; } interface PrivateIdentifierInstanceGetterAndSetter { placement: PrivateIdentifierPlacement.InstanceGetterAndSetter; + weakSetName: Identifier; getterName: Identifier; setterName: Identifier; } @@ -54,7 +58,6 @@ namespace ts { * Used for prefixing generated variable names. */ className: string; - hasPrivateMethods: boolean; /** * Used for brand check on private methods. */ @@ -325,14 +328,14 @@ namespace ts { case PrivateIdentifierPlacement.InstanceMethod: return context.getEmitHelperFactory().createClassPrivateMethodGetHelper( receiver, - getPrivateIdentifierEnvironment().weakSetName, + info.weakSetName, info.functionName ); case PrivateIdentifierPlacement.InstanceGetterOnly: case PrivateIdentifierPlacement.InstanceGetterAndSetter: return context.getEmitHelperFactory().createClassPrivateAccessorGetHelper( receiver, - getPrivateIdentifierEnvironment().weakSetName, + info.weakSetName, info.getterName ); case PrivateIdentifierPlacement.InstanceSetterOnly: @@ -550,7 +553,7 @@ namespace ts { case PrivateIdentifierPlacement.InstanceGetterAndSetter: return context.getEmitHelperFactory().createClassPrivateAccessorSetHelper( receiver, - getPrivateIdentifierEnvironment().weakSetName, + info.weakSetName, info.setterName, right ); @@ -571,6 +574,10 @@ namespace ts { if (name && isIdentifier(name)) { getPrivateIdentifierEnvironment().className = name.escapedText as string; } + + if (some(getPrivateInstanceMethods(node))) { + getPrivateIdentifierEnvironment().weakSetName = createHoistedVariableForClass("instances"); + } } const result = isClassDeclaration(node) ? @@ -588,6 +595,13 @@ namespace ts { return isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && isPrivateIdentifier(node.name)); } + function getPrivateInstanceMethods(node: ClassLikeDeclaration) { + return filter( + [...getMethods(node, /*isStatic*/ false), ...getAccessors(node, /*isStatic*/ false)], + method => isPrivateIdentifier(method.name) + ); + } + function visitClassDeclaration(node: ClassDeclaration) { if (!forEach(node.members, doesClassElementNeedTransform)) { return visitEachChild(node, visitor, context); @@ -705,7 +719,9 @@ namespace ts { } } - createBrandCheckWeakSetForPrivateMethods(); + if (some(getPrivateInstanceMethods(node))) { + createBrandCheckWeakSetForPrivateMethods(); + } } const members: ClassElement[] = []; @@ -718,17 +734,9 @@ namespace ts { } function createBrandCheckWeakSetForPrivateMethods() { - const env = getPrivateIdentifierEnvironment(); - if (!env.hasPrivateMethods) { - return; - } - - const weakSetName = createHoistedVariableForClass("instances"); - env.weakSetName = weakSetName; - getPendingExpressions().push( factory.createAssignment( - env.weakSetName, + getPrivateIdentifierEnvironment().weakSetName, factory.createNewExpression( factory.createIdentifier("WeakSet"), /*typeArguments*/ undefined, @@ -784,10 +792,7 @@ namespace ts { properties = filter(properties, property => !!property.initializer || isPrivateIdentifier(property.name)); } - const privateMethods = filter( - [...getMethods(node, /*isStatic*/ false), ...getAccessors(node, /*isStatic*/ false)], - method => isPrivateIdentifier(method.name) - ); + const privateMethods = getPrivateInstanceMethods(node); const needsConstructorBody = some(properties) || some(privateMethods); // Only generate synthetic constructor when there are property initializers to move. @@ -1081,7 +1086,6 @@ namespace ts { if (!currentPrivateIdentifierEnvironment) { currentPrivateIdentifierEnvironment = { className: "", - hasPrivateMethods: false, weakSetName: factory.createUniqueName("_instances", GeneratedIdentifierFlags.Optimistic), identifiers: new Map() }; @@ -1096,6 +1100,7 @@ namespace ts { function addPrivateIdentifierToEnvironment(node: PrivateClassElementDeclaration) { const text = getTextOfPropertyName(node.name) as string; + const { weakSetName } = getPrivateIdentifierEnvironment(); let info: PrivateIdentifierInfo; const assignmentExpressions: Expression[] = []; @@ -1118,10 +1123,9 @@ namespace ts { else if (isMethodDeclaration(node)) { info = { placement: PrivateIdentifierPlacement.InstanceMethod, - functionName: createHoistedVariableForPrivateName(text) + weakSetName, + functionName: createHoistedVariableForPrivateName(text), }; - - getPrivateIdentifierEnvironment().hasPrivateMethods = true; } else if (isAccessor(node)) { const previousInfo = findPreviousAccessorInfo(node); @@ -1132,6 +1136,7 @@ namespace ts { if (previousInfo?.placement === PrivateIdentifierPlacement.InstanceSetterOnly) { info = { placement: PrivateIdentifierPlacement.InstanceGetterAndSetter, + weakSetName, getterName, setterName: previousInfo.setterName }; @@ -1139,6 +1144,7 @@ namespace ts { else { info = { placement: PrivateIdentifierPlacement.InstanceGetterOnly, + weakSetName, getterName }; } @@ -1149,6 +1155,7 @@ namespace ts { if (previousInfo?.placement === PrivateIdentifierPlacement.InstanceGetterOnly) { info = { placement: PrivateIdentifierPlacement.InstanceGetterAndSetter, + weakSetName, setterName, getterName: previousInfo.getterName }; @@ -1156,12 +1163,11 @@ namespace ts { else { info = { placement: PrivateIdentifierPlacement.InstanceSetterOnly, + weakSetName, setterName }; } } - - getPrivateIdentifierEnvironment().hasPrivateMethods = true; } else { return; From 45c2a410e91df464a884de6f67fb4f54eb3d5a53 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Feb 2021 15:22:21 +0000 Subject: [PATCH 34/73] add a test for nested private methods Signed-off-by: Kubilay Kahveci --- .../privateNameNestedMethodAccess.errors.txt | 26 ++++++++ .../privateNameNestedMethodAccess.js | 66 +++++++++++++++++++ .../privateNameNestedMethodAccess.symbols | 44 +++++++++++++ .../privateNameNestedMethodAccess.types | 54 +++++++++++++++ .../privateNameNestedMethodAccess.ts | 19 ++++++ 5 files changed, 209 insertions(+) create mode 100644 tests/baselines/reference/privateNameNestedMethodAccess.errors.txt create mode 100644 tests/baselines/reference/privateNameNestedMethodAccess.js create mode 100644 tests/baselines/reference/privateNameNestedMethodAccess.symbols create mode 100644 tests/baselines/reference/privateNameNestedMethodAccess.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.errors.txt b/tests/baselines/reference/privateNameNestedMethodAccess.errors.txt new file mode 100644 index 0000000000000..c2b2400174046 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedMethodAccess.errors.txt @@ -0,0 +1,26 @@ +tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts(11,25): error TS18014: The property '#bar' cannot be accessed on type 'C' within this class because it is shadowed by another private identifier with the same spelling. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts (1 errors) ==== + const C = class { + #foo = 42; + #bar() { new C().#baz; } + get #baz() { return 42; } + + m() { + return class D { + #bar() {} + constructor() { + new C().#foo; + new C().#bar; // Error + ~~~~ +!!! error TS18014: The property '#bar' cannot be accessed on type 'C' within this class because it is shadowed by another private identifier with the same spelling. +!!! related TS18017 tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts:8:13: The shadowing declaration of '#bar' is defined here +!!! related TS18018 tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts:3:5: The declaration of '#bar' that you probably intended to use is defined here + new C().#baz; + new D().#bar; + } + } + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.js b/tests/baselines/reference/privateNameNestedMethodAccess.js new file mode 100644 index 0000000000000..1734e781b43b3 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedMethodAccess.js @@ -0,0 +1,66 @@ +//// [privateNameNestedMethodAccess.ts] +const C = class { + #foo = 42; + #bar() { new C().#baz; } + get #baz() { return 42; } + + m() { + return class D { + #bar() {} + constructor() { + new C().#foo; + new C().#bar; // Error + new C().#baz; + new D().#bar; + } + } + } +} + + +//// [privateNameNestedMethodAccess.js] +var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private accessor on non-instance"); + } + return fn.call(receiver); +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { + if (!instances.has(receiver)) { + throw new TypeError("attempted to get private method on non-instance"); + } + return fn; +}; +var _C_instances, _C_foo, _C_bar, _C_baz_get, _a; +const C = (_a = class { + constructor() { + _C_instances.add(this); + _C_foo.set(this, 42); + } + m() { + var _D_instances, _D_bar, _a; + return _a = class D { + constructor() { + _D_instances.add(this); + __classPrivateFieldGet(new C(), _C_foo); + __classPrivateMethodGet(new C(), _D_instances, _D_bar); // Error + __classPrivateAccessorGet(new C(), _C_instances, _C_baz_get); + __classPrivateMethodGet(new D(), _D_instances, _D_bar); + } + }, + _D_instances = new WeakSet(), + _D_bar = function _D_bar() { }, + _a; + } + }, + _C_foo = new WeakMap(), + _C_instances = new WeakSet(), + _C_bar = function _C_bar() { __classPrivateAccessorGet(new C(), _C_instances, _C_baz_get); }, + _C_baz_get = function _C_baz_get() { return 42; }, + _a); diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.symbols b/tests/baselines/reference/privateNameNestedMethodAccess.symbols new file mode 100644 index 0000000000000..3b14c08f746f6 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedMethodAccess.symbols @@ -0,0 +1,44 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts === +const C = class { +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) + + #foo = 42; +>#foo : Symbol(C.#foo, Decl(privateNameNestedMethodAccess.ts, 0, 17)) + + #bar() { new C().#baz; } +>#bar : Symbol(C.#bar, Decl(privateNameNestedMethodAccess.ts, 1, 14)) +>new C().#baz : Symbol(C.#baz, Decl(privateNameNestedMethodAccess.ts, 2, 28)) +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) + + get #baz() { return 42; } +>#baz : Symbol(C.#baz, Decl(privateNameNestedMethodAccess.ts, 2, 28)) + + m() { +>m : Symbol(C.m, Decl(privateNameNestedMethodAccess.ts, 3, 29)) + + return class D { +>D : Symbol(D, Decl(privateNameNestedMethodAccess.ts, 6, 14)) + + #bar() {} +>#bar : Symbol(D.#bar, Decl(privateNameNestedMethodAccess.ts, 6, 24)) + + constructor() { + new C().#foo; +>new C().#foo : Symbol(C.#foo, Decl(privateNameNestedMethodAccess.ts, 0, 17)) +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) + + new C().#bar; // Error +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) + + new C().#baz; +>new C().#baz : Symbol(C.#baz, Decl(privateNameNestedMethodAccess.ts, 2, 28)) +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) + + new D().#bar; +>new D().#bar : Symbol(D.#bar, Decl(privateNameNestedMethodAccess.ts, 6, 24)) +>D : Symbol(D, Decl(privateNameNestedMethodAccess.ts, 6, 14)) + } + } + } +} + diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.types b/tests/baselines/reference/privateNameNestedMethodAccess.types new file mode 100644 index 0000000000000..94df88de28516 --- /dev/null +++ b/tests/baselines/reference/privateNameNestedMethodAccess.types @@ -0,0 +1,54 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts === +const C = class { +>C : typeof C +>class { #foo = 42; #bar() { new C().#baz; } get #baz() { return 42; } m() { return class D { #bar() {} constructor() { new C().#foo; new C().#bar; // Error new C().#baz; new D().#bar; } } }} : typeof C + + #foo = 42; +>#foo : number +>42 : 42 + + #bar() { new C().#baz; } +>#bar : () => void +>new C().#baz : number +>new C() : C +>C : typeof C + + get #baz() { return 42; } +>#baz : number +>42 : 42 + + m() { +>m : () => typeof D + + return class D { +>class D { #bar() {} constructor() { new C().#foo; new C().#bar; // Error new C().#baz; new D().#bar; } } : typeof D +>D : typeof D + + #bar() {} +>#bar : () => void + + constructor() { + new C().#foo; +>new C().#foo : number +>new C() : C +>C : typeof C + + new C().#bar; // Error +>new C().#bar : any +>new C() : C +>C : typeof C + + new C().#baz; +>new C().#baz : number +>new C() : C +>C : typeof C + + new D().#bar; +>new D().#bar : () => void +>new D() : D +>D : typeof D + } + } + } +} + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts b/tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts new file mode 100644 index 0000000000000..63d2a302615e7 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts @@ -0,0 +1,19 @@ +// @target: es2015 + +const C = class { + #foo = 42; + #bar() { new C().#baz; } + get #baz() { return 42; } + + m() { + return class D { + #bar() {} + constructor() { + new C().#foo; + new C().#bar; // Error + new C().#baz; + new D().#bar; + } + } + } +} From 356b91d21daffd66fc051ac75757c75ff831e758 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Feb 2021 18:29:48 +0000 Subject: [PATCH 35/73] add a test with any Signed-off-by: Kubilay Kahveci --- .../privateNameNestedMethodAccess.errors.txt | 13 +++- .../privateNameNestedMethodAccess.js | 63 ++++++++++--------- .../privateNameNestedMethodAccess.symbols | 30 ++++++--- .../privateNameNestedMethodAccess.types | 24 +++++-- .../privateNameNestedMethodAccess.ts | 8 ++- 5 files changed, 95 insertions(+), 43 deletions(-) diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.errors.txt b/tests/baselines/reference/privateNameNestedMethodAccess.errors.txt index c2b2400174046..93c48aea734e1 100644 --- a/tests/baselines/reference/privateNameNestedMethodAccess.errors.txt +++ b/tests/baselines/reference/privateNameNestedMethodAccess.errors.txt @@ -1,8 +1,9 @@ tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts(11,25): error TS18014: The property '#bar' cannot be accessed on type 'C' within this class because it is shadowed by another private identifier with the same spelling. +tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts(19,19): error TS2339: Property '#unknown' does not exist on type 'any'. -==== tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts (1 errors) ==== - const C = class { +==== tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts (2 errors) ==== + class C { #foo = 42; #bar() { new C().#baz; } get #baz() { return 42; } @@ -20,6 +21,14 @@ tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAcce new C().#baz; new D().#bar; } + + n(x: any) { + x.#foo; + x.#bar; + x.#unknown; // Error + ~~~~~~~~ +!!! error TS2339: Property '#unknown' does not exist on type 'any'. + } } } } diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.js b/tests/baselines/reference/privateNameNestedMethodAccess.js index 1734e781b43b3..a870c205da41f 100644 --- a/tests/baselines/reference/privateNameNestedMethodAccess.js +++ b/tests/baselines/reference/privateNameNestedMethodAccess.js @@ -1,5 +1,5 @@ //// [privateNameNestedMethodAccess.ts] -const C = class { +class C { #foo = 42; #bar() { new C().#baz; } get #baz() { return 42; } @@ -13,6 +13,12 @@ const C = class { new C().#baz; new D().#bar; } + + n(x: any) { + x.#foo; + x.#bar; + x.#unknown; // Error + } } } } @@ -37,30 +43,31 @@ var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function } return fn; }; -var _C_instances, _C_foo, _C_bar, _C_baz_get, _a; -const C = (_a = class { - constructor() { - _C_instances.add(this); - _C_foo.set(this, 42); - } - m() { - var _D_instances, _D_bar, _a; - return _a = class D { - constructor() { - _D_instances.add(this); - __classPrivateFieldGet(new C(), _C_foo); - __classPrivateMethodGet(new C(), _D_instances, _D_bar); // Error - __classPrivateAccessorGet(new C(), _C_instances, _C_baz_get); - __classPrivateMethodGet(new D(), _D_instances, _D_bar); - } - }, - _D_instances = new WeakSet(), - _D_bar = function _D_bar() { }, - _a; - } - }, - _C_foo = new WeakMap(), - _C_instances = new WeakSet(), - _C_bar = function _C_bar() { __classPrivateAccessorGet(new C(), _C_instances, _C_baz_get); }, - _C_baz_get = function _C_baz_get() { return 42; }, - _a); +var _C_instances, _C_foo, _C_bar, _C_baz_get; +class C { + constructor() { + _C_instances.add(this); + _C_foo.set(this, 42); + } + m() { + var _D_instances, _D_bar, _a; + return _a = class D { + constructor() { + _D_instances.add(this); + __classPrivateFieldGet(new C(), _C_foo); + __classPrivateMethodGet(new C(), _D_instances, _D_bar); // Error + __classPrivateAccessorGet(new C(), _C_instances, _C_baz_get); + __classPrivateMethodGet(new D(), _D_instances, _D_bar); + } + n(x) { + __classPrivateFieldGet(x, _C_foo); + __classPrivateMethodGet(x, _D_instances, _D_bar); + x.; // Error + } + }, + _D_instances = new WeakSet(), + _D_bar = function _D_bar() { }, + _a; + } +} +_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_bar = function _C_bar() { __classPrivateAccessorGet(new C(), _C_instances, _C_baz_get); }, _C_baz_get = function _C_baz_get() { return 42; }; diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.symbols b/tests/baselines/reference/privateNameNestedMethodAccess.symbols index 3b14c08f746f6..689923e5b9d98 100644 --- a/tests/baselines/reference/privateNameNestedMethodAccess.symbols +++ b/tests/baselines/reference/privateNameNestedMethodAccess.symbols @@ -1,14 +1,14 @@ === tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts === -const C = class { ->C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) +class C { +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 0)) #foo = 42; ->#foo : Symbol(C.#foo, Decl(privateNameNestedMethodAccess.ts, 0, 17)) +>#foo : Symbol(C.#foo, Decl(privateNameNestedMethodAccess.ts, 0, 9)) #bar() { new C().#baz; } >#bar : Symbol(C.#bar, Decl(privateNameNestedMethodAccess.ts, 1, 14)) >new C().#baz : Symbol(C.#baz, Decl(privateNameNestedMethodAccess.ts, 2, 28)) ->C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 0)) get #baz() { return 42; } >#baz : Symbol(C.#baz, Decl(privateNameNestedMethodAccess.ts, 2, 28)) @@ -24,20 +24,34 @@ const C = class { constructor() { new C().#foo; ->new C().#foo : Symbol(C.#foo, Decl(privateNameNestedMethodAccess.ts, 0, 17)) ->C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) +>new C().#foo : Symbol(C.#foo, Decl(privateNameNestedMethodAccess.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 0)) new C().#bar; // Error ->C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 0)) new C().#baz; >new C().#baz : Symbol(C.#baz, Decl(privateNameNestedMethodAccess.ts, 2, 28)) ->C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 5)) +>C : Symbol(C, Decl(privateNameNestedMethodAccess.ts, 0, 0)) new D().#bar; >new D().#bar : Symbol(D.#bar, Decl(privateNameNestedMethodAccess.ts, 6, 24)) >D : Symbol(D, Decl(privateNameNestedMethodAccess.ts, 6, 14)) } + + n(x: any) { +>n : Symbol(D.n, Decl(privateNameNestedMethodAccess.ts, 13, 13)) +>x : Symbol(x, Decl(privateNameNestedMethodAccess.ts, 15, 14)) + + x.#foo; +>x : Symbol(x, Decl(privateNameNestedMethodAccess.ts, 15, 14)) + + x.#bar; +>x : Symbol(x, Decl(privateNameNestedMethodAccess.ts, 15, 14)) + + x.#unknown; // Error +>x : Symbol(x, Decl(privateNameNestedMethodAccess.ts, 15, 14)) + } } } } diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.types b/tests/baselines/reference/privateNameNestedMethodAccess.types index 94df88de28516..1527391504f42 100644 --- a/tests/baselines/reference/privateNameNestedMethodAccess.types +++ b/tests/baselines/reference/privateNameNestedMethodAccess.types @@ -1,7 +1,6 @@ === tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts === -const C = class { ->C : typeof C ->class { #foo = 42; #bar() { new C().#baz; } get #baz() { return 42; } m() { return class D { #bar() {} constructor() { new C().#foo; new C().#bar; // Error new C().#baz; new D().#bar; } } }} : typeof C +class C { +>C : C #foo = 42; >#foo : number @@ -21,7 +20,7 @@ const C = class { >m : () => typeof D return class D { ->class D { #bar() {} constructor() { new C().#foo; new C().#bar; // Error new C().#baz; new D().#bar; } } : typeof D +>class D { #bar() {} constructor() { new C().#foo; new C().#bar; // Error new C().#baz; new D().#bar; } n(x: any) { x.#foo; x.#bar; x.#unknown; // Error } } : typeof D >D : typeof D #bar() {} @@ -48,6 +47,23 @@ const C = class { >new D() : D >D : typeof D } + + n(x: any) { +>n : (x: any) => void +>x : any + + x.#foo; +>x.#foo : any +>x : any + + x.#bar; +>x.#bar : any +>x : any + + x.#unknown; // Error +>x.#unknown : any +>x : any + } } } } diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts b/tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts index 63d2a302615e7..0c10fbce59d29 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameNestedMethodAccess.ts @@ -1,6 +1,6 @@ // @target: es2015 -const C = class { +class C { #foo = 42; #bar() { new C().#baz; } get #baz() { return 42; } @@ -14,6 +14,12 @@ const C = class { new C().#baz; new D().#bar; } + + n(x: any) { + x.#foo; + x.#bar; + x.#unknown; // Error + } } } } From 5ebb3d632704d244573181999873c0b17329e69d Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Tue, 16 Feb 2021 15:57:15 +0200 Subject: [PATCH 36/73] Added support for static private fields accessors and methods. --- src/compiler/checker.ts | 3 - src/compiler/factory/emitHelpers.ts | 137 +++++++++++++ src/compiler/transformers/classFields.ts | 194 +++++++++++++++++- .../privateNameES5Ban(target=es3).errors.txt | 24 +-- .../privateNameES5Ban(target=es3).js | 4 +- .../privateNameES5Ban(target=es5).errors.txt | 24 +-- .../privateNameES5Ban(target=es5).js | 4 +- .../privateNameFieldsESNext.errors.txt | 8 +- .../privateNamesAndStaticFields.errors.txt | 11 +- .../reference/privateNamesAndStaticFields.js | 29 +-- .../privateNamesAndStaticMethods.errors.txt | 54 ----- .../privateNamesConstructorChain-1.errors.txt | 5 +- .../privateNamesConstructorChain-1.js | 12 +- .../privateNamesConstructorChain-2.errors.txt | 5 +- .../privateNamesConstructorChain-2.js | 12 +- .../privateNamesInNestedClasses-2.errors.txt | 5 +- .../privateNamesInNestedClasses-2.js | 3 +- .../reference/privateNamesUnique-3.errors.txt | 8 +- .../reference/privateNamesUnique-3.js | 19 +- 19 files changed, 400 insertions(+), 161 deletions(-) delete mode 100644 tests/baselines/reference/privateNamesAndStaticMethods.errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 25fdbac8b3bda..703ae2b00fbc1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -39550,9 +39550,6 @@ namespace ts { else if (flags & ModifierFlags.Abstract) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract"); } - else if (isPrivateIdentifierClassElementDeclaration(node)) { - return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "static"); - } flags |= ModifierFlags.Static; lastStatic = modifier; break; diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 8e629bb96e663..c816ade231528 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -39,6 +39,14 @@ namespace ts { createClassPrivateWriteonlyHelper(receiver: Expression): Expression; createClassPrivateAccessorGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; createClassPrivateAccessorSetHelper(receiver: Expression, instances: Identifier, fn: Identifier, value: Expression): Expression; + // Class Static Private Helpers + createClassStaticPrivateFieldGetHelper(receiver: Expression, classConstructor: Identifier, privateField: Identifier): Expression; + createClassStaticPrivateFieldSetHelper(receiver: Expression, classConstructor: Identifier, privateField: Identifier, value: Expression): Expression; + createClassStaticPrivateMethodGetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier): Expression; + createClassStaticPrivateReadonlyHelper(receiver: Expression, value: Expression): Expression; + createClassStaticPrivateWriteonlyHelper(receiver: Expression): Expression; + createClassStaticPrivateAccessorGetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier): Expression; + createClassStaticPrivateAccessorSetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier, value: Expression): Expression; } export function createEmitHelperFactory(context: TransformationContext): EmitHelperFactory { @@ -82,6 +90,13 @@ namespace ts { createClassPrivateWriteonlyHelper, createClassPrivateAccessorGetHelper, createClassPrivateAccessorSetHelper, + createClassStaticPrivateFieldGetHelper, + createClassStaticPrivateFieldSetHelper, + createClassStaticPrivateMethodGetHelper, + createClassStaticPrivateReadonlyHelper, + createClassStaticPrivateWriteonlyHelper, + createClassStaticPrivateAccessorGetHelper, + createClassStaticPrivateAccessorSetHelper, }; /** @@ -412,6 +427,41 @@ namespace ts { context.requestEmitHelper(classPrivateAccessorSetHelper); return factory.createCallExpression(getUnscopedHelperName("__classPrivateAccessorSet"), /*typeArguments*/ undefined, [receiver, instances, fn, value]); } + // Class Private Static Helpers + function createClassStaticPrivateFieldGetHelper(receiver: Expression, classConstructor: Identifier, privateField: Identifier) { + context.requestEmitHelper(classStaticPrivateFieldGetHelper); + return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateFieldGet"), /*typeArguments*/ undefined, [receiver, classConstructor, privateField]); + } + + function createClassStaticPrivateFieldSetHelper(receiver: Expression, classConstructor: Identifier, privateField: Identifier, value: Expression) { + context.requestEmitHelper(classStaticPrivateFieldSetHelper); + return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateFieldSet"), /*typeArguments*/ undefined, [receiver, classConstructor, privateField, value]); + } + + function createClassStaticPrivateMethodGetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier) { + context.requestEmitHelper(classStaticPrivateMethodGetHelper); + return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateMethodGet"), /*typeArguments*/ undefined, [receiver, classConstructor, fn]); + } + + function createClassStaticPrivateReadonlyHelper(receiver: Expression, value: Expression) { + context.requestEmitHelper(classStaticPrivateReadonlyHelper); + return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateReadonly"), /*typeArguments*/ undefined, [receiver, value]); + } + + function createClassStaticPrivateWriteonlyHelper(receiver: Expression) { + context.requestEmitHelper(classStaticPrivateWriteonlyHelper); + return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateWriteonly"), /*typeArguments*/ undefined, [receiver]); + } + + function createClassStaticPrivateAccessorGetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier) { + context.requestEmitHelper(classStaticPrivateAccessorGetHelper); + return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateAccessorGet"), /*typeArguments*/ undefined, [receiver, classConstructor, fn]); + } + + function createClassStaticPrivateAccessorSetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier, value: Expression) { + context.requestEmitHelper(classStaticPrivateAccessorSetHelper); + return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateAccessorSet"), /*typeArguments*/ undefined, [receiver, classConstructor, fn, value]); + } } /* @internal */ @@ -939,6 +989,93 @@ namespace ts { };` }; + export const classStaticPrivateFieldGetHelper: UnscopedEmitHelper = { + name: "typescript:classStaticPrivateFieldGet", + importName: "__classStaticPrivateFieldGet", + scoped: false, + text: ` + var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; + };` + }; + + export const classStaticPrivateFieldSetHelper: UnscopedEmitHelper = { + name: "typescript:classStaticPrivateFieldSet", + importName: "__classStaticPrivateFieldSet", + scoped: false, + text: ` + var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + propertyDescriptor.value = value; + return value; + };` + }; + + export const classStaticPrivateMethodGetHelper: UnscopedEmitHelper = { + name: "typescript:classStaticPrivateMethodGet", + importName: "__classStaticPrivateMethodGet", + scoped: false, + text: ` + var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; + };` + }; + + export const classStaticPrivateReadonlyHelper: UnscopedEmitHelper = { + name: "typescript:classStaticPrivateReadonly", + importName: "__classStaticPrivateReadonly", + scoped: false, + text: ` + var __classStaticPrivateReadonly = (this && this.__classStaticPrivateReadonly) || function () { + throw new TypeError("Private static element is not writable"); + };` + }; + + export const classStaticPrivateWriteonlyHelper: UnscopedEmitHelper = { + name: "typescript:classStaticPrivateWriteonly", + importName: "__classStaticPrivateWriteonly", + scoped: false, + text: ` + var __classStaticPrivateWriteonly = (this && this.__classStaticPrivateWriteonly) || function () { + throw new TypeError("Private static element is not readable"); + };` + }; + + export const classStaticPrivateAccessorGetHelper: UnscopedEmitHelper = { + name: "typescript:classStaticPrivateAccessorGet", + importName: "__classStaticPrivateAccessorGet", + scoped: false, + text: ` + var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn.call(receiver); + };` + }; + + export const classStaticPrivateAccessorSetHelper: UnscopedEmitHelper = { + name: "typescript:classStaticPrivateAccessorSet", + importName: "__classStaticPrivateAccessorSet", + scoped: false, + text: ` + var __classStaticPrivateAccessorSet = (this && this.__classStaticPrivateAccessorSet) || function (receiver, classConstructor, fn, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + fn.call(receiver, value); + return value; + };` + }; + let allUnscopedEmitHelpers: ReadonlyESMap | undefined; export function getAllUnscopedEmitHelpers() { diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index d9be7159454d7..137a8adbfc237 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -13,16 +13,47 @@ namespace ts { InstanceMethod, InstanceGetterOnly, InstanceSetterOnly, - InstanceGetterAndSetter + InstanceGetterAndSetter, + StaticField, + StaticMethod, + StaticGetterOnly, + StaticSetterOnly, + StaticGetterAndSetter, } type PrivateIdentifierInfo = + | PrivateIdentifierStaticField + | PrivateIdentifierStaticMethod + | PrivateIdentifierStaticGetterOnly + | PrivateIdentifierStaticSetterOnly + | PrivateIdentifierStaticGetterAndSetterOnly | PrivateIdentifierInstanceField | PrivateIdentifierInstanceMethod | PrivateIdentifierInstanceGetterOnly | PrivateIdentifierInstanceSetterOnly | PrivateIdentifierInstanceGetterAndSetter; + interface PrivateIdentifierStaticField { + placement: PrivateIdentifierPlacement.StaticField; + variableName: Identifier; + } + interface PrivateIdentifierStaticMethod { + placement: PrivateIdentifierPlacement.StaticMethod; + functionName: Identifier; + } + interface PrivateIdentifierStaticGetterOnly { + placement: PrivateIdentifierPlacement.StaticGetterOnly; + getterName: Identifier; + } + interface PrivateIdentifierStaticSetterOnly { + placement: PrivateIdentifierPlacement.StaticSetterOnly; + setterName: Identifier; + } + interface PrivateIdentifierStaticGetterAndSetterOnly { + placement: PrivateIdentifierPlacement.StaticGetterAndSetter; + getterName: Identifier; + setterName: Identifier; + } interface PrivateIdentifierInstanceField { placement: PrivateIdentifierPlacement.InstanceField; weakMapName: Identifier; @@ -58,6 +89,10 @@ namespace ts { * Used for prefixing generated variable names. */ className: string; + /** + * Used for brand ckeck on static members + */ + classConstructor: Identifier; /** * Used for brand check on private methods. */ @@ -251,7 +286,7 @@ namespace ts { factory.createAssignment( functionName, factory.createFunctionExpression( - transformedMethod.modifiers, + filter(transformedMethod.modifiers, m => !isStaticModifier(m)), transformedMethod.asteriskToken, functionName, transformedMethod.typeParameters, @@ -272,18 +307,22 @@ namespace ts { const info = accessPrivateIdentifier(node.name); Debug.assert(info, "Undeclared private name for property declaration."); - if (info.placement === PrivateIdentifierPlacement.InstanceMethod) { + if (info.placement === PrivateIdentifierPlacement.InstanceMethod || info.placement === PrivateIdentifierPlacement.StaticMethod) { return info.functionName; } if (isGetAccessor(node) && (info.placement === PrivateIdentifierPlacement.InstanceGetterOnly || - info.placement === PrivateIdentifierPlacement.InstanceGetterAndSetter)) { + info.placement === PrivateIdentifierPlacement.StaticGetterOnly || + info.placement === PrivateIdentifierPlacement.InstanceGetterAndSetter || + info.placement === PrivateIdentifierPlacement.StaticGetterAndSetter)) { return info.getterName; } if (isSetAccessor(node) && (info.placement === PrivateIdentifierPlacement.InstanceSetterOnly || - info.placement === PrivateIdentifierPlacement.InstanceGetterAndSetter)) { + info.placement === PrivateIdentifierPlacement.StaticSetterOnly || + info.placement === PrivateIdentifierPlacement.InstanceGetterAndSetter || + info.placement === PrivateIdentifierPlacement.StaticGetterAndSetter)) { return info.setterName; } } @@ -342,6 +381,29 @@ namespace ts { return context.getEmitHelperFactory().createClassPrivateWriteonlyHelper( receiver ); + case PrivateIdentifierPlacement.StaticField: + return context.getEmitHelperFactory().createClassStaticPrivateFieldGetHelper( + receiver, + getPrivateIdentifierEnvironment().classConstructor, + info.variableName + ); + case PrivateIdentifierPlacement.StaticMethod: + return context.getEmitHelperFactory().createClassStaticPrivateMethodGetHelper( + receiver, + getPrivateIdentifierEnvironment().classConstructor, + info.functionName + ); + case PrivateIdentifierPlacement.StaticGetterOnly: + case PrivateIdentifierPlacement.StaticGetterAndSetter: + return context.getEmitHelperFactory().createClassStaticPrivateAccessorGetHelper( + receiver, + getPrivateIdentifierEnvironment().classConstructor, + info.getterName + ); + case PrivateIdentifierPlacement.StaticSetterOnly: + return context.getEmitHelperFactory().createClassStaticPrivateWriteonlyHelper( + receiver + ); default: return Debug.fail("Unexpected private identifier placement"); } } @@ -557,6 +619,27 @@ namespace ts { info.setterName, right ); + case PrivateIdentifierPlacement.StaticField: + return context.getEmitHelperFactory().createClassStaticPrivateFieldSetHelper( + receiver, + getPrivateIdentifierEnvironment().classConstructor, + info.variableName, + right + ); + case PrivateIdentifierPlacement.StaticMethod: + case PrivateIdentifierPlacement.StaticGetterOnly: + return context.getEmitHelperFactory().createClassStaticPrivateReadonlyHelper( + receiver, + right + ); + case PrivateIdentifierPlacement.StaticSetterOnly: + case PrivateIdentifierPlacement.StaticGetterAndSetter: + return context.getEmitHelperFactory().createClassStaticPrivateAccessorSetHelper( + receiver, + getPrivateIdentifierEnvironment().classConstructor, + info.setterName, + right + ); default: return Debug.fail("Unexpected private identifier placement"); } } @@ -603,6 +686,7 @@ namespace ts { } function visitClassDeclaration(node: ClassDeclaration) { + getPrivateIdentifierEnvironment().classConstructor = factory.getInternalName(node) ; if (!forEach(node.members, doesClassElementNeedTransform)) { return visitEachChild(node, visitor, context); } @@ -636,6 +720,10 @@ namespace ts { if (some(staticProperties)) { addPropertyStatements(statements, staticProperties, factory.getInternalName(node)); } + const staticPrivateProperties = filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer); + if(some(staticPrivateProperties)) { + addPropertyStatements(statements, staticPrivateProperties, factory.getInternalName(node)); + } return statements; } @@ -658,6 +746,13 @@ namespace ts { const extendsClauseElement = getEffectiveBaseTypeNode(node); const isDerivedClass = !!(extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== SyntaxKind.NullKeyword); + const isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & NodeCheckFlags.ClassWithConstructorReference; + let temp: Identifier | undefined; + if (some(node.members, m => hasStaticModifier(m) && !!m.name && isPrivateIdentifier(m.name))) { + temp = factory.createTempVariable(hoistVariableDeclaration, !!isClassWithConstructorReference); + getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp); + } + const classExpression = factory.updateClassExpression( node, visitNodes(node.decorators, visitor, isDecorator), @@ -680,12 +775,14 @@ namespace ts { if (pendingStatements && some(staticProperties)) { addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); } + if(temp) { + return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]); + } return classExpression; } else { const expressions: Expression[] = []; - const isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & NodeCheckFlags.ClassWithConstructorReference; - const temp = factory.createTempVariable(hoistVariableDeclaration, !!isClassWithConstructorReference); + temp = temp ?? factory.createTempVariable(hoistVariableDeclaration, !!isClassWithConstructorReference); if (isClassWithConstructorReference) { // record an alias as the class name is not in scope for statics. enableSubstitutionForClassAliases(); @@ -937,6 +1034,12 @@ namespace ts { privateIdentifierInfo.weakMapName ); } + case PrivateIdentifierPlacement.StaticField: { + return createPrivateStaticFieldInitializer( + privateIdentifierInfo.variableName, + visitNode(property.initializer, visitor, isExpression) + ); + } default: return undefined; } @@ -1086,6 +1189,7 @@ namespace ts { if (!currentPrivateIdentifierEnvironment) { currentPrivateIdentifierEnvironment = { className: "", + classConstructor: factory.createUniqueName("_class", GeneratedIdentifierFlags.Optimistic), weakSetName: factory.createUniqueName("_instances", GeneratedIdentifierFlags.Optimistic), identifiers: new Map() }; @@ -1104,7 +1208,62 @@ namespace ts { let info: PrivateIdentifierInfo; const assignmentExpressions: Expression[] = []; - if (isPropertyDeclaration(node)) { + if(hasStaticModifier(node)) { + if (isPropertyDeclaration(node)) { + const variableName = createHoistedVariableForPrivateName(text); + info = { + placement: PrivateIdentifierPlacement.StaticField, + variableName + }; + } + else if(isMethodDeclaration(node)) { + const functionName = createHoistedVariableForPrivateName(text); + info = { + placement: PrivateIdentifierPlacement.StaticMethod, + functionName + }; + } + else if(isGetAccessorDeclaration(node)) { + const getterName = createHoistedVariableForPrivateName(text + "_get"); + const previousInfo = findPreviousStaticAccessorInfo(node); + if (previousInfo?.placement === PrivateIdentifierPlacement.StaticSetterOnly) { + info = { + ...previousInfo, + placement: PrivateIdentifierPlacement.StaticGetterAndSetter, + getterName, + setterName: previousInfo.setterName, + }; + } + else { + info = { + placement: PrivateIdentifierPlacement.StaticGetterOnly, + getterName, + }; + } + } + else if(isSetAccessorDeclaration(node)) { + const setterName = createHoistedVariableForPrivateName(text + "_set"); + const previousInfo = findPreviousStaticAccessorInfo(node); + if (previousInfo?.placement === PrivateIdentifierPlacement.StaticGetterOnly) { + info = { + ...previousInfo, + placement: PrivateIdentifierPlacement.StaticGetterAndSetter, + getterName: previousInfo.getterName, + setterName, + }; + } + else { + info = { + placement: PrivateIdentifierPlacement.StaticSetterOnly, + setterName, + }; + } + } + else { + return; + } + } + else if (isPropertyDeclaration(node)) { const weakMapName = createHoistedVariableForPrivateName(text); info = { placement: PrivateIdentifierPlacement.InstanceField, @@ -1187,6 +1346,16 @@ namespace ts { } } + function findPreviousStaticAccessorInfo( + node: PrivateIdentifierGetAccessorDeclaration | PrivateIdentifierSetAccessorDeclaration + ): PrivateIdentifierStaticGetterOnly | PrivateIdentifierStaticSetterOnly | undefined { + const info = getPrivateIdentifierEnvironment().identifiers.get(node.name.escapedText); + if (info?.placement === PrivateIdentifierPlacement.StaticGetterOnly || + info?.placement === PrivateIdentifierPlacement.StaticSetterOnly) { + return info; + } + } + function createHoistedVariableForClass(name: string): Identifier { const { className } = getPrivateIdentifierEnvironment(); const prefix = className ? `_${className}` : ""; @@ -1341,6 +1510,15 @@ namespace ts { } } + function createPrivateStaticFieldInitializer(variableName: Identifier, initializer: Expression | undefined) { + return factory.createAssignment( + variableName, + factory.createObjectLiteralExpression([ + factory.createPropertyAssignment("value", initializer || factory.createVoidZero()) + ]) + ); + } + function createPrivateInstanceFieldInitializer(receiver: LeftHandSideExpression, initializer: Expression | undefined, weakMapName: Identifier) { return factory.createCallExpression( factory.createPropertyAccessExpression(weakMapName, "set"), diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).errors.txt b/tests/baselines/reference/privateNameES5Ban(target=es3).errors.txt index a5c48c8461826..7d7cc6e006dbe 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).errors.txt +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).errors.txt @@ -1,11 +1,11 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(3,5): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(4,5): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(5,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(6,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(5,12): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(6,12): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(7,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(8,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ==== tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts (8 errors) ==== @@ -18,11 +18,11 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,5): ~~~~~~~ !!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static #sField = "hello world"; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. + ~~~~~~~ +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static #sMethod() {} - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. + ~~~~~~~~ +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. get #acc() { return ""; } ~~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. @@ -30,11 +30,11 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,5): ~~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. static get #sAcc() { return 0; } - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. + ~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. static set #sAcc(x: number) {} - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. + ~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index d32433a42867e..486e2d2d5455c 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -20,7 +20,7 @@ var A = /** @class */ (function () { _A_field.set(this, 123); } var _A_instances, _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set; - _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; - _A_sField.set(A, "hello world"); + _A_field = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; + _A_sField = { value: "hello world" }; return A; }()); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es5).errors.txt b/tests/baselines/reference/privateNameES5Ban(target=es5).errors.txt index 6261ff415a483..76ab55e14f711 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).errors.txt +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).errors.txt @@ -1,11 +1,11 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(3,5): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(4,5): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(5,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(6,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(5,12): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(6,12): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(7,9): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(8,9): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,5): error TS18019: 'static' modifier cannot be used with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(9,16): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. +tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,16): error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. ==== tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts (8 errors) ==== @@ -18,11 +18,11 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,5): ~~~~~~~ !!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static #sField = "hello world"; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. + ~~~~~~~ +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static #sMethod() {} - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. + ~~~~~~~~ +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. get #acc() { return ""; } ~~~~ !!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. @@ -30,11 +30,11 @@ tests/cases/conformance/classes/members/privateNames/privateNameES5Ban.ts(10,5): ~~~~ !!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static get #sAcc() { return 0; } - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. + ~~~~~ +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. static set #sAcc(x: number) {} - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. + ~~~~~ +!!! error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher. } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameES5Ban(target=es5).js b/tests/baselines/reference/privateNameES5Ban(target=es5).js index d32433a42867e..486e2d2d5455c 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -20,7 +20,7 @@ var A = /** @class */ (function () { _A_field.set(this, 123); } var _A_instances, _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set; - _A_field = new WeakMap(), _A_sField = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; - _A_sField.set(A, "hello world"); + _A_field = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; + _A_sField = { value: "hello world" }; return A; }()); diff --git a/tests/baselines/reference/privateNameFieldsESNext.errors.txt b/tests/baselines/reference/privateNameFieldsESNext.errors.txt index 5416ecb75a470..28f283e66a817 100644 --- a/tests/baselines/reference/privateNameFieldsESNext.errors.txt +++ b/tests/baselines/reference/privateNameFieldsESNext.errors.txt @@ -1,9 +1,7 @@ tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts(8,9): error TS2322: Type 'string' is not assignable to type 'number'. -tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts(11,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts(12,5): error TS18019: 'static' modifier cannot be used with a private identifier. -==== tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts (3 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts (1 errors) ==== class C { a = 123; #a = 10; @@ -17,11 +15,7 @@ tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts( console.log(this.#b); } static #m = "test"; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. static #x; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. static test() { console.log(this.#m); console.log(this.#x = "test"); diff --git a/tests/baselines/reference/privateNamesAndStaticFields.errors.txt b/tests/baselines/reference/privateNamesAndStaticFields.errors.txt index 4ff9fb50d9295..5efd57230d022 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.errors.txt +++ b/tests/baselines/reference/privateNamesAndStaticFields.errors.txt @@ -1,18 +1,11 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticFields.ts(2,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticFields.ts(3,5): error TS18019: 'static' modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticFields.ts(6,11): error TS18013: Property '#foo' is not accessible outside class 'B' because it has a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticFields.ts(7,11): error TS2339: Property '#bar' does not exist on type 'typeof B'. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticFields.ts(12,5): error TS18019: 'static' modifier cannot be used with a private identifier. -==== tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticFields.ts (5 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticFields.ts (2 errors) ==== class A { static #foo: number; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. static #bar: number; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. constructor () { A.#foo = 3; B.#foo; // Error @@ -26,8 +19,6 @@ tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticFields class B extends A { static #foo: string; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. constructor () { super(); B.#foo = "some string"; diff --git a/tests/baselines/reference/privateNamesAndStaticFields.js b/tests/baselines/reference/privateNamesAndStaticFields.js index b6adb45a818dd..6bebd095e4550 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.js +++ b/tests/baselines/reference/privateNamesAndStaticFields.js @@ -24,35 +24,36 @@ const willErrorSomeDay: typeof A = class {}; // OK for now //// [privateNamesAndStaticFields.js] "use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); +var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); } - privateMap.set(receiver, value); + propertyDescriptor.value = value; return value; }; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); } - return privateMap.get(receiver); + return propertyDescriptor.value; }; var _A_foo, _A_bar, _B_foo; class A { constructor() { - __classPrivateFieldSet(A, _A_foo, 3); - __classPrivateFieldGet(B, _A_foo); // Error - __classPrivateFieldGet(B, _A_bar); // Error + __classStaticPrivateFieldSet(A, A, _A_foo, 3); + __classStaticPrivateFieldGet(B, A, _A_foo); // Error + __classStaticPrivateFieldGet(B, A, _A_bar); // Error } } -_A_foo = new WeakMap(), _A_bar = new WeakMap(); +_A_foo = { value: void 0 }; +_A_bar = { value: void 0 }; class B extends A { constructor() { super(); - __classPrivateFieldSet(B, _B_foo, "some string"); + __classStaticPrivateFieldSet(B, B, _B_foo, "some string"); } } -_B_foo = new WeakMap(); +_B_foo = { value: void 0 }; // We currently filter out static private identifier fields in `getUnmatchedProperties`. // We will need a more robust solution when we support static fields const willErrorSomeDay = class { diff --git a/tests/baselines/reference/privateNamesAndStaticMethods.errors.txt b/tests/baselines/reference/privateNamesAndStaticMethods.errors.txt deleted file mode 100644 index 2191f73a0d6be..0000000000000 --- a/tests/baselines/reference/privateNamesAndStaticMethods.errors.txt +++ /dev/null @@ -1,54 +0,0 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(2,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(3,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(4,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(7,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(8,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(11,5): error TS18019: 'static' modifier cannot be used with a private identifier. -tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts(24,5): error TS18019: 'static' modifier cannot be used with a private identifier. - - -==== tests/cases/conformance/classes/members/privateNames/privateNamesAndStaticMethods.ts (7 errors) ==== - class A { - static #foo(a: number) {} - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. - static async #bar(a: number) {} - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. - static async *#baz(a: number) { - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. - return 3; - } - static #_quux: number; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. - static get #quux (): number { - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. - return this.#_quux; - } - static set #quux (val: number) { - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. - this.#_quux = val; - } - constructor () { - A.#foo(30); - A.#bar(30); - A.#bar(30); - A.#quux = A.#quux + 1; - A.#quux++; - } - } - - class B extends A { - static #foo(a: string) {} - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. - constructor () { - super(); - B.#foo("str"); - } - } - \ No newline at end of file diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.errors.txt b/tests/baselines/reference/privateNamesConstructorChain-1.errors.txt index badf4f2966f9e..a8d081a35662c 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.errors.txt +++ b/tests/baselines/reference/privateNamesConstructorChain-1.errors.txt @@ -1,13 +1,10 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesConstructorChain-1.ts(3,5): error TS18019: 'static' modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesConstructorChain-1.ts(6,15): error TS2339: Property '#bar' does not exist on type 'typeof Child'. -==== tests/cases/conformance/classes/members/privateNames/privateNamesConstructorChain-1.ts (2 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesConstructorChain-1.ts (1 errors) ==== class Parent { #foo = 3; static #bar = 5; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. accessChildProps() { new Child().#foo; // OK (`#foo` was added when `Parent`'s constructor was called on `child`) Child.#bar; // Error: not found diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index a3676eb8e4c9c..dc6977aa3bbc7 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -21,6 +21,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; var _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; class Parent { constructor() { @@ -28,11 +34,11 @@ class Parent { } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(Child, _Parent_bar); // Error: not found + __classStaticPrivateFieldGet(Child, Parent, _Parent_bar); // Error: not found } } -_Parent_foo = new WeakMap(), _Parent_bar = new WeakMap(); -_Parent_bar.set(Parent, 5); +_Parent_foo = new WeakMap(); +_Parent_bar = { value: 5 }; class Child extends Parent { constructor() { super(...arguments); diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.errors.txt b/tests/baselines/reference/privateNamesConstructorChain-2.errors.txt index b72ae5d84aea6..c9be71136b01c 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.errors.txt +++ b/tests/baselines/reference/privateNamesConstructorChain-2.errors.txt @@ -1,13 +1,10 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesConstructorChain-2.ts(3,5): error TS18019: 'static' modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesConstructorChain-2.ts(6,15): error TS2339: Property '#bar' does not exist on type 'typeof Child'. -==== tests/cases/conformance/classes/members/privateNames/privateNamesConstructorChain-2.ts (2 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesConstructorChain-2.ts (1 errors) ==== class Parent { #foo = 3; static #bar = 5; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. accessChildProps() { new Child().#foo; // OK (`#foo` was added when `Parent`'s constructor was called on `child`) Child.#bar; // Error: not found diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index 7b4f40b8de8ef..d375038281c29 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -23,6 +23,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; var _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; class Parent { constructor() { @@ -30,11 +36,11 @@ class Parent { } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(Child, _Parent_bar); // Error: not found + __classStaticPrivateFieldGet(Child, Parent, _Parent_bar); // Error: not found } } -_Parent_foo = new WeakMap(), _Parent_bar = new WeakMap(); -_Parent_bar.set(Parent, 5); +_Parent_foo = new WeakMap(); +_Parent_bar = { value: 5 }; class Child extends Parent { constructor() { super(...arguments); diff --git a/tests/baselines/reference/privateNamesInNestedClasses-2.errors.txt b/tests/baselines/reference/privateNamesInNestedClasses-2.errors.txt index 01c69f9b0f2ae..c9c8c78ce2c43 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-2.errors.txt +++ b/tests/baselines/reference/privateNamesInNestedClasses-2.errors.txt @@ -1,12 +1,9 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesInNestedClasses-2.ts(2,5): error TS18019: 'static' modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesInNestedClasses-2.ts(9,27): error TS18014: The property '#x' cannot be accessed on type 'typeof A' within this class because it is shadowed by another private identifier with the same spelling. -==== tests/cases/conformance/classes/members/privateNames/privateNamesInNestedClasses-2.ts (2 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesInNestedClasses-2.ts (1 errors) ==== class A { static #x = 5; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. constructor () { class B { #x = 5; diff --git a/tests/baselines/reference/privateNamesInNestedClasses-2.js b/tests/baselines/reference/privateNamesInNestedClasses-2.js index a01a20f452981..26cace2ed9b70 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-2.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-2.js @@ -41,5 +41,4 @@ class A { _B_x = new WeakMap(); } } -_A_x = new WeakMap(); -_A_x.set(A, 5); +_A_x = { value: 5 }; diff --git a/tests/baselines/reference/privateNamesUnique-3.errors.txt b/tests/baselines/reference/privateNamesUnique-3.errors.txt index 51084f4d40561..03b52f61ce4f1 100644 --- a/tests/baselines/reference/privateNamesUnique-3.errors.txt +++ b/tests/baselines/reference/privateNamesUnique-3.errors.txt @@ -1,15 +1,11 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(3,5): error TS18019: 'static' modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(3,12): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(9,5): error TS18019: 'static' modifier cannot be used with a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(11,11): error TS2339: Property '#foo' does not exist on type 'B'. -==== tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts (2 errors) ==== class A { #foo = 1; static #foo = true; // error (duplicate) - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. ~~~~ !!! error TS2300: Duplicate identifier '#foo'. // because static and instance private names @@ -18,8 +14,6 @@ tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(11, } class B { static #foo = true; - ~~~~~~ -!!! error TS18019: 'static' modifier cannot be used with a private identifier. test(x: B) { x.#foo; // error (#foo is a static property on B, not an instance property) ~~~~ diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index 3368aff5ed039..a0d46b395cc08 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -15,27 +15,26 @@ class B { //// [privateNamesUnique-3.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); } - return privateMap.get(receiver); + return propertyDescriptor.value; }; var _A_foo, _A_foo_1, _B_foo; class A { constructor() { - _A_foo_1.set(this, 1); + _A_foo_1 = { value: 1 }; // because static and instance private names // share the same lexical scope // https://tc39.es/proposal-class-fields/#prod-ClassBody } } -_A_foo = new WeakMap(), _A_foo_1 = new WeakMap(); -_A_foo_1.set(A, true); // error (duplicate) +_A_foo = new WeakMap(); +_A_foo_1 = { value: true }; // error (duplicate) class B { test(x) { - __classPrivateFieldGet(x, _B_foo); // error (#foo is a static property on B, not an instance property) + __classStaticPrivateFieldGet(x, B, _B_foo); // error (#foo is a static property on B, not an instance property) } } -_B_foo = new WeakMap(); -_B_foo.set(B, true); +_B_foo = { value: true }; From 7006c091c63803aa3559d9e63a67ec9c6371a727 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Tue, 16 Feb 2021 16:58:56 +0200 Subject: [PATCH 37/73] Added error message for private identifiers used with static decorators. There is no spec to go with this behavior as of yet. --- src/compiler/checker.ts | 3 +++ src/compiler/diagnosticMessages.json | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 703ae2b00fbc1..908e0bbcd41f5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -35993,6 +35993,9 @@ namespace ts { } function checkClassDeclaration(node: ClassDeclaration) { + if (some(node.decorators) && some(node.members, p => hasStaticModifier(p) && isPrivateIdentifierClassElementDeclaration(p))) { + grammarErrorOnNode(node.decorators[0], Diagnostics.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator); + } if (!node.name && !hasSyntacticModifier(node, ModifierFlags.Default)) { grammarErrorOnFirstToken(node, Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name); } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index fbb76afc581eb..07733831be915 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -6350,5 +6350,9 @@ "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name.": { "category": "Error", "code": 18035 + }, + "Class decorators can't be used with static private identifier. Consider removing the experimental decorator.": { + "category": "Error", + "code": 18036 } } From b8766135e0f9f39603e064a02813732484bc7652 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Thu, 18 Feb 2021 15:36:24 +0200 Subject: [PATCH 38/73] Fixed emit static bug that used private names outside of classes for initialization in esnext. Fixed issue where nested privates produce incorrect brand check. --- src/compiler/transformers/classFields.ts | 74 +++++++++++++++++------- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 137a8adbfc237..bb7c67585c568 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -36,23 +36,28 @@ namespace ts { interface PrivateIdentifierStaticField { placement: PrivateIdentifierPlacement.StaticField; variableName: Identifier; + classConstructor: Identifier; } interface PrivateIdentifierStaticMethod { placement: PrivateIdentifierPlacement.StaticMethod; functionName: Identifier; + classConstructor: Identifier; } interface PrivateIdentifierStaticGetterOnly { placement: PrivateIdentifierPlacement.StaticGetterOnly; getterName: Identifier; + classConstructor: Identifier; } interface PrivateIdentifierStaticSetterOnly { placement: PrivateIdentifierPlacement.StaticSetterOnly; setterName: Identifier; + classConstructor: Identifier; } interface PrivateIdentifierStaticGetterAndSetterOnly { placement: PrivateIdentifierPlacement.StaticGetterAndSetter; getterName: Identifier; setterName: Identifier; + classConstructor: Identifier; } interface PrivateIdentifierInstanceField { placement: PrivateIdentifierPlacement.InstanceField; @@ -331,6 +336,8 @@ namespace ts { Debug.assert(!some(node.decorators)); if (!shouldTransformPrivateElements && isPrivateIdentifier(node.name)) { // Initializer is elided as the field is initialized in transformConstructor. + // We include initalizers for static private fields as there is no simple way to do this emit, + // and nobody is relying on the old assignment semantics for private static fields. return factory.updatePropertyDeclaration( node, /*decorators*/ undefined, @@ -338,7 +345,7 @@ namespace ts { node.name, /*questionOrExclamationToken*/ undefined, /*type*/ undefined, - /*initializer*/ undefined + /*initializer*/ hasStaticModifier(node) ? node.initializer : undefined ); } // Create a temporary variable to store a computed property name (if necessary). @@ -384,20 +391,20 @@ namespace ts { case PrivateIdentifierPlacement.StaticField: return context.getEmitHelperFactory().createClassStaticPrivateFieldGetHelper( receiver, - getPrivateIdentifierEnvironment().classConstructor, + info.classConstructor, info.variableName ); case PrivateIdentifierPlacement.StaticMethod: return context.getEmitHelperFactory().createClassStaticPrivateMethodGetHelper( receiver, - getPrivateIdentifierEnvironment().classConstructor, + info.classConstructor, info.functionName ); case PrivateIdentifierPlacement.StaticGetterOnly: case PrivateIdentifierPlacement.StaticGetterAndSetter: return context.getEmitHelperFactory().createClassStaticPrivateAccessorGetHelper( receiver, - getPrivateIdentifierEnvironment().classConstructor, + info.classConstructor, info.getterName ); case PrivateIdentifierPlacement.StaticSetterOnly: @@ -622,7 +629,7 @@ namespace ts { case PrivateIdentifierPlacement.StaticField: return context.getEmitHelperFactory().createClassStaticPrivateFieldSetHelper( receiver, - getPrivateIdentifierEnvironment().classConstructor, + info.classConstructor, info.variableName, right ); @@ -636,7 +643,7 @@ namespace ts { case PrivateIdentifierPlacement.StaticGetterAndSetter: return context.getEmitHelperFactory().createClassStaticPrivateAccessorSetHelper( receiver, - getPrivateIdentifierEnvironment().classConstructor, + info.classConstructor, info.setterName, right ); @@ -716,14 +723,24 @@ namespace ts { // From ES6 specification: // HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. - const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); + let staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); + + if (languageVersion === ScriptTarget.ESNext) { + // We can't initialize static private properties after the class as the are not in the lexical scope + // so we rely on standard init even under useDefineForClassFields:false + staticProperties = filter(staticProperties, p => !isPrivateIdentifier(p.name)); + } + else { + // We must initialize static private properties even if the don't have a value as we initialize them with a wrapper object which mist always exist. + const staticUninitializedPrivateProperties = filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer); + if (some(staticUninitializedPrivateProperties)) { + addPropertyStatements(statements, staticUninitializedPrivateProperties, factory.getInternalName(node)); + } + } + if (some(staticProperties)) { addPropertyStatements(statements, staticProperties, factory.getInternalName(node)); } - const staticPrivateProperties = filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer); - if(some(staticPrivateProperties)) { - addPropertyStatements(statements, staticPrivateProperties, factory.getInternalName(node)); - } return statements; } @@ -742,13 +759,20 @@ namespace ts { // these statements after the class expression variable statement. const isDecoratedClassDeclaration = isClassDeclaration(getOriginalNode(node)); - const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); + let staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); + if (!shouldTransformPrivateElements) { + // We can't initialize static private properties after the class as the are not in the lexical scope + // so we rely on standard init even under useDefineForClassFields:false + staticProperties = filter(staticProperties, p => !isPrivateIdentifier(p.name)); + } + const staticUninitializedPrivateProperties = !shouldTransformPrivateElements ? []: + filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer); const extendsClauseElement = getEffectiveBaseTypeNode(node); const isDerivedClass = !!(extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== SyntaxKind.NullKeyword); const isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & NodeCheckFlags.ClassWithConstructorReference; let temp: Identifier | undefined; - if (some(node.members, m => hasStaticModifier(m) && !!m.name && isPrivateIdentifier(m.name))) { + if (shouldTransformPrivateElements && some(node.members, m => hasStaticModifier(m) && !!m.name && isPrivateIdentifier(m.name))) { temp = factory.createTempVariable(hoistVariableDeclaration, !!isClassWithConstructorReference); getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp); } @@ -763,7 +787,7 @@ namespace ts { transformClassMembers(node, isDerivedClass) ); - if (some(staticProperties) || some(pendingExpressions)) { + if (some(staticUninitializedPrivateProperties) ||some(staticProperties) || some(pendingExpressions)) { if (isDecoratedClassDeclaration) { Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration."); @@ -772,8 +796,13 @@ namespace ts { pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions))); } - if (pendingStatements && some(staticProperties)) { - addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); + if (pendingStatements ) { + if (some(staticProperties)) { + addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); + } + if (some(staticUninitializedPrivateProperties)) { + addPropertyStatements(pendingStatements, staticUninitializedPrivateProperties, factory.getInternalName(node)); + } } if(temp) { return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]); @@ -798,6 +827,7 @@ namespace ts { // 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(staticUninitializedPrivateProperties, temp)); expressions.push(startOnNewLine(temp)); return factory.inlineExpressions(expressions); @@ -1207,20 +1237,22 @@ namespace ts { const { weakSetName } = getPrivateIdentifierEnvironment(); let info: PrivateIdentifierInfo; const assignmentExpressions: Expression[] = []; - + const env = getPrivateIdentifierEnvironment(); if(hasStaticModifier(node)) { if (isPropertyDeclaration(node)) { const variableName = createHoistedVariableForPrivateName(text); info = { placement: PrivateIdentifierPlacement.StaticField, - variableName + variableName, + classConstructor: env.classConstructor }; } else if(isMethodDeclaration(node)) { const functionName = createHoistedVariableForPrivateName(text); info = { placement: PrivateIdentifierPlacement.StaticMethod, - functionName + functionName, + classConstructor: env.classConstructor }; } else if(isGetAccessorDeclaration(node)) { @@ -1238,6 +1270,7 @@ namespace ts { info = { placement: PrivateIdentifierPlacement.StaticGetterOnly, getterName, + classConstructor: env.classConstructor }; } } @@ -1256,6 +1289,7 @@ namespace ts { info = { placement: PrivateIdentifierPlacement.StaticSetterOnly, setterName, + classConstructor: env.classConstructor }; } } @@ -1332,7 +1366,7 @@ namespace ts { return; } - getPrivateIdentifierEnvironment().identifiers.set(node.name.escapedText, info); + env.identifiers.set(node.name.escapedText, info); getPendingExpressions().push(...assignmentExpressions); } From 31a8c00fe6e574dff301a9430299f02d5068202c Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Thu, 18 Feb 2021 15:39:09 +0200 Subject: [PATCH 39/73] Added tests for private static fields methods and accessors. --- .../privateNameAndObjectRestSpread.errors.txt | 18 +- .../privateNameAndObjectRestSpread.js | 19 +- .../privateNameAndObjectRestSpread.symbols | 33 ++- .../privateNameAndObjectRestSpread.types | 21 ++ .../reference/privateNameFieldsESNext.js | 3 +- .../privateNameStaticAccessors.errors.txt | 20 ++ .../reference/privateNameStaticAccessors.js | 44 ++++ .../privateNameStaticAccessors.symbols | 41 ++++ .../privateNameStaticAccessors.types | 49 ++++ ...rivateNameStaticAccessorsAccess.errors.txt | 39 ++++ .../privateNameStaticAccessorsAccess.js | 58 +++++ .../privateNameStaticAccessorsAccess.symbols | 60 +++++ .../privateNameStaticAccessorsAccess.types | 65 ++++++ ...rivateNameStaticAccessorsCallExpression.js | 52 +++++ ...eNameStaticAccessorsCallExpression.symbols | 65 ++++++ ...ateNameStaticAccessorsCallExpression.types | 93 ++++++++ ...eStaticAccessorssDerivedClasses.errors.txt | 21 ++ ...ivateNameStaticAccessorssDerivedClasses.js | 33 +++ ...NameStaticAccessorssDerivedClasses.symbols | 36 +++ ...teNameStaticAccessorssDerivedClasses.types | 41 ++++ ...aticAndStaticInitializer(target=es2015).js | 14 ++ ...ndStaticInitializer(target=es2015).symbols | 12 + ...cAndStaticInitializer(target=es2015).types | 14 ++ ...aticAndStaticInitializer(target=esnext).js | 13 ++ ...ndStaticInitializer(target=esnext).symbols | 12 + ...cAndStaticInitializer(target=esnext).types | 14 ++ .../privateNameStaticFieldAccess.errors.txt | 14 ++ .../reference/privateNameStaticFieldAccess.js | 25 +++ .../privateNameStaticFieldAccess.symbols | 23 ++ .../privateNameStaticFieldAccess.types | 27 +++ .../privateNameStaticFieldAssignment.js | 87 +++++++ .../privateNameStaticFieldAssignment.symbols | 146 ++++++++++++ .../privateNameStaticFieldAssignment.types | 212 ++++++++++++++++++ .../privateNameStaticFieldCallExpression.js | 52 +++++ ...ivateNameStaticFieldCallExpression.symbols | 68 ++++++ ...privateNameStaticFieldCallExpression.types | 100 +++++++++ .../privateNameStaticFieldClassExpression.js | 52 +++++ ...vateNameStaticFieldClassExpression.symbols | 61 +++++ ...rivateNameStaticFieldClassExpression.types | 73 ++++++ ...teNameStaticFieldDerivedClasses.errors.txt | 25 +++ .../privateNameStaticFieldDerivedClasses.js | 48 ++++ ...ivateNameStaticFieldDerivedClasses.symbols | 42 ++++ ...privateNameStaticFieldDerivedClasses.types | 48 ++++ ...FieldDestructuredBinding(target=es2015).js | 59 +++++ ...DestructuredBinding(target=es2015).symbols | 90 ++++++++ ...ldDestructuredBinding(target=es2015).types | 144 ++++++++++++ ...FieldDestructuredBinding(target=esnext).js | 50 +++++ ...DestructuredBinding(target=esnext).symbols | 90 ++++++++ ...ldDestructuredBinding(target=esnext).types | 144 ++++++++++++ ...meStaticFieldInitializer(target=es2015).js | 13 ++ ...ticFieldInitializer(target=es2015).symbols | 11 + ...taticFieldInitializer(target=es2015).types | 12 + ...meStaticFieldInitializer(target=esnext).js | 12 + ...ticFieldInitializer(target=esnext).symbols | 11 + ...taticFieldInitializer(target=esnext).types | 12 + .../privateNameStaticFieldInitializer.js | 13 ++ .../privateNameStaticFieldInitializer.symbols | 11 + .../privateNameStaticFieldInitializer.types | 12 + .../privateNameStaticFieldUnaryMutation.js | 76 +++++++ ...rivateNameStaticFieldUnaryMutation.symbols | 148 ++++++++++++ .../privateNameStaticFieldUnaryMutation.types | 199 ++++++++++++++++ .../privateNameStaticMethod.errors.txt | 22 ++ .../reference/privateNameStaticMethod.js | 34 +++ .../reference/privateNameStaticMethod.symbols | 26 +++ .../reference/privateNameStaticMethod.types | 32 +++ ...ivateNameStaticMethodAssignment.errors.txt | 30 +++ .../privateNameStaticMethodAssignment.js | 40 ++++ .../privateNameStaticMethodAssignment.symbols | 39 ++++ .../privateNameStaticMethodAssignment.types | 53 +++++ .../privateNameStaticMethodAsync.errors.txt | 21 ++ .../reference/privateNameStaticMethodAsync.js | 38 ++++ .../privateNameStaticMethodAsync.symbols | 50 +++++ .../privateNameStaticMethodAsync.types | 79 +++++++ .../privateNameStaticMethodCallExpression.js | 56 +++++ ...vateNameStaticMethodCallExpression.symbols | 89 ++++++++ ...rivateNameStaticMethodCallExpression.types | 131 +++++++++++ ...NameStaticMethodClassExpression.errors.txt | 21 ++ .../privateNameStaticMethodClassExpression.js | 39 ++++ ...ateNameStaticMethodClassExpression.symbols | 44 ++++ ...ivateNameStaticMethodClassExpression.types | 54 +++++ ...rivateNameStaticMethodInStaticFieldInit.js | 22 ++ ...eNameStaticMethodInStaticFieldInit.symbols | 21 ++ ...ateNameStaticMethodInStaticFieldInit.types | 24 ++ .../privateNameStaticsAndStaticMethods.js | 62 +++++ ...privateNameStaticsAndStaticMethods.symbols | 80 +++++++ .../privateNameStaticsAndStaticMethods.types | 95 ++++++++ .../members/privateNames/privateNameAndAny.ts | 6 +- .../privateNameAndObjectRestSpread.ts | 6 + .../privateNameStaticAccessors.ts | 16 ++ .../privateNameStaticAccessorsAccess.ts | 27 +++ ...rivateNameStaticAccessorsCallExpression.ts | 20 ++ ...ivateNameStaticAccessorssDerivedClasses.ts | 13 ++ .../privateNameStaticAndStaticInitializer.ts | 7 + .../privateNameStaticFieldAccess.ts | 9 + .../privateNameStaticFieldAssignment.ts | 36 +++ .../privateNameStaticFieldCallExpression.ts | 21 ++ .../privateNameStaticFieldClassExpression.ts | 23 ++ .../privateNameStaticFieldDerivedClasses.ts | 17 ++ ...ivateNameStaticFieldDestructuredBinding.ts | 25 +++ .../privateNameStaticFieldInitializer.ts | 6 + .../privateNameStaticFieldUnaryMutation.ts | 30 +++ .../privateNames/privateNameStaticMethod.ts | 14 ++ .../privateNameStaticMethodAssignment.ts | 13 ++ .../privateNameStaticMethodAsync.ts | 16 ++ .../privateNameStaticMethodCallExpression.ts | 25 +++ .../privateNameStaticMethodClassExpression.ts | 13 ++ ...rivateNameStaticMethodInStaticFieldInit.ts | 8 + .../privateNameStaticsAndStaticMethods.ts | 33 +++ 108 files changed, 4671 insertions(+), 15 deletions(-) create mode 100644 tests/baselines/reference/privateNameStaticAccessors.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticAccessors.js create mode 100644 tests/baselines/reference/privateNameStaticAccessors.symbols create mode 100644 tests/baselines/reference/privateNameStaticAccessors.types create mode 100644 tests/baselines/reference/privateNameStaticAccessorsAccess.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticAccessorsAccess.js create mode 100644 tests/baselines/reference/privateNameStaticAccessorsAccess.symbols create mode 100644 tests/baselines/reference/privateNameStaticAccessorsAccess.types create mode 100644 tests/baselines/reference/privateNameStaticAccessorsCallExpression.js create mode 100644 tests/baselines/reference/privateNameStaticAccessorsCallExpression.symbols create mode 100644 tests/baselines/reference/privateNameStaticAccessorsCallExpression.types create mode 100644 tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js create mode 100644 tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.symbols create mode 100644 tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.types create mode 100644 tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).js create mode 100644 tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).symbols create mode 100644 tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).types create mode 100644 tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).js create mode 100644 tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).symbols create mode 100644 tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).types create mode 100644 tests/baselines/reference/privateNameStaticFieldAccess.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticFieldAccess.js create mode 100644 tests/baselines/reference/privateNameStaticFieldAccess.symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldAccess.types create mode 100644 tests/baselines/reference/privateNameStaticFieldAssignment.js create mode 100644 tests/baselines/reference/privateNameStaticFieldAssignment.symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldAssignment.types create mode 100644 tests/baselines/reference/privateNameStaticFieldCallExpression.js create mode 100644 tests/baselines/reference/privateNameStaticFieldCallExpression.symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldCallExpression.types create mode 100644 tests/baselines/reference/privateNameStaticFieldClassExpression.js create mode 100644 tests/baselines/reference/privateNameStaticFieldClassExpression.symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldClassExpression.types create mode 100644 tests/baselines/reference/privateNameStaticFieldDerivedClasses.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticFieldDerivedClasses.js create mode 100644 tests/baselines/reference/privateNameStaticFieldDerivedClasses.symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldDerivedClasses.types create mode 100644 tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js create mode 100644 tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).types create mode 100644 tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).js create mode 100644 tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).types create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).types create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).js create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).types create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer.js create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer.symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer.types create mode 100644 tests/baselines/reference/privateNameStaticFieldUnaryMutation.js create mode 100644 tests/baselines/reference/privateNameStaticFieldUnaryMutation.symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldUnaryMutation.types create mode 100644 tests/baselines/reference/privateNameStaticMethod.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticMethod.js create mode 100644 tests/baselines/reference/privateNameStaticMethod.symbols create mode 100644 tests/baselines/reference/privateNameStaticMethod.types create mode 100644 tests/baselines/reference/privateNameStaticMethodAssignment.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticMethodAssignment.js create mode 100644 tests/baselines/reference/privateNameStaticMethodAssignment.symbols create mode 100644 tests/baselines/reference/privateNameStaticMethodAssignment.types create mode 100644 tests/baselines/reference/privateNameStaticMethodAsync.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticMethodAsync.js create mode 100644 tests/baselines/reference/privateNameStaticMethodAsync.symbols create mode 100644 tests/baselines/reference/privateNameStaticMethodAsync.types create mode 100644 tests/baselines/reference/privateNameStaticMethodCallExpression.js create mode 100644 tests/baselines/reference/privateNameStaticMethodCallExpression.symbols create mode 100644 tests/baselines/reference/privateNameStaticMethodCallExpression.types create mode 100644 tests/baselines/reference/privateNameStaticMethodClassExpression.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticMethodClassExpression.js create mode 100644 tests/baselines/reference/privateNameStaticMethodClassExpression.symbols create mode 100644 tests/baselines/reference/privateNameStaticMethodClassExpression.types create mode 100644 tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js create mode 100644 tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.symbols create mode 100644 tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.types create mode 100644 tests/baselines/reference/privateNameStaticsAndStaticMethods.js create mode 100644 tests/baselines/reference/privateNameStaticsAndStaticMethods.symbols create mode 100644 tests/baselines/reference/privateNameStaticsAndStaticMethods.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessors.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsCallExpression.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAccess.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAssignment.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldCallExpression.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldClassExpression.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldUnaryMutation.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAsync.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodCallExpression.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodInStaticFieldInit.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticsAndStaticMethods.ts diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.errors.txt b/tests/baselines/reference/privateNameAndObjectRestSpread.errors.txt index e55f40f3ba4d6..e4f5e59b9e580 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.errors.txt +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.errors.txt @@ -1,10 +1,13 @@ -tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts(6,13): error TS2339: Property '#prop' does not exist on type '{}'. -tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts(8,14): error TS2339: Property '#prop' does not exist on type '{}'. +tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts(7,13): error TS2339: Property '#prop' does not exist on type '{}'. +tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts(9,14): error TS2339: Property '#prop' does not exist on type '{}'. +tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts(12,17): error TS2339: Property '#propStatic' does not exist on type '{ prototype: C; }'. +tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts(14,15): error TS2339: Property '#propStatic' does not exist on type '{ prototype: C; }'. -==== tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts (2 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts (4 errors) ==== class C { #prop = 1; + static #propStatic = 1; method(other: C) { const obj = { ...other }; @@ -15,5 +18,14 @@ tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpr rest.#prop; ~~~~~ !!! error TS2339: Property '#prop' does not exist on type '{}'. + + const statics = { ... C}; + statics.#propStatic + ~~~~~~~~~~~ +!!! error TS2339: Property '#propStatic' does not exist on type '{ prototype: C; }'. + const { ...sRest } = C; + sRest.#propStatic; + ~~~~~~~~~~~ +!!! error TS2339: Property '#propStatic' does not exist on type '{ prototype: C; }'. } } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.js b/tests/baselines/reference/privateNameAndObjectRestSpread.js index cc8c64619e1c5..44ca402544baa 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.js +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.js @@ -1,12 +1,18 @@ //// [privateNameAndObjectRestSpread.ts] class C { #prop = 1; + static #propStatic = 1; method(other: C) { const obj = { ...other }; obj.#prop; const { ...rest } = other; rest.#prop; + + const statics = { ... C}; + statics.#propStatic + const { ...sRest } = C; + sRest.#propStatic; } } @@ -18,6 +24,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; 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) @@ -29,7 +41,7 @@ var __rest = (this && this.__rest) || function (s, e) { } return t; }; -var _C_prop; +var _C_prop, _C_propStatic; class C { constructor() { _C_prop.set(this, 1); @@ -39,6 +51,11 @@ class C { __classPrivateFieldGet(obj, _C_prop); const rest = __rest(other, []); __classPrivateFieldGet(rest, _C_prop); + const statics = Object.assign({}, C); + __classStaticPrivateFieldGet(statics, C, _C_propStatic); + const sRest = __rest(C, []); + __classStaticPrivateFieldGet(sRest, C, _C_propStatic); } } _C_prop = new WeakMap(); +_C_propStatic = { value: 1 }; diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.symbols b/tests/baselines/reference/privateNameAndObjectRestSpread.symbols index b9b3ef5eed438..8d930393ee143 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.symbols +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.symbols @@ -5,23 +5,40 @@ class C { #prop = 1; >#prop : Symbol(C.#prop, Decl(privateNameAndObjectRestSpread.ts, 0, 9)) + static #propStatic = 1; +>#propStatic : Symbol(C.#propStatic, Decl(privateNameAndObjectRestSpread.ts, 1, 14)) + method(other: C) { ->method : Symbol(C.method, Decl(privateNameAndObjectRestSpread.ts, 1, 14)) ->other : Symbol(other, Decl(privateNameAndObjectRestSpread.ts, 3, 11)) +>method : Symbol(C.method, Decl(privateNameAndObjectRestSpread.ts, 2, 27)) +>other : Symbol(other, Decl(privateNameAndObjectRestSpread.ts, 4, 11)) >C : Symbol(C, Decl(privateNameAndObjectRestSpread.ts, 0, 0)) const obj = { ...other }; ->obj : Symbol(obj, Decl(privateNameAndObjectRestSpread.ts, 4, 13)) ->other : Symbol(other, Decl(privateNameAndObjectRestSpread.ts, 3, 11)) +>obj : Symbol(obj, Decl(privateNameAndObjectRestSpread.ts, 5, 13)) +>other : Symbol(other, Decl(privateNameAndObjectRestSpread.ts, 4, 11)) obj.#prop; ->obj : Symbol(obj, Decl(privateNameAndObjectRestSpread.ts, 4, 13)) +>obj : Symbol(obj, Decl(privateNameAndObjectRestSpread.ts, 5, 13)) const { ...rest } = other; ->rest : Symbol(rest, Decl(privateNameAndObjectRestSpread.ts, 6, 15)) ->other : Symbol(other, Decl(privateNameAndObjectRestSpread.ts, 3, 11)) +>rest : Symbol(rest, Decl(privateNameAndObjectRestSpread.ts, 7, 15)) +>other : Symbol(other, Decl(privateNameAndObjectRestSpread.ts, 4, 11)) rest.#prop; ->rest : Symbol(rest, Decl(privateNameAndObjectRestSpread.ts, 6, 15)) +>rest : Symbol(rest, Decl(privateNameAndObjectRestSpread.ts, 7, 15)) + + const statics = { ... C}; +>statics : Symbol(statics, Decl(privateNameAndObjectRestSpread.ts, 10, 13)) +>C : Symbol(C, Decl(privateNameAndObjectRestSpread.ts, 0, 0)) + + statics.#propStatic +>statics : Symbol(statics, Decl(privateNameAndObjectRestSpread.ts, 10, 13)) + + const { ...sRest } = C; +>sRest : Symbol(sRest, Decl(privateNameAndObjectRestSpread.ts, 12, 15)) +>C : Symbol(C, Decl(privateNameAndObjectRestSpread.ts, 0, 0)) + + sRest.#propStatic; +>sRest : Symbol(sRest, Decl(privateNameAndObjectRestSpread.ts, 12, 15)) } } diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.types b/tests/baselines/reference/privateNameAndObjectRestSpread.types index 0bab5992fa62c..96af44dbf5917 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.types +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.types @@ -4,6 +4,10 @@ class C { #prop = 1; >#prop : number +>1 : 1 + + static #propStatic = 1; +>#propStatic : number >1 : 1 method(other: C) { @@ -26,5 +30,22 @@ class C { rest.#prop; >rest.#prop : any >rest : {} + + const statics = { ... C}; +>statics : { prototype: C; } +>{ ... C} : { prototype: C; } +>C : typeof C + + statics.#propStatic +>statics.#propStatic : any +>statics : { prototype: C; } + + const { ...sRest } = C; +>sRest : { prototype: C; } +>C : typeof C + + sRest.#propStatic; +>sRest.#propStatic : any +>sRest : { prototype: C; } } } diff --git a/tests/baselines/reference/privateNameFieldsESNext.js b/tests/baselines/reference/privateNameFieldsESNext.js index acc37caa3cc8f..99abdeb482a20 100644 --- a/tests/baselines/reference/privateNameFieldsESNext.js +++ b/tests/baselines/reference/privateNameFieldsESNext.js @@ -35,7 +35,7 @@ class C { this.#a = "hello"; console.log(this.#b); } - static #m; + static #m = "test"; static #x; static test() { console.log(this.#m); @@ -43,4 +43,3 @@ class C { } #something; } -C.#m = "test"; diff --git a/tests/baselines/reference/privateNameStaticAccessors.errors.txt b/tests/baselines/reference/privateNameStaticAccessors.errors.txt new file mode 100644 index 0000000000000..ad5c9cea1faba --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessors.errors.txt @@ -0,0 +1,20 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessors.ts(9,12): error TS2540: Cannot assign to '#roProp' because it is a read-only property. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessors.ts (1 errors) ==== + class A1 { + static get #prop() { return ""; } + static set #prop(param: string) { } + + static get #roProp() { return ""; } + + constructor(name: string) { + A1.#prop = ""; + A1.#roProp = ""; // Error + ~~~~~~~ +!!! error TS2540: Cannot assign to '#roProp' because it is a read-only property. + console.log(A1.#prop); + console.log(A1.#roProp); + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticAccessors.js b/tests/baselines/reference/privateNameStaticAccessors.js new file mode 100644 index 0000000000000..417e8ed72f2a3 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessors.js @@ -0,0 +1,44 @@ +//// [privateNameStaticAccessors.ts] +class A1 { + static get #prop() { return ""; } + static set #prop(param: string) { } + + static get #roProp() { return ""; } + + constructor(name: string) { + A1.#prop = ""; + A1.#roProp = ""; // Error + console.log(A1.#prop); + console.log(A1.#roProp); + } +} + + +//// [privateNameStaticAccessors.js] +"use strict"; +var __classStaticPrivateAccessorSet = (this && this.__classStaticPrivateAccessorSet) || function (receiver, classConstructor, fn, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + fn.call(receiver, value); + return value; +}; +var __classStaticPrivateReadonly = (this && this.__classStaticPrivateReadonly) || function () { + throw new TypeError("Private static element is not writable"); +}; +var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn.call(receiver); +}; +var _A1_prop_get, _A1_prop_set, _A1_roProp_get; +class A1 { + constructor(name) { + __classStaticPrivateAccessorSet(A1, A1, _A1_prop_set, ""); + __classStaticPrivateReadonly(A1, ""); // Error + console.log(__classStaticPrivateAccessorGet(A1, A1, _A1_prop_get)); + console.log(__classStaticPrivateAccessorGet(A1, A1, _A1_roProp_get)); + } +} +_A1_prop_get = function _A1_prop_get() { return ""; }, _A1_prop_set = function _A1_prop_set(param) { }, _A1_roProp_get = function _A1_roProp_get() { return ""; }; diff --git a/tests/baselines/reference/privateNameStaticAccessors.symbols b/tests/baselines/reference/privateNameStaticAccessors.symbols new file mode 100644 index 0000000000000..d43d930992ec8 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessors.symbols @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessors.ts === +class A1 { +>A1 : Symbol(A1, Decl(privateNameStaticAccessors.ts, 0, 0)) + + static get #prop() { return ""; } +>#prop : Symbol(A1.#prop, Decl(privateNameStaticAccessors.ts, 0, 10), Decl(privateNameStaticAccessors.ts, 1, 37)) + + static set #prop(param: string) { } +>#prop : Symbol(A1.#prop, Decl(privateNameStaticAccessors.ts, 0, 10), Decl(privateNameStaticAccessors.ts, 1, 37)) +>param : Symbol(param, Decl(privateNameStaticAccessors.ts, 2, 21)) + + static get #roProp() { return ""; } +>#roProp : Symbol(A1.#roProp, Decl(privateNameStaticAccessors.ts, 2, 39)) + + constructor(name: string) { +>name : Symbol(name, Decl(privateNameStaticAccessors.ts, 6, 16)) + + A1.#prop = ""; +>A1.#prop : Symbol(A1.#prop, Decl(privateNameStaticAccessors.ts, 0, 10), Decl(privateNameStaticAccessors.ts, 1, 37)) +>A1 : Symbol(A1, Decl(privateNameStaticAccessors.ts, 0, 0)) + + A1.#roProp = ""; // Error +>A1.#roProp : Symbol(A1.#roProp, Decl(privateNameStaticAccessors.ts, 2, 39)) +>A1 : Symbol(A1, Decl(privateNameStaticAccessors.ts, 0, 0)) + + console.log(A1.#prop); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>A1.#prop : Symbol(A1.#prop, Decl(privateNameStaticAccessors.ts, 0, 10), Decl(privateNameStaticAccessors.ts, 1, 37)) +>A1 : Symbol(A1, Decl(privateNameStaticAccessors.ts, 0, 0)) + + console.log(A1.#roProp); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>A1.#roProp : Symbol(A1.#roProp, Decl(privateNameStaticAccessors.ts, 2, 39)) +>A1 : Symbol(A1, Decl(privateNameStaticAccessors.ts, 0, 0)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticAccessors.types b/tests/baselines/reference/privateNameStaticAccessors.types new file mode 100644 index 0000000000000..7a903c854282b --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessors.types @@ -0,0 +1,49 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessors.ts === +class A1 { +>A1 : A1 + + static get #prop() { return ""; } +>#prop : string +>"" : "" + + static set #prop(param: string) { } +>#prop : string +>param : string + + static get #roProp() { return ""; } +>#roProp : string +>"" : "" + + constructor(name: string) { +>name : string + + A1.#prop = ""; +>A1.#prop = "" : "" +>A1.#prop : string +>A1 : typeof A1 +>"" : "" + + A1.#roProp = ""; // Error +>A1.#roProp = "" : "" +>A1.#roProp : any +>A1 : typeof A1 +>"" : "" + + console.log(A1.#prop); +>console.log(A1.#prop) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>A1.#prop : string +>A1 : typeof A1 + + console.log(A1.#roProp); +>console.log(A1.#roProp) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>A1.#roProp : string +>A1 : typeof A1 + } +} + diff --git a/tests/baselines/reference/privateNameStaticAccessorsAccess.errors.txt b/tests/baselines/reference/privateNameStaticAccessorsAccess.errors.txt new file mode 100644 index 0000000000000..a41043d318791 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorsAccess.errors.txt @@ -0,0 +1,39 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts(16,4): error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts(19,8): error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts(24,12): error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts (3 errors) ==== + export {} + class A2 { + static get #prop() { return ""; } + static set #prop(param: string) { } + + constructor() { + console.log(A2.#prop); + let a: typeof A2 = A2; + a.#prop; + function foo (){ + a.#prop; + } + } + } + + A2.#prop; // Error + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. + + function foo (){ + A2.#prop; // Error + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. + } + + class B2 { + m() { + A2.#prop; + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'A2' because it has a private identifier. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticAccessorsAccess.js b/tests/baselines/reference/privateNameStaticAccessorsAccess.js new file mode 100644 index 0000000000000..d17b31c467e6c --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorsAccess.js @@ -0,0 +1,58 @@ +//// [privateNameStaticAccessorsAccess.ts] +export {} +class A2 { + static get #prop() { return ""; } + static set #prop(param: string) { } + + constructor() { + console.log(A2.#prop); + let a: typeof A2 = A2; + a.#prop; + function foo (){ + a.#prop; + } + } +} + +A2.#prop; // Error + +function foo (){ + A2.#prop; // Error +} + +class B2 { + m() { + A2.#prop; + } +} + + +//// [privateNameStaticAccessorsAccess.js] +var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn.call(receiver); +}; +var _A2_prop_get, _A2_prop_set; +class A2 { + constructor() { + console.log(__classStaticPrivateAccessorGet(A2, A2, _A2_prop_get)); + let a = A2; + __classStaticPrivateAccessorGet(a, A2, _A2_prop_get); + function foo() { + __classStaticPrivateAccessorGet(a, A2, _A2_prop_get); + } + } +} +_A2_prop_get = function _A2_prop_get() { return ""; }, _A2_prop_set = function _A2_prop_set(param) { }; +A2.; // Error +function foo() { + A2.; // Error +} +class B2 { + m() { + A2.; + } +} +export {}; diff --git a/tests/baselines/reference/privateNameStaticAccessorsAccess.symbols b/tests/baselines/reference/privateNameStaticAccessorsAccess.symbols new file mode 100644 index 0000000000000..140f6e23aa10b --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorsAccess.symbols @@ -0,0 +1,60 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts === +export {} +class A2 { +>A2 : Symbol(A2, Decl(privateNameStaticAccessorsAccess.ts, 0, 9)) + + static get #prop() { return ""; } +>#prop : Symbol(A2.#prop, Decl(privateNameStaticAccessorsAccess.ts, 1, 10), Decl(privateNameStaticAccessorsAccess.ts, 2, 37)) + + static set #prop(param: string) { } +>#prop : Symbol(A2.#prop, Decl(privateNameStaticAccessorsAccess.ts, 1, 10), Decl(privateNameStaticAccessorsAccess.ts, 2, 37)) +>param : Symbol(param, Decl(privateNameStaticAccessorsAccess.ts, 3, 21)) + + constructor() { + console.log(A2.#prop); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>A2.#prop : Symbol(A2.#prop, Decl(privateNameStaticAccessorsAccess.ts, 1, 10), Decl(privateNameStaticAccessorsAccess.ts, 2, 37)) +>A2 : Symbol(A2, Decl(privateNameStaticAccessorsAccess.ts, 0, 9)) + + let a: typeof A2 = A2; +>a : Symbol(a, Decl(privateNameStaticAccessorsAccess.ts, 7, 11)) +>A2 : Symbol(A2, Decl(privateNameStaticAccessorsAccess.ts, 0, 9)) +>A2 : Symbol(A2, Decl(privateNameStaticAccessorsAccess.ts, 0, 9)) + + a.#prop; +>a.#prop : Symbol(A2.#prop, Decl(privateNameStaticAccessorsAccess.ts, 1, 10), Decl(privateNameStaticAccessorsAccess.ts, 2, 37)) +>a : Symbol(a, Decl(privateNameStaticAccessorsAccess.ts, 7, 11)) + + function foo (){ +>foo : Symbol(foo, Decl(privateNameStaticAccessorsAccess.ts, 8, 16)) + + a.#prop; +>a.#prop : Symbol(A2.#prop, Decl(privateNameStaticAccessorsAccess.ts, 1, 10), Decl(privateNameStaticAccessorsAccess.ts, 2, 37)) +>a : Symbol(a, Decl(privateNameStaticAccessorsAccess.ts, 7, 11)) + } + } +} + +A2.#prop; // Error +>A2 : Symbol(A2, Decl(privateNameStaticAccessorsAccess.ts, 0, 9)) + +function foo (){ +>foo : Symbol(foo, Decl(privateNameStaticAccessorsAccess.ts, 15, 9)) + + A2.#prop; // Error +>A2 : Symbol(A2, Decl(privateNameStaticAccessorsAccess.ts, 0, 9)) +} + +class B2 { +>B2 : Symbol(B2, Decl(privateNameStaticAccessorsAccess.ts, 19, 1)) + + m() { +>m : Symbol(B2.m, Decl(privateNameStaticAccessorsAccess.ts, 21, 10)) + + A2.#prop; +>A2 : Symbol(A2, Decl(privateNameStaticAccessorsAccess.ts, 0, 9)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticAccessorsAccess.types b/tests/baselines/reference/privateNameStaticAccessorsAccess.types new file mode 100644 index 0000000000000..71171d25f34c3 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorsAccess.types @@ -0,0 +1,65 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts === +export {} +class A2 { +>A2 : A2 + + static get #prop() { return ""; } +>#prop : string +>"" : "" + + static set #prop(param: string) { } +>#prop : string +>param : string + + constructor() { + console.log(A2.#prop); +>console.log(A2.#prop) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>A2.#prop : string +>A2 : typeof A2 + + let a: typeof A2 = A2; +>a : typeof A2 +>A2 : typeof A2 +>A2 : typeof A2 + + a.#prop; +>a.#prop : string +>a : typeof A2 + + function foo (){ +>foo : () => void + + a.#prop; +>a.#prop : string +>a : typeof A2 + } + } +} + +A2.#prop; // Error +>A2.#prop : any +>A2 : typeof A2 + +function foo (){ +>foo : () => void + + A2.#prop; // Error +>A2.#prop : any +>A2 : typeof A2 +} + +class B2 { +>B2 : B2 + + m() { +>m : () => void + + A2.#prop; +>A2.#prop : any +>A2 : typeof A2 + } +} + diff --git a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js new file mode 100644 index 0000000000000..3636bda179073 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js @@ -0,0 +1,52 @@ +//// [privateNameStaticAccessorsCallExpression.ts] +class A { + static get #fieldFunc() { return function() { A.#x = 10; } } + static get #fieldFunc2() { return function(a, ...b) {}; } + static #x = 1; + static test() { + this.#fieldFunc(); + const func = this.#fieldFunc; + func(); + new this.#fieldFunc(); + + const arr = [ 1, 2 ]; + this.#fieldFunc2(0, ...arr, 3); + const b = new this.#fieldFunc2(0, ...arr, 3); + const str = this.#fieldFunc2`head${1}middle${2}tail`; + this.getClass().#fieldFunc2`test${1}and${2}`; + } + static getClass() { return A; } +} + +//// [privateNameStaticAccessorsCallExpression.js] +var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + propertyDescriptor.value = value; + return value; +}; +var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn.call(receiver); +}; +var _A_fieldFunc_get, _A_fieldFunc2_get, _A_x; +class A { + static test() { + var _a; + __classStaticPrivateAccessorGet(this, A, _A_fieldFunc_get).call(this); + const func = __classStaticPrivateAccessorGet(this, A, _A_fieldFunc_get); + func(); + new (__classStaticPrivateAccessorGet(this, A, _A_fieldFunc_get))(); + const arr = [1, 2]; + __classStaticPrivateAccessorGet(this, A, _A_fieldFunc2_get).call(this, 0, ...arr, 3); + const b = new (__classStaticPrivateAccessorGet(this, A, _A_fieldFunc2_get))(0, ...arr, 3); + const str = __classStaticPrivateAccessorGet(this, A, _A_fieldFunc2_get).bind(this) `head${1}middle${2}tail`; + __classStaticPrivateAccessorGet((_a = this.getClass()), A, _A_fieldFunc2_get).bind(_a) `test${1}and${2}`; + } + static getClass() { return A; } +} +_A_fieldFunc_get = function _A_fieldFunc_get() { return function () { __classStaticPrivateFieldSet(A, A, _A_x, 10); }; }, _A_fieldFunc2_get = function _A_fieldFunc2_get() { return function (a, ...b) { }; }; +_A_x = { value: 1 }; diff --git a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.symbols b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.symbols new file mode 100644 index 0000000000000..c11fd82677997 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.symbols @@ -0,0 +1,65 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsCallExpression.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) + + static get #fieldFunc() { return function() { A.#x = 10; } } +>#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 9)) +>A.#x : Symbol(A.#x, Decl(privateNameStaticAccessorsCallExpression.ts, 2, 62)) +>A : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) + + static get #fieldFunc2() { return function(a, ...b) {}; } +>#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticAccessorsCallExpression.ts, 1, 65)) +>a : Symbol(a, Decl(privateNameStaticAccessorsCallExpression.ts, 2, 48)) +>b : Symbol(b, Decl(privateNameStaticAccessorsCallExpression.ts, 2, 50)) + + static #x = 1; +>#x : Symbol(A.#x, Decl(privateNameStaticAccessorsCallExpression.ts, 2, 62)) + + static test() { +>test : Symbol(A.test, Decl(privateNameStaticAccessorsCallExpression.ts, 3, 18)) + + this.#fieldFunc(); +>this.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) + + const func = this.#fieldFunc; +>func : Symbol(func, Decl(privateNameStaticAccessorsCallExpression.ts, 6, 13)) +>this.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) + + func(); +>func : Symbol(func, Decl(privateNameStaticAccessorsCallExpression.ts, 6, 13)) + + new this.#fieldFunc(); +>this.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) + + const arr = [ 1, 2 ]; +>arr : Symbol(arr, Decl(privateNameStaticAccessorsCallExpression.ts, 10, 13)) + + this.#fieldFunc2(0, ...arr, 3); +>this.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticAccessorsCallExpression.ts, 1, 65)) +>this : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameStaticAccessorsCallExpression.ts, 10, 13)) + + const b = new this.#fieldFunc2(0, ...arr, 3); +>b : Symbol(b, Decl(privateNameStaticAccessorsCallExpression.ts, 12, 13)) +>this.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticAccessorsCallExpression.ts, 1, 65)) +>this : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameStaticAccessorsCallExpression.ts, 10, 13)) + + const str = this.#fieldFunc2`head${1}middle${2}tail`; +>str : Symbol(str, Decl(privateNameStaticAccessorsCallExpression.ts, 13, 13)) +>this.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticAccessorsCallExpression.ts, 1, 65)) +>this : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) + + this.getClass().#fieldFunc2`test${1}and${2}`; +>this.getClass().#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticAccessorsCallExpression.ts, 1, 65)) +>this.getClass : Symbol(A.getClass, Decl(privateNameStaticAccessorsCallExpression.ts, 15, 5)) +>this : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticAccessorsCallExpression.ts, 15, 5)) + } + static getClass() { return A; } +>getClass : Symbol(A.getClass, Decl(privateNameStaticAccessorsCallExpression.ts, 15, 5)) +>A : Symbol(A, Decl(privateNameStaticAccessorsCallExpression.ts, 0, 0)) +} diff --git a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.types b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.types new file mode 100644 index 0000000000000..d7b95a9ec70a6 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.types @@ -0,0 +1,93 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsCallExpression.ts === +class A { +>A : A + + static get #fieldFunc() { return function() { A.#x = 10; } } +>#fieldFunc : () => void +>function() { A.#x = 10; } : () => void +>A.#x = 10 : 10 +>A.#x : number +>A : typeof A +>10 : 10 + + static get #fieldFunc2() { return function(a, ...b) {}; } +>#fieldFunc2 : (a: any, ...b: any[]) => void +>function(a, ...b) {} : (a: any, ...b: any[]) => void +>a : any +>b : any[] + + static #x = 1; +>#x : number +>1 : 1 + + static test() { +>test : () => void + + this.#fieldFunc(); +>this.#fieldFunc() : void +>this.#fieldFunc : () => void +>this : typeof A + + const func = this.#fieldFunc; +>func : () => void +>this.#fieldFunc : () => void +>this : typeof A + + func(); +>func() : void +>func : () => void + + new this.#fieldFunc(); +>new this.#fieldFunc() : any +>this.#fieldFunc : () => void +>this : typeof A + + const arr = [ 1, 2 ]; +>arr : number[] +>[ 1, 2 ] : number[] +>1 : 1 +>2 : 2 + + this.#fieldFunc2(0, ...arr, 3); +>this.#fieldFunc2(0, ...arr, 3) : void +>this.#fieldFunc2 : (a: any, ...b: any[]) => void +>this : typeof A +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const b = new this.#fieldFunc2(0, ...arr, 3); +>b : any +>new this.#fieldFunc2(0, ...arr, 3) : any +>this.#fieldFunc2 : (a: any, ...b: any[]) => void +>this : typeof A +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const str = this.#fieldFunc2`head${1}middle${2}tail`; +>str : void +>this.#fieldFunc2`head${1}middle${2}tail` : void +>this.#fieldFunc2 : (a: any, ...b: any[]) => void +>this : typeof A +>`head${1}middle${2}tail` : "head1middle2tail" +>1 : 1 +>2 : 2 + + this.getClass().#fieldFunc2`test${1}and${2}`; +>this.getClass().#fieldFunc2`test${1}and${2}` : void +>this.getClass().#fieldFunc2 : (a: any, ...b: any[]) => void +>this.getClass() : typeof A +>this.getClass : () => typeof A +>this : typeof A +>getClass : () => typeof A +>`test${1}and${2}` : "test1and2" +>1 : 1 +>2 : 2 + } + static getClass() { return A; } +>getClass : () => typeof A +>A : typeof A +} diff --git a/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.errors.txt b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.errors.txt new file mode 100644 index 0000000000000..0cbbfd03d4420 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.errors.txt @@ -0,0 +1,21 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts(4,23): error TS2339: Property '#prop' does not exist on type 'typeof Derived'. +tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts(9,23): error TS2339: Property '#prop' does not exist on type 'typeof Derived'. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts (2 errors) ==== + class Base { + static get #prop(): number { return 123; } + static method(x: typeof Derived) { + console.log(x.#prop); + ~~~~~ +!!! error TS2339: Property '#prop' does not exist on type 'typeof Derived'. + } + } + class Derived extends Base { + static method(x: typeof Derived) { + console.log(x.#prop); + ~~~~~ +!!! error TS2339: Property '#prop' does not exist on type 'typeof Derived'. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js new file mode 100644 index 0000000000000..16bf81a00cadb --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js @@ -0,0 +1,33 @@ +//// [privateNameStaticAccessorssDerivedClasses.ts] +class Base { + static get #prop(): number { return 123; } + static method(x: typeof Derived) { + console.log(x.#prop); + } +} +class Derived extends Base { + static method(x: typeof Derived) { + console.log(x.#prop); + } +} + + +//// [privateNameStaticAccessorssDerivedClasses.js] +var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn.call(receiver); +}; +var _Base_prop_get; +class Base { + static method(x) { + console.log(__classStaticPrivateAccessorGet(x, Base, _Base_prop_get)); + } +} +_Base_prop_get = function _Base_prop_get() { return 123; }; +class Derived extends Base { + static method(x) { + console.log(x.); + } +} diff --git a/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.symbols b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.symbols new file mode 100644 index 0000000000000..c5f03fb577ae4 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.symbols @@ -0,0 +1,36 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts === +class Base { +>Base : Symbol(Base, Decl(privateNameStaticAccessorssDerivedClasses.ts, 0, 0)) + + static get #prop(): number { return 123; } +>#prop : Symbol(Base.#prop, Decl(privateNameStaticAccessorssDerivedClasses.ts, 0, 12)) + + static method(x: typeof Derived) { +>method : Symbol(Base.method, Decl(privateNameStaticAccessorssDerivedClasses.ts, 1, 47)) +>x : Symbol(x, Decl(privateNameStaticAccessorssDerivedClasses.ts, 2, 18)) +>Derived : Symbol(Derived, Decl(privateNameStaticAccessorssDerivedClasses.ts, 5, 1)) + + console.log(x.#prop); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x : Symbol(x, Decl(privateNameStaticAccessorssDerivedClasses.ts, 2, 18)) + } +} +class Derived extends Base { +>Derived : Symbol(Derived, Decl(privateNameStaticAccessorssDerivedClasses.ts, 5, 1)) +>Base : Symbol(Base, Decl(privateNameStaticAccessorssDerivedClasses.ts, 0, 0)) + + static method(x: typeof Derived) { +>method : Symbol(Derived.method, Decl(privateNameStaticAccessorssDerivedClasses.ts, 6, 28)) +>x : Symbol(x, Decl(privateNameStaticAccessorssDerivedClasses.ts, 7, 18)) +>Derived : Symbol(Derived, Decl(privateNameStaticAccessorssDerivedClasses.ts, 5, 1)) + + console.log(x.#prop); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>x : Symbol(x, Decl(privateNameStaticAccessorssDerivedClasses.ts, 7, 18)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.types b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.types new file mode 100644 index 0000000000000..ef775104abfbc --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts === +class Base { +>Base : Base + + static get #prop(): number { return 123; } +>#prop : number +>123 : 123 + + static method(x: typeof Derived) { +>method : (x: typeof Derived) => void +>x : typeof Derived +>Derived : typeof Derived + + console.log(x.#prop); +>console.log(x.#prop) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#prop : any +>x : typeof Derived + } +} +class Derived extends Base { +>Derived : Derived +>Base : Base + + static method(x: typeof Derived) { +>method : (x: typeof Derived) => void +>x : typeof Derived +>Derived : typeof Derived + + console.log(x.#prop); +>console.log(x.#prop) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>x.#prop : any +>x : typeof Derived + } +} + diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).js b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).js new file mode 100644 index 0000000000000..363aace223b36 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).js @@ -0,0 +1,14 @@ +//// [privateNameStaticAndStaticInitializer.ts] +class A { + static #foo = 1; + static #prop = 2; +} + + + +//// [privateNameStaticAndStaticInitializer.js] +var _A_foo, _A_prop; +class A { +} +_A_foo = { value: 1 }; +_A_prop = { value: 2 }; diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).symbols b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).symbols new file mode 100644 index 0000000000000..c0085bdc9b9c0 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).symbols @@ -0,0 +1,12 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticAndStaticInitializer.ts, 0, 0)) + + static #foo = 1; +>#foo : Symbol(A.#foo, Decl(privateNameStaticAndStaticInitializer.ts, 0, 9)) + + static #prop = 2; +>#prop : Symbol(A.#prop, Decl(privateNameStaticAndStaticInitializer.ts, 1, 18)) +} + + diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).types b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).types new file mode 100644 index 0000000000000..956a0474bfb07 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).types @@ -0,0 +1,14 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts === +class A { +>A : A + + static #foo = 1; +>#foo : number +>1 : 1 + + static #prop = 2; +>#prop : number +>2 : 2 +} + + diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).js b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).js new file mode 100644 index 0000000000000..ccd7fec0c66bc --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).js @@ -0,0 +1,13 @@ +//// [privateNameStaticAndStaticInitializer.ts] +class A { + static #foo = 1; + static #prop = 2; +} + + + +//// [privateNameStaticAndStaticInitializer.js] +class A { + static #foo = 1; + static #prop = 2; +} diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).symbols b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).symbols new file mode 100644 index 0000000000000..c0085bdc9b9c0 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).symbols @@ -0,0 +1,12 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticAndStaticInitializer.ts, 0, 0)) + + static #foo = 1; +>#foo : Symbol(A.#foo, Decl(privateNameStaticAndStaticInitializer.ts, 0, 9)) + + static #prop = 2; +>#prop : Symbol(A.#prop, Decl(privateNameStaticAndStaticInitializer.ts, 1, 18)) +} + + diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).types b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).types new file mode 100644 index 0000000000000..956a0474bfb07 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).types @@ -0,0 +1,14 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts === +class A { +>A : A + + static #foo = 1; +>#foo : number +>1 : 1 + + static #prop = 2; +>#prop : number +>2 : 2 +} + + diff --git a/tests/baselines/reference/privateNameStaticFieldAccess.errors.txt b/tests/baselines/reference/privateNameStaticFieldAccess.errors.txt new file mode 100644 index 0000000000000..cc1659560febd --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldAccess.errors.txt @@ -0,0 +1,14 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAccess.ts(5,26): error TS2339: Property '#myField' does not exist on type 'A'. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAccess.ts (1 errors) ==== + class A { + static #myField = "hello world"; + constructor() { + console.log(A.#myField); //Ok + console.log(this.#myField); //Error + ~~~~~~~~ +!!! error TS2339: Property '#myField' does not exist on type 'A'. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticFieldAccess.js b/tests/baselines/reference/privateNameStaticFieldAccess.js new file mode 100644 index 0000000000000..1493de026075f --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldAccess.js @@ -0,0 +1,25 @@ +//// [privateNameStaticFieldAccess.ts] +class A { + static #myField = "hello world"; + constructor() { + console.log(A.#myField); //Ok + console.log(this.#myField); //Error + } +} + + +//// [privateNameStaticFieldAccess.js] +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; +var _A_myField; +class A { + constructor() { + console.log(__classStaticPrivateFieldGet(A, A, _A_myField)); //Ok + console.log(__classStaticPrivateFieldGet(this, A, _A_myField)); //Error + } +} +_A_myField = { value: "hello world" }; diff --git a/tests/baselines/reference/privateNameStaticFieldAccess.symbols b/tests/baselines/reference/privateNameStaticFieldAccess.symbols new file mode 100644 index 0000000000000..e7a6bee379ee2 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldAccess.symbols @@ -0,0 +1,23 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAccess.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticFieldAccess.ts, 0, 0)) + + static #myField = "hello world"; +>#myField : Symbol(A.#myField, Decl(privateNameStaticFieldAccess.ts, 0, 9)) + + constructor() { + console.log(A.#myField); //Ok +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>A.#myField : Symbol(A.#myField, Decl(privateNameStaticFieldAccess.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAccess.ts, 0, 0)) + + console.log(this.#myField); //Error +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>this : Symbol(A, Decl(privateNameStaticFieldAccess.ts, 0, 0)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticFieldAccess.types b/tests/baselines/reference/privateNameStaticFieldAccess.types new file mode 100644 index 0000000000000..4d549b845bc39 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldAccess.types @@ -0,0 +1,27 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAccess.ts === +class A { +>A : A + + static #myField = "hello world"; +>#myField : string +>"hello world" : "hello world" + + constructor() { + console.log(A.#myField); //Ok +>console.log(A.#myField) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>A.#myField : string +>A : typeof A + + console.log(this.#myField); //Error +>console.log(this.#myField) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>this.#myField : any +>this : this + } +} + diff --git a/tests/baselines/reference/privateNameStaticFieldAssignment.js b/tests/baselines/reference/privateNameStaticFieldAssignment.js new file mode 100644 index 0000000000000..76c140da1e309 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldAssignment.js @@ -0,0 +1,87 @@ +//// [privateNameStaticFieldAssignment.ts] +class A { + static #field = 0; + constructor() { + A.#field = 1; + A.#field += 2; + A.#field -= 3; + A.#field /= 4; + A.#field *= 5; + A.#field **= 6; + A.#field %= 7; + A.#field <<= 8; + A.#field >>= 9; + A.#field >>>= 10; + A.#field &= 11; + A.#field |= 12; + A.#field ^= 13; + A.getClass().#field = 1; + A.getClass().#field += 2; + A.getClass().#field -= 3; + A.getClass().#field /= 4; + A.getClass().#field *= 5; + A.getClass().#field **= 6; + A.getClass().#field %= 7; + A.getClass().#field <<= 8; + A.getClass().#field >>= 9; + A.getClass().#field >>>= 10; + A.getClass().#field &= 11; + A.getClass().#field |= 12; + A.getClass().#field ^= 13; + } + static getClass() { + return A; + } +} + + +//// [privateNameStaticFieldAssignment.js] +var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + propertyDescriptor.value = value; + return value; +}; +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; +var _A_field; +class A { + constructor() { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z; + __classStaticPrivateFieldSet(A, A, _A_field, 1); + __classStaticPrivateFieldSet(_a = A, A, _A_field, __classStaticPrivateFieldGet(_a, A, _A_field) + 2); + __classStaticPrivateFieldSet(_b = A, A, _A_field, __classStaticPrivateFieldGet(_b, A, _A_field) - 3); + __classStaticPrivateFieldSet(_c = A, A, _A_field, __classStaticPrivateFieldGet(_c, A, _A_field) / 4); + __classStaticPrivateFieldSet(_d = A, A, _A_field, __classStaticPrivateFieldGet(_d, A, _A_field) * 5); + __classStaticPrivateFieldSet(_e = A, A, _A_field, Math.pow(__classStaticPrivateFieldGet(_e, A, _A_field), 6)); + __classStaticPrivateFieldSet(_f = A, A, _A_field, __classStaticPrivateFieldGet(_f, A, _A_field) % 7); + __classStaticPrivateFieldSet(_g = A, A, _A_field, __classStaticPrivateFieldGet(_g, A, _A_field) << 8); + __classStaticPrivateFieldSet(_h = A, A, _A_field, __classStaticPrivateFieldGet(_h, A, _A_field) >> 9); + __classStaticPrivateFieldSet(_j = A, A, _A_field, __classStaticPrivateFieldGet(_j, A, _A_field) >>> 10); + __classStaticPrivateFieldSet(_k = A, A, _A_field, __classStaticPrivateFieldGet(_k, A, _A_field) & 11); + __classStaticPrivateFieldSet(_l = A, A, _A_field, __classStaticPrivateFieldGet(_l, A, _A_field) | 12); + __classStaticPrivateFieldSet(_m = A, A, _A_field, __classStaticPrivateFieldGet(_m, A, _A_field) ^ 13); + __classStaticPrivateFieldSet(A.getClass(), A, _A_field, 1); + __classStaticPrivateFieldSet(_o = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_o, A, _A_field) + 2); + __classStaticPrivateFieldSet(_p = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_p, A, _A_field) - 3); + __classStaticPrivateFieldSet(_q = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_q, A, _A_field) / 4); + __classStaticPrivateFieldSet(_r = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_r, A, _A_field) * 5); + __classStaticPrivateFieldSet(_s = A.getClass(), A, _A_field, Math.pow(__classStaticPrivateFieldGet(_s, A, _A_field), 6)); + __classStaticPrivateFieldSet(_t = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_t, A, _A_field) % 7); + __classStaticPrivateFieldSet(_u = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_u, A, _A_field) << 8); + __classStaticPrivateFieldSet(_v = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_v, A, _A_field) >> 9); + __classStaticPrivateFieldSet(_w = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_w, A, _A_field) >>> 10); + __classStaticPrivateFieldSet(_x = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_x, A, _A_field) & 11); + __classStaticPrivateFieldSet(_y = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_y, A, _A_field) | 12); + __classStaticPrivateFieldSet(_z = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_z, A, _A_field) ^ 13); + } + static getClass() { + return A; + } +} +_A_field = { value: 0 }; diff --git a/tests/baselines/reference/privateNameStaticFieldAssignment.symbols b/tests/baselines/reference/privateNameStaticFieldAssignment.symbols new file mode 100644 index 0000000000000..1d11fc0aa603d --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldAssignment.symbols @@ -0,0 +1,146 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAssignment.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + static #field = 0; +>#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) + + constructor() { + A.#field = 1; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field += 2; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field -= 3; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field /= 4; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field *= 5; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field **= 6; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field %= 7; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field <<= 8; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field >>= 9; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field >>>= 10; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field &= 11; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field |= 12; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.#field ^= 13; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + + A.getClass().#field = 1; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field += 2; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field -= 3; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field /= 4; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field *= 5; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field **= 6; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field %= 7; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field <<= 8; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field >>= 9; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field >>>= 10; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field &= 11; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field |= 12; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + A.getClass().#field ^= 13; +>A.getClass().#field : Symbol(A.#field, Decl(privateNameStaticFieldAssignment.ts, 0, 9)) +>A.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + } + static getClass() { +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldAssignment.ts, 29, 5)) + + return A; +>A : Symbol(A, Decl(privateNameStaticFieldAssignment.ts, 0, 0)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticFieldAssignment.types b/tests/baselines/reference/privateNameStaticFieldAssignment.types new file mode 100644 index 0000000000000..679df4ca7f352 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldAssignment.types @@ -0,0 +1,212 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAssignment.ts === +class A { +>A : A + + static #field = 0; +>#field : number +>0 : 0 + + constructor() { + A.#field = 1; +>A.#field = 1 : 1 +>A.#field : number +>A : typeof A +>1 : 1 + + A.#field += 2; +>A.#field += 2 : number +>A.#field : number +>A : typeof A +>2 : 2 + + A.#field -= 3; +>A.#field -= 3 : number +>A.#field : number +>A : typeof A +>3 : 3 + + A.#field /= 4; +>A.#field /= 4 : number +>A.#field : number +>A : typeof A +>4 : 4 + + A.#field *= 5; +>A.#field *= 5 : number +>A.#field : number +>A : typeof A +>5 : 5 + + A.#field **= 6; +>A.#field **= 6 : number +>A.#field : number +>A : typeof A +>6 : 6 + + A.#field %= 7; +>A.#field %= 7 : number +>A.#field : number +>A : typeof A +>7 : 7 + + A.#field <<= 8; +>A.#field <<= 8 : number +>A.#field : number +>A : typeof A +>8 : 8 + + A.#field >>= 9; +>A.#field >>= 9 : number +>A.#field : number +>A : typeof A +>9 : 9 + + A.#field >>>= 10; +>A.#field >>>= 10 : number +>A.#field : number +>A : typeof A +>10 : 10 + + A.#field &= 11; +>A.#field &= 11 : number +>A.#field : number +>A : typeof A +>11 : 11 + + A.#field |= 12; +>A.#field |= 12 : number +>A.#field : number +>A : typeof A +>12 : 12 + + A.#field ^= 13; +>A.#field ^= 13 : number +>A.#field : number +>A : typeof A +>13 : 13 + + A.getClass().#field = 1; +>A.getClass().#field = 1 : 1 +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>1 : 1 + + A.getClass().#field += 2; +>A.getClass().#field += 2 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>2 : 2 + + A.getClass().#field -= 3; +>A.getClass().#field -= 3 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>3 : 3 + + A.getClass().#field /= 4; +>A.getClass().#field /= 4 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>4 : 4 + + A.getClass().#field *= 5; +>A.getClass().#field *= 5 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>5 : 5 + + A.getClass().#field **= 6; +>A.getClass().#field **= 6 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>6 : 6 + + A.getClass().#field %= 7; +>A.getClass().#field %= 7 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>7 : 7 + + A.getClass().#field <<= 8; +>A.getClass().#field <<= 8 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>8 : 8 + + A.getClass().#field >>= 9; +>A.getClass().#field >>= 9 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>9 : 9 + + A.getClass().#field >>>= 10; +>A.getClass().#field >>>= 10 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>10 : 10 + + A.getClass().#field &= 11; +>A.getClass().#field &= 11 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>11 : 11 + + A.getClass().#field |= 12; +>A.getClass().#field |= 12 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>12 : 12 + + A.getClass().#field ^= 13; +>A.getClass().#field ^= 13 : number +>A.getClass().#field : number +>A.getClass() : typeof A +>A.getClass : () => typeof A +>A : typeof A +>getClass : () => typeof A +>13 : 13 + } + static getClass() { +>getClass : () => typeof A + + return A; +>A : typeof A + } +} + diff --git a/tests/baselines/reference/privateNameStaticFieldCallExpression.js b/tests/baselines/reference/privateNameStaticFieldCallExpression.js new file mode 100644 index 0000000000000..4bd4350fc0118 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldCallExpression.js @@ -0,0 +1,52 @@ +//// [privateNameStaticFieldCallExpression.ts] +class A { + static #fieldFunc = function () { this.x = 10; }; + static #fieldFunc2 = function (a, ...b) {}; + x = 1; + test() { + A.#fieldFunc(); + A.#fieldFunc?.(); + const func = A.#fieldFunc; + func(); + new A.#fieldFunc(); + + const arr = [ 1, 2 ]; + A.#fieldFunc2(0, ...arr, 3); + const b = new A.#fieldFunc2(0, ...arr, 3); + const str = A.#fieldFunc2`head${1}middle${2}tail`; + this.getClass().#fieldFunc2`test${1}and${2}`; + } + getClass() { return A; } +} + + +//// [privateNameStaticFieldCallExpression.js] +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; +var _A_fieldFunc, _A_fieldFunc2; +class A { + constructor() { + this.x = 1; + } + test() { + var _a; + var _b; + __classStaticPrivateFieldGet(A, A, _A_fieldFunc).call(A); + (_a = __classStaticPrivateFieldGet(A, A, _A_fieldFunc)) === null || _a === void 0 ? void 0 : _a.call(A); + const func = __classStaticPrivateFieldGet(A, A, _A_fieldFunc); + func(); + new (__classStaticPrivateFieldGet(A, A, _A_fieldFunc))(); + const arr = [1, 2]; + __classStaticPrivateFieldGet(A, A, _A_fieldFunc2).call(A, 0, ...arr, 3); + const b = new (__classStaticPrivateFieldGet(A, A, _A_fieldFunc2))(0, ...arr, 3); + const str = __classStaticPrivateFieldGet(A, A, _A_fieldFunc2).bind(A) `head${1}middle${2}tail`; + __classStaticPrivateFieldGet((_b = this.getClass()), A, _A_fieldFunc2).bind(_b) `test${1}and${2}`; + } + getClass() { return A; } +} +_A_fieldFunc = { value: function () { this.x = 10; } }; +_A_fieldFunc2 = { value: function (a, ...b) { } }; diff --git a/tests/baselines/reference/privateNameStaticFieldCallExpression.symbols b/tests/baselines/reference/privateNameStaticFieldCallExpression.symbols new file mode 100644 index 0000000000000..955ab2080b884 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldCallExpression.symbols @@ -0,0 +1,68 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldCallExpression.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) + + static #fieldFunc = function () { this.x = 10; }; +>#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticFieldCallExpression.ts, 0, 9)) + + static #fieldFunc2 = function (a, ...b) {}; +>#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticFieldCallExpression.ts, 1, 53)) +>a : Symbol(a, Decl(privateNameStaticFieldCallExpression.ts, 2, 35)) +>b : Symbol(b, Decl(privateNameStaticFieldCallExpression.ts, 2, 37)) + + x = 1; +>x : Symbol(A.x, Decl(privateNameStaticFieldCallExpression.ts, 2, 47)) + + test() { +>test : Symbol(A.test, Decl(privateNameStaticFieldCallExpression.ts, 3, 10)) + + A.#fieldFunc(); +>A.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticFieldCallExpression.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) + + A.#fieldFunc?.(); +>A.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticFieldCallExpression.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) + + const func = A.#fieldFunc; +>func : Symbol(func, Decl(privateNameStaticFieldCallExpression.ts, 7, 13)) +>A.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticFieldCallExpression.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) + + func(); +>func : Symbol(func, Decl(privateNameStaticFieldCallExpression.ts, 7, 13)) + + new A.#fieldFunc(); +>A.#fieldFunc : Symbol(A.#fieldFunc, Decl(privateNameStaticFieldCallExpression.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) + + const arr = [ 1, 2 ]; +>arr : Symbol(arr, Decl(privateNameStaticFieldCallExpression.ts, 11, 13)) + + A.#fieldFunc2(0, ...arr, 3); +>A.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticFieldCallExpression.ts, 1, 53)) +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameStaticFieldCallExpression.ts, 11, 13)) + + const b = new A.#fieldFunc2(0, ...arr, 3); +>b : Symbol(b, Decl(privateNameStaticFieldCallExpression.ts, 13, 13)) +>A.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticFieldCallExpression.ts, 1, 53)) +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameStaticFieldCallExpression.ts, 11, 13)) + + const str = A.#fieldFunc2`head${1}middle${2}tail`; +>str : Symbol(str, Decl(privateNameStaticFieldCallExpression.ts, 14, 13)) +>A.#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticFieldCallExpression.ts, 1, 53)) +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) + + this.getClass().#fieldFunc2`test${1}and${2}`; +>this.getClass().#fieldFunc2 : Symbol(A.#fieldFunc2, Decl(privateNameStaticFieldCallExpression.ts, 1, 53)) +>this.getClass : Symbol(A.getClass, Decl(privateNameStaticFieldCallExpression.ts, 16, 5)) +>this : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldCallExpression.ts, 16, 5)) + } + getClass() { return A; } +>getClass : Symbol(A.getClass, Decl(privateNameStaticFieldCallExpression.ts, 16, 5)) +>A : Symbol(A, Decl(privateNameStaticFieldCallExpression.ts, 0, 0)) +} + diff --git a/tests/baselines/reference/privateNameStaticFieldCallExpression.types b/tests/baselines/reference/privateNameStaticFieldCallExpression.types new file mode 100644 index 0000000000000..320520f14f814 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldCallExpression.types @@ -0,0 +1,100 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldCallExpression.ts === +class A { +>A : A + + static #fieldFunc = function () { this.x = 10; }; +>#fieldFunc : () => void +>function () { this.x = 10; } : () => void +>this.x = 10 : 10 +>this.x : any +>this : any +>x : any +>10 : 10 + + static #fieldFunc2 = function (a, ...b) {}; +>#fieldFunc2 : (a: any, ...b: any[]) => void +>function (a, ...b) {} : (a: any, ...b: any[]) => void +>a : any +>b : any[] + + x = 1; +>x : number +>1 : 1 + + test() { +>test : () => void + + A.#fieldFunc(); +>A.#fieldFunc() : void +>A.#fieldFunc : () => void +>A : typeof A + + A.#fieldFunc?.(); +>A.#fieldFunc?.() : void +>A.#fieldFunc : () => void +>A : typeof A + + const func = A.#fieldFunc; +>func : () => void +>A.#fieldFunc : () => void +>A : typeof A + + func(); +>func() : void +>func : () => void + + new A.#fieldFunc(); +>new A.#fieldFunc() : any +>A.#fieldFunc : () => void +>A : typeof A + + const arr = [ 1, 2 ]; +>arr : number[] +>[ 1, 2 ] : number[] +>1 : 1 +>2 : 2 + + A.#fieldFunc2(0, ...arr, 3); +>A.#fieldFunc2(0, ...arr, 3) : void +>A.#fieldFunc2 : (a: any, ...b: any[]) => void +>A : typeof A +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const b = new A.#fieldFunc2(0, ...arr, 3); +>b : any +>new A.#fieldFunc2(0, ...arr, 3) : any +>A.#fieldFunc2 : (a: any, ...b: any[]) => void +>A : typeof A +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const str = A.#fieldFunc2`head${1}middle${2}tail`; +>str : void +>A.#fieldFunc2`head${1}middle${2}tail` : void +>A.#fieldFunc2 : (a: any, ...b: any[]) => void +>A : typeof A +>`head${1}middle${2}tail` : "head1middle2tail" +>1 : 1 +>2 : 2 + + this.getClass().#fieldFunc2`test${1}and${2}`; +>this.getClass().#fieldFunc2`test${1}and${2}` : void +>this.getClass().#fieldFunc2 : (a: any, ...b: any[]) => void +>this.getClass() : typeof A +>this.getClass : () => typeof A +>this : this +>getClass : () => typeof A +>`test${1}and${2}` : "test1and2" +>1 : 1 +>2 : 2 + } + getClass() { return A; } +>getClass : () => typeof A +>A : typeof A +} + diff --git a/tests/baselines/reference/privateNameStaticFieldClassExpression.js b/tests/baselines/reference/privateNameStaticFieldClassExpression.js new file mode 100644 index 0000000000000..6bad09f78d404 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldClassExpression.js @@ -0,0 +1,52 @@ +//// [privateNameStaticFieldClassExpression.ts] +class B { + static #foo = class { + constructor() { + console.log("hello"); + new B.#foo2(); + } + static test = 123; + field = 10; + }; + static #foo2 = class Foo { + static otherClass = 123; + }; + + m() { + console.log(B.#foo.test) + B.#foo.test = 10; + new B.#foo().field; + } +} + + + + +//// [privateNameStaticFieldClassExpression.js] +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; +var _B_foo, _B_foo2, _a, _b; +class B { + m() { + console.log(__classStaticPrivateFieldGet(B, B, _B_foo).test); + __classStaticPrivateFieldGet(B, B, _B_foo).test = 10; + new (__classStaticPrivateFieldGet(B, B, _B_foo))().field; + } +} +_B_foo = { value: (_a = class { + constructor() { + this.field = 10; + console.log("hello"); + new (__classStaticPrivateFieldGet(B, B, _B_foo2))(); + } + }, + _a.test = 123, + _a) }; +_B_foo2 = { value: (_b = class Foo { + }, + _b.otherClass = 123, + _b) }; diff --git a/tests/baselines/reference/privateNameStaticFieldClassExpression.symbols b/tests/baselines/reference/privateNameStaticFieldClassExpression.symbols new file mode 100644 index 0000000000000..f6bee58f5f494 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldClassExpression.symbols @@ -0,0 +1,61 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldClassExpression.ts === +class B { +>B : Symbol(B, Decl(privateNameStaticFieldClassExpression.ts, 0, 0)) + + static #foo = class { +>#foo : Symbol(B.#foo, Decl(privateNameStaticFieldClassExpression.ts, 0, 9)) + + constructor() { + console.log("hello"); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) + + new B.#foo2(); +>B.#foo2 : Symbol(B.#foo2, Decl(privateNameStaticFieldClassExpression.ts, 8, 6)) +>B : Symbol(B, Decl(privateNameStaticFieldClassExpression.ts, 0, 0)) + } + static test = 123; +>test : Symbol((Anonymous class).test, Decl(privateNameStaticFieldClassExpression.ts, 5, 9)) + + field = 10; +>field : Symbol((Anonymous class).field, Decl(privateNameStaticFieldClassExpression.ts, 6, 26)) + + }; + static #foo2 = class Foo { +>#foo2 : Symbol(B.#foo2, Decl(privateNameStaticFieldClassExpression.ts, 8, 6)) +>Foo : Symbol(Foo, Decl(privateNameStaticFieldClassExpression.ts, 9, 18)) + + static otherClass = 123; +>otherClass : Symbol(Foo.otherClass, Decl(privateNameStaticFieldClassExpression.ts, 9, 30)) + + }; + + m() { +>m : Symbol(B.m, Decl(privateNameStaticFieldClassExpression.ts, 11, 6)) + + console.log(B.#foo.test) +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>B.#foo.test : Symbol((Anonymous class).test, Decl(privateNameStaticFieldClassExpression.ts, 5, 9)) +>B.#foo : Symbol(B.#foo, Decl(privateNameStaticFieldClassExpression.ts, 0, 9)) +>B : Symbol(B, Decl(privateNameStaticFieldClassExpression.ts, 0, 0)) +>test : Symbol((Anonymous class).test, Decl(privateNameStaticFieldClassExpression.ts, 5, 9)) + + B.#foo.test = 10; +>B.#foo.test : Symbol((Anonymous class).test, Decl(privateNameStaticFieldClassExpression.ts, 5, 9)) +>B.#foo : Symbol(B.#foo, Decl(privateNameStaticFieldClassExpression.ts, 0, 9)) +>B : Symbol(B, Decl(privateNameStaticFieldClassExpression.ts, 0, 0)) +>test : Symbol((Anonymous class).test, Decl(privateNameStaticFieldClassExpression.ts, 5, 9)) + + new B.#foo().field; +>new B.#foo().field : Symbol((Anonymous class).field, Decl(privateNameStaticFieldClassExpression.ts, 6, 26)) +>B.#foo : Symbol(B.#foo, Decl(privateNameStaticFieldClassExpression.ts, 0, 9)) +>B : Symbol(B, Decl(privateNameStaticFieldClassExpression.ts, 0, 0)) +>field : Symbol((Anonymous class).field, Decl(privateNameStaticFieldClassExpression.ts, 6, 26)) + } +} + + + diff --git a/tests/baselines/reference/privateNameStaticFieldClassExpression.types b/tests/baselines/reference/privateNameStaticFieldClassExpression.types new file mode 100644 index 0000000000000..31ca3abe90f6a --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldClassExpression.types @@ -0,0 +1,73 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldClassExpression.ts === +class B { +>B : B + + static #foo = class { +>#foo : typeof (Anonymous class) +>class { constructor() { console.log("hello"); new B.#foo2(); } static test = 123; field = 10; } : typeof (Anonymous class) + + constructor() { + console.log("hello"); +>console.log("hello") : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>"hello" : "hello" + + new B.#foo2(); +>new B.#foo2() : Foo +>B.#foo2 : typeof Foo +>B : typeof B + } + static test = 123; +>test : number +>123 : 123 + + field = 10; +>field : number +>10 : 10 + + }; + static #foo2 = class Foo { +>#foo2 : typeof Foo +>class Foo { static otherClass = 123; } : typeof Foo +>Foo : typeof Foo + + static otherClass = 123; +>otherClass : number +>123 : 123 + + }; + + m() { +>m : () => void + + console.log(B.#foo.test) +>console.log(B.#foo.test) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>B.#foo.test : number +>B.#foo : typeof (Anonymous class) +>B : typeof B +>test : number + + B.#foo.test = 10; +>B.#foo.test = 10 : 10 +>B.#foo.test : number +>B.#foo : typeof (Anonymous class) +>B : typeof B +>test : number +>10 : 10 + + new B.#foo().field; +>new B.#foo().field : number +>new B.#foo() : (Anonymous class) +>B.#foo : typeof (Anonymous class) +>B : typeof B +>field : number + } +} + + + diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.errors.txt b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.errors.txt new file mode 100644 index 0000000000000..8e845cdbcaee3 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.errors.txt @@ -0,0 +1,25 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts(4,17): error TS18013: Property '#derivedProp' is not accessible outside class 'Derived' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts(12,14): error TS18013: Property '#prop' is not accessible outside class 'Base' because it has a private identifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts (2 errors) ==== + class Base { + static #prop: number = 123; + static method(x: Derived) { + Derived.#derivedProp // error + ~~~~~~~~~~~~ +!!! error TS18013: Property '#derivedProp' is not accessible outside class 'Derived' because it has a private identifier. + Base.#prop = 10; + } + } + class Derived extends Base { + static #derivedProp: number = 10; + static method(x: Derived) { + Derived.#derivedProp + Base.#prop = 10; // error + ~~~~~ +!!! error TS18013: Property '#prop' is not accessible outside class 'Base' because it has a private identifier. + } + } + + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js new file mode 100644 index 0000000000000..bdad1319d82c1 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js @@ -0,0 +1,48 @@ +//// [privateNameStaticFieldDerivedClasses.ts] +class Base { + static #prop: number = 123; + static method(x: Derived) { + Derived.#derivedProp // error + Base.#prop = 10; + } +} +class Derived extends Base { + static #derivedProp: number = 10; + static method(x: Derived) { + Derived.#derivedProp + Base.#prop = 10; // error + } +} + + + +//// [privateNameStaticFieldDerivedClasses.js] +var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + propertyDescriptor.value = value; + return value; +}; +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; +var _Base_prop, _Derived_derivedProp; +class Base { + static method(x) { + Derived.; // error + __classStaticPrivateFieldSet(// error + Base, Base, _Base_prop, 10); + } +} +_Base_prop = { value: 123 }; +class Derived extends Base { + static method(x) { + __classStaticPrivateFieldGet(Derived, Derived, _Derived_derivedProp); + Base. = 10; // error + } +} +_Derived_derivedProp = { value: 10 }; diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.symbols b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.symbols new file mode 100644 index 0000000000000..44da6b8ecaddd --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.symbols @@ -0,0 +1,42 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts === +class Base { +>Base : Symbol(Base, Decl(privateNameStaticFieldDerivedClasses.ts, 0, 0)) + + static #prop: number = 123; +>#prop : Symbol(Base.#prop, Decl(privateNameStaticFieldDerivedClasses.ts, 0, 12)) + + static method(x: Derived) { +>method : Symbol(Base.method, Decl(privateNameStaticFieldDerivedClasses.ts, 1, 31)) +>x : Symbol(x, Decl(privateNameStaticFieldDerivedClasses.ts, 2, 18)) +>Derived : Symbol(Derived, Decl(privateNameStaticFieldDerivedClasses.ts, 6, 1)) + + Derived.#derivedProp // error +>Derived : Symbol(Derived, Decl(privateNameStaticFieldDerivedClasses.ts, 6, 1)) + + Base.#prop = 10; +>Base.#prop : Symbol(Base.#prop, Decl(privateNameStaticFieldDerivedClasses.ts, 0, 12)) +>Base : Symbol(Base, Decl(privateNameStaticFieldDerivedClasses.ts, 0, 0)) + } +} +class Derived extends Base { +>Derived : Symbol(Derived, Decl(privateNameStaticFieldDerivedClasses.ts, 6, 1)) +>Base : Symbol(Base, Decl(privateNameStaticFieldDerivedClasses.ts, 0, 0)) + + static #derivedProp: number = 10; +>#derivedProp : Symbol(Derived.#derivedProp, Decl(privateNameStaticFieldDerivedClasses.ts, 7, 28)) + + static method(x: Derived) { +>method : Symbol(Derived.method, Decl(privateNameStaticFieldDerivedClasses.ts, 8, 37)) +>x : Symbol(x, Decl(privateNameStaticFieldDerivedClasses.ts, 9, 18)) +>Derived : Symbol(Derived, Decl(privateNameStaticFieldDerivedClasses.ts, 6, 1)) + + Derived.#derivedProp +>Derived.#derivedProp : Symbol(Derived.#derivedProp, Decl(privateNameStaticFieldDerivedClasses.ts, 7, 28)) +>Derived : Symbol(Derived, Decl(privateNameStaticFieldDerivedClasses.ts, 6, 1)) + + Base.#prop = 10; // error +>Base : Symbol(Base, Decl(privateNameStaticFieldDerivedClasses.ts, 0, 0)) + } +} + + diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.types b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.types new file mode 100644 index 0000000000000..8db01be0a072b --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.types @@ -0,0 +1,48 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts === +class Base { +>Base : Base + + static #prop: number = 123; +>#prop : number +>123 : 123 + + static method(x: Derived) { +>method : (x: Derived) => void +>x : Derived + + Derived.#derivedProp // error +>Derived.#derivedProp : any +>Derived : typeof Derived + + Base.#prop = 10; +>Base.#prop = 10 : 10 +>Base.#prop : number +>Base : typeof Base +>10 : 10 + } +} +class Derived extends Base { +>Derived : Derived +>Base : Base + + static #derivedProp: number = 10; +>#derivedProp : number +>10 : 10 + + static method(x: Derived) { +>method : (x: Derived) => void +>x : Derived + + Derived.#derivedProp +>Derived.#derivedProp : number +>Derived : typeof Derived + + Base.#prop = 10; // error +>Base.#prop = 10 : 10 +>Base.#prop : any +>Base : typeof Base +>10 : 10 + } +} + + diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js new file mode 100644 index 0000000000000..cdd7cecba6daf --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js @@ -0,0 +1,59 @@ +//// [privateNameStaticFieldDestructuredBinding.ts] +class A { + static #field = 1; + otherClass = A; + testObject() { + return { x: 10, y: 6 }; + } + testArray() { + return [10, 11]; + } + constructor() { + let y: number; + ({ x: A.#field, y } = this.testObject()); + ([A.#field, y] = this.testArray()); + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); + [A.#field, [A.#field]] = [1, [2]]; + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); + [A.#field = 2] = []; + [this.otherClass.#field = 2] = []; + } + static test(_a: typeof A) { + [_a.#field] = [2]; + } +} + + +//// [privateNameStaticFieldDestructuredBinding.js] +var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + propertyDescriptor.value = value; + return value; +}; +var _A_field; +class A { + constructor() { + var _b; + this.otherClass = A; + let y; + ({ x: ({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value, y } = this.testObject()); + ([({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value, y] = this.testArray()); + ({ a: ({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value, b: [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value] } = { a: 1, b: [2] }); + [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value, [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value]] = [1, [2]]; + ({ a: ({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value = 1, b: [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value = 1] } = { b: [] }); + [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value = 2] = []; + _b = this.otherClass, [({ set value(_c) { __classStaticPrivateFieldSet(_b, A, _A_field, _c); } }).value = 2] = []; + } + testObject() { + return { x: 10, y: 6 }; + } + testArray() { + return [10, 11]; + } + static test(_a) { + [({ set value(_b) { __classStaticPrivateFieldSet(_a, A, _A_field, _b); } }).value] = [2]; + } +} +_A_field = { value: 1 }; diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).symbols b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).symbols new file mode 100644 index 0000000000000..a539e6833531e --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).symbols @@ -0,0 +1,90 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + static #field = 1; +>#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) + + otherClass = A; +>otherClass : Symbol(A.otherClass, Decl(privateNameStaticFieldDestructuredBinding.ts, 1, 22)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + testObject() { +>testObject : Symbol(A.testObject, Decl(privateNameStaticFieldDestructuredBinding.ts, 2, 19)) + + return { x: 10, y: 6 }; +>x : Symbol(x, Decl(privateNameStaticFieldDestructuredBinding.ts, 4, 16)) +>y : Symbol(y, Decl(privateNameStaticFieldDestructuredBinding.ts, 4, 23)) + } + testArray() { +>testArray : Symbol(A.testArray, Decl(privateNameStaticFieldDestructuredBinding.ts, 5, 5)) + + return [10, 11]; + } + constructor() { + let y: number; +>y : Symbol(y, Decl(privateNameStaticFieldDestructuredBinding.ts, 10, 11)) + + ({ x: A.#field, y } = this.testObject()); +>x : Symbol(x, Decl(privateNameStaticFieldDestructuredBinding.ts, 11, 10)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>y : Symbol(y, Decl(privateNameStaticFieldDestructuredBinding.ts, 11, 23)) +>this.testObject : Symbol(A.testObject, Decl(privateNameStaticFieldDestructuredBinding.ts, 2, 19)) +>this : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>testObject : Symbol(A.testObject, Decl(privateNameStaticFieldDestructuredBinding.ts, 2, 19)) + + ([A.#field, y] = this.testArray()); +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>y : Symbol(y, Decl(privateNameStaticFieldDestructuredBinding.ts, 10, 11)) +>this.testArray : Symbol(A.testArray, Decl(privateNameStaticFieldDestructuredBinding.ts, 5, 5)) +>this : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>testArray : Symbol(A.testArray, Decl(privateNameStaticFieldDestructuredBinding.ts, 5, 5)) + + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); +>a : Symbol(a, Decl(privateNameStaticFieldDestructuredBinding.ts, 13, 10)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameStaticFieldDestructuredBinding.ts, 13, 23)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>a : Symbol(a, Decl(privateNameStaticFieldDestructuredBinding.ts, 13, 43)) +>b : Symbol(b, Decl(privateNameStaticFieldDestructuredBinding.ts, 13, 49)) + + [A.#field, [A.#field]] = [1, [2]]; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); +>a : Symbol(a, Decl(privateNameStaticFieldDestructuredBinding.ts, 15, 10)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameStaticFieldDestructuredBinding.ts, 15, 27)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameStaticFieldDestructuredBinding.ts, 15, 51)) + + [A.#field = 2] = []; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + [this.otherClass.#field = 2] = []; +>this.otherClass.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>this.otherClass : Symbol(A.otherClass, Decl(privateNameStaticFieldDestructuredBinding.ts, 1, 22)) +>this : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>otherClass : Symbol(A.otherClass, Decl(privateNameStaticFieldDestructuredBinding.ts, 1, 22)) + } + static test(_a: typeof A) { +>test : Symbol(A.test, Decl(privateNameStaticFieldDestructuredBinding.ts, 18, 5)) +>_a : Symbol(_a, Decl(privateNameStaticFieldDestructuredBinding.ts, 19, 16)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + [_a.#field] = [2]; +>_a.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>_a : Symbol(_a, Decl(privateNameStaticFieldDestructuredBinding.ts, 19, 16)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).types b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).types new file mode 100644 index 0000000000000..ef8a216bdb295 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).types @@ -0,0 +1,144 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts === +class A { +>A : A + + static #field = 1; +>#field : number +>1 : 1 + + otherClass = A; +>otherClass : typeof A +>A : typeof A + + testObject() { +>testObject : () => { x: number; y: number; } + + return { x: 10, y: 6 }; +>{ x: 10, y: 6 } : { x: number; y: number; } +>x : number +>10 : 10 +>y : number +>6 : 6 + } + testArray() { +>testArray : () => number[] + + return [10, 11]; +>[10, 11] : number[] +>10 : 10 +>11 : 11 + } + constructor() { + let y: number; +>y : number + + ({ x: A.#field, y } = this.testObject()); +>({ x: A.#field, y } = this.testObject()) : { x: number; y: number; } +>{ x: A.#field, y } = this.testObject() : { x: number; y: number; } +>{ x: A.#field, y } : { x: number; y: number; } +>x : number +>A.#field : number +>A : typeof A +>y : number +>this.testObject() : { x: number; y: number; } +>this.testObject : () => { x: number; y: number; } +>this : this +>testObject : () => { x: number; y: number; } + + ([A.#field, y] = this.testArray()); +>([A.#field, y] = this.testArray()) : number[] +>[A.#field, y] = this.testArray() : number[] +>[A.#field, y] : [number, number] +>A.#field : number +>A : typeof A +>y : number +>this.testArray() : number[] +>this.testArray : () => number[] +>this : this +>testArray : () => number[] + + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); +>({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }) : { a: number; b: [number]; } +>{ a: A.#field, b: [A.#field] } = { a: 1, b: [2] } : { a: number; b: [number]; } +>{ a: A.#field, b: [A.#field] } : { a: number; b: [number]; } +>a : number +>A.#field : number +>A : typeof A +>b : [number] +>[A.#field] : [number] +>A.#field : number +>A : typeof A +>{ a: 1, b: [2] } : { a: number; b: [number]; } +>a : number +>1 : 1 +>b : [number] +>[2] : [number] +>2 : 2 + + [A.#field, [A.#field]] = [1, [2]]; +>[A.#field, [A.#field]] = [1, [2]] : [number, [number]] +>[A.#field, [A.#field]] : [number, [number]] +>A.#field : number +>A : typeof A +>[A.#field] : [number] +>A.#field : number +>A : typeof A +>[1, [2]] : [number, [number]] +>1 : 1 +>[2] : [number] +>2 : 2 + + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); +>({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }) : { b: []; a?: number; } +>{ a: A.#field = 1, b: [A.#field = 1] } = { b: [] } : { b: []; a?: number; } +>{ a: A.#field = 1, b: [A.#field = 1] } : { a?: number; b: [number]; } +>a : number +>A.#field = 1 : 1 +>A.#field : number +>A : typeof A +>1 : 1 +>b : [number] +>[A.#field = 1] : [number] +>A.#field = 1 : 1 +>A.#field : number +>A : typeof A +>1 : 1 +>{ b: [] } : { b: []; a?: number; } +>b : [] +>[] : [] + + [A.#field = 2] = []; +>[A.#field = 2] = [] : [] +>[A.#field = 2] : [number] +>A.#field = 2 : 2 +>A.#field : number +>A : typeof A +>2 : 2 +>[] : [] + + [this.otherClass.#field = 2] = []; +>[this.otherClass.#field = 2] = [] : [] +>[this.otherClass.#field = 2] : [number] +>this.otherClass.#field = 2 : 2 +>this.otherClass.#field : number +>this.otherClass : typeof A +>this : this +>otherClass : typeof A +>2 : 2 +>[] : [] + } + static test(_a: typeof A) { +>test : (_a: typeof A) => void +>_a : typeof A +>A : typeof A + + [_a.#field] = [2]; +>[_a.#field] = [2] : [number] +>[_a.#field] : [number] +>_a.#field : number +>_a : typeof A +>[2] : [number] +>2 : 2 + } +} + diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).js b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).js new file mode 100644 index 0000000000000..69b4fff34e2bf --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).js @@ -0,0 +1,50 @@ +//// [privateNameStaticFieldDestructuredBinding.ts] +class A { + static #field = 1; + otherClass = A; + testObject() { + return { x: 10, y: 6 }; + } + testArray() { + return [10, 11]; + } + constructor() { + let y: number; + ({ x: A.#field, y } = this.testObject()); + ([A.#field, y] = this.testArray()); + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); + [A.#field, [A.#field]] = [1, [2]]; + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); + [A.#field = 2] = []; + [this.otherClass.#field = 2] = []; + } + static test(_a: typeof A) { + [_a.#field] = [2]; + } +} + + +//// [privateNameStaticFieldDestructuredBinding.js] +class A { + constructor() { + this.otherClass = A; + let y; + ({ x: A.#field, y } = this.testObject()); + ([A.#field, y] = this.testArray()); + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); + [A.#field, [A.#field]] = [1, [2]]; + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); + [A.#field = 2] = []; + [this.otherClass.#field = 2] = []; + } + static #field = 1; + testObject() { + return { x: 10, y: 6 }; + } + testArray() { + return [10, 11]; + } + static test(_a) { + [_a.#field] = [2]; + } +} diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).symbols b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).symbols new file mode 100644 index 0000000000000..a539e6833531e --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).symbols @@ -0,0 +1,90 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + static #field = 1; +>#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) + + otherClass = A; +>otherClass : Symbol(A.otherClass, Decl(privateNameStaticFieldDestructuredBinding.ts, 1, 22)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + testObject() { +>testObject : Symbol(A.testObject, Decl(privateNameStaticFieldDestructuredBinding.ts, 2, 19)) + + return { x: 10, y: 6 }; +>x : Symbol(x, Decl(privateNameStaticFieldDestructuredBinding.ts, 4, 16)) +>y : Symbol(y, Decl(privateNameStaticFieldDestructuredBinding.ts, 4, 23)) + } + testArray() { +>testArray : Symbol(A.testArray, Decl(privateNameStaticFieldDestructuredBinding.ts, 5, 5)) + + return [10, 11]; + } + constructor() { + let y: number; +>y : Symbol(y, Decl(privateNameStaticFieldDestructuredBinding.ts, 10, 11)) + + ({ x: A.#field, y } = this.testObject()); +>x : Symbol(x, Decl(privateNameStaticFieldDestructuredBinding.ts, 11, 10)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>y : Symbol(y, Decl(privateNameStaticFieldDestructuredBinding.ts, 11, 23)) +>this.testObject : Symbol(A.testObject, Decl(privateNameStaticFieldDestructuredBinding.ts, 2, 19)) +>this : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>testObject : Symbol(A.testObject, Decl(privateNameStaticFieldDestructuredBinding.ts, 2, 19)) + + ([A.#field, y] = this.testArray()); +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>y : Symbol(y, Decl(privateNameStaticFieldDestructuredBinding.ts, 10, 11)) +>this.testArray : Symbol(A.testArray, Decl(privateNameStaticFieldDestructuredBinding.ts, 5, 5)) +>this : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>testArray : Symbol(A.testArray, Decl(privateNameStaticFieldDestructuredBinding.ts, 5, 5)) + + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); +>a : Symbol(a, Decl(privateNameStaticFieldDestructuredBinding.ts, 13, 10)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameStaticFieldDestructuredBinding.ts, 13, 23)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>a : Symbol(a, Decl(privateNameStaticFieldDestructuredBinding.ts, 13, 43)) +>b : Symbol(b, Decl(privateNameStaticFieldDestructuredBinding.ts, 13, 49)) + + [A.#field, [A.#field]] = [1, [2]]; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); +>a : Symbol(a, Decl(privateNameStaticFieldDestructuredBinding.ts, 15, 10)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameStaticFieldDestructuredBinding.ts, 15, 27)) +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameStaticFieldDestructuredBinding.ts, 15, 51)) + + [A.#field = 2] = []; +>A.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + [this.otherClass.#field = 2] = []; +>this.otherClass.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>this.otherClass : Symbol(A.otherClass, Decl(privateNameStaticFieldDestructuredBinding.ts, 1, 22)) +>this : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) +>otherClass : Symbol(A.otherClass, Decl(privateNameStaticFieldDestructuredBinding.ts, 1, 22)) + } + static test(_a: typeof A) { +>test : Symbol(A.test, Decl(privateNameStaticFieldDestructuredBinding.ts, 18, 5)) +>_a : Symbol(_a, Decl(privateNameStaticFieldDestructuredBinding.ts, 19, 16)) +>A : Symbol(A, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 0)) + + [_a.#field] = [2]; +>_a.#field : Symbol(A.#field, Decl(privateNameStaticFieldDestructuredBinding.ts, 0, 9)) +>_a : Symbol(_a, Decl(privateNameStaticFieldDestructuredBinding.ts, 19, 16)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).types b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).types new file mode 100644 index 0000000000000..ef8a216bdb295 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).types @@ -0,0 +1,144 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts === +class A { +>A : A + + static #field = 1; +>#field : number +>1 : 1 + + otherClass = A; +>otherClass : typeof A +>A : typeof A + + testObject() { +>testObject : () => { x: number; y: number; } + + return { x: 10, y: 6 }; +>{ x: 10, y: 6 } : { x: number; y: number; } +>x : number +>10 : 10 +>y : number +>6 : 6 + } + testArray() { +>testArray : () => number[] + + return [10, 11]; +>[10, 11] : number[] +>10 : 10 +>11 : 11 + } + constructor() { + let y: number; +>y : number + + ({ x: A.#field, y } = this.testObject()); +>({ x: A.#field, y } = this.testObject()) : { x: number; y: number; } +>{ x: A.#field, y } = this.testObject() : { x: number; y: number; } +>{ x: A.#field, y } : { x: number; y: number; } +>x : number +>A.#field : number +>A : typeof A +>y : number +>this.testObject() : { x: number; y: number; } +>this.testObject : () => { x: number; y: number; } +>this : this +>testObject : () => { x: number; y: number; } + + ([A.#field, y] = this.testArray()); +>([A.#field, y] = this.testArray()) : number[] +>[A.#field, y] = this.testArray() : number[] +>[A.#field, y] : [number, number] +>A.#field : number +>A : typeof A +>y : number +>this.testArray() : number[] +>this.testArray : () => number[] +>this : this +>testArray : () => number[] + + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); +>({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }) : { a: number; b: [number]; } +>{ a: A.#field, b: [A.#field] } = { a: 1, b: [2] } : { a: number; b: [number]; } +>{ a: A.#field, b: [A.#field] } : { a: number; b: [number]; } +>a : number +>A.#field : number +>A : typeof A +>b : [number] +>[A.#field] : [number] +>A.#field : number +>A : typeof A +>{ a: 1, b: [2] } : { a: number; b: [number]; } +>a : number +>1 : 1 +>b : [number] +>[2] : [number] +>2 : 2 + + [A.#field, [A.#field]] = [1, [2]]; +>[A.#field, [A.#field]] = [1, [2]] : [number, [number]] +>[A.#field, [A.#field]] : [number, [number]] +>A.#field : number +>A : typeof A +>[A.#field] : [number] +>A.#field : number +>A : typeof A +>[1, [2]] : [number, [number]] +>1 : 1 +>[2] : [number] +>2 : 2 + + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); +>({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }) : { b: []; a?: number; } +>{ a: A.#field = 1, b: [A.#field = 1] } = { b: [] } : { b: []; a?: number; } +>{ a: A.#field = 1, b: [A.#field = 1] } : { a?: number; b: [number]; } +>a : number +>A.#field = 1 : 1 +>A.#field : number +>A : typeof A +>1 : 1 +>b : [number] +>[A.#field = 1] : [number] +>A.#field = 1 : 1 +>A.#field : number +>A : typeof A +>1 : 1 +>{ b: [] } : { b: []; a?: number; } +>b : [] +>[] : [] + + [A.#field = 2] = []; +>[A.#field = 2] = [] : [] +>[A.#field = 2] : [number] +>A.#field = 2 : 2 +>A.#field : number +>A : typeof A +>2 : 2 +>[] : [] + + [this.otherClass.#field = 2] = []; +>[this.otherClass.#field = 2] = [] : [] +>[this.otherClass.#field = 2] : [number] +>this.otherClass.#field = 2 : 2 +>this.otherClass.#field : number +>this.otherClass : typeof A +>this : this +>otherClass : typeof A +>2 : 2 +>[] : [] + } + static test(_a: typeof A) { +>test : (_a: typeof A) => void +>_a : typeof A +>A : typeof A + + [_a.#field] = [2]; +>[_a.#field] = [2] : [number] +>[_a.#field] : [number] +>_a.#field : number +>_a : typeof A +>[2] : [number] +>2 : 2 + } +} + diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js new file mode 100644 index 0000000000000..302cb724a91f7 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js @@ -0,0 +1,13 @@ +//// [privateNameStaticFieldInitializer.ts] +class A { + static #field = 10; + static #uninitialized; +} + + +//// [privateNameStaticFieldInitializer.js] +var _A_field, _A_uninitialized; +class A { +} +_A_uninitialized = { value: void 0 }; +_A_field = { value: 10 }; diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).symbols b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).symbols new file mode 100644 index 0000000000000..d503ebe5086a4 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).symbols @@ -0,0 +1,11 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticFieldInitializer.ts, 0, 0)) + + static #field = 10; +>#field : Symbol(A.#field, Decl(privateNameStaticFieldInitializer.ts, 0, 9)) + + static #uninitialized; +>#uninitialized : Symbol(A.#uninitialized, Decl(privateNameStaticFieldInitializer.ts, 1, 23)) +} + diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).types b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).types new file mode 100644 index 0000000000000..d50c9a2533f0c --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).types @@ -0,0 +1,12 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts === +class A { +>A : A + + static #field = 10; +>#field : number +>10 : 10 + + static #uninitialized; +>#uninitialized : any +} + diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).js b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).js new file mode 100644 index 0000000000000..f52e29bf027e5 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).js @@ -0,0 +1,12 @@ +//// [privateNameStaticFieldInitializer.ts] +class A { + static #field = 10; + static #uninitialized; +} + + +//// [privateNameStaticFieldInitializer.js] +class A { + static #field = 10; + static #uninitialized; +} diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).symbols b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).symbols new file mode 100644 index 0000000000000..d503ebe5086a4 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).symbols @@ -0,0 +1,11 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticFieldInitializer.ts, 0, 0)) + + static #field = 10; +>#field : Symbol(A.#field, Decl(privateNameStaticFieldInitializer.ts, 0, 9)) + + static #uninitialized; +>#uninitialized : Symbol(A.#uninitialized, Decl(privateNameStaticFieldInitializer.ts, 1, 23)) +} + diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).types b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).types new file mode 100644 index 0000000000000..d50c9a2533f0c --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).types @@ -0,0 +1,12 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts === +class A { +>A : A + + static #field = 10; +>#field : number +>10 : 10 + + static #uninitialized; +>#uninitialized : any +} + diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer.js b/tests/baselines/reference/privateNameStaticFieldInitializer.js new file mode 100644 index 0000000000000..e0eff7b616ba5 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer.js @@ -0,0 +1,13 @@ +//// [privateNameFieldInitializer-static.ts] +class A { + static #field = 10; + static #uninitialized; +} + + +//// [privateNameFieldInitializer-static.js] +var _A_field, _A_uninitialized; +class A { +} +_A_field = { value: 10 }; +_A_uninitialized = { value: void 0 }; diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer.symbols b/tests/baselines/reference/privateNameStaticFieldInitializer.symbols new file mode 100644 index 0000000000000..a3bbabd600f76 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer.symbols @@ -0,0 +1,11 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameFieldInitializer-static.ts === +class A { +>A : Symbol(A, Decl(privateNameFieldInitializer-static.ts, 0, 0)) + + static #field = 10; +>#field : Symbol(A.#field, Decl(privateNameFieldInitializer-static.ts, 0, 9)) + + static #uninitialized; +>#uninitialized : Symbol(A.#uninitialized, Decl(privateNameFieldInitializer-static.ts, 1, 23)) +} + diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer.types b/tests/baselines/reference/privateNameStaticFieldInitializer.types new file mode 100644 index 0000000000000..dd134ee706593 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer.types @@ -0,0 +1,12 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameFieldInitializer-static.ts === +class A { +>A : A + + static #field = 10; +>#field : number +>10 : 10 + + static #uninitialized; +>#uninitialized : any +} + diff --git a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js new file mode 100644 index 0000000000000..ed80b28631f79 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js @@ -0,0 +1,76 @@ +//// [privateNameStaticFieldUnaryMutation.ts] +class C { + static #test: number = 24; + constructor() { + C.#test++; + C.#test--; + ++C.#test; + --C.#test; + const a = C.#test++; + const b = C.#test--; + const c = ++C.#test; + const d = --C.#test; + for (C.#test = 0; C.#test < 10; ++C.#test) {} + for (C.#test = 0; C.#test < 10; C.#test++) {} + } + test() { + this.getClass().#test++; + this.getClass().#test--; + ++this.getClass().#test; + --this.getClass().#test; + const a = this.getClass().#test++; + const b = this.getClass().#test--; + const c = ++this.getClass().#test; + const d = --this.getClass().#test; + for (this.getClass().#test = 0; this.getClass().#test < 10; ++this.getClass().#test) {} + for (this.getClass().#test = 0; this.getClass().#test < 10; this.getClass().#test++) {} + } + getClass() { return C; } +} + + +//// [privateNameStaticFieldUnaryMutation.js] +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; +var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + propertyDescriptor.value = value; + return value; +}; +var _C_test; +class C { + constructor() { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; + __classStaticPrivateFieldSet(_a = C, C, _C_test, +__classStaticPrivateFieldGet(_a, C, _C_test) + 1); + __classStaticPrivateFieldSet(_b = C, C, _C_test, +__classStaticPrivateFieldGet(_b, C, _C_test) - 1); + __classStaticPrivateFieldSet(_c = C, C, _C_test, +__classStaticPrivateFieldGet(_c, C, _C_test) + 1); + __classStaticPrivateFieldSet(_d = C, C, _C_test, +__classStaticPrivateFieldGet(_d, C, _C_test) - 1); + const a = (__classStaticPrivateFieldSet(_e = C, C, _C_test, (_f = +__classStaticPrivateFieldGet(_e, C, _C_test)) + 1), _f); + const b = (__classStaticPrivateFieldSet(_g = C, C, _C_test, (_h = +__classStaticPrivateFieldGet(_g, C, _C_test)) - 1), _h); + const c = __classStaticPrivateFieldSet(_j = C, C, _C_test, +__classStaticPrivateFieldGet(_j, C, _C_test) + 1); + const d = __classStaticPrivateFieldSet(_k = C, C, _C_test, +__classStaticPrivateFieldGet(_k, C, _C_test) - 1); + for (__classStaticPrivateFieldSet(C, C, _C_test, 0); __classStaticPrivateFieldGet(C, C, _C_test) < 10; __classStaticPrivateFieldSet(_l = C, C, _C_test, +__classStaticPrivateFieldGet(_l, C, _C_test) + 1)) { } + for (__classStaticPrivateFieldSet(C, C, _C_test, 0); __classStaticPrivateFieldGet(C, C, _C_test) < 10; __classStaticPrivateFieldSet(_m = C, C, _C_test, +__classStaticPrivateFieldGet(_m, C, _C_test) + 1)) { } + } + test() { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; + __classStaticPrivateFieldSet(_a = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_a, C, _C_test) + 1); + __classStaticPrivateFieldSet(_b = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_b, C, _C_test) - 1); + __classStaticPrivateFieldSet(_c = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_c, C, _C_test) + 1); + __classStaticPrivateFieldSet(_d = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_d, C, _C_test) - 1); + const a = (__classStaticPrivateFieldSet(_e = this.getClass(), C, _C_test, (_f = +__classStaticPrivateFieldGet(_e, C, _C_test)) + 1), _f); + const b = (__classStaticPrivateFieldSet(_g = this.getClass(), C, _C_test, (_h = +__classStaticPrivateFieldGet(_g, C, _C_test)) - 1), _h); + const c = __classStaticPrivateFieldSet(_j = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_j, C, _C_test) + 1); + const d = __classStaticPrivateFieldSet(_k = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_k, C, _C_test) - 1); + for (__classStaticPrivateFieldSet(this.getClass(), C, _C_test, 0); __classStaticPrivateFieldGet(this.getClass(), C, _C_test) < 10; __classStaticPrivateFieldSet(_l = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_l, C, _C_test) + 1)) { } + for (__classStaticPrivateFieldSet(this.getClass(), C, _C_test, 0); __classStaticPrivateFieldGet(this.getClass(), C, _C_test) < 10; __classStaticPrivateFieldSet(_m = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_m, C, _C_test) + 1)) { } + } + getClass() { return C; } +} +_C_test = { value: 24 }; diff --git a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.symbols b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.symbols new file mode 100644 index 0000000000000..dbc298bdcce2c --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.symbols @@ -0,0 +1,148 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldUnaryMutation.ts === +class C { +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + static #test: number = 24; +>#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) + + constructor() { + C.#test++; +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + C.#test--; +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + ++C.#test; +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + --C.#test; +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + const a = C.#test++; +>a : Symbol(a, Decl(privateNameStaticFieldUnaryMutation.ts, 7, 13)) +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + const b = C.#test--; +>b : Symbol(b, Decl(privateNameStaticFieldUnaryMutation.ts, 8, 13)) +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + const c = ++C.#test; +>c : Symbol(c, Decl(privateNameStaticFieldUnaryMutation.ts, 9, 13)) +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + const d = --C.#test; +>d : Symbol(d, Decl(privateNameStaticFieldUnaryMutation.ts, 10, 13)) +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + for (C.#test = 0; C.#test < 10; ++C.#test) {} +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + + for (C.#test = 0; C.#test < 10; C.#test++) {} +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>C.#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) + } + test() { +>test : Symbol(C.test, Decl(privateNameStaticFieldUnaryMutation.ts, 13, 5)) + + this.getClass().#test++; +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + this.getClass().#test--; +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + ++this.getClass().#test; +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + --this.getClass().#test; +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + const a = this.getClass().#test++; +>a : Symbol(a, Decl(privateNameStaticFieldUnaryMutation.ts, 19, 13)) +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + const b = this.getClass().#test--; +>b : Symbol(b, Decl(privateNameStaticFieldUnaryMutation.ts, 20, 13)) +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + const c = ++this.getClass().#test; +>c : Symbol(c, Decl(privateNameStaticFieldUnaryMutation.ts, 21, 13)) +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + const d = --this.getClass().#test; +>d : Symbol(d, Decl(privateNameStaticFieldUnaryMutation.ts, 22, 13)) +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + for (this.getClass().#test = 0; this.getClass().#test < 10; ++this.getClass().#test) {} +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + + for (this.getClass().#test = 0; this.getClass().#test < 10; this.getClass().#test++) {} +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this.getClass().#test : Symbol(C.#test, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 9)) +>this.getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>this : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) + } + getClass() { return C; } +>getClass : Symbol(C.getClass, Decl(privateNameStaticFieldUnaryMutation.ts, 25, 5)) +>C : Symbol(C, Decl(privateNameStaticFieldUnaryMutation.ts, 0, 0)) +} + diff --git a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.types b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.types new file mode 100644 index 0000000000000..893f9dd472bf8 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.types @@ -0,0 +1,199 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldUnaryMutation.ts === +class C { +>C : C + + static #test: number = 24; +>#test : number +>24 : 24 + + constructor() { + C.#test++; +>C.#test++ : number +>C.#test : number +>C : typeof C + + C.#test--; +>C.#test-- : number +>C.#test : number +>C : typeof C + + ++C.#test; +>++C.#test : number +>C.#test : number +>C : typeof C + + --C.#test; +>--C.#test : number +>C.#test : number +>C : typeof C + + const a = C.#test++; +>a : number +>C.#test++ : number +>C.#test : number +>C : typeof C + + const b = C.#test--; +>b : number +>C.#test-- : number +>C.#test : number +>C : typeof C + + const c = ++C.#test; +>c : number +>++C.#test : number +>C.#test : number +>C : typeof C + + const d = --C.#test; +>d : number +>--C.#test : number +>C.#test : number +>C : typeof C + + for (C.#test = 0; C.#test < 10; ++C.#test) {} +>C.#test = 0 : 0 +>C.#test : number +>C : typeof C +>0 : 0 +>C.#test < 10 : boolean +>C.#test : number +>C : typeof C +>10 : 10 +>++C.#test : number +>C.#test : number +>C : typeof C + + for (C.#test = 0; C.#test < 10; C.#test++) {} +>C.#test = 0 : 0 +>C.#test : number +>C : typeof C +>0 : 0 +>C.#test < 10 : boolean +>C.#test : number +>C : typeof C +>10 : 10 +>C.#test++ : number +>C.#test : number +>C : typeof C + } + test() { +>test : () => void + + this.getClass().#test++; +>this.getClass().#test++ : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + this.getClass().#test--; +>this.getClass().#test-- : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + ++this.getClass().#test; +>++this.getClass().#test : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + --this.getClass().#test; +>--this.getClass().#test : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + const a = this.getClass().#test++; +>a : number +>this.getClass().#test++ : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + const b = this.getClass().#test--; +>b : number +>this.getClass().#test-- : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + const c = ++this.getClass().#test; +>c : number +>++this.getClass().#test : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + const d = --this.getClass().#test; +>d : number +>--this.getClass().#test : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + for (this.getClass().#test = 0; this.getClass().#test < 10; ++this.getClass().#test) {} +>this.getClass().#test = 0 : 0 +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C +>0 : 0 +>this.getClass().#test < 10 : boolean +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C +>10 : 10 +>++this.getClass().#test : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + + for (this.getClass().#test = 0; this.getClass().#test < 10; this.getClass().#test++) {} +>this.getClass().#test = 0 : 0 +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C +>0 : 0 +>this.getClass().#test < 10 : boolean +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C +>10 : 10 +>this.getClass().#test++ : number +>this.getClass().#test : number +>this.getClass() : typeof C +>this.getClass : () => typeof C +>this : this +>getClass : () => typeof C + } + getClass() { return C; } +>getClass : () => typeof C +>C : typeof C +} + diff --git a/tests/baselines/reference/privateNameStaticMethod.errors.txt b/tests/baselines/reference/privateNameStaticMethod.errors.txt new file mode 100644 index 0000000000000..c5f2e10bc0c56 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethod.errors.txt @@ -0,0 +1,22 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts(7,20): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts(8,12): error TS2554: Expected 1 arguments, but got 0. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts (2 errors) ==== + class A1 { + static #method(param: string): string { + return ""; + } + constructor() { + A1.#method("") + A1.#method(1) // Error + ~ +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + A1.#method() // Error + ~~~~~~~~~ +!!! error TS2554: Expected 1 arguments, but got 0. +!!! related TS6210 tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts:2:20: An argument for 'param' was not provided. + + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticMethod.js b/tests/baselines/reference/privateNameStaticMethod.js new file mode 100644 index 0000000000000..df59439c5d12b --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethod.js @@ -0,0 +1,34 @@ +//// [privateNameStaticMethod.ts] +class A1 { + static #method(param: string): string { + return ""; + } + constructor() { + A1.#method("") + A1.#method(1) // Error + A1.#method() // Error + + } +} + + +//// [privateNameStaticMethod.js] +"use strict"; +var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; +}; +var _A1_method; +class A1 { + constructor() { + __classStaticPrivateMethodGet(A1, A1, _A1_method).call(A1, ""); + __classStaticPrivateMethodGet(A1, A1, _A1_method).call(A1, 1); // Error + __classStaticPrivateMethodGet(A1, A1, _A1_method).call(// Error + A1); // Error + } +} +_A1_method = function _A1_method(param) { + return ""; +}; diff --git a/tests/baselines/reference/privateNameStaticMethod.symbols b/tests/baselines/reference/privateNameStaticMethod.symbols new file mode 100644 index 0000000000000..5773a754a476c --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethod.symbols @@ -0,0 +1,26 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts === +class A1 { +>A1 : Symbol(A1, Decl(privateNameStaticMethod.ts, 0, 0)) + + static #method(param: string): string { +>#method : Symbol(A1.#method, Decl(privateNameStaticMethod.ts, 0, 10)) +>param : Symbol(param, Decl(privateNameStaticMethod.ts, 1, 19)) + + return ""; + } + constructor() { + A1.#method("") +>A1.#method : Symbol(A1.#method, Decl(privateNameStaticMethod.ts, 0, 10)) +>A1 : Symbol(A1, Decl(privateNameStaticMethod.ts, 0, 0)) + + A1.#method(1) // Error +>A1.#method : Symbol(A1.#method, Decl(privateNameStaticMethod.ts, 0, 10)) +>A1 : Symbol(A1, Decl(privateNameStaticMethod.ts, 0, 0)) + + A1.#method() // Error +>A1.#method : Symbol(A1.#method, Decl(privateNameStaticMethod.ts, 0, 10)) +>A1 : Symbol(A1, Decl(privateNameStaticMethod.ts, 0, 0)) + + } +} + diff --git a/tests/baselines/reference/privateNameStaticMethod.types b/tests/baselines/reference/privateNameStaticMethod.types new file mode 100644 index 0000000000000..5e3455150d081 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethod.types @@ -0,0 +1,32 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts === +class A1 { +>A1 : A1 + + static #method(param: string): string { +>#method : (param: string) => string +>param : string + + return ""; +>"" : "" + } + constructor() { + A1.#method("") +>A1.#method("") : string +>A1.#method : (param: string) => string +>A1 : typeof A1 +>"" : "" + + A1.#method(1) // Error +>A1.#method(1) : string +>A1.#method : (param: string) => string +>A1 : typeof A1 +>1 : 1 + + A1.#method() // Error +>A1.#method() : string +>A1.#method : (param: string) => string +>A1 : typeof A1 + + } +} + diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.errors.txt b/tests/baselines/reference/privateNameStaticMethodAssignment.errors.txt new file mode 100644 index 0000000000000..43a2938b6fbf1 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.errors.txt @@ -0,0 +1,30 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(4,12): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(5,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(6,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(7,18): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(9,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts (5 errors) ==== + class A3 { + static #method() { }; + constructor(a: typeof A3, b: any) { + A3.#method = () => {} // Error, not writable + ~~~~~~~ +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. + a.#method = () => { }; // Error, not writable + ~~~~~~~ +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. + b.#method = () => { } //Error, not writable + ~~~~~~~ +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. + ({ x: A3.#method } = { x: () => {}}); //Error, not writable + ~~~~~~~ +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. + let x = A3.#method; + b.#method++ //Error, not writable + ~~~~~~~ +!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.js b/tests/baselines/reference/privateNameStaticMethodAssignment.js new file mode 100644 index 0000000000000..9271a62906b5d --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.js @@ -0,0 +1,40 @@ +//// [privateNameStaticMethodAssignment.ts] +class A3 { + static #method() { }; + constructor(a: typeof A3, b: any) { + A3.#method = () => {} // Error, not writable + a.#method = () => { }; // Error, not writable + b.#method = () => { } //Error, not writable + ({ x: A3.#method } = { x: () => {}}); //Error, not writable + let x = A3.#method; + b.#method++ //Error, not writable + } +} + + +//// [privateNameStaticMethodAssignment.js] +var __classStaticPrivateReadonly = (this && this.__classStaticPrivateReadonly) || function () { + throw new TypeError("Private static element is not writable"); +}; +var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; +}; +var _A3_method; +class A3 { + constructor(a, b) { + var _a; + __classStaticPrivateReadonly(A3, () => { }); // Error, not writable + __classStaticPrivateReadonly(// Error, not writable + a, () => { }); // Error, not writable + __classStaticPrivateReadonly(// Error, not writable + b, () => { }); //Error, not writable + ({ x: ({ set value(_a) { __classStaticPrivateReadonly(A3, _a); } }).value } = { x: () => { } }); //Error, not writable + let x = __classStaticPrivateMethodGet(A3, A3, _A3_method); + __classStaticPrivateReadonly(_a = b, +__classStaticPrivateMethodGet(_a, A3, _A3_method) + 1); //Error, not writable + } + ; +} +_A3_method = function _A3_method() { }; diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.symbols b/tests/baselines/reference/privateNameStaticMethodAssignment.symbols new file mode 100644 index 0000000000000..778730246452e --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.symbols @@ -0,0 +1,39 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts === +class A3 { +>A3 : Symbol(A3, Decl(privateNameStaticMethodAssignment.ts, 0, 0)) + + static #method() { }; +>#method : Symbol(A3.#method, Decl(privateNameStaticMethodAssignment.ts, 0, 10)) + + constructor(a: typeof A3, b: any) { +>a : Symbol(a, Decl(privateNameStaticMethodAssignment.ts, 2, 16)) +>A3 : Symbol(A3, Decl(privateNameStaticMethodAssignment.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameStaticMethodAssignment.ts, 2, 29)) + + A3.#method = () => {} // Error, not writable +>A3.#method : Symbol(A3.#method, Decl(privateNameStaticMethodAssignment.ts, 0, 10)) +>A3 : Symbol(A3, Decl(privateNameStaticMethodAssignment.ts, 0, 0)) + + a.#method = () => { }; // Error, not writable +>a.#method : Symbol(A3.#method, Decl(privateNameStaticMethodAssignment.ts, 0, 10)) +>a : Symbol(a, Decl(privateNameStaticMethodAssignment.ts, 2, 16)) + + b.#method = () => { } //Error, not writable +>b : Symbol(b, Decl(privateNameStaticMethodAssignment.ts, 2, 29)) + + ({ x: A3.#method } = { x: () => {}}); //Error, not writable +>x : Symbol(x, Decl(privateNameStaticMethodAssignment.ts, 6, 10)) +>A3.#method : Symbol(A3.#method, Decl(privateNameStaticMethodAssignment.ts, 0, 10)) +>A3 : Symbol(A3, Decl(privateNameStaticMethodAssignment.ts, 0, 0)) +>x : Symbol(x, Decl(privateNameStaticMethodAssignment.ts, 6, 30)) + + let x = A3.#method; +>x : Symbol(x, Decl(privateNameStaticMethodAssignment.ts, 7, 11)) +>A3.#method : Symbol(A3.#method, Decl(privateNameStaticMethodAssignment.ts, 0, 10)) +>A3 : Symbol(A3, Decl(privateNameStaticMethodAssignment.ts, 0, 0)) + + b.#method++ //Error, not writable +>b : Symbol(b, Decl(privateNameStaticMethodAssignment.ts, 2, 29)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.types b/tests/baselines/reference/privateNameStaticMethodAssignment.types new file mode 100644 index 0000000000000..927ecd2de79c0 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.types @@ -0,0 +1,53 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts === +class A3 { +>A3 : A3 + + static #method() { }; +>#method : () => void + + constructor(a: typeof A3, b: any) { +>a : typeof A3 +>A3 : typeof A3 +>b : any + + A3.#method = () => {} // Error, not writable +>A3.#method = () => {} : () => void +>A3.#method : () => void +>A3 : typeof A3 +>() => {} : () => void + + a.#method = () => { }; // Error, not writable +>a.#method = () => { } : () => void +>a.#method : () => void +>a : typeof A3 +>() => { } : () => void + + b.#method = () => { } //Error, not writable +>b.#method = () => { } : () => void +>b.#method : any +>b : any +>() => { } : () => void + + ({ x: A3.#method } = { x: () => {}}); //Error, not writable +>({ x: A3.#method } = { x: () => {}}) : { x: () => void; } +>{ x: A3.#method } = { x: () => {}} : { x: () => void; } +>{ x: A3.#method } : { x: () => void; } +>x : () => void +>A3.#method : () => void +>A3 : typeof A3 +>{ x: () => {}} : { x: () => void; } +>x : () => void +>() => {} : () => void + + let x = A3.#method; +>x : () => void +>A3.#method : () => void +>A3 : typeof A3 + + b.#method++ //Error, not writable +>b.#method++ : number +>b.#method : any +>b : any + } +} + diff --git a/tests/baselines/reference/privateNameStaticMethodAsync.errors.txt b/tests/baselines/reference/privateNameStaticMethodAsync.errors.txt new file mode 100644 index 0000000000000..26cd65be3ceea --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodAsync.errors.txt @@ -0,0 +1,21 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAsync.ts(11,11): error TS1029: 'static' modifier must precede 'async' modifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAsync.ts (1 errors) ==== + const C = class { + static async #bar() { return await Promise.resolve(42); } + static async foo() { + const b = await this.#bar(); + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); + } + static *#baz() { yield 42; } + static async *#qux() { + yield (await Promise.resolve(42)); + } + async static *#bazBad() { yield 42; } + ~~~~~~ +!!! error TS1029: 'static' modifier must precede 'async' modifier. + } + + + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticMethodAsync.js b/tests/baselines/reference/privateNameStaticMethodAsync.js new file mode 100644 index 0000000000000..5cb7c6fc8c2d9 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodAsync.js @@ -0,0 +1,38 @@ +//// [privateNameStaticMethodAsync.ts] +const C = class { + static async #bar() { return await Promise.resolve(42); } + static async foo() { + const b = await this.#bar(); + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); + } + static *#baz() { yield 42; } + static async *#qux() { + yield (await Promise.resolve(42)); + } + async static *#bazBad() { yield 42; } +} + + + + +//// [privateNameStaticMethodAsync.js] +var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; +}; +var _a, _C_bar, _C_baz, _C_qux, _C_bazBad; +const C = (_a = class { + static async foo() { + const b = await __classStaticPrivateMethodGet(this, _a, _C_bar).call(this); + return b + (__classStaticPrivateMethodGet(this, _a, _C_baz).call(this).next().value || 0) + ((await __classStaticPrivateMethodGet(this, _a, _C_qux).call(this).next()).value || 0); + } + }, + _C_bar = async function _C_bar() { return await Promise.resolve(42); }, + _C_baz = function* _C_baz() { yield 42; }, + _C_qux = async function* _C_qux() { + yield (await Promise.resolve(42)); + }, + _C_bazBad = async function* _C_bazBad() { yield 42; }, + _a); diff --git a/tests/baselines/reference/privateNameStaticMethodAsync.symbols b/tests/baselines/reference/privateNameStaticMethodAsync.symbols new file mode 100644 index 0000000000000..0e13961283a06 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodAsync.symbols @@ -0,0 +1,50 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAsync.ts === +const C = class { +>C : Symbol(C, Decl(privateNameStaticMethodAsync.ts, 0, 5)) + + static async #bar() { return await Promise.resolve(42); } +>#bar : Symbol(C.#bar, Decl(privateNameStaticMethodAsync.ts, 0, 17)) +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) + + static async foo() { +>foo : Symbol(C.foo, Decl(privateNameStaticMethodAsync.ts, 1, 61)) + + const b = await this.#bar(); +>b : Symbol(b, Decl(privateNameStaticMethodAsync.ts, 3, 13)) +>this.#bar : Symbol(C.#bar, Decl(privateNameStaticMethodAsync.ts, 0, 17)) +>this : Symbol(C, Decl(privateNameStaticMethodAsync.ts, 0, 9)) + + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); +>b : Symbol(b, Decl(privateNameStaticMethodAsync.ts, 3, 13)) +>this.#baz().next().value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>this.#baz().next : Symbol(Generator.next, Decl(lib.es2015.generator.d.ts, --, --)) +>this.#baz : Symbol(C.#baz, Decl(privateNameStaticMethodAsync.ts, 5, 5)) +>this : Symbol(C, Decl(privateNameStaticMethodAsync.ts, 0, 9)) +>next : Symbol(Generator.next, Decl(lib.es2015.generator.d.ts, --, --)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>(await this.#qux().next()).value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>this.#qux().next : Symbol(AsyncGenerator.next, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) +>this.#qux : Symbol(C.#qux, Decl(privateNameStaticMethodAsync.ts, 6, 32)) +>this : Symbol(C, Decl(privateNameStaticMethodAsync.ts, 0, 9)) +>next : Symbol(AsyncGenerator.next, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + } + static *#baz() { yield 42; } +>#baz : Symbol(C.#baz, Decl(privateNameStaticMethodAsync.ts, 5, 5)) + + static async *#qux() { +>#qux : Symbol(C.#qux, Decl(privateNameStaticMethodAsync.ts, 6, 32)) + + yield (await Promise.resolve(42)); +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) + } + async static *#bazBad() { yield 42; } +>#bazBad : Symbol(C.#bazBad, Decl(privateNameStaticMethodAsync.ts, 9, 5)) +} + + + diff --git a/tests/baselines/reference/privateNameStaticMethodAsync.types b/tests/baselines/reference/privateNameStaticMethodAsync.types new file mode 100644 index 0000000000000..6da52fd602fc2 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodAsync.types @@ -0,0 +1,79 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAsync.ts === +const C = class { +>C : typeof C +>class { static async #bar() { return await Promise.resolve(42); } static async foo() { const b = await this.#bar(); return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); } static *#baz() { yield 42; } static async *#qux() { yield (await Promise.resolve(42)); } async static *#bazBad() { yield 42; }} : typeof C + + static async #bar() { return await Promise.resolve(42); } +>#bar : () => Promise +>await Promise.resolve(42) : number +>Promise.resolve(42) : Promise +>Promise.resolve : { (): Promise; (value: T | PromiseLike): Promise; } +>Promise : PromiseConstructor +>resolve : { (): Promise; (value: T | PromiseLike): Promise; } +>42 : 42 + + static async foo() { +>foo : () => Promise + + const b = await this.#bar(); +>b : number +>await this.#bar() : number +>this.#bar() : Promise +>this.#bar : () => Promise +>this : typeof C + + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); +>b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0) : number +>b + (this.#baz().next().value || 0) : number +>b : number +>(this.#baz().next().value || 0) : number +>this.#baz().next().value || 0 : number +>this.#baz().next().value : number | void +>this.#baz().next() : IteratorResult +>this.#baz().next : (...args: [] | [unknown]) => IteratorResult +>this.#baz() : Generator +>this.#baz : () => Generator +>this : typeof C +>next : (...args: [] | [unknown]) => IteratorResult +>value : number | void +>0 : 0 +>((await this.#qux().next()).value || 0) : number +>(await this.#qux().next()).value || 0 : number +>(await this.#qux().next()).value : number | void +>(await this.#qux().next()) : IteratorResult +>await this.#qux().next() : IteratorResult +>this.#qux().next() : Promise> +>this.#qux().next : (...args: [] | [unknown]) => Promise> +>this.#qux() : AsyncGenerator +>this.#qux : () => AsyncGenerator +>this : typeof C +>next : (...args: [] | [unknown]) => Promise> +>value : number | void +>0 : 0 + } + static *#baz() { yield 42; } +>#baz : () => Generator +>yield 42 : any +>42 : 42 + + static async *#qux() { +>#qux : () => AsyncGenerator + + yield (await Promise.resolve(42)); +>yield (await Promise.resolve(42)) : any +>(await Promise.resolve(42)) : number +>await Promise.resolve(42) : number +>Promise.resolve(42) : Promise +>Promise.resolve : { (): Promise; (value: T | PromiseLike): Promise; } +>Promise : PromiseConstructor +>resolve : { (): Promise; (value: T | PromiseLike): Promise; } +>42 : 42 + } + async static *#bazBad() { yield 42; } +>#bazBad : () => AsyncGenerator +>yield 42 : any +>42 : 42 +} + + + diff --git a/tests/baselines/reference/privateNameStaticMethodCallExpression.js b/tests/baselines/reference/privateNameStaticMethodCallExpression.js new file mode 100644 index 0000000000000..0ca367948c498 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodCallExpression.js @@ -0,0 +1,56 @@ +//// [privateNameStaticMethodCallExpression.ts] +class AA { + static #method() { this.x = 10; }; + static #method2(a, ...b) {}; + static x = 1; + test() { + AA.#method(); + const func = AA.#method; + func(); + new AA.#method(); + + const arr = [ 1, 2 ]; + AA.#method2(0, ...arr, 3); + + const b = new AA.#method2(0, ...arr, 3); //Error + const str = AA.#method2`head${1}middle${2}tail`; + AA.getClass().#method2`test${1}and${2}`; + + AA.getClass().#method2(0, ...arr, 3); + const b2 = new (AA.getClass().#method2)(0, ...arr, 3); //Error + const str2 = AA.getClass().#method2`head${1}middle${2}tail`; + } + static getClass() { return AA; } +} + + +//// [privateNameStaticMethodCallExpression.js] +var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; +}; +var _AA_method, _AA_method2; +class AA { + ; + ; + test() { + var _a, _b, _c; + __classStaticPrivateMethodGet(AA, AA, _AA_method).call(AA); + const func = __classStaticPrivateMethodGet(AA, AA, _AA_method); + func(); + new (__classStaticPrivateMethodGet(AA, AA, _AA_method))(); + const arr = [1, 2]; + __classStaticPrivateMethodGet(AA, AA, _AA_method2).call(AA, 0, ...arr, 3); + const b = new (__classStaticPrivateMethodGet(AA, AA, _AA_method2))(0, ...arr, 3); //Error + const str = __classStaticPrivateMethodGet(AA, AA, _AA_method2).bind(AA) `head${1}middle${2}tail`; + __classStaticPrivateMethodGet((_a = AA.getClass()), AA, _AA_method2).bind(_a) `test${1}and${2}`; + __classStaticPrivateMethodGet((_b = AA.getClass()), AA, _AA_method2).call(_b, 0, ...arr, 3); + const b2 = new (__classStaticPrivateMethodGet(AA.getClass(), AA, _AA_method2))(0, ...arr, 3); //Error + const str2 = __classStaticPrivateMethodGet((_c = AA.getClass()), AA, _AA_method2).bind(_c) `head${1}middle${2}tail`; + } + static getClass() { return AA; } +} +_AA_method = function _AA_method() { this.x = 10; }, _AA_method2 = function _AA_method2(a, ...b) { }; +AA.x = 1; diff --git a/tests/baselines/reference/privateNameStaticMethodCallExpression.symbols b/tests/baselines/reference/privateNameStaticMethodCallExpression.symbols new file mode 100644 index 0000000000000..b661493cd69cf --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodCallExpression.symbols @@ -0,0 +1,89 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodCallExpression.ts === +class AA { +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) + + static #method() { this.x = 10; }; +>#method : Symbol(AA.#method, Decl(privateNameStaticMethodCallExpression.ts, 0, 10)) +>this.x : Symbol(AA.x, Decl(privateNameStaticMethodCallExpression.ts, 2, 32)) +>this : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) +>x : Symbol(AA.x, Decl(privateNameStaticMethodCallExpression.ts, 2, 32)) + + static #method2(a, ...b) {}; +>#method2 : Symbol(AA.#method2, Decl(privateNameStaticMethodCallExpression.ts, 1, 38)) +>a : Symbol(a, Decl(privateNameStaticMethodCallExpression.ts, 2, 20)) +>b : Symbol(b, Decl(privateNameStaticMethodCallExpression.ts, 2, 22)) + + static x = 1; +>x : Symbol(AA.x, Decl(privateNameStaticMethodCallExpression.ts, 2, 32)) + + test() { +>test : Symbol(AA.test, Decl(privateNameStaticMethodCallExpression.ts, 3, 17)) + + AA.#method(); +>AA.#method : Symbol(AA.#method, Decl(privateNameStaticMethodCallExpression.ts, 0, 10)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) + + const func = AA.#method; +>func : Symbol(func, Decl(privateNameStaticMethodCallExpression.ts, 6, 13)) +>AA.#method : Symbol(AA.#method, Decl(privateNameStaticMethodCallExpression.ts, 0, 10)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) + + func(); +>func : Symbol(func, Decl(privateNameStaticMethodCallExpression.ts, 6, 13)) + + new AA.#method(); +>AA.#method : Symbol(AA.#method, Decl(privateNameStaticMethodCallExpression.ts, 0, 10)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) + + const arr = [ 1, 2 ]; +>arr : Symbol(arr, Decl(privateNameStaticMethodCallExpression.ts, 10, 13)) + + AA.#method2(0, ...arr, 3); +>AA.#method2 : Symbol(AA.#method2, Decl(privateNameStaticMethodCallExpression.ts, 1, 38)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameStaticMethodCallExpression.ts, 10, 13)) + + const b = new AA.#method2(0, ...arr, 3); //Error +>b : Symbol(b, Decl(privateNameStaticMethodCallExpression.ts, 13, 13)) +>AA.#method2 : Symbol(AA.#method2, Decl(privateNameStaticMethodCallExpression.ts, 1, 38)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) +>arr : Symbol(arr, Decl(privateNameStaticMethodCallExpression.ts, 10, 13)) + + const str = AA.#method2`head${1}middle${2}tail`; +>str : Symbol(str, Decl(privateNameStaticMethodCallExpression.ts, 14, 13)) +>AA.#method2 : Symbol(AA.#method2, Decl(privateNameStaticMethodCallExpression.ts, 1, 38)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) + + AA.getClass().#method2`test${1}and${2}`; +>AA.getClass().#method2 : Symbol(AA.#method2, Decl(privateNameStaticMethodCallExpression.ts, 1, 38)) +>AA.getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) +>getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) + + AA.getClass().#method2(0, ...arr, 3); +>AA.getClass().#method2 : Symbol(AA.#method2, Decl(privateNameStaticMethodCallExpression.ts, 1, 38)) +>AA.getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) +>getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) +>arr : Symbol(arr, Decl(privateNameStaticMethodCallExpression.ts, 10, 13)) + + const b2 = new (AA.getClass().#method2)(0, ...arr, 3); //Error +>b2 : Symbol(b2, Decl(privateNameStaticMethodCallExpression.ts, 18, 13)) +>AA.getClass().#method2 : Symbol(AA.#method2, Decl(privateNameStaticMethodCallExpression.ts, 1, 38)) +>AA.getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) +>getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) +>arr : Symbol(arr, Decl(privateNameStaticMethodCallExpression.ts, 10, 13)) + + const str2 = AA.getClass().#method2`head${1}middle${2}tail`; +>str2 : Symbol(str2, Decl(privateNameStaticMethodCallExpression.ts, 19, 13)) +>AA.getClass().#method2 : Symbol(AA.#method2, Decl(privateNameStaticMethodCallExpression.ts, 1, 38)) +>AA.getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) +>getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) + } + static getClass() { return AA; } +>getClass : Symbol(AA.getClass, Decl(privateNameStaticMethodCallExpression.ts, 20, 5)) +>AA : Symbol(AA, Decl(privateNameStaticMethodCallExpression.ts, 0, 0)) +} + diff --git a/tests/baselines/reference/privateNameStaticMethodCallExpression.types b/tests/baselines/reference/privateNameStaticMethodCallExpression.types new file mode 100644 index 0000000000000..4590b7545a873 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodCallExpression.types @@ -0,0 +1,131 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodCallExpression.ts === +class AA { +>AA : AA + + static #method() { this.x = 10; }; +>#method : () => void +>this.x = 10 : 10 +>this.x : number +>this : typeof AA +>x : number +>10 : 10 + + static #method2(a, ...b) {}; +>#method2 : (a: any, ...b: any[]) => void +>a : any +>b : any[] + + static x = 1; +>x : number +>1 : 1 + + test() { +>test : () => void + + AA.#method(); +>AA.#method() : void +>AA.#method : () => void +>AA : typeof AA + + const func = AA.#method; +>func : () => void +>AA.#method : () => void +>AA : typeof AA + + func(); +>func() : void +>func : () => void + + new AA.#method(); +>new AA.#method() : any +>AA.#method : () => void +>AA : typeof AA + + const arr = [ 1, 2 ]; +>arr : number[] +>[ 1, 2 ] : number[] +>1 : 1 +>2 : 2 + + AA.#method2(0, ...arr, 3); +>AA.#method2(0, ...arr, 3) : void +>AA.#method2 : (a: any, ...b: any[]) => void +>AA : typeof AA +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const b = new AA.#method2(0, ...arr, 3); //Error +>b : any +>new AA.#method2(0, ...arr, 3) : any +>AA.#method2 : (a: any, ...b: any[]) => void +>AA : typeof AA +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const str = AA.#method2`head${1}middle${2}tail`; +>str : void +>AA.#method2`head${1}middle${2}tail` : void +>AA.#method2 : (a: any, ...b: any[]) => void +>AA : typeof AA +>`head${1}middle${2}tail` : "head1middle2tail" +>1 : 1 +>2 : 2 + + AA.getClass().#method2`test${1}and${2}`; +>AA.getClass().#method2`test${1}and${2}` : void +>AA.getClass().#method2 : (a: any, ...b: any[]) => void +>AA.getClass() : typeof AA +>AA.getClass : () => typeof AA +>AA : typeof AA +>getClass : () => typeof AA +>`test${1}and${2}` : "test1and2" +>1 : 1 +>2 : 2 + + AA.getClass().#method2(0, ...arr, 3); +>AA.getClass().#method2(0, ...arr, 3) : void +>AA.getClass().#method2 : (a: any, ...b: any[]) => void +>AA.getClass() : typeof AA +>AA.getClass : () => typeof AA +>AA : typeof AA +>getClass : () => typeof AA +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const b2 = new (AA.getClass().#method2)(0, ...arr, 3); //Error +>b2 : any +>new (AA.getClass().#method2)(0, ...arr, 3) : any +>(AA.getClass().#method2) : (a: any, ...b: any[]) => void +>AA.getClass().#method2 : (a: any, ...b: any[]) => void +>AA.getClass() : typeof AA +>AA.getClass : () => typeof AA +>AA : typeof AA +>getClass : () => typeof AA +>0 : 0 +>...arr : number +>arr : number[] +>3 : 3 + + const str2 = AA.getClass().#method2`head${1}middle${2}tail`; +>str2 : void +>AA.getClass().#method2`head${1}middle${2}tail` : void +>AA.getClass().#method2 : (a: any, ...b: any[]) => void +>AA.getClass() : typeof AA +>AA.getClass : () => typeof AA +>AA : typeof AA +>getClass : () => typeof AA +>`head${1}middle${2}tail` : "head1middle2tail" +>1 : 1 +>2 : 2 + } + static getClass() { return AA; } +>getClass : () => typeof AA +>AA : typeof AA +} + diff --git a/tests/baselines/reference/privateNameStaticMethodClassExpression.errors.txt b/tests/baselines/reference/privateNameStaticMethodClassExpression.errors.txt new file mode 100644 index 0000000000000..48a7ffe7f02df --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodClassExpression.errors.txt @@ -0,0 +1,21 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts(9,14): error TS18013: Property '#method' is not accessible outside class 'D' because it has a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts(10,14): error TS18013: Property '#field' is not accessible outside class 'D' because it has a private identifier. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts (2 errors) ==== + const C = class D { + static #field = D.#method(); + static #method() { return 42; } + static getClass() { return D; } + static getField() { return C.#field }; + } + + console.log(C.getClass().getField()); + C.getClass().#method; // Error + ~~~~~~~ +!!! error TS18013: Property '#method' is not accessible outside class 'D' because it has a private identifier. + C.getClass().#field; // Error + ~~~~~~ +!!! error TS18013: Property '#field' is not accessible outside class 'D' because it has a private identifier. + + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticMethodClassExpression.js b/tests/baselines/reference/privateNameStaticMethodClassExpression.js new file mode 100644 index 0000000000000..1d321c7af3c59 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodClassExpression.js @@ -0,0 +1,39 @@ +//// [privateNameStaticMethodClassExpression.ts] +const C = class D { + static #field = D.#method(); + static #method() { return 42; } + static getClass() { return D; } + static getField() { return C.#field }; +} + +console.log(C.getClass().getField()); +C.getClass().#method; // Error +C.getClass().#field; // Error + + + +//// [privateNameStaticMethodClassExpression.js] +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return propertyDescriptor.value; +}; +var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; +}; +var _a, _D_field, _D_method; +const C = (_a = class D { + static getClass() { return D; } + static getField() { return __classStaticPrivateFieldGet(C, _a, _D_field); } + ; + }, + _D_method = function _D_method() { return 42; }, + _D_field = { value: __classStaticPrivateMethodGet(_a, _a, _D_method).call(_a) }, + _a); +console.log(C.getClass().getField()); +C.getClass().; // Error +C.getClass().; // Error diff --git a/tests/baselines/reference/privateNameStaticMethodClassExpression.symbols b/tests/baselines/reference/privateNameStaticMethodClassExpression.symbols new file mode 100644 index 0000000000000..1804076d049b0 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodClassExpression.symbols @@ -0,0 +1,44 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts === +const C = class D { +>C : Symbol(C, Decl(privateNameStaticMethodClassExpression.ts, 0, 5)) +>D : Symbol(D, Decl(privateNameStaticMethodClassExpression.ts, 0, 9)) + + static #field = D.#method(); +>#field : Symbol(D.#field, Decl(privateNameStaticMethodClassExpression.ts, 0, 19)) +>D.#method : Symbol(D.#method, Decl(privateNameStaticMethodClassExpression.ts, 1, 32)) +>D : Symbol(D, Decl(privateNameStaticMethodClassExpression.ts, 0, 9)) + + static #method() { return 42; } +>#method : Symbol(D.#method, Decl(privateNameStaticMethodClassExpression.ts, 1, 32)) + + static getClass() { return D; } +>getClass : Symbol(D.getClass, Decl(privateNameStaticMethodClassExpression.ts, 2, 35)) +>D : Symbol(D, Decl(privateNameStaticMethodClassExpression.ts, 0, 9)) + + static getField() { return C.#field }; +>getField : Symbol(D.getField, Decl(privateNameStaticMethodClassExpression.ts, 3, 35)) +>C.#field : Symbol(D.#field, Decl(privateNameStaticMethodClassExpression.ts, 0, 19)) +>C : Symbol(C, Decl(privateNameStaticMethodClassExpression.ts, 0, 5)) +} + +console.log(C.getClass().getField()); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>C.getClass().getField : Symbol(D.getField, Decl(privateNameStaticMethodClassExpression.ts, 3, 35)) +>C.getClass : Symbol(D.getClass, Decl(privateNameStaticMethodClassExpression.ts, 2, 35)) +>C : Symbol(C, Decl(privateNameStaticMethodClassExpression.ts, 0, 5)) +>getClass : Symbol(D.getClass, Decl(privateNameStaticMethodClassExpression.ts, 2, 35)) +>getField : Symbol(D.getField, Decl(privateNameStaticMethodClassExpression.ts, 3, 35)) + +C.getClass().#method; // Error +>C.getClass : Symbol(D.getClass, Decl(privateNameStaticMethodClassExpression.ts, 2, 35)) +>C : Symbol(C, Decl(privateNameStaticMethodClassExpression.ts, 0, 5)) +>getClass : Symbol(D.getClass, Decl(privateNameStaticMethodClassExpression.ts, 2, 35)) + +C.getClass().#field; // Error +>C.getClass : Symbol(D.getClass, Decl(privateNameStaticMethodClassExpression.ts, 2, 35)) +>C : Symbol(C, Decl(privateNameStaticMethodClassExpression.ts, 0, 5)) +>getClass : Symbol(D.getClass, Decl(privateNameStaticMethodClassExpression.ts, 2, 35)) + + diff --git a/tests/baselines/reference/privateNameStaticMethodClassExpression.types b/tests/baselines/reference/privateNameStaticMethodClassExpression.types new file mode 100644 index 0000000000000..5144a6aeaf5b0 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodClassExpression.types @@ -0,0 +1,54 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts === +const C = class D { +>C : typeof D +>class D { static #field = D.#method(); static #method() { return 42; } static getClass() { return D; } static getField() { return C.#field };} : typeof D +>D : typeof D + + static #field = D.#method(); +>#field : number +>D.#method() : number +>D.#method : () => number +>D : typeof D + + static #method() { return 42; } +>#method : () => number +>42 : 42 + + static getClass() { return D; } +>getClass : () => typeof D +>D : typeof D + + static getField() { return C.#field }; +>getField : () => number +>C.#field : number +>C : typeof D +} + +console.log(C.getClass().getField()); +>console.log(C.getClass().getField()) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>C.getClass().getField() : number +>C.getClass().getField : () => number +>C.getClass() : typeof D +>C.getClass : () => typeof D +>C : typeof D +>getClass : () => typeof D +>getField : () => number + +C.getClass().#method; // Error +>C.getClass().#method : any +>C.getClass() : typeof D +>C.getClass : () => typeof D +>C : typeof D +>getClass : () => typeof D + +C.getClass().#field; // Error +>C.getClass().#field : any +>C.getClass() : typeof D +>C.getClass : () => typeof D +>C : typeof D +>getClass : () => typeof D + + diff --git a/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js new file mode 100644 index 0000000000000..2dfb9750fed8a --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js @@ -0,0 +1,22 @@ +//// [privateNameStaticMethodInStaticFieldInit.ts] +class C { + static s = C.#method(); + static #method() { return 42; } +} + +console.log(C.s); + + +//// [privateNameStaticMethodInStaticFieldInit.js] +var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; +}; +var _C_method; +class C { +} +_C_method = function _C_method() { return 42; }; +C.s = __classStaticPrivateMethodGet(C, C, _C_method).call(C); +console.log(C.s); diff --git a/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.symbols b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.symbols new file mode 100644 index 0000000000000..94f39eb67830d --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.symbols @@ -0,0 +1,21 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodInStaticFieldInit.ts === +class C { +>C : Symbol(C, Decl(privateNameStaticMethodInStaticFieldInit.ts, 0, 0)) + + static s = C.#method(); +>s : Symbol(C.s, Decl(privateNameStaticMethodInStaticFieldInit.ts, 0, 9)) +>C.#method : Symbol(C.#method, Decl(privateNameStaticMethodInStaticFieldInit.ts, 1, 27)) +>C : Symbol(C, Decl(privateNameStaticMethodInStaticFieldInit.ts, 0, 0)) + + static #method() { return 42; } +>#method : Symbol(C.#method, Decl(privateNameStaticMethodInStaticFieldInit.ts, 1, 27)) +} + +console.log(C.s); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>C.s : Symbol(C.s, Decl(privateNameStaticMethodInStaticFieldInit.ts, 0, 9)) +>C : Symbol(C, Decl(privateNameStaticMethodInStaticFieldInit.ts, 0, 0)) +>s : Symbol(C.s, Decl(privateNameStaticMethodInStaticFieldInit.ts, 0, 9)) + diff --git a/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.types b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.types new file mode 100644 index 0000000000000..a251b7b41b0c2 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.types @@ -0,0 +1,24 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodInStaticFieldInit.ts === +class C { +>C : C + + static s = C.#method(); +>s : number +>C.#method() : number +>C.#method : () => number +>C : typeof C + + static #method() { return 42; } +>#method : () => number +>42 : 42 +} + +console.log(C.s); +>console.log(C.s) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>C.s : number +>C : typeof C +>s : number + diff --git a/tests/baselines/reference/privateNameStaticsAndStaticMethods.js b/tests/baselines/reference/privateNameStaticsAndStaticMethods.js new file mode 100644 index 0000000000000..a2f814b593467 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticsAndStaticMethods.js @@ -0,0 +1,62 @@ +//// [privateNameStaticsAndStaticMethods.ts] +class A { + static #foo(a: number) {} + static async #bar(a: number) {} + static async *#baz(a: number) { + return 3; + } + static #_quux: number; + static get #quux (): number { + return this.#_quux; + } + static set #quux (val: number) { + this.#_quux = val; + } + constructor () { + A.#foo(30); + A.#bar(30); + A.#bar(30); + A.#quux = A.#quux + 1; + A.#quux++; + } +} + +class B extends A { + static #foo(a: string) {} + constructor () { + super(); + B.#foo("str"); + } +} + + +//// [privateNameStaticsAndStaticMethods.js] +"use strict"; +class A { + constructor() { + A.#foo(30); + A.#bar(30); + A.#bar(30); + A.#quux = A.#quux + 1; + A.#quux++; + } + static #foo(a) { } + static async #bar(a) { } + static async *#baz(a) { + return 3; + } + static #_quux; + static get #quux() { + return this.#_quux; + } + static set #quux(val) { + this.#_quux = val; + } +} +class B extends A { + static #foo(a) { } + constructor() { + super(); + B.#foo("str"); + } +} diff --git a/tests/baselines/reference/privateNameStaticsAndStaticMethods.symbols b/tests/baselines/reference/privateNameStaticsAndStaticMethods.symbols new file mode 100644 index 0000000000000..b12f3fa4c464d --- /dev/null +++ b/tests/baselines/reference/privateNameStaticsAndStaticMethods.symbols @@ -0,0 +1,80 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticsAndStaticMethods.ts === +class A { +>A : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + + static #foo(a: number) {} +>#foo : Symbol(A.#foo, Decl(privateNameStaticsAndStaticMethods.ts, 0, 9)) +>a : Symbol(a, Decl(privateNameStaticsAndStaticMethods.ts, 1, 16)) + + static async #bar(a: number) {} +>#bar : Symbol(A.#bar, Decl(privateNameStaticsAndStaticMethods.ts, 1, 29)) +>a : Symbol(a, Decl(privateNameStaticsAndStaticMethods.ts, 2, 22)) + + static async *#baz(a: number) { +>#baz : Symbol(A.#baz, Decl(privateNameStaticsAndStaticMethods.ts, 2, 35)) +>a : Symbol(a, Decl(privateNameStaticsAndStaticMethods.ts, 3, 23)) + + return 3; + } + static #_quux: number; +>#_quux : Symbol(A.#_quux, Decl(privateNameStaticsAndStaticMethods.ts, 5, 5)) + + static get #quux (): number { +>#quux : Symbol(A.#quux, Decl(privateNameStaticsAndStaticMethods.ts, 6, 26), Decl(privateNameStaticsAndStaticMethods.ts, 9, 5)) + + return this.#_quux; +>this.#_quux : Symbol(A.#_quux, Decl(privateNameStaticsAndStaticMethods.ts, 5, 5)) +>this : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + } + static set #quux (val: number) { +>#quux : Symbol(A.#quux, Decl(privateNameStaticsAndStaticMethods.ts, 6, 26), Decl(privateNameStaticsAndStaticMethods.ts, 9, 5)) +>val : Symbol(val, Decl(privateNameStaticsAndStaticMethods.ts, 10, 22)) + + this.#_quux = val; +>this.#_quux : Symbol(A.#_quux, Decl(privateNameStaticsAndStaticMethods.ts, 5, 5)) +>this : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) +>val : Symbol(val, Decl(privateNameStaticsAndStaticMethods.ts, 10, 22)) + } + constructor () { + A.#foo(30); +>A.#foo : Symbol(A.#foo, Decl(privateNameStaticsAndStaticMethods.ts, 0, 9)) +>A : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + + A.#bar(30); +>A.#bar : Symbol(A.#bar, Decl(privateNameStaticsAndStaticMethods.ts, 1, 29)) +>A : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + + A.#bar(30); +>A.#bar : Symbol(A.#bar, Decl(privateNameStaticsAndStaticMethods.ts, 1, 29)) +>A : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + + A.#quux = A.#quux + 1; +>A.#quux : Symbol(A.#quux, Decl(privateNameStaticsAndStaticMethods.ts, 6, 26), Decl(privateNameStaticsAndStaticMethods.ts, 9, 5)) +>A : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) +>A.#quux : Symbol(A.#quux, Decl(privateNameStaticsAndStaticMethods.ts, 6, 26), Decl(privateNameStaticsAndStaticMethods.ts, 9, 5)) +>A : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + + A.#quux++; +>A.#quux : Symbol(A.#quux, Decl(privateNameStaticsAndStaticMethods.ts, 6, 26), Decl(privateNameStaticsAndStaticMethods.ts, 9, 5)) +>A : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + } +} + +class B extends A { +>B : Symbol(B, Decl(privateNameStaticsAndStaticMethods.ts, 20, 1)) +>A : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + + static #foo(a: string) {} +>#foo : Symbol(B.#foo, Decl(privateNameStaticsAndStaticMethods.ts, 22, 19)) +>a : Symbol(a, Decl(privateNameStaticsAndStaticMethods.ts, 23, 16)) + + constructor () { + super(); +>super : Symbol(A, Decl(privateNameStaticsAndStaticMethods.ts, 0, 0)) + + B.#foo("str"); +>B.#foo : Symbol(B.#foo, Decl(privateNameStaticsAndStaticMethods.ts, 22, 19)) +>B : Symbol(B, Decl(privateNameStaticsAndStaticMethods.ts, 20, 1)) + } +} + diff --git a/tests/baselines/reference/privateNameStaticsAndStaticMethods.types b/tests/baselines/reference/privateNameStaticsAndStaticMethods.types new file mode 100644 index 0000000000000..c9e37e68f5134 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticsAndStaticMethods.types @@ -0,0 +1,95 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticsAndStaticMethods.ts === +class A { +>A : A + + static #foo(a: number) {} +>#foo : (a: number) => void +>a : number + + static async #bar(a: number) {} +>#bar : (a: number) => Promise +>a : number + + static async *#baz(a: number) { +>#baz : (a: number) => AsyncGenerator +>a : number + + return 3; +>3 : 3 + } + static #_quux: number; +>#_quux : number + + static get #quux (): number { +>#quux : number + + return this.#_quux; +>this.#_quux : number +>this : typeof A + } + static set #quux (val: number) { +>#quux : number +>val : number + + this.#_quux = val; +>this.#_quux = val : number +>this.#_quux : number +>this : typeof A +>val : number + } + constructor () { + A.#foo(30); +>A.#foo(30) : void +>A.#foo : (a: number) => void +>A : typeof A +>30 : 30 + + A.#bar(30); +>A.#bar(30) : Promise +>A.#bar : (a: number) => Promise +>A : typeof A +>30 : 30 + + A.#bar(30); +>A.#bar(30) : Promise +>A.#bar : (a: number) => Promise +>A : typeof A +>30 : 30 + + A.#quux = A.#quux + 1; +>A.#quux = A.#quux + 1 : number +>A.#quux : number +>A : typeof A +>A.#quux + 1 : number +>A.#quux : number +>A : typeof A +>1 : 1 + + A.#quux++; +>A.#quux++ : number +>A.#quux : number +>A : typeof A + } +} + +class B extends A { +>B : B +>A : A + + static #foo(a: string) {} +>#foo : (a: string) => void +>a : string + + constructor () { + super(); +>super() : void +>super : typeof A + + B.#foo("str"); +>B.#foo("str") : void +>B.#foo : (a: string) => void +>B : typeof B +>"str" : "str" + } +} + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts index 099e734594684..c12dc3032b775 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts @@ -2,9 +2,13 @@ // @target: es6 class A { - #foo = true; + #foo = true; + static #baz = 10; + static #m() {} method(thing: any) { thing.#foo; // OK + thing.#m(); + thing.#bar; thing.#bar; // Error } }; diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts index 9fed89d65499a..20185b3185c45 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAndObjectRestSpread.ts @@ -3,11 +3,17 @@ class C { #prop = 1; + static #propStatic = 1; method(other: C) { const obj = { ...other }; obj.#prop; const { ...rest } = other; rest.#prop; + + const statics = { ... C}; + statics.#propStatic + const { ...sRest } = C; + sRest.#propStatic; } } \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessors.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessors.ts new file mode 100644 index 0000000000000..5f3c20210be0e --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessors.ts @@ -0,0 +1,16 @@ +// @strict: true +// @target: es6 + +class A1 { + static get #prop() { return ""; } + static set #prop(param: string) { } + + static get #roProp() { return ""; } + + constructor(name: string) { + A1.#prop = ""; + A1.#roProp = ""; // Error + console.log(A1.#prop); + console.log(A1.#roProp); + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts new file mode 100644 index 0000000000000..d57ae7893813b --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsAccess.ts @@ -0,0 +1,27 @@ +// @target: es2015 +export {} +class A2 { + static get #prop() { return ""; } + static set #prop(param: string) { } + + constructor() { + console.log(A2.#prop); + let a: typeof A2 = A2; + a.#prop; + function foo (){ + a.#prop; + } + } +} + +A2.#prop; // Error + +function foo (){ + A2.#prop; // Error +} + +class B2 { + m() { + A2.#prop; + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsCallExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsCallExpression.ts new file mode 100644 index 0000000000000..ac5a5ade7e3d2 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorsCallExpression.ts @@ -0,0 +1,20 @@ +// @target: es2015 + +class A { + static get #fieldFunc() { return function() { A.#x = 10; } } + static get #fieldFunc2() { return function(a, ...b) {}; } + static #x = 1; + static test() { + this.#fieldFunc(); + const func = this.#fieldFunc; + func(); + new this.#fieldFunc(); + + const arr = [ 1, 2 ]; + this.#fieldFunc2(0, ...arr, 3); + const b = new this.#fieldFunc2(0, ...arr, 3); + const str = this.#fieldFunc2`head${1}middle${2}tail`; + this.getClass().#fieldFunc2`test${1}and${2}`; + } + static getClass() { return A; } +} \ No newline at end of file diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts new file mode 100644 index 0000000000000..80d81fed1f326 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAccessorssDerivedClasses.ts @@ -0,0 +1,13 @@ +// @target: es2015 + +class Base { + static get #prop(): number { return 123; } + static method(x: typeof Derived) { + console.log(x.#prop); + } +} +class Derived extends Base { + static method(x: typeof Derived) { + console.log(x.#prop); + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts new file mode 100644 index 0000000000000..f163ab8cf1263 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts @@ -0,0 +1,7 @@ +// @target: esnext, es2015 + +class A { + static #foo = 1; + static #prop = 2; +} + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAccess.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAccess.ts new file mode 100644 index 0000000000000..8aea7860b7292 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAccess.ts @@ -0,0 +1,9 @@ +// @target: es2015 + +class A { + static #myField = "hello world"; + constructor() { + console.log(A.#myField); //Ok + console.log(this.#myField); //Error + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAssignment.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAssignment.ts new file mode 100644 index 0000000000000..76428f33cb435 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldAssignment.ts @@ -0,0 +1,36 @@ +// @target: es2015 + +class A { + static #field = 0; + constructor() { + A.#field = 1; + A.#field += 2; + A.#field -= 3; + A.#field /= 4; + A.#field *= 5; + A.#field **= 6; + A.#field %= 7; + A.#field <<= 8; + A.#field >>= 9; + A.#field >>>= 10; + A.#field &= 11; + A.#field |= 12; + A.#field ^= 13; + A.getClass().#field = 1; + A.getClass().#field += 2; + A.getClass().#field -= 3; + A.getClass().#field /= 4; + A.getClass().#field *= 5; + A.getClass().#field **= 6; + A.getClass().#field %= 7; + A.getClass().#field <<= 8; + A.getClass().#field >>= 9; + A.getClass().#field >>>= 10; + A.getClass().#field &= 11; + A.getClass().#field |= 12; + A.getClass().#field ^= 13; + } + static getClass() { + return A; + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldCallExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldCallExpression.ts new file mode 100644 index 0000000000000..723a36842c7f7 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldCallExpression.ts @@ -0,0 +1,21 @@ +// @target: es2015 + +class A { + static #fieldFunc = function () { this.x = 10; }; + static #fieldFunc2 = function (a, ...b) {}; + x = 1; + test() { + A.#fieldFunc(); + A.#fieldFunc?.(); + const func = A.#fieldFunc; + func(); + new A.#fieldFunc(); + + const arr = [ 1, 2 ]; + A.#fieldFunc2(0, ...arr, 3); + const b = new A.#fieldFunc2(0, ...arr, 3); + const str = A.#fieldFunc2`head${1}middle${2}tail`; + this.getClass().#fieldFunc2`test${1}and${2}`; + } + getClass() { return A; } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldClassExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldClassExpression.ts new file mode 100644 index 0000000000000..b57a64ca65adb --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldClassExpression.ts @@ -0,0 +1,23 @@ +// @target: es2015 + +class B { + static #foo = class { + constructor() { + console.log("hello"); + new B.#foo2(); + } + static test = 123; + field = 10; + }; + static #foo2 = class Foo { + static otherClass = 123; + }; + + m() { + console.log(B.#foo.test) + B.#foo.test = 10; + new B.#foo().field; + } +} + + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts new file mode 100644 index 0000000000000..92024df3a074e --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDerivedClasses.ts @@ -0,0 +1,17 @@ +// @target: es2015 + +class Base { + static #prop: number = 123; + static method(x: Derived) { + Derived.#derivedProp // error + Base.#prop = 10; + } +} +class Derived extends Base { + static #derivedProp: number = 10; + static method(x: Derived) { + Derived.#derivedProp + Base.#prop = 10; // error + } +} + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts new file mode 100644 index 0000000000000..2822bb8813ec9 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts @@ -0,0 +1,25 @@ +// @target: esnext, es2015 + +class A { + static #field = 1; + otherClass = A; + testObject() { + return { x: 10, y: 6 }; + } + testArray() { + return [10, 11]; + } + constructor() { + let y: number; + ({ x: A.#field, y } = this.testObject()); + ([A.#field, y] = this.testArray()); + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); + [A.#field, [A.#field]] = [1, [2]]; + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); + [A.#field = 2] = []; + [this.otherClass.#field = 2] = []; + } + static test(_a: typeof A) { + [_a.#field] = [2]; + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts new file mode 100644 index 0000000000000..2866eb42eded8 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts @@ -0,0 +1,6 @@ +// @target: es2015, esnext + +class A { + static #field = 10; + static #uninitialized; +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldUnaryMutation.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldUnaryMutation.ts new file mode 100644 index 0000000000000..8d37986db42a6 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldUnaryMutation.ts @@ -0,0 +1,30 @@ +// @target: es2015 + +class C { + static #test: number = 24; + constructor() { + C.#test++; + C.#test--; + ++C.#test; + --C.#test; + const a = C.#test++; + const b = C.#test--; + const c = ++C.#test; + const d = --C.#test; + for (C.#test = 0; C.#test < 10; ++C.#test) {} + for (C.#test = 0; C.#test < 10; C.#test++) {} + } + test() { + this.getClass().#test++; + this.getClass().#test--; + ++this.getClass().#test; + --this.getClass().#test; + const a = this.getClass().#test++; + const b = this.getClass().#test--; + const c = ++this.getClass().#test; + const d = --this.getClass().#test; + for (this.getClass().#test = 0; this.getClass().#test < 10; ++this.getClass().#test) {} + for (this.getClass().#test = 0; this.getClass().#test < 10; this.getClass().#test++) {} + } + getClass() { return C; } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts new file mode 100644 index 0000000000000..00b73232c4299 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethod.ts @@ -0,0 +1,14 @@ +// @strict: true +// @target: es6 + +class A1 { + static #method(param: string): string { + return ""; + } + constructor() { + A1.#method("") + A1.#method(1) // Error + A1.#method() // Error + + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts new file mode 100644 index 0000000000000..756fbe2feb59d --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts @@ -0,0 +1,13 @@ +// @target: es2015 + +class A3 { + static #method() { }; + constructor(a: typeof A3, b: any) { + A3.#method = () => {} // Error, not writable + a.#method = () => { }; // Error, not writable + b.#method = () => { } //Error, not writable + ({ x: A3.#method } = { x: () => {}}); //Error, not writable + let x = A3.#method; + b.#method++ //Error, not writable + } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAsync.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAsync.ts new file mode 100644 index 0000000000000..cdfc422e36252 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAsync.ts @@ -0,0 +1,16 @@ +// @target: es2019 + +const C = class { + static async #bar() { return await Promise.resolve(42); } + static async foo() { + const b = await this.#bar(); + return b + (this.#baz().next().value || 0) + ((await this.#qux().next()).value || 0); + } + static *#baz() { yield 42; } + static async *#qux() { + yield (await Promise.resolve(42)); + } + async static *#bazBad() { yield 42; } +} + + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodCallExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodCallExpression.ts new file mode 100644 index 0000000000000..8205599dc96ab --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodCallExpression.ts @@ -0,0 +1,25 @@ +// @target: es2015 + +class AA { + static #method() { this.x = 10; }; + static #method2(a, ...b) {}; + static x = 1; + test() { + AA.#method(); + const func = AA.#method; + func(); + new AA.#method(); + + const arr = [ 1, 2 ]; + AA.#method2(0, ...arr, 3); + + const b = new AA.#method2(0, ...arr, 3); //Error + const str = AA.#method2`head${1}middle${2}tail`; + AA.getClass().#method2`test${1}and${2}`; + + AA.getClass().#method2(0, ...arr, 3); + const b2 = new (AA.getClass().#method2)(0, ...arr, 3); //Error + const str2 = AA.getClass().#method2`head${1}middle${2}tail`; + } + static getClass() { return AA; } +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts new file mode 100644 index 0000000000000..1b8a5c082cc00 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodClassExpression.ts @@ -0,0 +1,13 @@ +// @target: es2015 + +const C = class D { + static #field = D.#method(); + static #method() { return 42; } + static getClass() { return D; } + static getField() { return C.#field }; +} + +console.log(C.getClass().getField()); +C.getClass().#method; // Error +C.getClass().#field; // Error + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodInStaticFieldInit.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodInStaticFieldInit.ts new file mode 100644 index 0000000000000..826cc72624029 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodInStaticFieldInit.ts @@ -0,0 +1,8 @@ +// @target: es2015 + +class C { + static s = C.#method(); + static #method() { return 42; } +} + +console.log(C.s); diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticsAndStaticMethods.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticsAndStaticMethods.ts new file mode 100644 index 0000000000000..7cbf9f8f9992b --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticsAndStaticMethods.ts @@ -0,0 +1,33 @@ +// @strict: true +// @target: esnext +// @lib: esnext + +class A { + static #foo(a: number) {} + static async #bar(a: number) {} + static async *#baz(a: number) { + return 3; + } + static #_quux: number; + static get #quux (): number { + return this.#_quux; + } + static set #quux (val: number) { + this.#_quux = val; + } + constructor () { + A.#foo(30); + A.#bar(30); + A.#bar(30); + A.#quux = A.#quux + 1; + A.#quux++; + } +} + +class B extends A { + static #foo(a: string) {} + constructor () { + super(); + B.#foo("str"); + } +} From 964fc27efd653b48a35db07c4b39dfd2d5684e61 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Fri, 19 Feb 2021 09:40:07 +0200 Subject: [PATCH 40/73] Fixed error messages and tests after merge. --- src/compiler/diagnosticMessages.json | 2 +- .../privateNameAccessorsCallExpression.types | 4 ++-- .../baselines/reference/privateNameAndAny.js | 10 +++++----- .../privateNameMethodAssignment.errors.txt | 20 +++++++++---------- .../privateNameMethodCallExpression.types | 6 +++--- .../reference/privateNameReadonly.errors.txt | 4 ++-- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index bf21c1fb0db5e..72f10c2066c9f 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3267,7 +3267,7 @@ "Cannot assign to private method '{0}'. Private methods are not writable.": { "category": "Error", - "code": 2801 + "code": 2803 }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.types b/tests/baselines/reference/privateNameAccessorsCallExpression.types index 69810b957993c..3beb279a5cb3c 100644 --- a/tests/baselines/reference/privateNameAccessorsCallExpression.types +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.types @@ -73,7 +73,7 @@ class A { >this.#fieldFunc2`head${1}middle${2}tail` : void >this.#fieldFunc2 : (a: any, ...b: any[]) => void >this : this ->`head${1}middle${2}tail` : "head1middle2tail" +>`head${1}middle${2}tail` : string >1 : 1 >2 : 2 @@ -84,7 +84,7 @@ class A { >this.getInstance : () => A >this : this >getInstance : () => A ->`test${1}and${2}` : "test1and2" +>`test${1}and${2}` : string >1 : 1 >2 : 2 } diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index e97c890f228f3..4a82505e7078e 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -35,18 +35,18 @@ class A { method(thing) { __classPrivateFieldGet(thing, _A_foo); // OK thing.; // Error - __classPrivateFieldGet(thing, _foo).call(// Error + __classPrivateFieldGet(thing, _A_foo).call(// Error thing); } methodU(thing) { - __classPrivateFieldGet(thing, _foo); + __classPrivateFieldGet(thing, _A_foo); thing.; - __classPrivateFieldGet(thing, _foo).call(thing); + __classPrivateFieldGet(thing, _A_foo).call(thing); } methodN(thing) { - __classPrivateFieldGet(thing, _foo); + __classPrivateFieldGet(thing, _A_foo); thing.; - __classPrivateFieldGet(thing, _foo).call(thing); + __classPrivateFieldGet(thing, _A_foo).call(thing); } } _A_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNameMethodAssignment.errors.txt b/tests/baselines/reference/privateNameMethodAssignment.errors.txt index 46d714ba467ec..41dc9f85464c2 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.errors.txt +++ b/tests/baselines/reference/privateNameMethodAssignment.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(4,14): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(5,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(6,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(7,20): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(9,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(4,14): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(5,11): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(6,11): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(7,20): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts(9,11): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. ==== tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment.ts (5 errors) ==== @@ -11,20 +11,20 @@ tests/cases/conformance/classes/members/privateNames/privateNameMethodAssignment constructor(a: A3, b: any) { this.#method = () => {} // Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. a.#method = () => { }; // Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. b.#method = () => { } //Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. ({ x: this.#method } = { x: () => {}}); //Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. let x = this.#method; b.#method++ //Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. } } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameMethodCallExpression.types b/tests/baselines/reference/privateNameMethodCallExpression.types index 4f769429259e2..6937a06a63edd 100644 --- a/tests/baselines/reference/privateNameMethodCallExpression.types +++ b/tests/baselines/reference/privateNameMethodCallExpression.types @@ -71,7 +71,7 @@ class AA { >this.#method2`head${1}middle${2}tail` : void >this.#method2 : (a: any, ...b: any[]) => void >this : this ->`head${1}middle${2}tail` : "head1middle2tail" +>`head${1}middle${2}tail` : string >1 : 1 >2 : 2 @@ -82,7 +82,7 @@ class AA { >this.getInstance : () => AA >this : this >getInstance : () => AA ->`test${1}and${2}` : "test1and2" +>`test${1}and${2}` : string >1 : 1 >2 : 2 @@ -120,7 +120,7 @@ class AA { >this.getInstance : () => AA >this : this >getInstance : () => AA ->`head${1}middle${2}tail` : "head1middle2tail" +>`head${1}middle${2}tail` : string >1 : 1 >2 : 2 } diff --git a/tests/baselines/reference/privateNameReadonly.errors.txt b/tests/baselines/reference/privateNameReadonly.errors.txt index 6cdef381c04aa..a5e430833cbe6 100644 --- a/tests/baselines/reference/privateNameReadonly.errors.txt +++ b/tests/baselines/reference/privateNameReadonly.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,9): error TS2322: Type 'void' is not assignable to type '() => void'. -tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,14): error TS2801: Cannot assign to private method '#bar'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,14): error TS2803: Cannot assign to private method '#bar'. Private methods are not writable. ==== tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts (2 errors) ==== @@ -10,7 +10,7 @@ tests/cases/conformance/classes/members/privateNames/privateNameReadonly.ts(4,14 ~~~~~~~~~ !!! error TS2322: Type 'void' is not assignable to type '() => void'. ~~~~ -!!! error TS2801: Cannot assign to private method '#bar'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#bar'. Private methods are not writable. } } From 23f6c6759a95909d3cacabc5e0549d922ec41e9d Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Fri, 19 Feb 2021 10:00:47 +0200 Subject: [PATCH 41/73] Accept new baseline. --- src/compiler/transformers/classFields.ts | 4 +- .../reference/privateNameAndAny.errors.txt | 27 +++++++----- .../baselines/reference/privateNameAndAny.js | 20 +++++++-- .../reference/privateNameAndAny.symbols | 44 ++++++++++++------- .../reference/privateNameAndAny.types | 18 +++++++- ...ateNameStaticAccessorsCallExpression.types | 4 +- ...privateNameStaticFieldCallExpression.types | 4 +- ...ivateNameStaticMethodAssignment.errors.txt | 20 ++++----- ...rivateNameStaticMethodCallExpression.types | 6 +-- 9 files changed, 98 insertions(+), 49 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index bb7c67585c568..487d2fcd2e4a0 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -337,7 +337,7 @@ namespace ts { if (!shouldTransformPrivateElements && isPrivateIdentifier(node.name)) { // Initializer is elided as the field is initialized in transformConstructor. // We include initalizers for static private fields as there is no simple way to do this emit, - // and nobody is relying on the old assignment semantics for private static fields. + // and nobody is relying on the old assignment semantics for private static fields. return factory.updatePropertyDeclaration( node, /*decorators*/ undefined, @@ -796,7 +796,7 @@ namespace ts { pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions))); } - if (pendingStatements ) { + if (pendingStatements) { if (some(staticProperties)) { addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); } diff --git a/tests/baselines/reference/privateNameAndAny.errors.txt b/tests/baselines/reference/privateNameAndAny.errors.txt index 51c072c43a83e..4f409ed2df5cc 100644 --- a/tests/baselines/reference/privateNameAndAny.errors.txt +++ b/tests/baselines/reference/privateNameAndAny.errors.txt @@ -1,18 +1,25 @@ -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(5,15): error TS2339: Property '#bar' does not exist on type 'any'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(9,9): error TS2571: Object is of type 'unknown'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(10,9): error TS2571: Object is of type 'unknown'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(10,15): error TS2339: Property '#bar' does not exist on type 'any'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(11,9): error TS2571: Object is of type 'unknown'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(14,15): error TS2339: Property '#foo' does not exist on type 'never'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(15,15): error TS2339: Property '#bar' does not exist on type 'never'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(16,15): error TS2339: Property '#foo' does not exist on type 'never'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(8,15): error TS2339: Property '#bar' does not exist on type 'any'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(9,15): error TS2339: Property '#bar' does not exist on type 'any'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(13,9): error TS2571: Object is of type 'unknown'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(14,9): error TS2571: Object is of type 'unknown'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(14,15): error TS2339: Property '#bar' does not exist on type 'any'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(15,9): error TS2571: Object is of type 'unknown'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(18,15): error TS2339: Property '#foo' does not exist on type 'never'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(19,15): error TS2339: Property '#bar' does not exist on type 'never'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(20,15): error TS2339: Property '#foo' does not exist on type 'never'. -==== tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts (8 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts (9 errors) ==== class A { - #foo = true; + #foo = true; + static #baz = 10; + static #m() {} method(thing: any) { thing.#foo; // OK + thing.#m(); + thing.#bar; + ~~~~ +!!! error TS2339: Property '#bar' does not exist on type 'any'. thing.#bar; // Error ~~~~ !!! error TS2339: Property '#bar' does not exist on type 'any'. diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index 4a82505e7078e..db0b146c8db42 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -1,8 +1,12 @@ //// [privateNameAndAny.ts] class A { - #foo = true; + #foo = true; + static #baz = 10; + static #m() {} method(thing: any) { thing.#foo; // OK + thing.#m(); + thing.#bar; thing.#bar; // Error thing.#foo(); } @@ -27,13 +31,22 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _A_foo; +var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; +}; +var _A_foo, _A_baz, _A_m; class A { constructor() { _A_foo.set(this, true); } method(thing) { __classPrivateFieldGet(thing, _A_foo); // OK + __classStaticPrivateMethodGet(thing, A, _A_m).call(// OK + thing); + thing.; thing.; // Error __classPrivateFieldGet(thing, _A_foo).call(// Error thing); @@ -49,5 +62,6 @@ class A { __classPrivateFieldGet(thing, _A_foo).call(thing); } } -_A_foo = new WeakMap(); +_A_foo = new WeakMap(), _A_m = function _A_m() { }; +_A_baz = { value: 10 }; ; diff --git a/tests/baselines/reference/privateNameAndAny.symbols b/tests/baselines/reference/privateNameAndAny.symbols index 5a8c528e2ed9b..ace5ce1d7ef9b 100644 --- a/tests/baselines/reference/privateNameAndAny.symbols +++ b/tests/baselines/reference/privateNameAndAny.symbols @@ -2,47 +2,59 @@ class A { >A : Symbol(A, Decl(privateNameAndAny.ts, 0, 0)) - #foo = true; + #foo = true; >#foo : Symbol(A.#foo, Decl(privateNameAndAny.ts, 0, 9)) + static #baz = 10; +>#baz : Symbol(A.#baz, Decl(privateNameAndAny.ts, 1, 16)) + + static #m() {} +>#m : Symbol(A.#m, Decl(privateNameAndAny.ts, 2, 21)) + method(thing: any) { ->method : Symbol(A.method, Decl(privateNameAndAny.ts, 1, 16)) ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 2, 11)) +>method : Symbol(A.method, Decl(privateNameAndAny.ts, 3, 18)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 4, 11)) thing.#foo; // OK ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 2, 11)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 4, 11)) + + thing.#m(); +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 4, 11)) + + thing.#bar; +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 4, 11)) thing.#bar; // Error ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 2, 11)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 4, 11)) thing.#foo(); ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 2, 11)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 4, 11)) } methodU(thing: unknown) { ->methodU : Symbol(A.methodU, Decl(privateNameAndAny.ts, 6, 5)) ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 7, 12)) +>methodU : Symbol(A.methodU, Decl(privateNameAndAny.ts, 10, 5)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) thing.#foo; ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 7, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) thing.#bar; ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 7, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) thing.#foo(); ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 7, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) } methodN(thing: never) { ->methodN : Symbol(A.methodN, Decl(privateNameAndAny.ts, 11, 5)) ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 12, 12)) +>methodN : Symbol(A.methodN, Decl(privateNameAndAny.ts, 15, 5)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 16, 12)) thing.#foo; ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 12, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 16, 12)) thing.#bar; ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 12, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 16, 12)) thing.#foo(); ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 12, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 16, 12)) } }; diff --git a/tests/baselines/reference/privateNameAndAny.types b/tests/baselines/reference/privateNameAndAny.types index 4216626f5a73d..016debf7df0aa 100644 --- a/tests/baselines/reference/privateNameAndAny.types +++ b/tests/baselines/reference/privateNameAndAny.types @@ -2,16 +2,32 @@ class A { >A : A - #foo = true; + #foo = true; >#foo : boolean >true : true + static #baz = 10; +>#baz : number +>10 : 10 + + static #m() {} +>#m : () => void + method(thing: any) { >method : (thing: any) => void >thing : any thing.#foo; // OK >thing.#foo : any +>thing : any + + thing.#m(); +>thing.#m() : any +>thing.#m : any +>thing : any + + thing.#bar; +>thing.#bar : any >thing : any thing.#bar; // Error diff --git a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.types b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.types index d7b95a9ec70a6..6ad27c928d045 100644 --- a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.types +++ b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.types @@ -72,7 +72,7 @@ class A { >this.#fieldFunc2`head${1}middle${2}tail` : void >this.#fieldFunc2 : (a: any, ...b: any[]) => void >this : typeof A ->`head${1}middle${2}tail` : "head1middle2tail" +>`head${1}middle${2}tail` : string >1 : 1 >2 : 2 @@ -83,7 +83,7 @@ class A { >this.getClass : () => typeof A >this : typeof A >getClass : () => typeof A ->`test${1}and${2}` : "test1and2" +>`test${1}and${2}` : string >1 : 1 >2 : 2 } diff --git a/tests/baselines/reference/privateNameStaticFieldCallExpression.types b/tests/baselines/reference/privateNameStaticFieldCallExpression.types index 320520f14f814..45b26b4edd688 100644 --- a/tests/baselines/reference/privateNameStaticFieldCallExpression.types +++ b/tests/baselines/reference/privateNameStaticFieldCallExpression.types @@ -78,7 +78,7 @@ class A { >A.#fieldFunc2`head${1}middle${2}tail` : void >A.#fieldFunc2 : (a: any, ...b: any[]) => void >A : typeof A ->`head${1}middle${2}tail` : "head1middle2tail" +>`head${1}middle${2}tail` : string >1 : 1 >2 : 2 @@ -89,7 +89,7 @@ class A { >this.getClass : () => typeof A >this : this >getClass : () => typeof A ->`test${1}and${2}` : "test1and2" +>`test${1}and${2}` : string >1 : 1 >2 : 2 } diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.errors.txt b/tests/baselines/reference/privateNameStaticMethodAssignment.errors.txt index 43a2938b6fbf1..7f416f5181be7 100644 --- a/tests/baselines/reference/privateNameStaticMethodAssignment.errors.txt +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(4,12): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(5,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(6,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(7,18): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. -tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(9,11): error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(4,12): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(5,11): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(6,11): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(7,18): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. +tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts(9,11): error TS2803: Cannot assign to private method '#method'. Private methods are not writable. ==== tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssignment.ts (5 errors) ==== @@ -11,20 +11,20 @@ tests/cases/conformance/classes/members/privateNames/privateNameStaticMethodAssi constructor(a: typeof A3, b: any) { A3.#method = () => {} // Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. a.#method = () => { }; // Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. b.#method = () => { } //Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. ({ x: A3.#method } = { x: () => {}}); //Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. let x = A3.#method; b.#method++ //Error, not writable ~~~~~~~ -!!! error TS2801: Cannot assign to private method '#method'. Private methods are not writable. +!!! error TS2803: Cannot assign to private method '#method'. Private methods are not writable. } } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticMethodCallExpression.types b/tests/baselines/reference/privateNameStaticMethodCallExpression.types index 4590b7545a873..09f0ca83fa16c 100644 --- a/tests/baselines/reference/privateNameStaticMethodCallExpression.types +++ b/tests/baselines/reference/privateNameStaticMethodCallExpression.types @@ -71,7 +71,7 @@ class AA { >AA.#method2`head${1}middle${2}tail` : void >AA.#method2 : (a: any, ...b: any[]) => void >AA : typeof AA ->`head${1}middle${2}tail` : "head1middle2tail" +>`head${1}middle${2}tail` : string >1 : 1 >2 : 2 @@ -82,7 +82,7 @@ class AA { >AA.getClass : () => typeof AA >AA : typeof AA >getClass : () => typeof AA ->`test${1}and${2}` : "test1and2" +>`test${1}and${2}` : string >1 : 1 >2 : 2 @@ -120,7 +120,7 @@ class AA { >AA.getClass : () => typeof AA >AA : typeof AA >getClass : () => typeof AA ->`head${1}middle${2}tail` : "head1middle2tail" +>`head${1}middle${2}tail` : string >1 : 1 >2 : 2 } From 374e6f3e40d810caa8a750f448f4d54e0d5b653e Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Fri, 19 Feb 2021 20:14:41 +0200 Subject: [PATCH 42/73] Improved duplicate identifier checks for static private class elements. --- src/compiler/checker.ts | 41 +- src/compiler/diagnosticMessages.json | 6 +- .../privateNameDuplicateField.errors.txt | 677 ++++++++++++-- .../reference/privateNameDuplicateField.js | 866 ++++++++++++++++-- .../privateNameDuplicateField.symbols | 793 ++++++++++++++-- .../reference/privateNameDuplicateField.types | 805 +++++++++++++++- .../reference/privateNamesUnique-3.errors.txt | 4 +- .../privateNames/privateNameDuplicateField.ts | 414 ++++++++- 8 files changed, 3308 insertions(+), 298 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f131a81bd5bab..c96c626c4f91a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -240,6 +240,7 @@ namespace ts { SetAccessor = 2, PropertyAssignment = 4, Method = 8, + PrivateStatic = 16, GetOrSetAccessor = GetAccessor | SetAccessor, PropertyAssignmentOrMethod = PropertyAssignment | Method, } @@ -32131,29 +32132,32 @@ namespace ts { const isStatic = hasSyntacticModifier(member, ModifierFlags.Static); const name = member.name; if (!name) { - return; + continue; } + const isPrivate = isPrivateIdentifier(name); + const isPrivateStatic = isPrivate && isStatic ? DeclarationMeaning.PrivateStatic : 0; const names = - isPrivateIdentifier(name) ? privateIdentifiers : + isPrivate ? privateIdentifiers : isStatic ? staticNames : instanceNames; + const memberName = name && getPropertyNameForPropertyNameNode(name); if (memberName) { switch (member.kind) { case SyntaxKind.GetAccessor: - addName(names, name, memberName, DeclarationMeaning.GetAccessor); + addName(names, name, memberName, DeclarationMeaning.GetAccessor | isPrivateStatic); break; case SyntaxKind.SetAccessor: - addName(names, name, memberName, DeclarationMeaning.SetAccessor); + addName(names, name, memberName, DeclarationMeaning.SetAccessor | isPrivateStatic); break; case SyntaxKind.PropertyDeclaration: - addName(names, name, memberName, DeclarationMeaning.GetOrSetAccessor); + addName(names, name, memberName, DeclarationMeaning.GetOrSetAccessor | isPrivateStatic); break; case SyntaxKind.MethodDeclaration: - addName(names, name, memberName, DeclarationMeaning.Method); + addName(names, name, memberName, DeclarationMeaning.Method | isPrivateStatic); break; } } @@ -32163,16 +32167,25 @@ namespace ts { function addName(names: UnderscoreEscapedMap, location: Node, name: __String, meaning: DeclarationMeaning) { const prev = names.get(name); if (prev) { - if (prev & DeclarationMeaning.Method) { - if (meaning !== DeclarationMeaning.Method) { - error(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location)); - } - } - else if (prev & meaning) { - error(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location)); + // For private identifiers, do not allow mixing of static and instance members with the same name + if((prev & DeclarationMeaning.PrivateStatic) !== (meaning & DeclarationMeaning.PrivateStatic)) { + error(location, Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name, getTextOfNode(location)); } else { - names.set(name, prev | meaning); + const prevIsMethod = !!(prev & DeclarationMeaning.Method); + const isMethod = !!(meaning & DeclarationMeaning.Method); + if (prevIsMethod || isMethod) { + if (prevIsMethod !== isMethod) { + error(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location)); + } + // If this is a method/method duplication is might be an overload, so this will be handled when overloads are considered + } + else if (prev & meaning & ~DeclarationMeaning.PrivateStatic) { + error(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location)); + } + else { + names.set(name, prev | meaning); + } } } else { diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index ff361ffa8f74d..456bd85619c6a 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3264,11 +3264,15 @@ "category": "Error", "code": 2802 }, - "Cannot assign to private method '{0}'. Private methods are not writable.": { "category": "Error", "code": 2803 }, + "Duplicate identifier '{0}'. Static and instance elements cannot share the same private name.": { + "category": "Error", + "code": 2804 + }, + "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", "code": 4000 diff --git a/tests/baselines/reference/privateNameDuplicateField.errors.txt b/tests/baselines/reference/privateNameDuplicateField.errors.txt index c724fd80b6713..d766021845e93 100644 --- a/tests/baselines/reference/privateNameDuplicateField.errors.txt +++ b/tests/baselines/reference/privateNameDuplicateField.errors.txt @@ -1,114 +1,657 @@ -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(3,5): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(7,5): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(8,5): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(13,5): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(14,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(18,5): error TS2393: Duplicate function implementation. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(19,5): error TS2393: Duplicate function implementation. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(24,5): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(25,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(30,5): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(31,5): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(32,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(36,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(37,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(41,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(42,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(46,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(47,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(48,9): error TS2300: Duplicate identifier '#foo'. -tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(49,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(6,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(11,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(12,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(17,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(18,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(23,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(24,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(30,16): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(36,16): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(42,20): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(48,20): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(56,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(56,9): error TS2717: Subsequent property declarations must have the same type. Property '#foo' must be of type '() => void', but here has type 'string'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(61,9): error TS2393: Duplicate function implementation. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(62,9): error TS2393: Duplicate function implementation. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(67,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(68,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(73,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(74,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(80,16): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(86,16): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(92,20): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(98,20): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(107,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(112,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(113,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(118,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(119,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(131,16): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(137,16): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(143,20): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(149,20): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(157,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(162,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(163,9): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(174,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(175,13): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(181,16): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(187,16): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(193,20): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(199,20): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(207,9): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(213,9): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(219,13): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(225,13): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(231,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(236,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(237,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(242,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(243,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(248,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(249,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(257,9): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(263,9): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(269,13): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(275,13): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(281,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(281,16): error TS2717: Subsequent property declarations must have the same type. Property '#foo' must be of type '() => void', but here has type 'string'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(286,16): error TS2393: Duplicate function implementation. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(287,16): error TS2393: Duplicate function implementation. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(292,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(293,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(298,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(299,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(308,9): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(314,9): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(320,13): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(326,13): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(331,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(332,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(337,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(338,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(343,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(344,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(357,9): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(363,9): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(370,13): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(376,13): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(382,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(387,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(388,16): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(399,20): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts(400,20): error TS2300: Duplicate identifier '#foo'. -==== tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts (20 errors) ==== - class A { - #foo = "foo"; - #foo = "foo"; - ~~~~ +==== tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts (83 errors) ==== + function Field() { + + // Error + class A_Field_Field { + #foo = "foo"; + #foo = "foo"; + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - } + } - class A2 { - #foo = "foo"; - ~~~~ + // Error + class A_Field_Method { + #foo = "foo"; + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - #foo() {} - ~~~~ + #foo() { } + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - } - + } - class A3 { - #foo = "foo"; - ~~~~ + // Error + class A_Field_Getter { + #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + get #foo() { return ""} + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - get #foo() { return ""} + } + + // Error + class A_Field_Setter { + #foo = "foo"; ~~~~ !!! error TS2300: Duplicate identifier '#foo'. + set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_Field_StaticField { + #foo = "foo"; + static #foo = "foo"; + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Field_StaticMethod { + #foo = "foo"; + static #foo() { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Field_StaticGetter { + #foo = "foo"; + static get #foo() { return ""} + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Field_StaticSetter { + #foo = "foo"; + static set #foo(value: string) { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } } - class A4 { - #foo() { return ""} - ~~~~ + function Method() { + // Error + class A_Method_Field { + #foo() { } + #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + ~~~~ +!!! error TS2717: Subsequent property declarations must have the same type. Property '#foo' must be of type '() => void', but here has type 'string'. +!!! related TS6203 tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts:55:9: '#foo' was also declared here. + } + + // Error + class A_Method_Method { + #foo() { } + ~~~~ !!! error TS2393: Duplicate function implementation. - #foo() { return ""} - ~~~~ + #foo() { } + ~~~~ !!! error TS2393: Duplicate function implementation. - } - + } - class A5 { - #foo() { return ""} - ~~~~ + // Error + class A_Method_Getter { + #foo() { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + get #foo() { return ""} + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - get #foo() { return ""} + } + + // Error + class A_Method_Setter { + #foo() { } ~~~~ !!! error TS2300: Duplicate identifier '#foo'. + set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_Method_StaticField { + #foo() { } + static #foo = "foo"; + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Method_StaticMethod { + #foo() { } + static #foo() { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Method_StaticGetter { + #foo() { } + static get #foo() { return ""} + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Method_StaticSetter { + #foo() { } + static set #foo(value: string) { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } } - class A6 { - #foo = "foo"; - ~~~~ + function Getter() { + // Error + class A_Getter_Field { + get #foo() { return ""} + #foo = "foo"; + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - #foo() { return ""} - ~~~~ + } + + // Error + class A_Getter_Method { + get #foo() { return ""} + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - get #foo() { return ""} + #foo() { } ~~~~ !!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_Getter_Getter { + get #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + get #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + //OK + class A_Getter_Setter { + get #foo() { return ""} + set #foo(value: string) { } + } + + // Error + class A_Getter_StaticField { + get #foo() { return ""} + static #foo() { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Getter_StaticMethod { + get #foo() { return ""} + static #foo() { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Getter_StaticGetter { + get #foo() { return ""} + static get #foo() { return ""} + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Getter_StaticSetter { + get #foo() { return ""} + static set #foo(value: string) { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } } - class A7 { - get #foo() { return ""; } + function Setter() { + // Error + class A_Setter_Field { + set #foo(value: string) { } + #foo = "foo"; ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - get #foo() { return ""; } + } + + // Error + class A_Setter_Method { + set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + #foo() { } ~~~~ !!! error TS2300: Duplicate identifier '#foo'. + } + + // OK + class A_Setter_Getter { + set #foo(value: string) { } + get #foo() { return ""} + } + + // Error + class A_Setter_Setter { + set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_Setter_StaticField { + set #foo(value: string) { } + static #foo = "foo"; + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Setter_StaticMethod { + set #foo(value: string) { } + static #foo() { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Setter_StaticGetter { + set #foo(value: string) { } + static get #foo() { return ""} + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_Setter_StaticSetter { + set #foo(value: string) { } + static set #foo(value: string) { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } } - class A8 { - set #foo(a: string) {} + function StaticField() { + // Error + class A_StaticField_Field { + static #foo = "foo"; + #foo = "foo"; ~~~~ -!!! error TS2300: Duplicate identifier '#foo'. - set #foo(a: string) {} +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticField_Method { + static #foo = "foo"; + #foo() { } ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticField_Getter { + static #foo = "foo"; + get #foo() { return ""} + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticField_Setter { + static #foo = "foo"; + set #foo(value: string) { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticField_StaticField { + static #foo = "foo"; + static #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_StaticField_StaticMethod { + static #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static #foo() { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_StaticField_StaticGetter { + static #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static get #foo() { return ""} + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_StaticField_StaticSetter { + static #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } } - class A9 { - get #foo() { return ""; } + function StaticMethod() { + // Error + class A_StaticMethod_Field { + static #foo() { } + #foo = "foo"; ~~~~ -!!! error TS2300: Duplicate identifier '#foo'. - set #foo(a: string) {} +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticMethod_Method { + static #foo() { } + #foo() { } ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticMethod_Getter { + static #foo() { } + get #foo() { return ""} + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticMethod_Setter { + static #foo() { } + set #foo(value: string) { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticMethod_StaticField { + static #foo() { } + static #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + ~~~~ +!!! error TS2717: Subsequent property declarations must have the same type. Property '#foo' must be of type '() => void', but here has type 'string'. +!!! related TS6203 tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts:280:16: '#foo' was also declared here. + } + + // Error + class A_StaticMethod_StaticMethod { + static #foo() { } + ~~~~ +!!! error TS2393: Duplicate function implementation. + static #foo() { } + ~~~~ +!!! error TS2393: Duplicate function implementation. + } + + // Error + class A_StaticMethod_StaticGetter { + static #foo() { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static get #foo() { return ""} + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - get #foo() { return ""; } + } + + // Error + class A_StaticMethod_StaticSetter { + static #foo() { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + } + + function StaticGetter() { + + // Error + class A_StaticGetter_Field { + static get #foo() { return ""} + #foo = "foo"; ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticGetter_Method { + static get #foo() { return ""} + #foo() { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticGetter_Getter { + static get #foo() { return ""} + get #foo() { return ""} + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticGetter_Setter { + static get #foo() { return ""} + set #foo(value: string) { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticGetter_StaticField { + static get #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static #foo() { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_StaticGetter_StaticMethod { + static get #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static #foo() { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_StaticGetter_StaticGetter { + static get #foo() { return ""} + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. - set #foo(a: string) {} + static get #foo() { return ""} + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + // OK + class A_StaticGetter_StaticSetter { + static get #foo() { return ""} + static set #foo(value: string) { } + } + } + + function StaticSetter() { + // Error + class A_StaticSetter_Field { + static set #foo(value: string) { } + #foo = "foo"; ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticSetter_Method { + static set #foo(value: string) { } + #foo() { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + + // Error + class A_StaticSetter_Getter { + static set #foo(value: string) { } + get #foo() { return ""} + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticSetter_Setter { + static set #foo(value: string) { } + set #foo(value: string) { } + ~~~~ +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. + } + + // Error + class A_StaticSetter_StaticField { + static set #foo(value: string) { } + static #foo = "foo"; + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // Error + class A_StaticSetter_StaticMethod { + static set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static #foo() { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + } + + // OK + class A_StaticSetter_StaticGetter { + static set #foo(value: string) { } + static get #foo() { return ""} + } + + // Error + class A_StaticSetter_StaticSetter { + static set #foo(value: string) { } + ~~~~ +!!! error TS2300: Duplicate identifier '#foo'. + static set #foo(value: string) { } + ~~~~ !!! error TS2300: Duplicate identifier '#foo'. + } } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index 4120187527a1f..93e0bbe2a5dc7 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -1,111 +1,837 @@ //// [privateNameDuplicateField.ts] -class A { - #foo = "foo"; - #foo = "foo"; -} +function Field() { + + // Error + class A_Field_Field { + #foo = "foo"; + #foo = "foo"; + } + + // Error + class A_Field_Method { + #foo = "foo"; + #foo() { } + } + + // Error + class A_Field_Getter { + #foo = "foo"; + get #foo() { return ""} + } + + // Error + class A_Field_Setter { + #foo = "foo"; + set #foo(value: string) { } + } + + // Error + class A_Field_StaticField { + #foo = "foo"; + static #foo = "foo"; + } + + // Error + class A_Field_StaticMethod { + #foo = "foo"; + static #foo() { } + } -class A2 { - #foo = "foo"; - #foo() {} + // Error + class A_Field_StaticGetter { + #foo = "foo"; + static get #foo() { return ""} + } + + // Error + class A_Field_StaticSetter { + #foo = "foo"; + static set #foo(value: string) { } + } } +function Method() { + // Error + class A_Method_Field { + #foo() { } + #foo = "foo"; + } + + // Error + class A_Method_Method { + #foo() { } + #foo() { } + } + + // Error + class A_Method_Getter { + #foo() { } + get #foo() { return ""} + } + + // Error + class A_Method_Setter { + #foo() { } + set #foo(value: string) { } + } + + // Error + class A_Method_StaticField { + #foo() { } + static #foo = "foo"; + } + + // Error + class A_Method_StaticMethod { + #foo() { } + static #foo() { } + } + + // Error + class A_Method_StaticGetter { + #foo() { } + static get #foo() { return ""} + } -class A3 { - #foo = "foo"; - get #foo() { return ""} + // Error + class A_Method_StaticSetter { + #foo() { } + static set #foo(value: string) { } + } } -class A4 { - #foo() { return ""} - #foo() { return ""} + +function Getter() { + // Error + class A_Getter_Field { + get #foo() { return ""} + #foo = "foo"; + } + + // Error + class A_Getter_Method { + get #foo() { return ""} + #foo() { } + } + + // Error + class A_Getter_Getter { + get #foo() { return ""} + get #foo() { return ""} + } + + //OK + class A_Getter_Setter { + get #foo() { return ""} + set #foo(value: string) { } + } + + // Error + class A_Getter_StaticField { + get #foo() { return ""} + static #foo() { } + } + + // Error + class A_Getter_StaticMethod { + get #foo() { return ""} + static #foo() { } + } + + // Error + class A_Getter_StaticGetter { + get #foo() { return ""} + static get #foo() { return ""} + } + + // Error + class A_Getter_StaticSetter { + get #foo() { return ""} + static set #foo(value: string) { } + } } +function Setter() { + // Error + class A_Setter_Field { + set #foo(value: string) { } + #foo = "foo"; + } + + // Error + class A_Setter_Method { + set #foo(value: string) { } + #foo() { } + } + + // OK + class A_Setter_Getter { + set #foo(value: string) { } + get #foo() { return ""} + } + + // Error + class A_Setter_Setter { + set #foo(value: string) { } + set #foo(value: string) { } + } + + // Error + class A_Setter_StaticField { + set #foo(value: string) { } + static #foo = "foo"; + } + + // Error + class A_Setter_StaticMethod { + set #foo(value: string) { } + static #foo() { } + } + + // Error + class A_Setter_StaticGetter { + set #foo(value: string) { } + static get #foo() { return ""} + } -class A5 { - #foo() { return ""} - get #foo() { return ""} + // Error + class A_Setter_StaticSetter { + set #foo(value: string) { } + static set #foo(value: string) { } + } } +function StaticField() { + // Error + class A_StaticField_Field { + static #foo = "foo"; + #foo = "foo"; + } -class A6 { - #foo = "foo"; - #foo() { return ""} - get #foo() { return ""} + // Error + class A_StaticField_Method { + static #foo = "foo"; + #foo() { } + } + + // Error + class A_StaticField_Getter { + static #foo = "foo"; + get #foo() { return ""} + } + + // Error + class A_StaticField_Setter { + static #foo = "foo"; + set #foo(value: string) { } + } + + // Error + class A_StaticField_StaticField { + static #foo = "foo"; + static #foo = "foo"; + } + + // Error + class A_StaticField_StaticMethod { + static #foo = "foo"; + static #foo() { } + } + + // Error + class A_StaticField_StaticGetter { + static #foo = "foo"; + static get #foo() { return ""} + } + + // Error + class A_StaticField_StaticSetter { + static #foo = "foo"; + static set #foo(value: string) { } + } } -class A7 { - get #foo() { return ""; } - get #foo() { return ""; } +function StaticMethod() { + // Error + class A_StaticMethod_Field { + static #foo() { } + #foo = "foo"; + } + + // Error + class A_StaticMethod_Method { + static #foo() { } + #foo() { } + } + + // Error + class A_StaticMethod_Getter { + static #foo() { } + get #foo() { return ""} + } + + // Error + class A_StaticMethod_Setter { + static #foo() { } + set #foo(value: string) { } + } + + // Error + class A_StaticMethod_StaticField { + static #foo() { } + static #foo = "foo"; + } + + // Error + class A_StaticMethod_StaticMethod { + static #foo() { } + static #foo() { } + } + + // Error + class A_StaticMethod_StaticGetter { + static #foo() { } + static get #foo() { return ""} + } + + // Error + class A_StaticMethod_StaticSetter { + static #foo() { } + static set #foo(value: string) { } + } } -class A8 { - set #foo(a: string) {} - set #foo(a: string) {} +function StaticGetter() { + + // Error + class A_StaticGetter_Field { + static get #foo() { return ""} + #foo = "foo"; + } + + // Error + class A_StaticGetter_Method { + static get #foo() { return ""} + #foo() { } + } + + // Error + class A_StaticGetter_Getter { + static get #foo() { return ""} + get #foo() { return ""} + } + + // Error + class A_StaticGetter_Setter { + static get #foo() { return ""} + set #foo(value: string) { } + } + + // Error + class A_StaticGetter_StaticField { + static get #foo() { return ""} + static #foo() { } + } + + // Error + class A_StaticGetter_StaticMethod { + static get #foo() { return ""} + static #foo() { } + } + + // Error + class A_StaticGetter_StaticGetter { + static get #foo() { return ""} + static get #foo() { return ""} + } + // OK + class A_StaticGetter_StaticSetter { + static get #foo() { return ""} + static set #foo(value: string) { } + } } -class A9 { - get #foo() { return ""; } - set #foo(a: string) {} - get #foo() { return ""; } - set #foo(a: string) {} +function StaticSetter() { + // Error + class A_StaticSetter_Field { + static set #foo(value: string) { } + #foo = "foo"; + } + + // Error + class A_StaticSetter_Method { + static set #foo(value: string) { } + #foo() { } + } + + + // Error + class A_StaticSetter_Getter { + static set #foo(value: string) { } + get #foo() { return ""} + } + + // Error + class A_StaticSetter_Setter { + static set #foo(value: string) { } + set #foo(value: string) { } + } + + // Error + class A_StaticSetter_StaticField { + static set #foo(value: string) { } + static #foo = "foo"; + } + + // Error + class A_StaticSetter_StaticMethod { + static set #foo(value: string) { } + static #foo() { } + } + + // OK + class A_StaticSetter_StaticGetter { + static set #foo(value: string) { } + static get #foo() { return ""} + } + + // Error + class A_StaticSetter_StaticSetter { + static set #foo(value: string) { } + static set #foo(value: string) { } + } } //// [privateNameDuplicateField.js] "use strict"; -var _A_foo, _A_foo_1, _A2_instances, _A2_foo, _A2_foo_1, _A3_instances, _A3_foo, _A3_foo_get, _A4_instances, _A4_foo, _A4_foo_1, _A5_instances, _A5_foo, _A5_foo_get, _A6_instances, _A6_foo, _A6_foo_1, _A6_foo_get, _A7_instances, _A7_foo_get, _A7_foo_get_1, _A8_instances, _A8_foo_set, _A8_foo_set_1, _A9_instances, _A9_foo_get, _A9_foo_set, _A9_foo_get_1, _A9_foo_set_1; -class A { - constructor() { - _A_foo_1.set(this, "foo"); - _A_foo_1.set(this, "foo"); +function Field() { + var _A_Field_Field_foo, _A_Field_Field_foo_1, _A_Field_Method_instances, _A_Field_Method_foo, _A_Field_Method_foo_1, _A_Field_Getter_instances, _A_Field_Getter_foo, _A_Field_Getter_foo_get, _A_Field_Setter_instances, _A_Field_Setter_foo, _A_Field_Setter_foo_set, _A_Field_StaticField_foo, _A_Field_StaticField_foo_1, _A_Field_StaticMethod_foo, _A_Field_StaticMethod_foo_1, _A_Field_StaticGetter_foo, _A_Field_StaticGetter_foo_get, _A_Field_StaticSetter_foo, _A_Field_StaticSetter_foo_set; + // Error + class A_Field_Field { + constructor() { + _A_Field_Field_foo_1.set(this, "foo"); + _A_Field_Field_foo_1.set(this, "foo"); + } } -} -_A_foo = new WeakMap(), _A_foo_1 = new WeakMap(); -class A2 { - constructor() { - _A2_instances.add(this); + _A_Field_Field_foo = new WeakMap(), _A_Field_Field_foo_1 = new WeakMap(); + // Error + class A_Field_Method { + constructor() { + _A_Field_Method_instances.add(this); + } + } + _A_Field_Method_foo = new WeakMap(), _A_Field_Method_instances = new WeakSet(), _A_Field_Method_foo_1 = function _A_Field_Method_foo_1() { }; + // Error + class A_Field_Getter { + constructor() { + _A_Field_Getter_instances.add(this); + } + } + _A_Field_Getter_foo = new WeakMap(), _A_Field_Getter_instances = new WeakSet(), _A_Field_Getter_foo_get = function _A_Field_Getter_foo_get() { return ""; }; + // Error + class A_Field_Setter { + constructor() { + _A_Field_Setter_instances.add(this); + } + } + _A_Field_Setter_foo = new WeakMap(), _A_Field_Setter_instances = new WeakSet(), _A_Field_Setter_foo_set = function _A_Field_Setter_foo_set(value) { }; + // Error + class A_Field_StaticField { + constructor() { + _A_Field_StaticField_foo_1 = { value: "foo" }; + } + } + _A_Field_StaticField_foo = new WeakMap(); + _A_Field_StaticField_foo_1 = { value: "foo" }; + // Error + class A_Field_StaticMethod { + constructor() { + } + } + _A_Field_StaticMethod_foo = new WeakMap(), _A_Field_StaticMethod_foo_1 = function _A_Field_StaticMethod_foo_1() { }; + // Error + class A_Field_StaticGetter { + constructor() { + } + } + _A_Field_StaticGetter_foo = new WeakMap(), _A_Field_StaticGetter_foo_get = function _A_Field_StaticGetter_foo_get() { return ""; }; + // Error + class A_Field_StaticSetter { + constructor() { + } } + _A_Field_StaticSetter_foo = new WeakMap(), _A_Field_StaticSetter_foo_set = function _A_Field_StaticSetter_foo_set(value) { }; } -_A2_foo = new WeakMap(), _A2_instances = new WeakSet(), _A2_foo_1 = function _A2_foo_1() { }; -class A3 { - constructor() { - _A3_instances.add(this); +function Method() { + var _A_Method_Field_instances, _A_Method_Field_foo, _A_Method_Field_foo_1, _A_Method_Method_instances, _A_Method_Method_foo, _A_Method_Method_foo_1, _A_Method_Getter_instances, _A_Method_Getter_foo, _A_Method_Getter_foo_get, _A_Method_Setter_instances, _A_Method_Setter_foo, _A_Method_Setter_foo_set, _A_Method_StaticField_instances, _A_Method_StaticField_foo, _A_Method_StaticField_foo_1, _A_Method_StaticMethod_instances, _A_Method_StaticMethod_foo, _A_Method_StaticMethod_foo_1, _A_Method_StaticGetter_instances, _A_Method_StaticGetter_foo, _A_Method_StaticGetter_foo_get, _A_Method_StaticSetter_instances, _A_Method_StaticSetter_foo, _A_Method_StaticSetter_foo_set; + // Error + class A_Method_Field { + constructor() { + _A_Method_Field_instances.add(this); + _A_Method_Field_foo_1.set(this, "foo"); + } + } + _A_Method_Field_foo_1 = new WeakMap(), _A_Method_Field_instances = new WeakSet(); + // Error + class A_Method_Method { + constructor() { + _A_Method_Method_instances.add(this); + } + } + _A_Method_Method_instances = new WeakSet(), _A_Method_Method_foo_1 = function _A_Method_Method_foo_1() { }, _A_Method_Method_foo_1 = function _A_Method_Method_foo_1() { }; + // Error + class A_Method_Getter { + constructor() { + _A_Method_Getter_instances.add(this); + } + } + _A_Method_Getter_instances = new WeakSet(), _A_Method_Getter_foo_get = function _A_Method_Getter_foo_get() { return ""; }; + // Error + class A_Method_Setter { + constructor() { + _A_Method_Setter_instances.add(this); + } + } + _A_Method_Setter_instances = new WeakSet(), _A_Method_Setter_foo_set = function _A_Method_Setter_foo_set(value) { }; + // Error + class A_Method_StaticField { + constructor() { + _A_Method_StaticField_instances.add(this); + } + } + _A_Method_StaticField_instances = new WeakSet(); + _A_Method_StaticField_foo_1 = { value: "foo" }; + // Error + class A_Method_StaticMethod { + constructor() { + _A_Method_StaticMethod_instances.add(this); + } + } + _A_Method_StaticMethod_instances = new WeakSet(), _A_Method_StaticMethod_foo_1 = function _A_Method_StaticMethod_foo_1() { }, _A_Method_StaticMethod_foo_1 = function _A_Method_StaticMethod_foo_1() { }; + // Error + class A_Method_StaticGetter { + constructor() { + _A_Method_StaticGetter_instances.add(this); + } + } + _A_Method_StaticGetter_instances = new WeakSet(), _A_Method_StaticGetter_foo_get = function _A_Method_StaticGetter_foo_get() { return ""; }; + // Error + class A_Method_StaticSetter { + constructor() { + _A_Method_StaticSetter_instances.add(this); + } } + _A_Method_StaticSetter_instances = new WeakSet(), _A_Method_StaticSetter_foo_set = function _A_Method_StaticSetter_foo_set(value) { }; } -_A3_foo = new WeakMap(), _A3_instances = new WeakSet(), _A3_foo_get = function _A3_foo_get() { return ""; }; -class A4 { - constructor() { - _A4_instances.add(this); +function Getter() { + var _A_Getter_Field_instances, _A_Getter_Field_foo_get, _A_Getter_Field_foo, _A_Getter_Method_instances, _A_Getter_Method_foo_get, _A_Getter_Method_foo, _A_Getter_Getter_instances, _A_Getter_Getter_foo_get, _A_Getter_Getter_foo_get_1, _A_Getter_Setter_instances, _A_Getter_Setter_foo_get, _A_Getter_Setter_foo_set, _A_Getter_StaticField_instances, _A_Getter_StaticField_foo_get, _A_Getter_StaticField_foo, _A_Getter_StaticMethod_instances, _A_Getter_StaticMethod_foo_get, _A_Getter_StaticMethod_foo, _A_Getter_StaticGetter_instances, _A_Getter_StaticGetter_foo_get, _A_Getter_StaticGetter_foo_get_1, _A_Getter_StaticSetter_instances, _A_Getter_StaticSetter_foo_get, _A_Getter_StaticSetter_foo_set; + // Error + class A_Getter_Field { + constructor() { + _A_Getter_Field_instances.add(this); + _A_Getter_Field_foo.set(this, "foo"); + } } + _A_Getter_Field_foo = new WeakMap(), _A_Getter_Field_instances = new WeakSet(); + // Error + class A_Getter_Method { + constructor() { + _A_Getter_Method_instances.add(this); + } + } + _A_Getter_Method_instances = new WeakSet(), _A_Getter_Method_foo = function _A_Getter_Method_foo() { return ""; }, _A_Getter_Method_foo = function _A_Getter_Method_foo() { }; + // Error + class A_Getter_Getter { + constructor() { + _A_Getter_Getter_instances.add(this); + } + } + _A_Getter_Getter_instances = new WeakSet(), _A_Getter_Getter_foo_get_1 = function _A_Getter_Getter_foo_get_1() { return ""; }, _A_Getter_Getter_foo_get_1 = function _A_Getter_Getter_foo_get_1() { return ""; }; + //OK + class A_Getter_Setter { + constructor() { + _A_Getter_Setter_instances.add(this); + } + } + _A_Getter_Setter_instances = new WeakSet(), _A_Getter_Setter_foo_get = function _A_Getter_Setter_foo_get() { return ""; }, _A_Getter_Setter_foo_set = function _A_Getter_Setter_foo_set(value) { }; + // Error + class A_Getter_StaticField { + constructor() { + _A_Getter_StaticField_instances.add(this); + } + } + _A_Getter_StaticField_instances = new WeakSet(), _A_Getter_StaticField_foo = function _A_Getter_StaticField_foo() { return ""; }, _A_Getter_StaticField_foo = function _A_Getter_StaticField_foo() { }; + // Error + class A_Getter_StaticMethod { + constructor() { + _A_Getter_StaticMethod_instances.add(this); + } + } + _A_Getter_StaticMethod_instances = new WeakSet(), _A_Getter_StaticMethod_foo = function _A_Getter_StaticMethod_foo() { return ""; }, _A_Getter_StaticMethod_foo = function _A_Getter_StaticMethod_foo() { }; + // Error + class A_Getter_StaticGetter { + constructor() { + _A_Getter_StaticGetter_instances.add(this); + } + } + _A_Getter_StaticGetter_instances = new WeakSet(), _A_Getter_StaticGetter_foo_get_1 = function _A_Getter_StaticGetter_foo_get_1() { return ""; }, _A_Getter_StaticGetter_foo_get_1 = function _A_Getter_StaticGetter_foo_get_1() { return ""; }; + // Error + class A_Getter_StaticSetter { + constructor() { + _A_Getter_StaticSetter_instances.add(this); + } + } + _A_Getter_StaticSetter_instances = new WeakSet(), _A_Getter_StaticSetter_foo_set = function _A_Getter_StaticSetter_foo_set(value) { }; } -_A4_instances = new WeakSet(), _A4_foo_1 = function _A4_foo_1() { return ""; }, _A4_foo_1 = function _A4_foo_1() { return ""; }; -class A5 { - constructor() { - _A5_instances.add(this); +function Setter() { + var _A_Setter_Field_instances, _A_Setter_Field_foo_set, _A_Setter_Field_foo, _A_Setter_Method_instances, _A_Setter_Method_foo_set, _A_Setter_Method_foo, _A_Setter_Getter_instances, _A_Setter_Getter_foo_set, _A_Setter_Getter_foo_get, _A_Setter_Setter_instances, _A_Setter_Setter_foo_set, _A_Setter_Setter_foo_set_1, _A_Setter_StaticField_instances, _A_Setter_StaticField_foo_set, _A_Setter_StaticField_foo, _A_Setter_StaticMethod_instances, _A_Setter_StaticMethod_foo_set, _A_Setter_StaticMethod_foo, _A_Setter_StaticGetter_instances, _A_Setter_StaticGetter_foo_set, _A_Setter_StaticGetter_foo_get, _A_Setter_StaticSetter_instances, _A_Setter_StaticSetter_foo_set, _A_Setter_StaticSetter_foo_set_1; + // Error + class A_Setter_Field { + constructor() { + _A_Setter_Field_instances.add(this); + _A_Setter_Field_foo.set(this, "foo"); + } + } + _A_Setter_Field_foo = new WeakMap(), _A_Setter_Field_instances = new WeakSet(); + // Error + class A_Setter_Method { + constructor() { + _A_Setter_Method_instances.add(this); + } + } + _A_Setter_Method_instances = new WeakSet(), _A_Setter_Method_foo = function _A_Setter_Method_foo(value) { }, _A_Setter_Method_foo = function _A_Setter_Method_foo() { }; + // OK + class A_Setter_Getter { + constructor() { + _A_Setter_Getter_instances.add(this); + } + } + _A_Setter_Getter_instances = new WeakSet(), _A_Setter_Getter_foo_set = function _A_Setter_Getter_foo_set(value) { }, _A_Setter_Getter_foo_get = function _A_Setter_Getter_foo_get() { return ""; }; + // Error + class A_Setter_Setter { + constructor() { + _A_Setter_Setter_instances.add(this); + } + } + _A_Setter_Setter_instances = new WeakSet(), _A_Setter_Setter_foo_set_1 = function _A_Setter_Setter_foo_set_1(value) { }, _A_Setter_Setter_foo_set_1 = function _A_Setter_Setter_foo_set_1(value) { }; + // Error + class A_Setter_StaticField { + constructor() { + _A_Setter_StaticField_instances.add(this); + } + } + _A_Setter_StaticField_instances = new WeakSet(); + _A_Setter_StaticField_foo = { value: "foo" }; + // Error + class A_Setter_StaticMethod { + constructor() { + _A_Setter_StaticMethod_instances.add(this); + } + } + _A_Setter_StaticMethod_instances = new WeakSet(), _A_Setter_StaticMethod_foo = function _A_Setter_StaticMethod_foo(value) { }, _A_Setter_StaticMethod_foo = function _A_Setter_StaticMethod_foo() { }; + // Error + class A_Setter_StaticGetter { + constructor() { + _A_Setter_StaticGetter_instances.add(this); + } + } + _A_Setter_StaticGetter_instances = new WeakSet(), _A_Setter_StaticGetter_foo_get = function _A_Setter_StaticGetter_foo_get() { return ""; }; + // Error + class A_Setter_StaticSetter { + constructor() { + _A_Setter_StaticSetter_instances.add(this); + } } + _A_Setter_StaticSetter_instances = new WeakSet(), _A_Setter_StaticSetter_foo_set_1 = function _A_Setter_StaticSetter_foo_set_1(value) { }, _A_Setter_StaticSetter_foo_set_1 = function _A_Setter_StaticSetter_foo_set_1(value) { }; } -_A5_instances = new WeakSet(), _A5_foo_get = function _A5_foo_get() { return ""; }; -class A6 { - constructor() { - _A6_instances.add(this); +function StaticField() { + var _A_StaticField_Field_foo, _A_StaticField_Field_foo_1, _A_StaticField_Method_instances, _A_StaticField_Method_foo, _A_StaticField_Method_foo_1, _A_StaticField_Getter_instances, _A_StaticField_Getter_foo, _A_StaticField_Getter_foo_get, _A_StaticField_Setter_instances, _A_StaticField_Setter_foo, _A_StaticField_Setter_foo_set, _A_StaticField_StaticField_foo, _A_StaticField_StaticField_foo_1, _A_StaticField_StaticMethod_foo, _A_StaticField_StaticMethod_foo_1, _A_StaticField_StaticGetter_foo, _A_StaticField_StaticGetter_foo_get, _A_StaticField_StaticSetter_foo, _A_StaticField_StaticSetter_foo_set; + // Error + class A_StaticField_Field { + constructor() { + _A_StaticField_Field_foo_1.set(this, "foo"); + } } + _A_StaticField_Field_foo_1 = new WeakMap(); + _A_StaticField_Field_foo_1.set(A_StaticField_Field, "foo"); + // Error + class A_StaticField_Method { + constructor() { + _A_StaticField_Method_instances.add(this); + } + } + _A_StaticField_Method_instances = new WeakSet(), _A_StaticField_Method_foo_1 = function _A_StaticField_Method_foo_1() { }; + // Error + class A_StaticField_Getter { + constructor() { + _A_StaticField_Getter_instances.add(this); + } + } + _A_StaticField_Getter_instances = new WeakSet(), _A_StaticField_Getter_foo_get = function _A_StaticField_Getter_foo_get() { return ""; }; + // Error + class A_StaticField_Setter { + constructor() { + _A_StaticField_Setter_instances.add(this); + } + } + _A_StaticField_Setter_instances = new WeakSet(), _A_StaticField_Setter_foo_set = function _A_StaticField_Setter_foo_set(value) { }; + // Error + class A_StaticField_StaticField { + } + _A_StaticField_StaticField_foo_1 = { value: "foo" }; + _A_StaticField_StaticField_foo_1 = { value: "foo" }; + // Error + class A_StaticField_StaticMethod { + } + _A_StaticField_StaticMethod_foo_1 = function _A_StaticField_StaticMethod_foo_1() { }; + // Error + class A_StaticField_StaticGetter { + } + _A_StaticField_StaticGetter_foo_get = function _A_StaticField_StaticGetter_foo_get() { return ""; }; + // Error + class A_StaticField_StaticSetter { + } + _A_StaticField_StaticSetter_foo_set = function _A_StaticField_StaticSetter_foo_set(value) { }; } -_A6_foo = new WeakMap(), _A6_instances = new WeakSet(), _A6_foo_get = function _A6_foo_get() { return ""; }; -class A7 { - constructor() { - _A7_instances.add(this); +function StaticMethod() { + var _A_StaticMethod_Field_foo, _A_StaticMethod_Field_foo_1, _A_StaticMethod_Method_instances, _A_StaticMethod_Method_foo, _A_StaticMethod_Method_foo_1, _A_StaticMethod_Getter_instances, _A_StaticMethod_Getter_foo, _A_StaticMethod_Getter_foo_get, _A_StaticMethod_Setter_instances, _A_StaticMethod_Setter_foo, _A_StaticMethod_Setter_foo_set, _A_StaticMethod_StaticField_foo, _A_StaticMethod_StaticField_foo_1, _A_StaticMethod_StaticMethod_foo, _A_StaticMethod_StaticMethod_foo_1, _A_StaticMethod_StaticGetter_foo, _A_StaticMethod_StaticGetter_foo_get, _A_StaticMethod_StaticSetter_foo, _A_StaticMethod_StaticSetter_foo_set; + // Error + class A_StaticMethod_Field { + constructor() { + _A_StaticMethod_Field_foo_1.set(this, "foo"); + } + } + _A_StaticMethod_Field_foo_1 = new WeakMap(); + // Error + class A_StaticMethod_Method { + constructor() { + _A_StaticMethod_Method_instances.add(this); + } + } + _A_StaticMethod_Method_instances = new WeakSet(), _A_StaticMethod_Method_foo_1 = function _A_StaticMethod_Method_foo_1() { }, _A_StaticMethod_Method_foo_1 = function _A_StaticMethod_Method_foo_1() { }; + // Error + class A_StaticMethod_Getter { + constructor() { + _A_StaticMethod_Getter_instances.add(this); + } + } + _A_StaticMethod_Getter_instances = new WeakSet(), _A_StaticMethod_Getter_foo_get = function _A_StaticMethod_Getter_foo_get() { return ""; }; + // Error + class A_StaticMethod_Setter { + constructor() { + _A_StaticMethod_Setter_instances.add(this); + } + } + _A_StaticMethod_Setter_instances = new WeakSet(), _A_StaticMethod_Setter_foo_set = function _A_StaticMethod_Setter_foo_set(value) { }; + // Error + class A_StaticMethod_StaticField { + } + _A_StaticMethod_StaticField_foo_1 = { value: "foo" }; + // Error + class A_StaticMethod_StaticMethod { + } + _A_StaticMethod_StaticMethod_foo_1 = function _A_StaticMethod_StaticMethod_foo_1() { }, _A_StaticMethod_StaticMethod_foo_1 = function _A_StaticMethod_StaticMethod_foo_1() { }; + // Error + class A_StaticMethod_StaticGetter { + } + _A_StaticMethod_StaticGetter_foo_get = function _A_StaticMethod_StaticGetter_foo_get() { return ""; }; + // Error + class A_StaticMethod_StaticSetter { } + _A_StaticMethod_StaticSetter_foo_set = function _A_StaticMethod_StaticSetter_foo_set(value) { }; } -_A7_instances = new WeakSet(), _A7_foo_get_1 = function _A7_foo_get_1() { return ""; }, _A7_foo_get_1 = function _A7_foo_get_1() { return ""; }; -class A8 { - constructor() { - _A8_instances.add(this); +function StaticGetter() { + var _A_StaticGetter_Field_foo_get, _A_StaticGetter_Field_foo, _A_StaticGetter_Method_instances, _A_StaticGetter_Method_foo_get, _A_StaticGetter_Method_foo, _A_StaticGetter_Getter_instances, _A_StaticGetter_Getter_foo_get, _A_StaticGetter_Getter_foo_get_1, _A_StaticGetter_Setter_instances, _A_StaticGetter_Setter_foo_get, _A_StaticGetter_Setter_foo_set, _A_StaticGetter_StaticField_foo_get, _A_StaticGetter_StaticField_foo, _A_StaticGetter_StaticMethod_foo_get, _A_StaticGetter_StaticMethod_foo, _A_StaticGetter_StaticGetter_foo_get, _A_StaticGetter_StaticGetter_foo_get_1, _A_StaticGetter_StaticSetter_foo_get, _A_StaticGetter_StaticSetter_foo_set; + // Error + class A_StaticGetter_Field { + constructor() { + _A_StaticGetter_Field_foo.set(this, "foo"); + } } + _A_StaticGetter_Field_foo = new WeakMap(); + // Error + class A_StaticGetter_Method { + constructor() { + _A_StaticGetter_Method_instances.add(this); + } + } + _A_StaticGetter_Method_instances = new WeakSet(), _A_StaticGetter_Method_foo = function _A_StaticGetter_Method_foo() { return ""; }, _A_StaticGetter_Method_foo = function _A_StaticGetter_Method_foo() { }; + // Error + class A_StaticGetter_Getter { + constructor() { + _A_StaticGetter_Getter_instances.add(this); + } + } + _A_StaticGetter_Getter_instances = new WeakSet(), _A_StaticGetter_Getter_foo_get_1 = function _A_StaticGetter_Getter_foo_get_1() { return ""; }, _A_StaticGetter_Getter_foo_get_1 = function _A_StaticGetter_Getter_foo_get_1() { return ""; }; + // Error + class A_StaticGetter_Setter { + constructor() { + _A_StaticGetter_Setter_instances.add(this); + } + } + _A_StaticGetter_Setter_instances = new WeakSet(), _A_StaticGetter_Setter_foo_set = function _A_StaticGetter_Setter_foo_set(value) { }; + // Error + class A_StaticGetter_StaticField { + } + _A_StaticGetter_StaticField_foo = function _A_StaticGetter_StaticField_foo() { return ""; }, _A_StaticGetter_StaticField_foo = function _A_StaticGetter_StaticField_foo() { }; + // Error + class A_StaticGetter_StaticMethod { + } + _A_StaticGetter_StaticMethod_foo = function _A_StaticGetter_StaticMethod_foo() { return ""; }, _A_StaticGetter_StaticMethod_foo = function _A_StaticGetter_StaticMethod_foo() { }; + // Error + class A_StaticGetter_StaticGetter { + } + _A_StaticGetter_StaticGetter_foo_get_1 = function _A_StaticGetter_StaticGetter_foo_get_1() { return ""; }, _A_StaticGetter_StaticGetter_foo_get_1 = function _A_StaticGetter_StaticGetter_foo_get_1() { return ""; }; + // OK + class A_StaticGetter_StaticSetter { + } + _A_StaticGetter_StaticSetter_foo_get = function _A_StaticGetter_StaticSetter_foo_get() { return ""; }, _A_StaticGetter_StaticSetter_foo_set = function _A_StaticGetter_StaticSetter_foo_set(value) { }; } -_A8_instances = new WeakSet(), _A8_foo_set_1 = function _A8_foo_set_1(a) { }, _A8_foo_set_1 = function _A8_foo_set_1(a) { }; -class A9 { - constructor() { - _A9_instances.add(this); +function StaticSetter() { + var _A_StaticSetter_Field_foo_set, _A_StaticSetter_Field_foo, _A_StaticSetter_Method_instances, _A_StaticSetter_Method_foo_set, _A_StaticSetter_Method_foo, _A_StaticSetter_Getter_instances, _A_StaticSetter_Getter_foo_set, _A_StaticSetter_Getter_foo_get, _A_StaticSetter_Setter_instances, _A_StaticSetter_Setter_foo_set, _A_StaticSetter_Setter_foo_set_1, _A_StaticSetter_StaticField_foo_set, _A_StaticSetter_StaticField_foo, _A_StaticSetter_StaticMethod_foo_set, _A_StaticSetter_StaticMethod_foo, _A_StaticSetter_StaticGetter_foo_set, _A_StaticSetter_StaticGetter_foo_get, _A_StaticSetter_StaticSetter_foo_set, _A_StaticSetter_StaticSetter_foo_set_1; + // Error + class A_StaticSetter_Field { + constructor() { + _A_StaticSetter_Field_foo.set(this, "foo"); + } + } + _A_StaticSetter_Field_foo = new WeakMap(); + // Error + class A_StaticSetter_Method { + constructor() { + _A_StaticSetter_Method_instances.add(this); + } + } + _A_StaticSetter_Method_instances = new WeakSet(), _A_StaticSetter_Method_foo = function _A_StaticSetter_Method_foo(value) { }, _A_StaticSetter_Method_foo = function _A_StaticSetter_Method_foo() { }; + // Error + class A_StaticSetter_Getter { + constructor() { + _A_StaticSetter_Getter_instances.add(this); + } + } + _A_StaticSetter_Getter_instances = new WeakSet(), _A_StaticSetter_Getter_foo_get = function _A_StaticSetter_Getter_foo_get() { return ""; }; + // Error + class A_StaticSetter_Setter { + constructor() { + _A_StaticSetter_Setter_instances.add(this); + } + } + _A_StaticSetter_Setter_instances = new WeakSet(), _A_StaticSetter_Setter_foo_set_1 = function _A_StaticSetter_Setter_foo_set_1(value) { }, _A_StaticSetter_Setter_foo_set_1 = function _A_StaticSetter_Setter_foo_set_1(value) { }; + // Error + class A_StaticSetter_StaticField { + } + _A_StaticSetter_StaticField_foo = { value: "foo" }; + // Error + class A_StaticSetter_StaticMethod { + } + _A_StaticSetter_StaticMethod_foo = function _A_StaticSetter_StaticMethod_foo(value) { }, _A_StaticSetter_StaticMethod_foo = function _A_StaticSetter_StaticMethod_foo() { }; + // OK + class A_StaticSetter_StaticGetter { + } + _A_StaticSetter_StaticGetter_foo_set = function _A_StaticSetter_StaticGetter_foo_set(value) { }, _A_StaticSetter_StaticGetter_foo_get = function _A_StaticSetter_StaticGetter_foo_get() { return ""; }; + // Error + class A_StaticSetter_StaticSetter { } + _A_StaticSetter_StaticSetter_foo_set_1 = function _A_StaticSetter_StaticSetter_foo_set_1(value) { }, _A_StaticSetter_StaticSetter_foo_set_1 = function _A_StaticSetter_StaticSetter_foo_set_1(value) { }; } -_A9_instances = new WeakSet(), _A9_foo_get_1 = function _A9_foo_get_1() { return ""; }, _A9_foo_set_1 = function _A9_foo_set_1(a) { }, _A9_foo_get_1 = function _A9_foo_get_1() { return ""; }, _A9_foo_set_1 = function _A9_foo_set_1(a) { }; diff --git a/tests/baselines/reference/privateNameDuplicateField.symbols b/tests/baselines/reference/privateNameDuplicateField.symbols index bc037e01e8119..eb8a982581ed2 100644 --- a/tests/baselines/reference/privateNameDuplicateField.symbols +++ b/tests/baselines/reference/privateNameDuplicateField.symbols @@ -1,107 +1,770 @@ === tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts === -class A { ->A : Symbol(A, Decl(privateNameDuplicateField.ts, 0, 0)) +function Field() { +>Field : Symbol(Field, Decl(privateNameDuplicateField.ts, 0, 0)) - #foo = "foo"; ->#foo : Symbol(A.#foo, Decl(privateNameDuplicateField.ts, 0, 9), Decl(privateNameDuplicateField.ts, 1, 17)) + // Error + class A_Field_Field { +>A_Field_Field : Symbol(A_Field_Field, Decl(privateNameDuplicateField.ts, 0, 18)) - #foo = "foo"; ->#foo : Symbol(A.#foo, Decl(privateNameDuplicateField.ts, 0, 9), Decl(privateNameDuplicateField.ts, 1, 17)) -} + #foo = "foo"; +>#foo : Symbol(A_Field_Field.#foo, Decl(privateNameDuplicateField.ts, 3, 25), Decl(privateNameDuplicateField.ts, 4, 21)) + + #foo = "foo"; +>#foo : Symbol(A_Field_Field.#foo, Decl(privateNameDuplicateField.ts, 3, 25), Decl(privateNameDuplicateField.ts, 4, 21)) + } + + // Error + class A_Field_Method { +>A_Field_Method : Symbol(A_Field_Method, Decl(privateNameDuplicateField.ts, 6, 5)) + + #foo = "foo"; +>#foo : Symbol(A_Field_Method.#foo, Decl(privateNameDuplicateField.ts, 9, 26)) + + #foo() { } +>#foo : Symbol(A_Field_Method.#foo, Decl(privateNameDuplicateField.ts, 10, 21)) + } + + // Error + class A_Field_Getter { +>A_Field_Getter : Symbol(A_Field_Getter, Decl(privateNameDuplicateField.ts, 12, 5)) + + #foo = "foo"; +>#foo : Symbol(A_Field_Getter.#foo, Decl(privateNameDuplicateField.ts, 15, 26)) + + get #foo() { return ""} +>#foo : Symbol(A_Field_Getter.#foo, Decl(privateNameDuplicateField.ts, 16, 21)) + } + + // Error + class A_Field_Setter { +>A_Field_Setter : Symbol(A_Field_Setter, Decl(privateNameDuplicateField.ts, 18, 5)) + + #foo = "foo"; +>#foo : Symbol(A_Field_Setter.#foo, Decl(privateNameDuplicateField.ts, 21, 26)) + + set #foo(value: string) { } +>#foo : Symbol(A_Field_Setter.#foo, Decl(privateNameDuplicateField.ts, 22, 21)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 23, 17)) + } -class A2 { ->A2 : Symbol(A2, Decl(privateNameDuplicateField.ts, 3, 1)) + // Error + class A_Field_StaticField { +>A_Field_StaticField : Symbol(A_Field_StaticField, Decl(privateNameDuplicateField.ts, 24, 5)) - #foo = "foo"; ->#foo : Symbol(A2.#foo, Decl(privateNameDuplicateField.ts, 5, 10)) + #foo = "foo"; +>#foo : Symbol(A_Field_StaticField.#foo, Decl(privateNameDuplicateField.ts, 27, 31)) - #foo() {} ->#foo : Symbol(A2.#foo, Decl(privateNameDuplicateField.ts, 6, 17)) + static #foo = "foo"; +>#foo : Symbol(A_Field_StaticField.#foo, Decl(privateNameDuplicateField.ts, 28, 21)) + } + + // Error + class A_Field_StaticMethod { +>A_Field_StaticMethod : Symbol(A_Field_StaticMethod, Decl(privateNameDuplicateField.ts, 30, 5)) + + #foo = "foo"; +>#foo : Symbol(A_Field_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 33, 32)) + + static #foo() { } +>#foo : Symbol(A_Field_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 34, 21)) + } + + // Error + class A_Field_StaticGetter { +>A_Field_StaticGetter : Symbol(A_Field_StaticGetter, Decl(privateNameDuplicateField.ts, 36, 5)) + + #foo = "foo"; +>#foo : Symbol(A_Field_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 39, 32)) + + static get #foo() { return ""} +>#foo : Symbol(A_Field_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 40, 21)) + } + + // Error + class A_Field_StaticSetter { +>A_Field_StaticSetter : Symbol(A_Field_StaticSetter, Decl(privateNameDuplicateField.ts, 42, 5)) + + #foo = "foo"; +>#foo : Symbol(A_Field_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 45, 32)) + + static set #foo(value: string) { } +>#foo : Symbol(A_Field_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 46, 21)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 47, 24)) + } } +function Method() { +>Method : Symbol(Method, Decl(privateNameDuplicateField.ts, 49, 1)) + + // Error + class A_Method_Field { +>A_Method_Field : Symbol(A_Method_Field, Decl(privateNameDuplicateField.ts, 51, 19)) + + #foo() { } +>#foo : Symbol(A_Method_Field.#foo, Decl(privateNameDuplicateField.ts, 53, 26), Decl(privateNameDuplicateField.ts, 54, 18)) -class A3 { ->A3 : Symbol(A3, Decl(privateNameDuplicateField.ts, 8, 1)) + #foo = "foo"; +>#foo : Symbol(A_Method_Field.#foo, Decl(privateNameDuplicateField.ts, 53, 26), Decl(privateNameDuplicateField.ts, 54, 18)) + } - #foo = "foo"; ->#foo : Symbol(A3.#foo, Decl(privateNameDuplicateField.ts, 11, 10)) + // Error + class A_Method_Method { +>A_Method_Method : Symbol(A_Method_Method, Decl(privateNameDuplicateField.ts, 56, 5)) - get #foo() { return ""} ->#foo : Symbol(A3.#foo, Decl(privateNameDuplicateField.ts, 12, 17)) + #foo() { } +>#foo : Symbol(A_Method_Method.#foo, Decl(privateNameDuplicateField.ts, 59, 27), Decl(privateNameDuplicateField.ts, 60, 18)) + + #foo() { } +>#foo : Symbol(A_Method_Method.#foo, Decl(privateNameDuplicateField.ts, 59, 27), Decl(privateNameDuplicateField.ts, 60, 18)) + } + + // Error + class A_Method_Getter { +>A_Method_Getter : Symbol(A_Method_Getter, Decl(privateNameDuplicateField.ts, 62, 5)) + + #foo() { } +>#foo : Symbol(A_Method_Getter.#foo, Decl(privateNameDuplicateField.ts, 65, 27)) + + get #foo() { return ""} +>#foo : Symbol(A_Method_Getter.#foo, Decl(privateNameDuplicateField.ts, 66, 18)) + } + + // Error + class A_Method_Setter { +>A_Method_Setter : Symbol(A_Method_Setter, Decl(privateNameDuplicateField.ts, 68, 5)) + + #foo() { } +>#foo : Symbol(A_Method_Setter.#foo, Decl(privateNameDuplicateField.ts, 71, 27)) + + set #foo(value: string) { } +>#foo : Symbol(A_Method_Setter.#foo, Decl(privateNameDuplicateField.ts, 72, 18)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 73, 17)) + } + + // Error + class A_Method_StaticField { +>A_Method_StaticField : Symbol(A_Method_StaticField, Decl(privateNameDuplicateField.ts, 74, 5)) + + #foo() { } +>#foo : Symbol(A_Method_StaticField.#foo, Decl(privateNameDuplicateField.ts, 77, 32)) + + static #foo = "foo"; +>#foo : Symbol(A_Method_StaticField.#foo, Decl(privateNameDuplicateField.ts, 78, 18)) + } + + // Error + class A_Method_StaticMethod { +>A_Method_StaticMethod : Symbol(A_Method_StaticMethod, Decl(privateNameDuplicateField.ts, 80, 5)) + + #foo() { } +>#foo : Symbol(A_Method_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 83, 33)) + + static #foo() { } +>#foo : Symbol(A_Method_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 84, 18)) + } + + // Error + class A_Method_StaticGetter { +>A_Method_StaticGetter : Symbol(A_Method_StaticGetter, Decl(privateNameDuplicateField.ts, 86, 5)) + + #foo() { } +>#foo : Symbol(A_Method_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 89, 33)) + + static get #foo() { return ""} +>#foo : Symbol(A_Method_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 90, 18)) + } + + // Error + class A_Method_StaticSetter { +>A_Method_StaticSetter : Symbol(A_Method_StaticSetter, Decl(privateNameDuplicateField.ts, 92, 5)) + + #foo() { } +>#foo : Symbol(A_Method_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 95, 33)) + + static set #foo(value: string) { } +>#foo : Symbol(A_Method_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 96, 18)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 97, 24)) + } } -class A4 { ->A4 : Symbol(A4, Decl(privateNameDuplicateField.ts, 14, 1)) - #foo() { return ""} ->#foo : Symbol(A4.#foo, Decl(privateNameDuplicateField.ts, 16, 10), Decl(privateNameDuplicateField.ts, 17, 23)) +function Getter() { +>Getter : Symbol(Getter, Decl(privateNameDuplicateField.ts, 99, 1)) + + // Error + class A_Getter_Field { +>A_Getter_Field : Symbol(A_Getter_Field, Decl(privateNameDuplicateField.ts, 102, 19)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_Field.#foo, Decl(privateNameDuplicateField.ts, 104, 26), Decl(privateNameDuplicateField.ts, 105, 31)) - #foo() { return ""} ->#foo : Symbol(A4.#foo, Decl(privateNameDuplicateField.ts, 16, 10), Decl(privateNameDuplicateField.ts, 17, 23)) + #foo = "foo"; +>#foo : Symbol(A_Getter_Field.#foo, Decl(privateNameDuplicateField.ts, 104, 26), Decl(privateNameDuplicateField.ts, 105, 31)) + } + + // Error + class A_Getter_Method { +>A_Getter_Method : Symbol(A_Getter_Method, Decl(privateNameDuplicateField.ts, 107, 5)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_Method.#foo, Decl(privateNameDuplicateField.ts, 110, 27)) + + #foo() { } +>#foo : Symbol(A_Getter_Method.#foo, Decl(privateNameDuplicateField.ts, 111, 31)) + } + + // Error + class A_Getter_Getter { +>A_Getter_Getter : Symbol(A_Getter_Getter, Decl(privateNameDuplicateField.ts, 113, 5)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_Getter.#foo, Decl(privateNameDuplicateField.ts, 116, 27)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_Getter.#foo, Decl(privateNameDuplicateField.ts, 117, 31)) + } + + //OK + class A_Getter_Setter { +>A_Getter_Setter : Symbol(A_Getter_Setter, Decl(privateNameDuplicateField.ts, 119, 5)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_Setter.#foo, Decl(privateNameDuplicateField.ts, 122, 27), Decl(privateNameDuplicateField.ts, 123, 31)) + + set #foo(value: string) { } +>#foo : Symbol(A_Getter_Setter.#foo, Decl(privateNameDuplicateField.ts, 122, 27), Decl(privateNameDuplicateField.ts, 123, 31)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 124, 17)) + } + + // Error + class A_Getter_StaticField { +>A_Getter_StaticField : Symbol(A_Getter_StaticField, Decl(privateNameDuplicateField.ts, 125, 5)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_StaticField.#foo, Decl(privateNameDuplicateField.ts, 128, 32)) + + static #foo() { } +>#foo : Symbol(A_Getter_StaticField.#foo, Decl(privateNameDuplicateField.ts, 129, 31)) + } + + // Error + class A_Getter_StaticMethod { +>A_Getter_StaticMethod : Symbol(A_Getter_StaticMethod, Decl(privateNameDuplicateField.ts, 131, 5)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 134, 33)) + + static #foo() { } +>#foo : Symbol(A_Getter_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 135, 31)) + } + + // Error + class A_Getter_StaticGetter { +>A_Getter_StaticGetter : Symbol(A_Getter_StaticGetter, Decl(privateNameDuplicateField.ts, 137, 5)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 140, 33)) + + static get #foo() { return ""} +>#foo : Symbol(A_Getter_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 141, 31)) + } + + // Error + class A_Getter_StaticSetter { +>A_Getter_StaticSetter : Symbol(A_Getter_StaticSetter, Decl(privateNameDuplicateField.ts, 143, 5)) + + get #foo() { return ""} +>#foo : Symbol(A_Getter_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 146, 33)) + + static set #foo(value: string) { } +>#foo : Symbol(A_Getter_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 147, 31)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 148, 24)) + } } +function Setter() { +>Setter : Symbol(Setter, Decl(privateNameDuplicateField.ts, 150, 1)) + + // Error + class A_Setter_Field { +>A_Setter_Field : Symbol(A_Setter_Field, Decl(privateNameDuplicateField.ts, 152, 19)) + + set #foo(value: string) { } +>#foo : Symbol(A_Setter_Field.#foo, Decl(privateNameDuplicateField.ts, 154, 26), Decl(privateNameDuplicateField.ts, 155, 35)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 155, 17)) + + #foo = "foo"; +>#foo : Symbol(A_Setter_Field.#foo, Decl(privateNameDuplicateField.ts, 154, 26), Decl(privateNameDuplicateField.ts, 155, 35)) + } + + // Error + class A_Setter_Method { +>A_Setter_Method : Symbol(A_Setter_Method, Decl(privateNameDuplicateField.ts, 157, 5)) + + set #foo(value: string) { } +>#foo : Symbol(A_Setter_Method.#foo, Decl(privateNameDuplicateField.ts, 160, 27)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 161, 17)) + + #foo() { } +>#foo : Symbol(A_Setter_Method.#foo, Decl(privateNameDuplicateField.ts, 161, 35)) + } + + // OK + class A_Setter_Getter { +>A_Setter_Getter : Symbol(A_Setter_Getter, Decl(privateNameDuplicateField.ts, 163, 5)) + + set #foo(value: string) { } +>#foo : Symbol(A_Setter_Getter.#foo, Decl(privateNameDuplicateField.ts, 166, 27), Decl(privateNameDuplicateField.ts, 167, 35)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 167, 17)) + + get #foo() { return ""} +>#foo : Symbol(A_Setter_Getter.#foo, Decl(privateNameDuplicateField.ts, 166, 27), Decl(privateNameDuplicateField.ts, 167, 35)) + } + + // Error + class A_Setter_Setter { +>A_Setter_Setter : Symbol(A_Setter_Setter, Decl(privateNameDuplicateField.ts, 169, 5)) + + set #foo(value: string) { } +>#foo : Symbol(A_Setter_Setter.#foo, Decl(privateNameDuplicateField.ts, 172, 27)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 173, 17)) + + set #foo(value: string) { } +>#foo : Symbol(A_Setter_Setter.#foo, Decl(privateNameDuplicateField.ts, 173, 35)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 174, 17)) + } + + // Error + class A_Setter_StaticField { +>A_Setter_StaticField : Symbol(A_Setter_StaticField, Decl(privateNameDuplicateField.ts, 175, 5)) + + set #foo(value: string) { } +>#foo : Symbol(A_Setter_StaticField.#foo, Decl(privateNameDuplicateField.ts, 178, 32)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 179, 17)) + + static #foo = "foo"; +>#foo : Symbol(A_Setter_StaticField.#foo, Decl(privateNameDuplicateField.ts, 179, 35)) + } + + // Error + class A_Setter_StaticMethod { +>A_Setter_StaticMethod : Symbol(A_Setter_StaticMethod, Decl(privateNameDuplicateField.ts, 181, 5)) + + set #foo(value: string) { } +>#foo : Symbol(A_Setter_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 184, 33)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 185, 17)) + + static #foo() { } +>#foo : Symbol(A_Setter_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 185, 35)) + } + + // Error + class A_Setter_StaticGetter { +>A_Setter_StaticGetter : Symbol(A_Setter_StaticGetter, Decl(privateNameDuplicateField.ts, 187, 5)) + + set #foo(value: string) { } +>#foo : Symbol(A_Setter_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 190, 33)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 191, 17)) + + static get #foo() { return ""} +>#foo : Symbol(A_Setter_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 191, 35)) + } -class A5 { ->A5 : Symbol(A5, Decl(privateNameDuplicateField.ts, 19, 1)) + // Error + class A_Setter_StaticSetter { +>A_Setter_StaticSetter : Symbol(A_Setter_StaticSetter, Decl(privateNameDuplicateField.ts, 193, 5)) - #foo() { return ""} ->#foo : Symbol(A5.#foo, Decl(privateNameDuplicateField.ts, 22, 10)) + set #foo(value: string) { } +>#foo : Symbol(A_Setter_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 196, 33)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 197, 17)) - get #foo() { return ""} ->#foo : Symbol(A5.#foo, Decl(privateNameDuplicateField.ts, 23, 23)) + static set #foo(value: string) { } +>#foo : Symbol(A_Setter_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 197, 35)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 198, 24)) + } } +function StaticField() { +>StaticField : Symbol(StaticField, Decl(privateNameDuplicateField.ts, 200, 1)) -class A6 { ->A6 : Symbol(A6, Decl(privateNameDuplicateField.ts, 25, 1)) + // Error + class A_StaticField_Field { +>A_StaticField_Field : Symbol(A_StaticField_Field, Decl(privateNameDuplicateField.ts, 202, 24)) - #foo = "foo"; ->#foo : Symbol(A6.#foo, Decl(privateNameDuplicateField.ts, 28, 10)) + static #foo = "foo"; +>#foo : Symbol(A_StaticField_Field.#foo, Decl(privateNameDuplicateField.ts, 204, 31)) - #foo() { return ""} ->#foo : Symbol(A6.#foo, Decl(privateNameDuplicateField.ts, 29, 17)) + #foo = "foo"; +>#foo : Symbol(A_StaticField_Field.#foo, Decl(privateNameDuplicateField.ts, 205, 28)) + } - get #foo() { return ""} ->#foo : Symbol(A6.#foo, Decl(privateNameDuplicateField.ts, 30, 23)) + // Error + class A_StaticField_Method { +>A_StaticField_Method : Symbol(A_StaticField_Method, Decl(privateNameDuplicateField.ts, 207, 5)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticField_Method.#foo, Decl(privateNameDuplicateField.ts, 210, 32)) + + #foo() { } +>#foo : Symbol(A_StaticField_Method.#foo, Decl(privateNameDuplicateField.ts, 211, 28)) + } + + // Error + class A_StaticField_Getter { +>A_StaticField_Getter : Symbol(A_StaticField_Getter, Decl(privateNameDuplicateField.ts, 213, 5)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticField_Getter.#foo, Decl(privateNameDuplicateField.ts, 216, 32)) + + get #foo() { return ""} +>#foo : Symbol(A_StaticField_Getter.#foo, Decl(privateNameDuplicateField.ts, 217, 28)) + } + + // Error + class A_StaticField_Setter { +>A_StaticField_Setter : Symbol(A_StaticField_Setter, Decl(privateNameDuplicateField.ts, 219, 5)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticField_Setter.#foo, Decl(privateNameDuplicateField.ts, 222, 32)) + + set #foo(value: string) { } +>#foo : Symbol(A_StaticField_Setter.#foo, Decl(privateNameDuplicateField.ts, 223, 28)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 224, 17)) + } + + // Error + class A_StaticField_StaticField { +>A_StaticField_StaticField : Symbol(A_StaticField_StaticField, Decl(privateNameDuplicateField.ts, 225, 5)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticField_StaticField.#foo, Decl(privateNameDuplicateField.ts, 228, 37), Decl(privateNameDuplicateField.ts, 229, 28)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticField_StaticField.#foo, Decl(privateNameDuplicateField.ts, 228, 37), Decl(privateNameDuplicateField.ts, 229, 28)) + } + + // Error + class A_StaticField_StaticMethod { +>A_StaticField_StaticMethod : Symbol(A_StaticField_StaticMethod, Decl(privateNameDuplicateField.ts, 231, 5)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticField_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 234, 38)) + + static #foo() { } +>#foo : Symbol(A_StaticField_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 235, 28)) + } + + // Error + class A_StaticField_StaticGetter { +>A_StaticField_StaticGetter : Symbol(A_StaticField_StaticGetter, Decl(privateNameDuplicateField.ts, 237, 5)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticField_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 240, 38)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticField_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 241, 28)) + } + + // Error + class A_StaticField_StaticSetter { +>A_StaticField_StaticSetter : Symbol(A_StaticField_StaticSetter, Decl(privateNameDuplicateField.ts, 243, 5)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticField_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 246, 38)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticField_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 247, 28)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 248, 24)) + } } -class A7 { ->A7 : Symbol(A7, Decl(privateNameDuplicateField.ts, 32, 1)) +function StaticMethod() { +>StaticMethod : Symbol(StaticMethod, Decl(privateNameDuplicateField.ts, 250, 1)) + + // Error + class A_StaticMethod_Field { +>A_StaticMethod_Field : Symbol(A_StaticMethod_Field, Decl(privateNameDuplicateField.ts, 252, 25)) + + static #foo() { } +>#foo : Symbol(A_StaticMethod_Field.#foo, Decl(privateNameDuplicateField.ts, 254, 32)) + + #foo = "foo"; +>#foo : Symbol(A_StaticMethod_Field.#foo, Decl(privateNameDuplicateField.ts, 255, 25)) + } + + // Error + class A_StaticMethod_Method { +>A_StaticMethod_Method : Symbol(A_StaticMethod_Method, Decl(privateNameDuplicateField.ts, 257, 5)) + + static #foo() { } +>#foo : Symbol(A_StaticMethod_Method.#foo, Decl(privateNameDuplicateField.ts, 260, 33)) + + #foo() { } +>#foo : Symbol(A_StaticMethod_Method.#foo, Decl(privateNameDuplicateField.ts, 261, 25)) + } + + // Error + class A_StaticMethod_Getter { +>A_StaticMethod_Getter : Symbol(A_StaticMethod_Getter, Decl(privateNameDuplicateField.ts, 263, 5)) + + static #foo() { } +>#foo : Symbol(A_StaticMethod_Getter.#foo, Decl(privateNameDuplicateField.ts, 266, 33)) + + get #foo() { return ""} +>#foo : Symbol(A_StaticMethod_Getter.#foo, Decl(privateNameDuplicateField.ts, 267, 25)) + } + + // Error + class A_StaticMethod_Setter { +>A_StaticMethod_Setter : Symbol(A_StaticMethod_Setter, Decl(privateNameDuplicateField.ts, 269, 5)) + + static #foo() { } +>#foo : Symbol(A_StaticMethod_Setter.#foo, Decl(privateNameDuplicateField.ts, 272, 33)) + + set #foo(value: string) { } +>#foo : Symbol(A_StaticMethod_Setter.#foo, Decl(privateNameDuplicateField.ts, 273, 25)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 274, 17)) + } + + // Error + class A_StaticMethod_StaticField { +>A_StaticMethod_StaticField : Symbol(A_StaticMethod_StaticField, Decl(privateNameDuplicateField.ts, 275, 5)) + + static #foo() { } +>#foo : Symbol(A_StaticMethod_StaticField.#foo, Decl(privateNameDuplicateField.ts, 278, 38), Decl(privateNameDuplicateField.ts, 279, 25)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticMethod_StaticField.#foo, Decl(privateNameDuplicateField.ts, 278, 38), Decl(privateNameDuplicateField.ts, 279, 25)) + } + + // Error + class A_StaticMethod_StaticMethod { +>A_StaticMethod_StaticMethod : Symbol(A_StaticMethod_StaticMethod, Decl(privateNameDuplicateField.ts, 281, 5)) + + static #foo() { } +>#foo : Symbol(A_StaticMethod_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 284, 39), Decl(privateNameDuplicateField.ts, 285, 25)) + + static #foo() { } +>#foo : Symbol(A_StaticMethod_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 284, 39), Decl(privateNameDuplicateField.ts, 285, 25)) + } + + // Error + class A_StaticMethod_StaticGetter { +>A_StaticMethod_StaticGetter : Symbol(A_StaticMethod_StaticGetter, Decl(privateNameDuplicateField.ts, 287, 5)) + + static #foo() { } +>#foo : Symbol(A_StaticMethod_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 290, 39)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticMethod_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 291, 25)) + } + + // Error + class A_StaticMethod_StaticSetter { +>A_StaticMethod_StaticSetter : Symbol(A_StaticMethod_StaticSetter, Decl(privateNameDuplicateField.ts, 293, 5)) - get #foo() { return ""; } ->#foo : Symbol(A7.#foo, Decl(privateNameDuplicateField.ts, 34, 10)) + static #foo() { } +>#foo : Symbol(A_StaticMethod_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 296, 39)) - get #foo() { return ""; } ->#foo : Symbol(A7.#foo, Decl(privateNameDuplicateField.ts, 35, 29)) + static set #foo(value: string) { } +>#foo : Symbol(A_StaticMethod_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 297, 25)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 298, 24)) + } } -class A8 { ->A8 : Symbol(A8, Decl(privateNameDuplicateField.ts, 37, 1)) +function StaticGetter() { +>StaticGetter : Symbol(StaticGetter, Decl(privateNameDuplicateField.ts, 300, 1)) - set #foo(a: string) {} ->#foo : Symbol(A8.#foo, Decl(privateNameDuplicateField.ts, 39, 10)) ->a : Symbol(a, Decl(privateNameDuplicateField.ts, 40, 13)) + // Error + class A_StaticGetter_Field { +>A_StaticGetter_Field : Symbol(A_StaticGetter_Field, Decl(privateNameDuplicateField.ts, 302, 25)) - set #foo(a: string) {} ->#foo : Symbol(A8.#foo, Decl(privateNameDuplicateField.ts, 40, 26)) ->a : Symbol(a, Decl(privateNameDuplicateField.ts, 41, 13)) + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_Field.#foo, Decl(privateNameDuplicateField.ts, 305, 32)) + + #foo = "foo"; +>#foo : Symbol(A_StaticGetter_Field.#foo, Decl(privateNameDuplicateField.ts, 306, 38)) + } + + // Error + class A_StaticGetter_Method { +>A_StaticGetter_Method : Symbol(A_StaticGetter_Method, Decl(privateNameDuplicateField.ts, 308, 5)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_Method.#foo, Decl(privateNameDuplicateField.ts, 311, 33)) + + #foo() { } +>#foo : Symbol(A_StaticGetter_Method.#foo, Decl(privateNameDuplicateField.ts, 312, 38)) + } + + // Error + class A_StaticGetter_Getter { +>A_StaticGetter_Getter : Symbol(A_StaticGetter_Getter, Decl(privateNameDuplicateField.ts, 314, 5)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_Getter.#foo, Decl(privateNameDuplicateField.ts, 317, 33)) + + get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_Getter.#foo, Decl(privateNameDuplicateField.ts, 318, 38)) + } + + // Error + class A_StaticGetter_Setter { +>A_StaticGetter_Setter : Symbol(A_StaticGetter_Setter, Decl(privateNameDuplicateField.ts, 320, 5)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_Setter.#foo, Decl(privateNameDuplicateField.ts, 323, 33)) + + set #foo(value: string) { } +>#foo : Symbol(A_StaticGetter_Setter.#foo, Decl(privateNameDuplicateField.ts, 324, 38)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 325, 17)) + } + + // Error + class A_StaticGetter_StaticField { +>A_StaticGetter_StaticField : Symbol(A_StaticGetter_StaticField, Decl(privateNameDuplicateField.ts, 326, 5)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_StaticField.#foo, Decl(privateNameDuplicateField.ts, 329, 38)) + + static #foo() { } +>#foo : Symbol(A_StaticGetter_StaticField.#foo, Decl(privateNameDuplicateField.ts, 330, 38)) + } + + // Error + class A_StaticGetter_StaticMethod { +>A_StaticGetter_StaticMethod : Symbol(A_StaticGetter_StaticMethod, Decl(privateNameDuplicateField.ts, 332, 5)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 335, 39)) + + static #foo() { } +>#foo : Symbol(A_StaticGetter_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 336, 38)) + } + + // Error + class A_StaticGetter_StaticGetter { +>A_StaticGetter_StaticGetter : Symbol(A_StaticGetter_StaticGetter, Decl(privateNameDuplicateField.ts, 338, 5)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 341, 39)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 342, 38)) + } + // OK + class A_StaticGetter_StaticSetter { +>A_StaticGetter_StaticSetter : Symbol(A_StaticGetter_StaticSetter, Decl(privateNameDuplicateField.ts, 344, 5)) + + static get #foo() { return ""} +>#foo : Symbol(A_StaticGetter_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 346, 39), Decl(privateNameDuplicateField.ts, 347, 38)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticGetter_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 346, 39), Decl(privateNameDuplicateField.ts, 347, 38)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 348, 24)) + } } -class A9 { ->A9 : Symbol(A9, Decl(privateNameDuplicateField.ts, 42, 1)) +function StaticSetter() { +>StaticSetter : Symbol(StaticSetter, Decl(privateNameDuplicateField.ts, 350, 1)) + + // Error + class A_StaticSetter_Field { +>A_StaticSetter_Field : Symbol(A_StaticSetter_Field, Decl(privateNameDuplicateField.ts, 352, 25)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_Field.#foo, Decl(privateNameDuplicateField.ts, 354, 32)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 355, 24)) + + #foo = "foo"; +>#foo : Symbol(A_StaticSetter_Field.#foo, Decl(privateNameDuplicateField.ts, 355, 42)) + } + + // Error + class A_StaticSetter_Method { +>A_StaticSetter_Method : Symbol(A_StaticSetter_Method, Decl(privateNameDuplicateField.ts, 357, 5)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_Method.#foo, Decl(privateNameDuplicateField.ts, 360, 33)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 361, 24)) + + #foo() { } +>#foo : Symbol(A_StaticSetter_Method.#foo, Decl(privateNameDuplicateField.ts, 361, 42)) + } + + + // Error + class A_StaticSetter_Getter { +>A_StaticSetter_Getter : Symbol(A_StaticSetter_Getter, Decl(privateNameDuplicateField.ts, 363, 5)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_Getter.#foo, Decl(privateNameDuplicateField.ts, 367, 33)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 368, 24)) + + get #foo() { return ""} +>#foo : Symbol(A_StaticSetter_Getter.#foo, Decl(privateNameDuplicateField.ts, 368, 42)) + } + + // Error + class A_StaticSetter_Setter { +>A_StaticSetter_Setter : Symbol(A_StaticSetter_Setter, Decl(privateNameDuplicateField.ts, 370, 5)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_Setter.#foo, Decl(privateNameDuplicateField.ts, 373, 33)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 374, 24)) + + set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_Setter.#foo, Decl(privateNameDuplicateField.ts, 374, 42)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 375, 17)) + } + + // Error + class A_StaticSetter_StaticField { +>A_StaticSetter_StaticField : Symbol(A_StaticSetter_StaticField, Decl(privateNameDuplicateField.ts, 376, 5)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_StaticField.#foo, Decl(privateNameDuplicateField.ts, 379, 38), Decl(privateNameDuplicateField.ts, 380, 42)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 380, 24)) + + static #foo = "foo"; +>#foo : Symbol(A_StaticSetter_StaticField.#foo, Decl(privateNameDuplicateField.ts, 379, 38), Decl(privateNameDuplicateField.ts, 380, 42)) + } + + // Error + class A_StaticSetter_StaticMethod { +>A_StaticSetter_StaticMethod : Symbol(A_StaticSetter_StaticMethod, Decl(privateNameDuplicateField.ts, 382, 5)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 385, 39)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 386, 24)) + + static #foo() { } +>#foo : Symbol(A_StaticSetter_StaticMethod.#foo, Decl(privateNameDuplicateField.ts, 386, 42)) + } + + // OK + class A_StaticSetter_StaticGetter { +>A_StaticSetter_StaticGetter : Symbol(A_StaticSetter_StaticGetter, Decl(privateNameDuplicateField.ts, 388, 5)) + + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 391, 39), Decl(privateNameDuplicateField.ts, 392, 42)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 392, 24)) - get #foo() { return ""; } ->#foo : Symbol(A9.#foo, Decl(privateNameDuplicateField.ts, 44, 10), Decl(privateNameDuplicateField.ts, 45, 29)) + static get #foo() { return ""} +>#foo : Symbol(A_StaticSetter_StaticGetter.#foo, Decl(privateNameDuplicateField.ts, 391, 39), Decl(privateNameDuplicateField.ts, 392, 42)) + } - set #foo(a: string) {} ->#foo : Symbol(A9.#foo, Decl(privateNameDuplicateField.ts, 44, 10), Decl(privateNameDuplicateField.ts, 45, 29)) ->a : Symbol(a, Decl(privateNameDuplicateField.ts, 46, 13)) + // Error + class A_StaticSetter_StaticSetter { +>A_StaticSetter_StaticSetter : Symbol(A_StaticSetter_StaticSetter, Decl(privateNameDuplicateField.ts, 394, 5)) - get #foo() { return ""; } ->#foo : Symbol(A9.#foo, Decl(privateNameDuplicateField.ts, 46, 26)) + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 397, 39)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 398, 24)) - set #foo(a: string) {} ->#foo : Symbol(A9.#foo, Decl(privateNameDuplicateField.ts, 47, 29)) ->a : Symbol(a, Decl(privateNameDuplicateField.ts, 48, 13)) + static set #foo(value: string) { } +>#foo : Symbol(A_StaticSetter_StaticSetter.#foo, Decl(privateNameDuplicateField.ts, 398, 42)) +>value : Symbol(value, Decl(privateNameDuplicateField.ts, 399, 24)) + } } diff --git a/tests/baselines/reference/privateNameDuplicateField.types b/tests/baselines/reference/privateNameDuplicateField.types index 7b60a0bb2fca5..38614717ec2ad 100644 --- a/tests/baselines/reference/privateNameDuplicateField.types +++ b/tests/baselines/reference/privateNameDuplicateField.types @@ -1,123 +1,832 @@ === tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts === -class A { ->A : A +function Field() { +>Field : () => void - #foo = "foo"; + // Error + class A_Field_Field { +>A_Field_Field : A_Field_Field + + #foo = "foo"; >#foo : string >"foo" : "foo" - #foo = "foo"; + #foo = "foo"; >#foo : string >"foo" : "foo" -} + } -class A2 { ->A2 : A2 + // Error + class A_Field_Method { +>A_Field_Method : A_Field_Method - #foo = "foo"; + #foo = "foo"; >#foo : string >"foo" : "foo" - #foo() {} + #foo() { } >#foo : () => void + } + + // Error + class A_Field_Getter { +>A_Field_Getter : A_Field_Getter + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + get #foo() { return ""} +>#foo : string +>"" : "" + } + + // Error + class A_Field_Setter { +>A_Field_Setter : A_Field_Setter + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + set #foo(value: string) { } +>#foo : string +>value : string + } + + // Error + class A_Field_StaticField { +>A_Field_StaticField : A_Field_StaticField + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + } + + // Error + class A_Field_StaticMethod { +>A_Field_StaticMethod : A_Field_StaticMethod + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + static #foo() { } +>#foo : () => void + } + + // Error + class A_Field_StaticGetter { +>A_Field_StaticGetter : A_Field_StaticGetter + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + static get #foo() { return ""} +>#foo : string +>"" : "" + } + + // Error + class A_Field_StaticSetter { +>A_Field_StaticSetter : A_Field_StaticSetter + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + + static set #foo(value: string) { } +>#foo : string +>value : string + } } +function Method() { +>Method : () => void -class A3 { ->A3 : A3 + // Error + class A_Method_Field { +>A_Method_Field : A_Method_Field - #foo = "foo"; + #foo() { } +>#foo : () => void + + #foo = "foo"; +>#foo : () => void +>"foo" : "foo" + } + + // Error + class A_Method_Method { +>A_Method_Method : A_Method_Method + + #foo() { } +>#foo : () => void + + #foo() { } +>#foo : () => void + } + + // Error + class A_Method_Getter { +>A_Method_Getter : A_Method_Getter + + #foo() { } +>#foo : () => void + + get #foo() { return ""} +>#foo : string +>"" : "" + } + + // Error + class A_Method_Setter { +>A_Method_Setter : A_Method_Setter + + #foo() { } +>#foo : () => void + + set #foo(value: string) { } +>#foo : string +>value : string + } + + // Error + class A_Method_StaticField { +>A_Method_StaticField : A_Method_StaticField + + #foo() { } +>#foo : () => void + + static #foo = "foo"; >#foo : string >"foo" : "foo" + } + + // Error + class A_Method_StaticMethod { +>A_Method_StaticMethod : A_Method_StaticMethod + + #foo() { } +>#foo : () => void + + static #foo() { } +>#foo : () => void + } + + // Error + class A_Method_StaticGetter { +>A_Method_StaticGetter : A_Method_StaticGetter + + #foo() { } +>#foo : () => void - get #foo() { return ""} + static get #foo() { return ""} >#foo : string >"" : "" + } + + // Error + class A_Method_StaticSetter { +>A_Method_StaticSetter : A_Method_StaticSetter + + #foo() { } +>#foo : () => void + + static set #foo(value: string) { } +>#foo : string +>value : string + } } -class A4 { ->A4 : A4 - #foo() { return ""} ->#foo : () => string +function Getter() { +>Getter : () => void + + // Error + class A_Getter_Field { +>A_Getter_Field : A_Getter_Field + + get #foo() { return ""} +>#foo : string >"" : "" - #foo() { return ""} ->#foo : () => string + #foo = "foo"; +>#foo : string +>"foo" : "foo" + } + + // Error + class A_Getter_Method { +>A_Getter_Method : A_Getter_Method + + get #foo() { return ""} +>#foo : string >"" : "" + + #foo() { } +>#foo : () => void + } + + // Error + class A_Getter_Getter { +>A_Getter_Getter : A_Getter_Getter + + get #foo() { return ""} +>#foo : string +>"" : "" + + get #foo() { return ""} +>#foo : string +>"" : "" + } + + //OK + class A_Getter_Setter { +>A_Getter_Setter : A_Getter_Setter + + get #foo() { return ""} +>#foo : string +>"" : "" + + set #foo(value: string) { } +>#foo : string +>value : string + } + + // Error + class A_Getter_StaticField { +>A_Getter_StaticField : A_Getter_StaticField + + get #foo() { return ""} +>#foo : string +>"" : "" + + static #foo() { } +>#foo : () => void + } + + // Error + class A_Getter_StaticMethod { +>A_Getter_StaticMethod : A_Getter_StaticMethod + + get #foo() { return ""} +>#foo : string +>"" : "" + + static #foo() { } +>#foo : () => void + } + + // Error + class A_Getter_StaticGetter { +>A_Getter_StaticGetter : A_Getter_StaticGetter + + get #foo() { return ""} +>#foo : string +>"" : "" + + static get #foo() { return ""} +>#foo : string +>"" : "" + } + + // Error + class A_Getter_StaticSetter { +>A_Getter_StaticSetter : A_Getter_StaticSetter + + get #foo() { return ""} +>#foo : string +>"" : "" + + static set #foo(value: string) { } +>#foo : string +>value : string + } } +function Setter() { +>Setter : () => void + + // Error + class A_Setter_Field { +>A_Setter_Field : A_Setter_Field + + set #foo(value: string) { } +>#foo : string +>value : string + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + } + + // Error + class A_Setter_Method { +>A_Setter_Method : A_Setter_Method -class A5 { ->A5 : A5 + set #foo(value: string) { } +>#foo : string +>value : string + + #foo() { } +>#foo : () => void + } + + // OK + class A_Setter_Getter { +>A_Setter_Getter : A_Setter_Getter + + set #foo(value: string) { } +>#foo : string +>value : string - #foo() { return ""} ->#foo : () => string + get #foo() { return ""} +>#foo : string >"" : "" + } + + // Error + class A_Setter_Setter { +>A_Setter_Setter : A_Setter_Setter + + set #foo(value: string) { } +>#foo : string +>value : string - get #foo() { return ""} + set #foo(value: string) { } +>#foo : string +>value : string + } + + // Error + class A_Setter_StaticField { +>A_Setter_StaticField : A_Setter_StaticField + + set #foo(value: string) { } +>#foo : string +>value : string + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + } + + // Error + class A_Setter_StaticMethod { +>A_Setter_StaticMethod : A_Setter_StaticMethod + + set #foo(value: string) { } +>#foo : string +>value : string + + static #foo() { } +>#foo : () => void + } + + // Error + class A_Setter_StaticGetter { +>A_Setter_StaticGetter : A_Setter_StaticGetter + + set #foo(value: string) { } +>#foo : string +>value : string + + static get #foo() { return ""} >#foo : string >"" : "" + } + + // Error + class A_Setter_StaticSetter { +>A_Setter_StaticSetter : A_Setter_StaticSetter + + set #foo(value: string) { } +>#foo : string +>value : string + + static set #foo(value: string) { } +>#foo : string +>value : string + } } +function StaticField() { +>StaticField : () => void + + // Error + class A_StaticField_Field { +>A_StaticField_Field : A_StaticField_Field -class A6 { ->A6 : A6 + static #foo = "foo"; +>#foo : string +>"foo" : "foo" - #foo = "foo"; + #foo = "foo"; >#foo : string >"foo" : "foo" + } + + // Error + class A_StaticField_Method { +>A_StaticField_Method : A_StaticField_Method + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + + #foo() { } +>#foo : () => void + } + + // Error + class A_StaticField_Getter { +>A_StaticField_Getter : A_StaticField_Getter - #foo() { return ""} ->#foo : () => string + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + + get #foo() { return ""} +>#foo : string >"" : "" + } + + // Error + class A_StaticField_Setter { +>A_StaticField_Setter : A_StaticField_Setter - get #foo() { return ""} + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + + set #foo(value: string) { } +>#foo : string +>value : string + } + + // Error + class A_StaticField_StaticField { +>A_StaticField_StaticField : A_StaticField_StaticField + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + } + + // Error + class A_StaticField_StaticMethod { +>A_StaticField_StaticMethod : A_StaticField_StaticMethod + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + + static #foo() { } +>#foo : () => void + } + + // Error + class A_StaticField_StaticGetter { +>A_StaticField_StaticGetter : A_StaticField_StaticGetter + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + + static get #foo() { return ""} >#foo : string >"" : "" + } + + // Error + class A_StaticField_StaticSetter { +>A_StaticField_StaticSetter : A_StaticField_StaticSetter + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + + static set #foo(value: string) { } +>#foo : string +>value : string + } } -class A7 { ->A7 : A7 +function StaticMethod() { +>StaticMethod : () => void + + // Error + class A_StaticMethod_Field { +>A_StaticMethod_Field : A_StaticMethod_Field + + static #foo() { } +>#foo : () => void - get #foo() { return ""; } + #foo = "foo"; +>#foo : string +>"foo" : "foo" + } + + // Error + class A_StaticMethod_Method { +>A_StaticMethod_Method : A_StaticMethod_Method + + static #foo() { } +>#foo : () => void + + #foo() { } +>#foo : () => void + } + + // Error + class A_StaticMethod_Getter { +>A_StaticMethod_Getter : A_StaticMethod_Getter + + static #foo() { } +>#foo : () => void + + get #foo() { return ""} >#foo : string >"" : "" + } + + // Error + class A_StaticMethod_Setter { +>A_StaticMethod_Setter : A_StaticMethod_Setter - get #foo() { return ""; } + static #foo() { } +>#foo : () => void + + set #foo(value: string) { } +>#foo : string +>value : string + } + + // Error + class A_StaticMethod_StaticField { +>A_StaticMethod_StaticField : A_StaticMethod_StaticField + + static #foo() { } +>#foo : () => void + + static #foo = "foo"; +>#foo : () => void +>"foo" : "foo" + } + + // Error + class A_StaticMethod_StaticMethod { +>A_StaticMethod_StaticMethod : A_StaticMethod_StaticMethod + + static #foo() { } +>#foo : () => void + + static #foo() { } +>#foo : () => void + } + + // Error + class A_StaticMethod_StaticGetter { +>A_StaticMethod_StaticGetter : A_StaticMethod_StaticGetter + + static #foo() { } +>#foo : () => void + + static get #foo() { return ""} >#foo : string >"" : "" + } + + // Error + class A_StaticMethod_StaticSetter { +>A_StaticMethod_StaticSetter : A_StaticMethod_StaticSetter + + static #foo() { } +>#foo : () => void + + static set #foo(value: string) { } +>#foo : string +>value : string + } } -class A8 { ->A8 : A8 +function StaticGetter() { +>StaticGetter : () => void - set #foo(a: string) {} + // Error + class A_StaticGetter_Field { +>A_StaticGetter_Field : A_StaticGetter_Field + + static get #foo() { return ""} +>#foo : string +>"" : "" + + #foo = "foo"; >#foo : string ->a : string +>"foo" : "foo" + } + + // Error + class A_StaticGetter_Method { +>A_StaticGetter_Method : A_StaticGetter_Method - set #foo(a: string) {} + static get #foo() { return ""} >#foo : string ->a : string +>"" : "" + + #foo() { } +>#foo : () => void + } + + // Error + class A_StaticGetter_Getter { +>A_StaticGetter_Getter : A_StaticGetter_Getter + + static get #foo() { return ""} +>#foo : string +>"" : "" + + get #foo() { return ""} +>#foo : string +>"" : "" + } + + // Error + class A_StaticGetter_Setter { +>A_StaticGetter_Setter : A_StaticGetter_Setter + + static get #foo() { return ""} +>#foo : string +>"" : "" + + set #foo(value: string) { } +>#foo : string +>value : string + } + + // Error + class A_StaticGetter_StaticField { +>A_StaticGetter_StaticField : A_StaticGetter_StaticField + + static get #foo() { return ""} +>#foo : string +>"" : "" + + static #foo() { } +>#foo : () => void + } + + // Error + class A_StaticGetter_StaticMethod { +>A_StaticGetter_StaticMethod : A_StaticGetter_StaticMethod + + static get #foo() { return ""} +>#foo : string +>"" : "" + + static #foo() { } +>#foo : () => void + } + + // Error + class A_StaticGetter_StaticGetter { +>A_StaticGetter_StaticGetter : A_StaticGetter_StaticGetter + + static get #foo() { return ""} +>#foo : string +>"" : "" + + static get #foo() { return ""} +>#foo : string +>"" : "" + } + // OK + class A_StaticGetter_StaticSetter { +>A_StaticGetter_StaticSetter : A_StaticGetter_StaticSetter + + static get #foo() { return ""} +>#foo : string +>"" : "" + + static set #foo(value: string) { } +>#foo : string +>value : string + } } -class A9 { ->A9 : A9 +function StaticSetter() { +>StaticSetter : () => void + + // Error + class A_StaticSetter_Field { +>A_StaticSetter_Field : A_StaticSetter_Field + + static set #foo(value: string) { } +>#foo : string +>value : string + + #foo = "foo"; +>#foo : string +>"foo" : "foo" + } + + // Error + class A_StaticSetter_Method { +>A_StaticSetter_Method : A_StaticSetter_Method + + static set #foo(value: string) { } +>#foo : string +>value : string + + #foo() { } +>#foo : () => void + } + + + // Error + class A_StaticSetter_Getter { +>A_StaticSetter_Getter : A_StaticSetter_Getter + + static set #foo(value: string) { } +>#foo : string +>value : string - get #foo() { return ""; } + get #foo() { return ""} >#foo : string >"" : "" + } - set #foo(a: string) {} + // Error + class A_StaticSetter_Setter { +>A_StaticSetter_Setter : A_StaticSetter_Setter + + static set #foo(value: string) { } +>#foo : string +>value : string + + set #foo(value: string) { } +>#foo : string +>value : string + } + + // Error + class A_StaticSetter_StaticField { +>A_StaticSetter_StaticField : A_StaticSetter_StaticField + + static set #foo(value: string) { } +>#foo : string +>value : string + + static #foo = "foo"; +>#foo : string +>"foo" : "foo" + } + + // Error + class A_StaticSetter_StaticMethod { +>A_StaticSetter_StaticMethod : A_StaticSetter_StaticMethod + + static set #foo(value: string) { } +>#foo : string +>value : string + + static #foo() { } +>#foo : () => void + } + + // OK + class A_StaticSetter_StaticGetter { +>A_StaticSetter_StaticGetter : A_StaticSetter_StaticGetter + + static set #foo(value: string) { } >#foo : string ->a : string +>value : string - get #foo() { return ""; } + static get #foo() { return ""} >#foo : string >"" : "" + } + + // Error + class A_StaticSetter_StaticSetter { +>A_StaticSetter_StaticSetter : A_StaticSetter_StaticSetter + + static set #foo(value: string) { } +>#foo : string +>value : string - set #foo(a: string) {} + static set #foo(value: string) { } >#foo : string ->a : string +>value : string + } } diff --git a/tests/baselines/reference/privateNamesUnique-3.errors.txt b/tests/baselines/reference/privateNamesUnique-3.errors.txt index 03b52f61ce4f1..d77e1823388a5 100644 --- a/tests/baselines/reference/privateNamesUnique-3.errors.txt +++ b/tests/baselines/reference/privateNamesUnique-3.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(3,12): error TS2300: Duplicate identifier '#foo'. +tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(3,12): error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(11,11): error TS2339: Property '#foo' does not exist on type 'B'. @@ -7,7 +7,7 @@ tests/cases/conformance/classes/members/privateNames/privateNamesUnique-3.ts(11, #foo = 1; static #foo = true; // error (duplicate) ~~~~ -!!! error TS2300: Duplicate identifier '#foo'. +!!! error TS2804: Duplicate identifier '#foo'. Static and instance elements cannot share the same private name. // because static and instance private names // share the same lexical scope // https://tc39.es/proposal-class-fields/#prod-ClassBody diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts b/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts index 3959fcdb8b85f..2813327ccecf1 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameDuplicateField.ts @@ -1,53 +1,405 @@ // @strict: true // @target: es6 -class A { - #foo = "foo"; - #foo = "foo"; -} +function Field() { + + // Error + class A_Field_Field { + #foo = "foo"; + #foo = "foo"; + } + + // Error + class A_Field_Method { + #foo = "foo"; + #foo() { } + } + + // Error + class A_Field_Getter { + #foo = "foo"; + get #foo() { return ""} + } + + // Error + class A_Field_Setter { + #foo = "foo"; + set #foo(value: string) { } + } + + // Error + class A_Field_StaticField { + #foo = "foo"; + static #foo = "foo"; + } + + // Error + class A_Field_StaticMethod { + #foo = "foo"; + static #foo() { } + } -class A2 { - #foo = "foo"; - #foo() {} + // Error + class A_Field_StaticGetter { + #foo = "foo"; + static get #foo() { return ""} + } + + // Error + class A_Field_StaticSetter { + #foo = "foo"; + static set #foo(value: string) { } + } } +function Method() { + // Error + class A_Method_Field { + #foo() { } + #foo = "foo"; + } + + // Error + class A_Method_Method { + #foo() { } + #foo() { } + } + + // Error + class A_Method_Getter { + #foo() { } + get #foo() { return ""} + } + + // Error + class A_Method_Setter { + #foo() { } + set #foo(value: string) { } + } + + // Error + class A_Method_StaticField { + #foo() { } + static #foo = "foo"; + } + + // Error + class A_Method_StaticMethod { + #foo() { } + static #foo() { } + } + + // Error + class A_Method_StaticGetter { + #foo() { } + static get #foo() { return ""} + } -class A3 { - #foo = "foo"; - get #foo() { return ""} + // Error + class A_Method_StaticSetter { + #foo() { } + static set #foo(value: string) { } + } } -class A4 { - #foo() { return ""} - #foo() { return ""} + +function Getter() { + // Error + class A_Getter_Field { + get #foo() { return ""} + #foo = "foo"; + } + + // Error + class A_Getter_Method { + get #foo() { return ""} + #foo() { } + } + + // Error + class A_Getter_Getter { + get #foo() { return ""} + get #foo() { return ""} + } + + //OK + class A_Getter_Setter { + get #foo() { return ""} + set #foo(value: string) { } + } + + // Error + class A_Getter_StaticField { + get #foo() { return ""} + static #foo() { } + } + + // Error + class A_Getter_StaticMethod { + get #foo() { return ""} + static #foo() { } + } + + // Error + class A_Getter_StaticGetter { + get #foo() { return ""} + static get #foo() { return ""} + } + + // Error + class A_Getter_StaticSetter { + get #foo() { return ""} + static set #foo(value: string) { } + } } +function Setter() { + // Error + class A_Setter_Field { + set #foo(value: string) { } + #foo = "foo"; + } + + // Error + class A_Setter_Method { + set #foo(value: string) { } + #foo() { } + } + + // OK + class A_Setter_Getter { + set #foo(value: string) { } + get #foo() { return ""} + } + + // Error + class A_Setter_Setter { + set #foo(value: string) { } + set #foo(value: string) { } + } + + // Error + class A_Setter_StaticField { + set #foo(value: string) { } + static #foo = "foo"; + } + + // Error + class A_Setter_StaticMethod { + set #foo(value: string) { } + static #foo() { } + } + + // Error + class A_Setter_StaticGetter { + set #foo(value: string) { } + static get #foo() { return ""} + } -class A5 { - #foo() { return ""} - get #foo() { return ""} + // Error + class A_Setter_StaticSetter { + set #foo(value: string) { } + static set #foo(value: string) { } + } } +function StaticField() { + // Error + class A_StaticField_Field { + static #foo = "foo"; + #foo = "foo"; + } -class A6 { - #foo = "foo"; - #foo() { return ""} - get #foo() { return ""} + // Error + class A_StaticField_Method { + static #foo = "foo"; + #foo() { } + } + + // Error + class A_StaticField_Getter { + static #foo = "foo"; + get #foo() { return ""} + } + + // Error + class A_StaticField_Setter { + static #foo = "foo"; + set #foo(value: string) { } + } + + // Error + class A_StaticField_StaticField { + static #foo = "foo"; + static #foo = "foo"; + } + + // Error + class A_StaticField_StaticMethod { + static #foo = "foo"; + static #foo() { } + } + + // Error + class A_StaticField_StaticGetter { + static #foo = "foo"; + static get #foo() { return ""} + } + + // Error + class A_StaticField_StaticSetter { + static #foo = "foo"; + static set #foo(value: string) { } + } } -class A7 { - get #foo() { return ""; } - get #foo() { return ""; } +function StaticMethod() { + // Error + class A_StaticMethod_Field { + static #foo() { } + #foo = "foo"; + } + + // Error + class A_StaticMethod_Method { + static #foo() { } + #foo() { } + } + + // Error + class A_StaticMethod_Getter { + static #foo() { } + get #foo() { return ""} + } + + // Error + class A_StaticMethod_Setter { + static #foo() { } + set #foo(value: string) { } + } + + // Error + class A_StaticMethod_StaticField { + static #foo() { } + static #foo = "foo"; + } + + // Error + class A_StaticMethod_StaticMethod { + static #foo() { } + static #foo() { } + } + + // Error + class A_StaticMethod_StaticGetter { + static #foo() { } + static get #foo() { return ""} + } + + // Error + class A_StaticMethod_StaticSetter { + static #foo() { } + static set #foo(value: string) { } + } } -class A8 { - set #foo(a: string) {} - set #foo(a: string) {} +function StaticGetter() { + + // Error + class A_StaticGetter_Field { + static get #foo() { return ""} + #foo = "foo"; + } + + // Error + class A_StaticGetter_Method { + static get #foo() { return ""} + #foo() { } + } + + // Error + class A_StaticGetter_Getter { + static get #foo() { return ""} + get #foo() { return ""} + } + + // Error + class A_StaticGetter_Setter { + static get #foo() { return ""} + set #foo(value: string) { } + } + + // Error + class A_StaticGetter_StaticField { + static get #foo() { return ""} + static #foo() { } + } + + // Error + class A_StaticGetter_StaticMethod { + static get #foo() { return ""} + static #foo() { } + } + + // Error + class A_StaticGetter_StaticGetter { + static get #foo() { return ""} + static get #foo() { return ""} + } + // OK + class A_StaticGetter_StaticSetter { + static get #foo() { return ""} + static set #foo(value: string) { } + } } -class A9 { - get #foo() { return ""; } - set #foo(a: string) {} - get #foo() { return ""; } - set #foo(a: string) {} +function StaticSetter() { + // Error + class A_StaticSetter_Field { + static set #foo(value: string) { } + #foo = "foo"; + } + + // Error + class A_StaticSetter_Method { + static set #foo(value: string) { } + #foo() { } + } + + + // Error + class A_StaticSetter_Getter { + static set #foo(value: string) { } + get #foo() { return ""} + } + + // Error + class A_StaticSetter_Setter { + static set #foo(value: string) { } + set #foo(value: string) { } + } + + // Error + class A_StaticSetter_StaticField { + static set #foo(value: string) { } + static #foo = "foo"; + } + + // Error + class A_StaticSetter_StaticMethod { + static set #foo(value: string) { } + static #foo() { } + } + + // OK + class A_StaticSetter_StaticGetter { + static set #foo(value: string) { } + static get #foo() { return ""} + } + + // Error + class A_StaticSetter_StaticSetter { + static set #foo(value: string) { } + static set #foo(value: string) { } + } } From 62b4f2f6edf3fb89acd206422073feb41780d30e Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Tue, 23 Feb 2021 19:54:06 +0200 Subject: [PATCH 43/73] Added error when using initializers with private static fields when useDefineForClassFields is not specified and target is esnext. --- src/compiler/checker.ts | 3 ++ src/compiler/diagnosticMessages.json | 4 +++ .../privateNameFieldsESNext.errors.txt | 5 +++- ...taticInitializer(target=esnext).errors.txt | 15 ++++++++++ ...tructuredBinding(target=esnext).errors.txt | 30 +++++++++++++++++++ ...FieldInitializer(target=esnext).errors.txt | 11 +++++++ 6 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).errors.txt create mode 100644 tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).errors.txt create mode 100644 tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c96c626c4f91a..3361eddf4a311 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -32309,6 +32309,9 @@ namespace ts { getNodeLinks(lexicalScope).flags |= NodeCheckFlags.ContainsClassWithPrivateIdentifiers; } } + if (isPrivateIdentifier(node.name) && hasStaticModifier(node) && node.initializer && languageVersion === ScriptTarget.ESNext && !compilerOptions.useDefineForClassFields) { + error(node.initializer, Diagnostics.Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_not_specified_with_a_target_of_esnext_Consider_adding_the_useDefineForClassFields_flag); + } } function checkPropertySignature(node: PropertySignature) { diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 456bd85619c6a..9053e5e99e97f 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3272,6 +3272,10 @@ "category": "Error", "code": 2804 }, + "Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag.": { + "category": "Error", + "code": 2805 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/tests/baselines/reference/privateNameFieldsESNext.errors.txt b/tests/baselines/reference/privateNameFieldsESNext.errors.txt index 28f283e66a817..10288bc30085d 100644 --- a/tests/baselines/reference/privateNameFieldsESNext.errors.txt +++ b/tests/baselines/reference/privateNameFieldsESNext.errors.txt @@ -1,7 +1,8 @@ tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts(8,9): error TS2322: Type 'string' is not assignable to type 'number'. +tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts(11,17): error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. -==== tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts (1 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts (2 errors) ==== class C { a = 123; #a = 10; @@ -15,6 +16,8 @@ tests/cases/conformance/classes/members/privateNames/privateNameFieldsESNext.ts( console.log(this.#b); } static #m = "test"; + ~~~~~~ +!!! error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. static #x; static test() { console.log(this.#m); diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).errors.txt b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).errors.txt new file mode 100644 index 0000000000000..ae43b5335e8f9 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).errors.txt @@ -0,0 +1,15 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts(2,17): error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. +tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts(3,18): error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticAndStaticInitializer.ts (2 errors) ==== + class A { + static #foo = 1; + ~ +!!! error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. + static #prop = 2; + ~ +!!! error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. + } + + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).errors.txt b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).errors.txt new file mode 100644 index 0000000000000..f0932d7ba51aa --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).errors.txt @@ -0,0 +1,30 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts(2,21): error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldDestructuredBinding.ts (1 errors) ==== + class A { + static #field = 1; + ~ +!!! error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. + otherClass = A; + testObject() { + return { x: 10, y: 6 }; + } + testArray() { + return [10, 11]; + } + constructor() { + let y: number; + ({ x: A.#field, y } = this.testObject()); + ([A.#field, y] = this.testArray()); + ({ a: A.#field, b: [A.#field] } = { a: 1, b: [2] }); + [A.#field, [A.#field]] = [1, [2]]; + ({ a: A.#field = 1, b: [A.#field = 1] } = { b: [] }); + [A.#field = 2] = []; + [this.otherClass.#field = 2] = []; + } + static test(_a: typeof A) { + [_a.#field] = [2]; + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).errors.txt b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).errors.txt new file mode 100644 index 0000000000000..13dc546e2dd96 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts(2,21): error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldInitializer.ts (1 errors) ==== + class A { + static #field = 10; + ~~ +!!! error TS2805: Static fields with private names can't have initializers when the '--useDefineForClassFields' flag is not specified with a '--target' of 'esnext'. Consider adding the '--useDefineForClassFields' flag. + static #uninitialized; + } + \ No newline at end of file From b2a692d684b0be1590cfaabb4eb94233aea4e125 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Wed, 24 Feb 2021 10:03:04 +0200 Subject: [PATCH 44/73] Fixed code review issues. --- src/compiler/checker.ts | 2 +- src/compiler/transformers/classFields.ts | 28 +++++++++++++----------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3361eddf4a311..40800e1d6bbbd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -32168,7 +32168,7 @@ namespace ts { const prev = names.get(name); if (prev) { // For private identifiers, do not allow mixing of static and instance members with the same name - if((prev & DeclarationMeaning.PrivateStatic) !== (meaning & DeclarationMeaning.PrivateStatic)) { + if ((prev & DeclarationMeaning.PrivateStatic) !== (meaning & DeclarationMeaning.PrivateStatic)) { error(location, Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name, getTextOfNode(location)); } else { diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 487d2fcd2e4a0..214819ef5d8c4 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -684,6 +684,9 @@ namespace ts { function doesClassElementNeedTransform(node: ClassElement) { return isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && isPrivateIdentifier(node.name)); } + function getPrivateUnitializedPrivateStaticFields(node: ClassLikeDeclaration) { + return filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer) + } function getPrivateInstanceMethods(node: ClassLikeDeclaration) { return filter( @@ -731,8 +734,8 @@ namespace ts { staticProperties = filter(staticProperties, p => !isPrivateIdentifier(p.name)); } else { - // We must initialize static private properties even if the don't have a value as we initialize them with a wrapper object which mist always exist. - const staticUninitializedPrivateProperties = filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer); + // We must initialize static private properties even if the don't have a value as we initialize them with a wrapper object which must always exist. + const staticUninitializedPrivateProperties = getPrivateUnitializedPrivateStaticFields(node); if (some(staticUninitializedPrivateProperties)) { addPropertyStatements(statements, staticUninitializedPrivateProperties, factory.getInternalName(node)); } @@ -765,8 +768,7 @@ namespace ts { // so we rely on standard init even under useDefineForClassFields:false staticProperties = filter(staticProperties, p => !isPrivateIdentifier(p.name)); } - const staticUninitializedPrivateProperties = !shouldTransformPrivateElements ? []: - filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer); + const staticUninitializedPrivateProperties = !shouldTransformPrivateElements ? []: getPrivateUnitializedPrivateStaticFields(node); const extendsClauseElement = getEffectiveBaseTypeNode(node); const isDerivedClass = !!(extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== SyntaxKind.NullKeyword); @@ -787,7 +789,7 @@ namespace ts { transformClassMembers(node, isDerivedClass) ); - if (some(staticUninitializedPrivateProperties) ||some(staticProperties) || some(pendingExpressions)) { + if (some(staticUninitializedPrivateProperties) || some(staticProperties) || some(pendingExpressions)) { if (isDecoratedClassDeclaration) { Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration."); @@ -804,7 +806,7 @@ namespace ts { addPropertyStatements(pendingStatements, staticUninitializedPrivateProperties, factory.getInternalName(node)); } } - if(temp) { + if (temp) { return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]); } return classExpression; @@ -1234,11 +1236,11 @@ namespace ts { function addPrivateIdentifierToEnvironment(node: PrivateClassElementDeclaration) { const text = getTextOfPropertyName(node.name) as string; - const { weakSetName } = getPrivateIdentifierEnvironment(); + const env = getPrivateIdentifierEnvironment(); + const { weakSetName } = env; let info: PrivateIdentifierInfo; const assignmentExpressions: Expression[] = []; - const env = getPrivateIdentifierEnvironment(); - if(hasStaticModifier(node)) { + if (hasStaticModifier(node)) { if (isPropertyDeclaration(node)) { const variableName = createHoistedVariableForPrivateName(text); info = { @@ -1247,7 +1249,7 @@ namespace ts { classConstructor: env.classConstructor }; } - else if(isMethodDeclaration(node)) { + else if (isMethodDeclaration(node)) { const functionName = createHoistedVariableForPrivateName(text); info = { placement: PrivateIdentifierPlacement.StaticMethod, @@ -1255,7 +1257,7 @@ namespace ts { classConstructor: env.classConstructor }; } - else if(isGetAccessorDeclaration(node)) { + else if (isGetAccessorDeclaration(node)) { const getterName = createHoistedVariableForPrivateName(text + "_get"); const previousInfo = findPreviousStaticAccessorInfo(node); if (previousInfo?.placement === PrivateIdentifierPlacement.StaticSetterOnly) { @@ -1274,7 +1276,7 @@ namespace ts { }; } } - else if(isSetAccessorDeclaration(node)) { + else if (isSetAccessorDeclaration(node)) { const setterName = createHoistedVariableForPrivateName(text + "_set"); const previousInfo = findPreviousStaticAccessorInfo(node); if (previousInfo?.placement === PrivateIdentifierPlacement.StaticGetterOnly) { @@ -1294,7 +1296,7 @@ namespace ts { } } else { - return; + Debug.assertNever(node, "Unknown class element type.") } } else if (isPropertyDeclaration(node)) { From 363041ec46929f970d0adad36d075e09915ef219 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Wed, 24 Feb 2021 11:34:03 +0200 Subject: [PATCH 45/73] Removed semantically wrong emit on `useDefineForClassFields:true` with `target:esnext` --- src/compiler/transformers/classFields.ts | 24 +++++-------------- .../reference/privateNameFieldsESNext.js | 3 ++- ...aticAndStaticInitializer(target=esnext).js | 6 +++-- ...FieldDestructuredBinding(target=esnext).js | 3 ++- ...meStaticFieldInitializer(target=esnext).js | 3 ++- 5 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 214819ef5d8c4..4696693a1f1f5 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -336,8 +336,6 @@ namespace ts { Debug.assert(!some(node.decorators)); if (!shouldTransformPrivateElements && isPrivateIdentifier(node.name)) { // Initializer is elided as the field is initialized in transformConstructor. - // We include initalizers for static private fields as there is no simple way to do this emit, - // and nobody is relying on the old assignment semantics for private static fields. return factory.updatePropertyDeclaration( node, /*decorators*/ undefined, @@ -345,7 +343,7 @@ namespace ts { node.name, /*questionOrExclamationToken*/ undefined, /*type*/ undefined, - /*initializer*/ hasStaticModifier(node) ? node.initializer : undefined + /*initializer*/ undefined ); } // Create a temporary variable to store a computed property name (if necessary). @@ -685,7 +683,7 @@ namespace ts { return isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && isPrivateIdentifier(node.name)); } function getPrivateUnitializedPrivateStaticFields(node: ClassLikeDeclaration) { - return filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer) + return filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer); } function getPrivateInstanceMethods(node: ClassLikeDeclaration) { @@ -726,14 +724,9 @@ namespace ts { // From ES6 specification: // HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. - let staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); + const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); - if (languageVersion === ScriptTarget.ESNext) { - // We can't initialize static private properties after the class as the are not in the lexical scope - // so we rely on standard init even under useDefineForClassFields:false - staticProperties = filter(staticProperties, p => !isPrivateIdentifier(p.name)); - } - else { + if (languageVersion < ScriptTarget.ESNext) { // We must initialize static private properties even if the don't have a value as we initialize them with a wrapper object which must always exist. const staticUninitializedPrivateProperties = getPrivateUnitializedPrivateStaticFields(node); if (some(staticUninitializedPrivateProperties)) { @@ -762,12 +755,8 @@ namespace ts { // these statements after the class expression variable statement. const isDecoratedClassDeclaration = isClassDeclaration(getOriginalNode(node)); - let staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); - if (!shouldTransformPrivateElements) { - // We can't initialize static private properties after the class as the are not in the lexical scope - // so we rely on standard init even under useDefineForClassFields:false - staticProperties = filter(staticProperties, p => !isPrivateIdentifier(p.name)); - } + const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); + const staticUninitializedPrivateProperties = !shouldTransformPrivateElements ? []: getPrivateUnitializedPrivateStaticFields(node); const extendsClauseElement = getEffectiveBaseTypeNode(node); const isDerivedClass = !!(extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== SyntaxKind.NullKeyword); @@ -1265,7 +1254,6 @@ namespace ts { ...previousInfo, placement: PrivateIdentifierPlacement.StaticGetterAndSetter, getterName, - setterName: previousInfo.setterName, }; } else { diff --git a/tests/baselines/reference/privateNameFieldsESNext.js b/tests/baselines/reference/privateNameFieldsESNext.js index 99abdeb482a20..acc37caa3cc8f 100644 --- a/tests/baselines/reference/privateNameFieldsESNext.js +++ b/tests/baselines/reference/privateNameFieldsESNext.js @@ -35,7 +35,7 @@ class C { this.#a = "hello"; console.log(this.#b); } - static #m = "test"; + static #m; static #x; static test() { console.log(this.#m); @@ -43,3 +43,4 @@ class C { } #something; } +C.#m = "test"; diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).js b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).js index ccd7fec0c66bc..2e3d168e42004 100644 --- a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).js +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=esnext).js @@ -8,6 +8,8 @@ class A { //// [privateNameStaticAndStaticInitializer.js] class A { - static #foo = 1; - static #prop = 2; + static #foo; + static #prop; } +A.#foo = 1; +A.#prop = 2; diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).js b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).js index 69b4fff34e2bf..bbaf5cd7601ab 100644 --- a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).js +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=esnext).js @@ -37,7 +37,7 @@ class A { [A.#field = 2] = []; [this.otherClass.#field = 2] = []; } - static #field = 1; + static #field; testObject() { return { x: 10, y: 6 }; } @@ -48,3 +48,4 @@ class A { [_a.#field] = [2]; } } +A.#field = 1; diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).js b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).js index f52e29bf027e5..fddf56e1754c5 100644 --- a/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).js +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=esnext).js @@ -7,6 +7,7 @@ class A { //// [privateNameStaticFieldInitializer.js] class A { - static #field = 10; + static #field; static #uninitialized; } +A.#field = 10; From 64757e0e78f689d022962783b4fd80d41eb9fea2 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Thu, 25 Feb 2021 10:11:04 +0200 Subject: [PATCH 46/73] Changed emit for uninitialized private static fields. --- src/compiler/transformers/classFields.ts | 27 +++++-------------- ...meStaticFieldInitializer(target=es2015).js | 2 +- 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 4696693a1f1f5..38822a7ab0741 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -682,9 +682,6 @@ namespace ts { function doesClassElementNeedTransform(node: ClassElement) { return isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && isPrivateIdentifier(node.name)); } - function getPrivateUnitializedPrivateStaticFields(node: ClassLikeDeclaration) { - return filter(node.members, (p): p is PropertyDeclaration => isPropertyDeclaration(p) && isPrivateIdentifier(p.name) && hasStaticModifier(p) && !p.initializer); - } function getPrivateInstanceMethods(node: ClassLikeDeclaration) { return filter( @@ -724,15 +721,7 @@ namespace ts { // From ES6 specification: // HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. - const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); - - if (languageVersion < ScriptTarget.ESNext) { - // We must initialize static private properties even if the don't have a value as we initialize them with a wrapper object which must always exist. - const staticUninitializedPrivateProperties = getPrivateUnitializedPrivateStaticFields(node); - if (some(staticUninitializedPrivateProperties)) { - addPropertyStatements(statements, staticUninitializedPrivateProperties, factory.getInternalName(node)); - } - } + const staticProperties = getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true); if (some(staticProperties)) { addPropertyStatements(statements, staticProperties, factory.getInternalName(node)); @@ -755,9 +744,8 @@ namespace ts { // these statements after the class expression variable statement. const isDecoratedClassDeclaration = isClassDeclaration(getOriginalNode(node)); - const staticProperties = getProperties(node, /*requireInitializer*/ true, /*isStatic*/ true); + const staticProperties = getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true); - const staticUninitializedPrivateProperties = !shouldTransformPrivateElements ? []: getPrivateUnitializedPrivateStaticFields(node); const extendsClauseElement = getEffectiveBaseTypeNode(node); const isDerivedClass = !!(extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== SyntaxKind.NullKeyword); @@ -778,7 +766,7 @@ namespace ts { transformClassMembers(node, isDerivedClass) ); - if (some(staticUninitializedPrivateProperties) || some(staticProperties) || some(pendingExpressions)) { + if (some(staticProperties, p => !!p.initializer || isPrivateIdentifier(p.name)) || some(pendingExpressions)) { if (isDecoratedClassDeclaration) { Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration."); @@ -791,9 +779,6 @@ namespace ts { if (some(staticProperties)) { addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); } - if (some(staticUninitializedPrivateProperties)) { - addPropertyStatements(pendingStatements, staticUninitializedPrivateProperties, factory.getInternalName(node)); - } } if (temp) { return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]); @@ -818,7 +803,7 @@ namespace ts { // 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(staticUninitializedPrivateProperties, temp)); + expressions.push(startOnNewLine(temp)); return factory.inlineExpressions(expressions); @@ -1069,7 +1054,7 @@ namespace ts { Debug.fail("Undeclared private name for property declaration."); } } - if (isPrivateIdentifier(propertyName) && !property.initializer) { + if ((isPrivateIdentifier(propertyName) || hasStaticModifier(property)) && !property.initializer) { return undefined; } @@ -1284,7 +1269,7 @@ namespace ts { } } else { - Debug.assertNever(node, "Unknown class element type.") + Debug.assertNever(node, "Unknown class element type."); } } else if (isPropertyDeclaration(node)) { diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js index 302cb724a91f7..de150cb8fd87f 100644 --- a/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js @@ -9,5 +9,5 @@ class A { var _A_field, _A_uninitialized; class A { } -_A_uninitialized = { value: void 0 }; _A_field = { value: 10 }; +_A_uninitialized = { value: void 0 }; From 68a7f800ec37c3ebbeb10670598c628f94d59816 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Thu, 25 Feb 2021 11:05:32 +0200 Subject: [PATCH 47/73] Added runtime error in helper if a static private field is accessed before it was declared. --- src/compiler/factory/emitHelpers.ts | 6 ++++++ tests/baselines/reference/privateNameAndObjectRestSpread.js | 3 +++ .../reference/privateNameStaticAccessorsCallExpression.js | 3 +++ tests/baselines/reference/privateNameStaticFieldAccess.js | 3 +++ .../baselines/reference/privateNameStaticFieldAssignment.js | 6 ++++++ .../reference/privateNameStaticFieldCallExpression.js | 3 +++ .../reference/privateNameStaticFieldClassExpression.js | 3 +++ .../reference/privateNameStaticFieldDerivedClasses.js | 6 ++++++ ...vateNameStaticFieldDestructuredBinding(target=es2015).js | 3 +++ .../reference/privateNameStaticFieldUnaryMutation.js | 6 ++++++ .../reference/privateNameStaticMethodClassExpression.js | 3 +++ tests/baselines/reference/privateNamesAndStaticFields.js | 6 ++++++ tests/baselines/reference/privateNamesConstructorChain-1.js | 3 +++ tests/baselines/reference/privateNamesConstructorChain-2.js | 3 +++ tests/baselines/reference/privateNamesUnique-3.js | 3 +++ 15 files changed, 60 insertions(+) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index c816ade231528..a65e32b220ef7 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -998,6 +998,9 @@ namespace ts { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; };` }; @@ -1011,6 +1014,9 @@ namespace ts { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } propertyDescriptor.value = value; return value; };` diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.js b/tests/baselines/reference/privateNameAndObjectRestSpread.js index 44ca402544baa..c1f8288ff3b31 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.js +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.js @@ -28,6 +28,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var __rest = (this && this.__rest) || function (s, e) { diff --git a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js index 3636bda179073..a34f6f9ee361b 100644 --- a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js @@ -23,6 +23,9 @@ var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } propertyDescriptor.value = value; return value; }; diff --git a/tests/baselines/reference/privateNameStaticFieldAccess.js b/tests/baselines/reference/privateNameStaticFieldAccess.js index 1493de026075f..9ccf5db488e29 100644 --- a/tests/baselines/reference/privateNameStaticFieldAccess.js +++ b/tests/baselines/reference/privateNameStaticFieldAccess.js @@ -13,6 +13,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _A_myField; diff --git a/tests/baselines/reference/privateNameStaticFieldAssignment.js b/tests/baselines/reference/privateNameStaticFieldAssignment.js index 76c140da1e309..94778a41f3667 100644 --- a/tests/baselines/reference/privateNameStaticFieldAssignment.js +++ b/tests/baselines/reference/privateNameStaticFieldAssignment.js @@ -40,6 +40,9 @@ var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } propertyDescriptor.value = value; return value; }; @@ -47,6 +50,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _A_field; diff --git a/tests/baselines/reference/privateNameStaticFieldCallExpression.js b/tests/baselines/reference/privateNameStaticFieldCallExpression.js index 4bd4350fc0118..6ecf4ee1367e5 100644 --- a/tests/baselines/reference/privateNameStaticFieldCallExpression.js +++ b/tests/baselines/reference/privateNameStaticFieldCallExpression.js @@ -25,6 +25,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _A_fieldFunc, _A_fieldFunc2; diff --git a/tests/baselines/reference/privateNameStaticFieldClassExpression.js b/tests/baselines/reference/privateNameStaticFieldClassExpression.js index 6bad09f78d404..78ec26dd09ebe 100644 --- a/tests/baselines/reference/privateNameStaticFieldClassExpression.js +++ b/tests/baselines/reference/privateNameStaticFieldClassExpression.js @@ -27,6 +27,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _B_foo, _B_foo2, _a, _b; diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js index bdad1319d82c1..b87120baff81c 100644 --- a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js @@ -21,6 +21,9 @@ var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } propertyDescriptor.value = value; return value; }; @@ -28,6 +31,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _Base_prop, _Derived_derivedProp; diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js index cdd7cecba6daf..670bdb67f084c 100644 --- a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js @@ -29,6 +29,9 @@ var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } propertyDescriptor.value = value; return value; }; diff --git a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js index ed80b28631f79..34c9cb9d0e223 100644 --- a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js @@ -34,12 +34,18 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } propertyDescriptor.value = value; return value; }; diff --git a/tests/baselines/reference/privateNameStaticMethodClassExpression.js b/tests/baselines/reference/privateNameStaticMethodClassExpression.js index 1d321c7af3c59..8b7e3859d885e 100644 --- a/tests/baselines/reference/privateNameStaticMethodClassExpression.js +++ b/tests/baselines/reference/privateNameStaticMethodClassExpression.js @@ -17,6 +17,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { diff --git a/tests/baselines/reference/privateNamesAndStaticFields.js b/tests/baselines/reference/privateNamesAndStaticFields.js index 6bebd095e4550..09bf413c203f1 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.js +++ b/tests/baselines/reference/privateNamesAndStaticFields.js @@ -28,6 +28,9 @@ var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } propertyDescriptor.value = value; return value; }; @@ -35,6 +38,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _A_foo, _A_bar, _B_foo; diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index dc6977aa3bbc7..b97c0939da014 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -25,6 +25,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index d375038281c29..4e53e4b954c42 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -27,6 +27,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index a0d46b395cc08..a6a4ba06d4b6e 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -19,6 +19,9 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } return propertyDescriptor.value; }; var _A_foo, _A_foo_1, _B_foo; From 7e7b0b18a906fd94a62cb8de038276b338f0b791 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Thu, 25 Feb 2021 19:20:02 +0200 Subject: [PATCH 48/73] Fixed code review comments for private identifier static class elements. --- src/compiler/transformers/classFields.ts | 23 +++++++-------- .../reference/privateNameAndAny.errors.txt | 29 ++++++++++++++----- .../baselines/reference/privateNameAndAny.js | 21 ++++++++++++-- .../reference/privateNameAndAny.symbols | 24 +++++++++++---- .../reference/privateNameAndAny.types | 22 ++++++++++++-- ...StaticFieldNoInitializer(target=es2015).js | 18 ++++++++++++ ...cFieldNoInitializer(target=es2015).symbols | 14 +++++++++ ...ticFieldNoInitializer(target=es2015).types | 15 ++++++++++ ...StaticFieldNoInitializer(target=esnext).js | 16 ++++++++++ ...cFieldNoInitializer(target=esnext).symbols | 14 +++++++++ ...ticFieldNoInitializer(target=esnext).types | 15 ++++++++++ .../members/privateNames/privateNameAndAny.ts | 6 +++- .../privateNameStaticFieldNoInitializer.ts | 9 ++++++ 13 files changed, 194 insertions(+), 32 deletions(-) create mode 100644 tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).js create mode 100644 tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).types create mode 100644 tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).js create mode 100644 tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).symbols create mode 100644 tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldNoInitializer.ts diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 38822a7ab0741..2370daade5c66 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -691,7 +691,7 @@ namespace ts { } function visitClassDeclaration(node: ClassDeclaration) { - getPrivateIdentifierEnvironment().classConstructor = factory.getInternalName(node) ; + getPrivateIdentifierEnvironment().classConstructor = factory.getInternalName(node); if (!forEach(node.members, doesClassElementNeedTransform)) { return visitEachChild(node, visitor, context); } @@ -765,8 +765,8 @@ namespace ts { visitNodes(node.heritageClauses, visitor, isHeritageClause), transformClassMembers(node, isDerivedClass) ); - - if (some(staticProperties, p => !!p.initializer || isPrivateIdentifier(p.name)) || some(pendingExpressions)) { + const hasTransformableStatics = some(staticProperties, p => !!p.initializer || (shouldTransformPrivateElements && isPrivateIdentifier(p.name))); + if (hasTransformableStatics || some(pendingExpressions)) { if (isDecoratedClassDeclaration) { Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration."); @@ -775,10 +775,8 @@ namespace ts { pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions))); } - if (pendingStatements) { - if (some(staticProperties)) { - addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); - } + if (pendingStatements && some(staticProperties)) { + addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node)); } if (temp) { return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]); @@ -1211,7 +1209,7 @@ namespace ts { function addPrivateIdentifierToEnvironment(node: PrivateClassElementDeclaration) { const text = getTextOfPropertyName(node.name) as string; const env = getPrivateIdentifierEnvironment(); - const { weakSetName } = env; + const { weakSetName, classConstructor } = env; let info: PrivateIdentifierInfo; const assignmentExpressions: Expression[] = []; if (hasStaticModifier(node)) { @@ -1220,7 +1218,7 @@ namespace ts { info = { placement: PrivateIdentifierPlacement.StaticField, variableName, - classConstructor: env.classConstructor + classConstructor }; } else if (isMethodDeclaration(node)) { @@ -1228,7 +1226,7 @@ namespace ts { info = { placement: PrivateIdentifierPlacement.StaticMethod, functionName, - classConstructor: env.classConstructor + classConstructor }; } else if (isGetAccessorDeclaration(node)) { @@ -1245,7 +1243,7 @@ namespace ts { info = { placement: PrivateIdentifierPlacement.StaticGetterOnly, getterName, - classConstructor: env.classConstructor + classConstructor }; } } @@ -1256,7 +1254,6 @@ namespace ts { info = { ...previousInfo, placement: PrivateIdentifierPlacement.StaticGetterAndSetter, - getterName: previousInfo.getterName, setterName, }; } @@ -1264,7 +1261,7 @@ namespace ts { info = { placement: PrivateIdentifierPlacement.StaticSetterOnly, setterName, - classConstructor: env.classConstructor + classConstructor }; } } diff --git a/tests/baselines/reference/privateNameAndAny.errors.txt b/tests/baselines/reference/privateNameAndAny.errors.txt index 4f409ed2df5cc..dbc6209113729 100644 --- a/tests/baselines/reference/privateNameAndAny.errors.txt +++ b/tests/baselines/reference/privateNameAndAny.errors.txt @@ -1,15 +1,18 @@ -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(8,15): error TS2339: Property '#bar' does not exist on type 'any'. tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(9,15): error TS2339: Property '#bar' does not exist on type 'any'. tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(13,9): error TS2571: Object is of type 'unknown'. tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(14,9): error TS2571: Object is of type 'unknown'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(14,15): error TS2339: Property '#bar' does not exist on type 'any'. tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(15,9): error TS2571: Object is of type 'unknown'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(18,15): error TS2339: Property '#foo' does not exist on type 'never'. -tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(19,15): error TS2339: Property '#bar' does not exist on type 'never'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(16,9): error TS2571: Object is of type 'unknown'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(16,15): error TS2339: Property '#bar' does not exist on type 'any'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(17,9): error TS2571: Object is of type 'unknown'. tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(20,15): error TS2339: Property '#foo' does not exist on type 'never'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(21,15): error TS2339: Property '#m' does not exist on type 'never'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(22,15): error TS2339: Property '#baz' does not exist on type 'never'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(23,15): error TS2339: Property '#bar' does not exist on type 'never'. +tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(24,15): error TS2339: Property '#foo' does not exist on type 'never'. -==== tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts (9 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts (12 errors) ==== class A { #foo = true; static #baz = 10; @@ -17,9 +20,7 @@ tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(20,15) method(thing: any) { thing.#foo; // OK thing.#m(); - thing.#bar; - ~~~~ -!!! error TS2339: Property '#bar' does not exist on type 'any'. + thing.#baz; thing.#bar; // Error ~~~~ !!! error TS2339: Property '#bar' does not exist on type 'any'. @@ -28,6 +29,12 @@ tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(20,15) methodU(thing: unknown) { thing.#foo; ~~~~~ +!!! error TS2571: Object is of type 'unknown'. + thing.#m(); + ~~~~~ +!!! error TS2571: Object is of type 'unknown'. + thing.#baz; + ~~~~~ !!! error TS2571: Object is of type 'unknown'. thing.#bar; ~~~~~ @@ -42,6 +49,12 @@ tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(20,15) thing.#foo; ~~~~ !!! error TS2339: Property '#foo' does not exist on type 'never'. + thing.#m(); + ~~ +!!! error TS2339: Property '#m' does not exist on type 'never'. + thing.#baz; + ~~~~ +!!! error TS2339: Property '#baz' does not exist on type 'never'. thing.#bar; ~~~~ !!! error TS2339: Property '#bar' does not exist on type 'never'. diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index db0b146c8db42..0a43da2be0639 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -6,17 +6,21 @@ class A { method(thing: any) { thing.#foo; // OK thing.#m(); - thing.#bar; + thing.#baz; thing.#bar; // Error thing.#foo(); } methodU(thing: unknown) { thing.#foo; + thing.#m(); + thing.#baz; thing.#bar; thing.#foo(); } methodN(thing: never) { thing.#foo; + thing.#m(); + thing.#baz; thing.#bar; thing.#foo(); } @@ -37,6 +41,15 @@ var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) } return fn; }; +var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + if (propertyDescriptor === undefined) { + throw new TypeError("Private static field was accessed before its declaration."); + } + return propertyDescriptor.value; +}; var _A_foo, _A_baz, _A_m; class A { constructor() { @@ -46,18 +59,22 @@ class A { __classPrivateFieldGet(thing, _A_foo); // OK __classStaticPrivateMethodGet(thing, A, _A_m).call(// OK thing); - thing.; + __classStaticPrivateFieldGet(thing, A, _A_baz); thing.; // Error __classPrivateFieldGet(thing, _A_foo).call(// Error thing); } methodU(thing) { __classPrivateFieldGet(thing, _A_foo); + __classStaticPrivateMethodGet(thing, A, _A_m).call(thing); + __classStaticPrivateFieldGet(thing, A, _A_baz); thing.; __classPrivateFieldGet(thing, _A_foo).call(thing); } methodN(thing) { __classPrivateFieldGet(thing, _A_foo); + __classStaticPrivateMethodGet(thing, A, _A_m).call(thing); + __classStaticPrivateFieldGet(thing, A, _A_baz); thing.; __classPrivateFieldGet(thing, _A_foo).call(thing); } diff --git a/tests/baselines/reference/privateNameAndAny.symbols b/tests/baselines/reference/privateNameAndAny.symbols index ace5ce1d7ef9b..2d18a97fd431a 100644 --- a/tests/baselines/reference/privateNameAndAny.symbols +++ b/tests/baselines/reference/privateNameAndAny.symbols @@ -21,7 +21,7 @@ class A { thing.#m(); >thing : Symbol(thing, Decl(privateNameAndAny.ts, 4, 11)) - thing.#bar; + thing.#baz; >thing : Symbol(thing, Decl(privateNameAndAny.ts, 4, 11)) thing.#bar; // Error @@ -37,6 +37,12 @@ class A { thing.#foo; >thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) + thing.#m(); +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) + + thing.#baz; +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) + thing.#bar; >thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) @@ -44,17 +50,23 @@ class A { >thing : Symbol(thing, Decl(privateNameAndAny.ts, 11, 12)) } methodN(thing: never) { ->methodN : Symbol(A.methodN, Decl(privateNameAndAny.ts, 15, 5)) ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 16, 12)) +>methodN : Symbol(A.methodN, Decl(privateNameAndAny.ts, 17, 5)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 18, 12)) thing.#foo; ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 16, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 18, 12)) + + thing.#m(); +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 18, 12)) + + thing.#baz; +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 18, 12)) thing.#bar; ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 16, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 18, 12)) thing.#foo(); ->thing : Symbol(thing, Decl(privateNameAndAny.ts, 16, 12)) +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 18, 12)) } }; diff --git a/tests/baselines/reference/privateNameAndAny.types b/tests/baselines/reference/privateNameAndAny.types index 016debf7df0aa..8ac6efcbf2bfa 100644 --- a/tests/baselines/reference/privateNameAndAny.types +++ b/tests/baselines/reference/privateNameAndAny.types @@ -26,8 +26,8 @@ class A { >thing.#m : any >thing : any - thing.#bar; ->thing.#bar : any + thing.#baz; +>thing.#baz : any >thing : any thing.#bar; // Error @@ -45,6 +45,15 @@ class A { thing.#foo; >thing.#foo : any +>thing : unknown + + thing.#m(); +>thing.#m() : any +>thing.#m : any +>thing : unknown + + thing.#baz; +>thing.#baz : any >thing : unknown thing.#bar; @@ -62,6 +71,15 @@ class A { thing.#foo; >thing.#foo : any +>thing : never + + thing.#m(); +>thing.#m() : any +>thing.#m : any +>thing : never + + thing.#baz; +>thing.#baz : any >thing : never thing.#bar; diff --git a/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).js new file mode 100644 index 0000000000000..dcfcf0ee30651 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).js @@ -0,0 +1,18 @@ +//// [privateNameStaticFieldNoInitializer.ts] +const C = class { + static #x; +} + +class C2 { + static #x; +} + +//// [privateNameStaticFieldNoInitializer.js] +var _a, _C_x, _C2_x; +const C = (_a = class { + }, + _C_x = { value: void 0 }, + _a); +class C2 { +} +_C2_x = { value: void 0 }; diff --git a/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).symbols b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).symbols new file mode 100644 index 0000000000000..282fbce172a80 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).symbols @@ -0,0 +1,14 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldNoInitializer.ts === +const C = class { +>C : Symbol(C, Decl(privateNameStaticFieldNoInitializer.ts, 0, 5)) + + static #x; +>#x : Symbol(C.#x, Decl(privateNameStaticFieldNoInitializer.ts, 0, 17)) +} + +class C2 { +>C2 : Symbol(C2, Decl(privateNameStaticFieldNoInitializer.ts, 2, 1)) + + static #x; +>#x : Symbol(C2.#x, Decl(privateNameStaticFieldNoInitializer.ts, 4, 10)) +} diff --git a/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).types b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).types new file mode 100644 index 0000000000000..a9ecdc42725e9 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldNoInitializer.ts === +const C = class { +>C : typeof C +>class { static #x;} : typeof C + + static #x; +>#x : any +} + +class C2 { +>C2 : C2 + + static #x; +>#x : any +} diff --git a/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).js b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).js new file mode 100644 index 0000000000000..df9759b3ea594 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).js @@ -0,0 +1,16 @@ +//// [privateNameStaticFieldNoInitializer.ts] +const C = class { + static #x; +} + +class C2 { + static #x; +} + +//// [privateNameStaticFieldNoInitializer.js] +const C = class { + static #x; +}; +class C2 { + static #x; +} diff --git a/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).symbols b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).symbols new file mode 100644 index 0000000000000..282fbce172a80 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).symbols @@ -0,0 +1,14 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldNoInitializer.ts === +const C = class { +>C : Symbol(C, Decl(privateNameStaticFieldNoInitializer.ts, 0, 5)) + + static #x; +>#x : Symbol(C.#x, Decl(privateNameStaticFieldNoInitializer.ts, 0, 17)) +} + +class C2 { +>C2 : Symbol(C2, Decl(privateNameStaticFieldNoInitializer.ts, 2, 1)) + + static #x; +>#x : Symbol(C2.#x, Decl(privateNameStaticFieldNoInitializer.ts, 4, 10)) +} diff --git a/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).types b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).types new file mode 100644 index 0000000000000..a9ecdc42725e9 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=esnext).types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldNoInitializer.ts === +const C = class { +>C : typeof C +>class { static #x;} : typeof C + + static #x; +>#x : any +} + +class C2 { +>C2 : C2 + + static #x; +>#x : any +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts index 91eb98a25186f..a0d06e0aebdf6 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts @@ -8,17 +8,21 @@ class A { method(thing: any) { thing.#foo; // OK thing.#m(); - thing.#bar; + thing.#baz; thing.#bar; // Error thing.#foo(); } methodU(thing: unknown) { thing.#foo; + thing.#m(); + thing.#baz; thing.#bar; thing.#foo(); } methodN(thing: never) { thing.#foo; + thing.#m(); + thing.#baz; thing.#bar; thing.#foo(); } diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldNoInitializer.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldNoInitializer.ts new file mode 100644 index 0000000000000..815a5d40f632e --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticFieldNoInitializer.ts @@ -0,0 +1,9 @@ +// @target: es2015, esnext + +const C = class { + static #x; +} + +class C2 { + static #x; +} \ No newline at end of file From 30c7f69c91611c2588f6cf51465730380486420f Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Mon, 1 Mar 2021 08:44:09 +0000 Subject: [PATCH 49/73] add debug.assertNever for unknown node type (#53) --- 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 d9be7159454d7..f701a521dee50 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -1170,7 +1170,7 @@ namespace ts { } } else { - return; + Debug.assertNever(node, "Unknown class element type."); } getPrivateIdentifierEnvironment().identifiers.set(node.name.escapedText, info); From 4748c870fb5ee24a6b71f2678937c9d2f0fd37bc Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Wed, 3 Mar 2021 18:40:58 +0200 Subject: [PATCH 50/73] Fixed code review issues. --- src/compiler/checker.ts | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9169298d8c46e..5b269d6ea9d7d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26407,7 +26407,7 @@ namespace ts { // a super property access is permitted and must specify a public static member function of the base class. if (languageVersion < ScriptTarget.ES2015) { if (symbolHasNonMethodDeclaration(prop)) { - if(reportError) { + if (reportError) { error(errorNode, Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); } return false; @@ -26418,7 +26418,7 @@ namespace ts { // This error could mask a private property access error. But, a member // cannot simultaneously be private and abstract, so this will trigger an // additional error elsewhere. - if(reportError) { + if (reportError) { error(errorNode, Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression, symbolToString(prop), typeToString(getDeclaringClass(prop)!)); } return false; @@ -26429,7 +26429,7 @@ namespace ts { if ((flags & ModifierFlags.Abstract) && isThisProperty(node) && symbolHasNonMethodDeclaration(prop)) { const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)!); if (declaringClassDeclaration && isNodeUsedDuringClassInitialization(node)) { - if(reportError) { + if (reportError) { error(errorNode, Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor, symbolToString(prop), getTextOfIdentifierOrLiteral(declaringClassDeclaration.name!)); // TODO: GH#18217 } return false; @@ -26447,7 +26447,7 @@ namespace ts { if (flags & ModifierFlags.Private) { const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)!)!; if (!isNodeWithinClass(node, declaringClassDeclaration)) { - if(reportError) { + if (reportError) { error(errorNode, Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(getDeclaringClass(prop)!)); } return false; @@ -26474,7 +26474,7 @@ namespace ts { // static member access is disallow let thisParameter: ParameterDeclaration | undefined; if (flags & ModifierFlags.Static || !(thisParameter = getThisParameterFromNodeContext(node)) || !thisParameter.type) { - if(reportError) { + if (reportError) { error(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(getDeclaringClass(prop) || type)); } return false; @@ -26492,7 +26492,7 @@ namespace ts { type = (type as TypeParameter).isThisType ? getConstraintOfTypeParameter(type)! : getBaseConstraintOfType(type)!; // TODO: GH#18217 Use a different variable that's allowed to be undefined } if (!type || !hasBaseType(type, enclosingClass)) { - if(reportError) { + if (reportError) { error(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass)); } return false; @@ -26683,7 +26683,7 @@ namespace ts { let prop: Symbol | undefined; if (isPrivateIdentifier(right)) { const lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(right.escapedText, right); - if(assignmentKind && lexicallyScopedSymbol && isMethodDeclaration(lexicallyScopedSymbol.valueDeclaration)) { + if (assignmentKind && lexicallyScopedSymbol && isMethodDeclaration(lexicallyScopedSymbol.valueDeclaration)) { grammarErrorOnNode(right, Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable, idText(right)); } if (isAnyLike) { @@ -26973,13 +26973,14 @@ namespace ts { function getSuggestedSymbolForNonexistentProperty(name: Identifier | PrivateIdentifier | string, containingType: Type): Symbol | undefined { let props = getPropertiesOfType(containingType); - if(typeof name !== "string") { + if (typeof name !== "string") { const parent = name.parent; - if(isPropertyAccessExpression(parent)) { + if (isPropertyAccessExpression(parent)) { props = filter(props, prop => isValidPropertyAccessForCompletions(parent, containingType, prop)); } + name = idText(name); } - return getSpellingSuggestionForName(isString(name) ? name : idText(name), props, SymbolFlags.Value); + return getSpellingSuggestionForName(name, props, SymbolFlags.Value); } function getSuggestedSymbolForNonexistentJSXAttribute(name: Identifier | PrivateIdentifier | string, containingType: Type): Symbol | undefined { From 497e47ff03e65a2ba7a0e852ab38a49c999bbdb2 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Wed, 3 Mar 2021 19:02:43 +0200 Subject: [PATCH 51/73] Fixed code review issues for private class elements. --- src/compiler/checker.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cffd970f005a8..de2dc8a31e0be 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -32417,7 +32417,7 @@ namespace ts { continue; } const isPrivate = isPrivateIdentifier(name); - const isPrivateStatic = isPrivate && isStatic ? DeclarationMeaning.PrivateStatic : 0; + const privateStaticFlags = isPrivate && isStatic ? DeclarationMeaning.PrivateStatic : 0; const names = isPrivate ? privateIdentifiers : isStatic ? staticNames : @@ -32427,19 +32427,19 @@ namespace ts { if (memberName) { switch (member.kind) { case SyntaxKind.GetAccessor: - addName(names, name, memberName, DeclarationMeaning.GetAccessor | isPrivateStatic); + addName(names, name, memberName, DeclarationMeaning.GetAccessor | privateStaticFlags); break; case SyntaxKind.SetAccessor: - addName(names, name, memberName, DeclarationMeaning.SetAccessor | isPrivateStatic); + addName(names, name, memberName, DeclarationMeaning.SetAccessor | privateStaticFlags); break; case SyntaxKind.PropertyDeclaration: - addName(names, name, memberName, DeclarationMeaning.GetOrSetAccessor | isPrivateStatic); + addName(names, name, memberName, DeclarationMeaning.GetOrSetAccessor | privateStaticFlags); break; case SyntaxKind.MethodDeclaration: - addName(names, name, memberName, DeclarationMeaning.Method | isPrivateStatic); + addName(names, name, memberName, DeclarationMeaning.Method | privateStaticFlags); break; } } From 294cc48f5e93ea061a911e134d091a7cf9b64e15 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Mon, 8 Mar 2021 15:23:53 +0200 Subject: [PATCH 52/73] Fixes class shadowing when checking access to a private static class element. --- src/compiler/transformers/classFields.ts | 12 +- .../baselines/reference/privateNameAndAny.js | 16 +-- .../privateNameAndObjectRestSpread.js | 8 +- .../reference/privateNameDuplicateField.js | 109 +++++++++--------- .../privateNameES5Ban(target=es3).js | 4 +- .../privateNameES5Ban(target=es5).js | 4 +- .../reference/privateNameStaticAccessors.js | 10 +- .../privateNameStaticAccessorsAccess.js | 10 +- ...rivateNameStaticAccessorsCallExpression.js | 20 ++-- ...ivateNameStaticAccessorssDerivedClasses.js | 6 +- ...aticAndStaticInitializer(target=es2015).js | 3 +- .../reference/privateNameStaticFieldAccess.js | 7 +- .../privateNameStaticFieldAssignment.js | 57 ++++----- .../privateNameStaticFieldCallExpression.js | 21 ++-- .../privateNameStaticFieldClassExpression.js | 23 ++-- .../privateNameStaticFieldDerivedClasses.js | 8 +- ...FieldDestructuredBinding(target=es2015).js | 21 ++-- ...meStaticFieldInitializer(target=es2015).js | 3 +- ...StaticFieldNoInitializer(target=es2015).js | 3 +- .../privateNameStaticFieldUnaryMutation.js | 47 ++++---- .../reference/privateNameStaticMethod.js | 10 +- .../privateNameStaticMethodAssignment.js | 12 +- .../privateNameStaticMethodCallExpression.js | 26 ++--- ...rivateNameStaticMethodInStaticFieldInit.js | 6 +- .../reference/privateNamesAndStaticFields.js | 12 +- .../privateNamesConstructorChain-1.js | 6 +- .../privateNamesConstructorChain-2.js | 6 +- .../privateNamesInNestedClasses-2.js | 3 +- .../reference/privateNamesUnique-3.js | 7 +- .../reference/privateStaticNameShadowing.js | 36 ++++++ .../privateStaticNameShadowing.symbols | 30 +++++ .../privateStaticNameShadowing.types | 37 ++++++ .../privateStaticNameShadowing.ts | 15 +++ 33 files changed, 371 insertions(+), 227 deletions(-) create mode 100644 tests/baselines/reference/privateStaticNameShadowing.js create mode 100644 tests/baselines/reference/privateStaticNameShadowing.symbols create mode 100644 tests/baselines/reference/privateStaticNameShadowing.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateStaticNameShadowing.ts diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 5a81f02d75409..b3bcb01fac055 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -691,11 +691,20 @@ namespace ts { } function visitClassDeclaration(node: ClassDeclaration) { - getPrivateIdentifierEnvironment().classConstructor = factory.getInternalName(node); if (!forEach(node.members, doesClassElementNeedTransform)) { return visitEachChild(node, visitor, context); } + const staticProperties = getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true); + 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); + getPendingExpressions().push(factory.createAssignment( + temp, + factory.getInternalName(node) + )); + } + const extendsClauseElement = getEffectiveBaseTypeNode(node); const isDerivedClass = !!(extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== SyntaxKind.NullKeyword); @@ -721,7 +730,6 @@ namespace ts { // From ES6 specification: // HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. - const staticProperties = getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true); if (some(staticProperties)) { addPropertyStatements(statements, staticProperties, factory.getInternalName(node)); diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index 0a43da2be0639..e80ac060f9ab6 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -50,35 +50,35 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _A_foo, _A_baz, _A_m; +var _a, _A_foo, _A_baz, _A_m; class A { constructor() { _A_foo.set(this, true); } method(thing) { __classPrivateFieldGet(thing, _A_foo); // OK - __classStaticPrivateMethodGet(thing, A, _A_m).call(// OK + __classStaticPrivateMethodGet(thing, _a, _A_m).call(// OK thing); - __classStaticPrivateFieldGet(thing, A, _A_baz); + __classStaticPrivateFieldGet(thing, _a, _A_baz); thing.; // Error __classPrivateFieldGet(thing, _A_foo).call(// Error thing); } methodU(thing) { __classPrivateFieldGet(thing, _A_foo); - __classStaticPrivateMethodGet(thing, A, _A_m).call(thing); - __classStaticPrivateFieldGet(thing, A, _A_baz); + __classStaticPrivateMethodGet(thing, _a, _A_m).call(thing); + __classStaticPrivateFieldGet(thing, _a, _A_baz); thing.; __classPrivateFieldGet(thing, _A_foo).call(thing); } methodN(thing) { __classPrivateFieldGet(thing, _A_foo); - __classStaticPrivateMethodGet(thing, A, _A_m).call(thing); - __classStaticPrivateFieldGet(thing, A, _A_baz); + __classStaticPrivateMethodGet(thing, _a, _A_m).call(thing); + __classStaticPrivateFieldGet(thing, _a, _A_baz); thing.; __classPrivateFieldGet(thing, _A_foo).call(thing); } } -_A_foo = new WeakMap(), _A_m = function _A_m() { }; +_a = A, _A_foo = new WeakMap(), _A_m = function _A_m() { }; _A_baz = { value: 10 }; ; diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.js b/tests/baselines/reference/privateNameAndObjectRestSpread.js index c1f8288ff3b31..7dba9fa4fb55d 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.js +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.js @@ -44,7 +44,7 @@ var __rest = (this && this.__rest) || function (s, e) { } return t; }; -var _C_prop, _C_propStatic; +var _a, _C_prop, _C_propStatic; class C { constructor() { _C_prop.set(this, 1); @@ -55,10 +55,10 @@ class C { const rest = __rest(other, []); __classPrivateFieldGet(rest, _C_prop); const statics = Object.assign({}, C); - __classStaticPrivateFieldGet(statics, C, _C_propStatic); + __classStaticPrivateFieldGet(statics, _a, _C_propStatic); const sRest = __rest(C, []); - __classStaticPrivateFieldGet(sRest, C, _C_propStatic); + __classStaticPrivateFieldGet(sRest, _a, _C_propStatic); } } -_C_prop = new WeakMap(); +_a = C, _C_prop = new WeakMap(); _C_propStatic = { value: 1 }; diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index 93e0bbe2a5dc7..24ef61f637011 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -406,7 +406,7 @@ function StaticSetter() { //// [privateNameDuplicateField.js] "use strict"; function Field() { - var _A_Field_Field_foo, _A_Field_Field_foo_1, _A_Field_Method_instances, _A_Field_Method_foo, _A_Field_Method_foo_1, _A_Field_Getter_instances, _A_Field_Getter_foo, _A_Field_Getter_foo_get, _A_Field_Setter_instances, _A_Field_Setter_foo, _A_Field_Setter_foo_set, _A_Field_StaticField_foo, _A_Field_StaticField_foo_1, _A_Field_StaticMethod_foo, _A_Field_StaticMethod_foo_1, _A_Field_StaticGetter_foo, _A_Field_StaticGetter_foo_get, _A_Field_StaticSetter_foo, _A_Field_StaticSetter_foo_set; + var _A_Field_Field_foo, _A_Field_Field_foo_1, _A_Field_Method_instances, _A_Field_Method_foo, _A_Field_Method_foo_1, _A_Field_Getter_instances, _A_Field_Getter_foo, _A_Field_Getter_foo_get, _A_Field_Setter_instances, _A_Field_Setter_foo, _A_Field_Setter_foo_set, _a, _A_Field_StaticField_foo, _A_Field_StaticField_foo_1, _b, _A_Field_StaticMethod_foo, _A_Field_StaticMethod_foo_1, _c, _A_Field_StaticGetter_foo, _A_Field_StaticGetter_foo_get, _d, _A_Field_StaticSetter_foo, _A_Field_StaticSetter_foo_set; // Error class A_Field_Field { constructor() { @@ -442,29 +442,29 @@ function Field() { _A_Field_StaticField_foo_1 = { value: "foo" }; } } - _A_Field_StaticField_foo = new WeakMap(); + _a = A_Field_StaticField, _A_Field_StaticField_foo = new WeakMap(); _A_Field_StaticField_foo_1 = { value: "foo" }; // Error class A_Field_StaticMethod { constructor() { } } - _A_Field_StaticMethod_foo = new WeakMap(), _A_Field_StaticMethod_foo_1 = function _A_Field_StaticMethod_foo_1() { }; + _b = A_Field_StaticMethod, _A_Field_StaticMethod_foo = new WeakMap(), _A_Field_StaticMethod_foo_1 = function _A_Field_StaticMethod_foo_1() { }; // Error class A_Field_StaticGetter { constructor() { } } - _A_Field_StaticGetter_foo = new WeakMap(), _A_Field_StaticGetter_foo_get = function _A_Field_StaticGetter_foo_get() { return ""; }; + _c = A_Field_StaticGetter, _A_Field_StaticGetter_foo = new WeakMap(), _A_Field_StaticGetter_foo_get = function _A_Field_StaticGetter_foo_get() { return ""; }; // Error class A_Field_StaticSetter { constructor() { } } - _A_Field_StaticSetter_foo = new WeakMap(), _A_Field_StaticSetter_foo_set = function _A_Field_StaticSetter_foo_set(value) { }; + _d = A_Field_StaticSetter, _A_Field_StaticSetter_foo = new WeakMap(), _A_Field_StaticSetter_foo_set = function _A_Field_StaticSetter_foo_set(value) { }; } function Method() { - var _A_Method_Field_instances, _A_Method_Field_foo, _A_Method_Field_foo_1, _A_Method_Method_instances, _A_Method_Method_foo, _A_Method_Method_foo_1, _A_Method_Getter_instances, _A_Method_Getter_foo, _A_Method_Getter_foo_get, _A_Method_Setter_instances, _A_Method_Setter_foo, _A_Method_Setter_foo_set, _A_Method_StaticField_instances, _A_Method_StaticField_foo, _A_Method_StaticField_foo_1, _A_Method_StaticMethod_instances, _A_Method_StaticMethod_foo, _A_Method_StaticMethod_foo_1, _A_Method_StaticGetter_instances, _A_Method_StaticGetter_foo, _A_Method_StaticGetter_foo_get, _A_Method_StaticSetter_instances, _A_Method_StaticSetter_foo, _A_Method_StaticSetter_foo_set; + var _A_Method_Field_instances, _A_Method_Field_foo, _A_Method_Field_foo_1, _A_Method_Method_instances, _A_Method_Method_foo, _A_Method_Method_foo_1, _A_Method_Getter_instances, _A_Method_Getter_foo, _A_Method_Getter_foo_get, _A_Method_Setter_instances, _A_Method_Setter_foo, _A_Method_Setter_foo_set, _A_Method_StaticField_instances, _a, _A_Method_StaticField_foo, _A_Method_StaticField_foo_1, _A_Method_StaticMethod_instances, _b, _A_Method_StaticMethod_foo, _A_Method_StaticMethod_foo_1, _A_Method_StaticGetter_instances, _c, _A_Method_StaticGetter_foo, _A_Method_StaticGetter_foo_get, _A_Method_StaticSetter_instances, _d, _A_Method_StaticSetter_foo, _A_Method_StaticSetter_foo_set; // Error class A_Method_Field { constructor() { @@ -500,7 +500,7 @@ function Method() { _A_Method_StaticField_instances.add(this); } } - _A_Method_StaticField_instances = new WeakSet(); + _a = A_Method_StaticField, _A_Method_StaticField_instances = new WeakSet(); _A_Method_StaticField_foo_1 = { value: "foo" }; // Error class A_Method_StaticMethod { @@ -508,24 +508,24 @@ function Method() { _A_Method_StaticMethod_instances.add(this); } } - _A_Method_StaticMethod_instances = new WeakSet(), _A_Method_StaticMethod_foo_1 = function _A_Method_StaticMethod_foo_1() { }, _A_Method_StaticMethod_foo_1 = function _A_Method_StaticMethod_foo_1() { }; + _b = A_Method_StaticMethod, _A_Method_StaticMethod_instances = new WeakSet(), _A_Method_StaticMethod_foo_1 = function _A_Method_StaticMethod_foo_1() { }, _A_Method_StaticMethod_foo_1 = function _A_Method_StaticMethod_foo_1() { }; // Error class A_Method_StaticGetter { constructor() { _A_Method_StaticGetter_instances.add(this); } } - _A_Method_StaticGetter_instances = new WeakSet(), _A_Method_StaticGetter_foo_get = function _A_Method_StaticGetter_foo_get() { return ""; }; + _c = A_Method_StaticGetter, _A_Method_StaticGetter_instances = new WeakSet(), _A_Method_StaticGetter_foo_get = function _A_Method_StaticGetter_foo_get() { return ""; }; // Error class A_Method_StaticSetter { constructor() { _A_Method_StaticSetter_instances.add(this); } } - _A_Method_StaticSetter_instances = new WeakSet(), _A_Method_StaticSetter_foo_set = function _A_Method_StaticSetter_foo_set(value) { }; + _d = A_Method_StaticSetter, _A_Method_StaticSetter_instances = new WeakSet(), _A_Method_StaticSetter_foo_set = function _A_Method_StaticSetter_foo_set(value) { }; } function Getter() { - var _A_Getter_Field_instances, _A_Getter_Field_foo_get, _A_Getter_Field_foo, _A_Getter_Method_instances, _A_Getter_Method_foo_get, _A_Getter_Method_foo, _A_Getter_Getter_instances, _A_Getter_Getter_foo_get, _A_Getter_Getter_foo_get_1, _A_Getter_Setter_instances, _A_Getter_Setter_foo_get, _A_Getter_Setter_foo_set, _A_Getter_StaticField_instances, _A_Getter_StaticField_foo_get, _A_Getter_StaticField_foo, _A_Getter_StaticMethod_instances, _A_Getter_StaticMethod_foo_get, _A_Getter_StaticMethod_foo, _A_Getter_StaticGetter_instances, _A_Getter_StaticGetter_foo_get, _A_Getter_StaticGetter_foo_get_1, _A_Getter_StaticSetter_instances, _A_Getter_StaticSetter_foo_get, _A_Getter_StaticSetter_foo_set; + var _A_Getter_Field_instances, _A_Getter_Field_foo_get, _A_Getter_Field_foo, _A_Getter_Method_instances, _A_Getter_Method_foo_get, _A_Getter_Method_foo, _A_Getter_Getter_instances, _A_Getter_Getter_foo_get, _A_Getter_Getter_foo_get_1, _A_Getter_Setter_instances, _A_Getter_Setter_foo_get, _A_Getter_Setter_foo_set, _A_Getter_StaticField_instances, _a, _A_Getter_StaticField_foo_get, _A_Getter_StaticField_foo, _A_Getter_StaticMethod_instances, _b, _A_Getter_StaticMethod_foo_get, _A_Getter_StaticMethod_foo, _A_Getter_StaticGetter_instances, _c, _A_Getter_StaticGetter_foo_get, _A_Getter_StaticGetter_foo_get_1, _A_Getter_StaticSetter_instances, _d, _A_Getter_StaticSetter_foo_get, _A_Getter_StaticSetter_foo_set; // Error class A_Getter_Field { constructor() { @@ -561,31 +561,31 @@ function Getter() { _A_Getter_StaticField_instances.add(this); } } - _A_Getter_StaticField_instances = new WeakSet(), _A_Getter_StaticField_foo = function _A_Getter_StaticField_foo() { return ""; }, _A_Getter_StaticField_foo = function _A_Getter_StaticField_foo() { }; + _a = A_Getter_StaticField, _A_Getter_StaticField_instances = new WeakSet(), _A_Getter_StaticField_foo = function _A_Getter_StaticField_foo() { return ""; }, _A_Getter_StaticField_foo = function _A_Getter_StaticField_foo() { }; // Error class A_Getter_StaticMethod { constructor() { _A_Getter_StaticMethod_instances.add(this); } } - _A_Getter_StaticMethod_instances = new WeakSet(), _A_Getter_StaticMethod_foo = function _A_Getter_StaticMethod_foo() { return ""; }, _A_Getter_StaticMethod_foo = function _A_Getter_StaticMethod_foo() { }; + _b = A_Getter_StaticMethod, _A_Getter_StaticMethod_instances = new WeakSet(), _A_Getter_StaticMethod_foo = function _A_Getter_StaticMethod_foo() { return ""; }, _A_Getter_StaticMethod_foo = function _A_Getter_StaticMethod_foo() { }; // Error class A_Getter_StaticGetter { constructor() { _A_Getter_StaticGetter_instances.add(this); } } - _A_Getter_StaticGetter_instances = new WeakSet(), _A_Getter_StaticGetter_foo_get_1 = function _A_Getter_StaticGetter_foo_get_1() { return ""; }, _A_Getter_StaticGetter_foo_get_1 = function _A_Getter_StaticGetter_foo_get_1() { return ""; }; + _c = A_Getter_StaticGetter, _A_Getter_StaticGetter_instances = new WeakSet(), _A_Getter_StaticGetter_foo_get_1 = function _A_Getter_StaticGetter_foo_get_1() { return ""; }, _A_Getter_StaticGetter_foo_get_1 = function _A_Getter_StaticGetter_foo_get_1() { return ""; }; // Error class A_Getter_StaticSetter { constructor() { _A_Getter_StaticSetter_instances.add(this); } } - _A_Getter_StaticSetter_instances = new WeakSet(), _A_Getter_StaticSetter_foo_set = function _A_Getter_StaticSetter_foo_set(value) { }; + _d = A_Getter_StaticSetter, _A_Getter_StaticSetter_instances = new WeakSet(), _A_Getter_StaticSetter_foo_set = function _A_Getter_StaticSetter_foo_set(value) { }; } function Setter() { - var _A_Setter_Field_instances, _A_Setter_Field_foo_set, _A_Setter_Field_foo, _A_Setter_Method_instances, _A_Setter_Method_foo_set, _A_Setter_Method_foo, _A_Setter_Getter_instances, _A_Setter_Getter_foo_set, _A_Setter_Getter_foo_get, _A_Setter_Setter_instances, _A_Setter_Setter_foo_set, _A_Setter_Setter_foo_set_1, _A_Setter_StaticField_instances, _A_Setter_StaticField_foo_set, _A_Setter_StaticField_foo, _A_Setter_StaticMethod_instances, _A_Setter_StaticMethod_foo_set, _A_Setter_StaticMethod_foo, _A_Setter_StaticGetter_instances, _A_Setter_StaticGetter_foo_set, _A_Setter_StaticGetter_foo_get, _A_Setter_StaticSetter_instances, _A_Setter_StaticSetter_foo_set, _A_Setter_StaticSetter_foo_set_1; + var _A_Setter_Field_instances, _A_Setter_Field_foo_set, _A_Setter_Field_foo, _A_Setter_Method_instances, _A_Setter_Method_foo_set, _A_Setter_Method_foo, _A_Setter_Getter_instances, _A_Setter_Getter_foo_set, _A_Setter_Getter_foo_get, _A_Setter_Setter_instances, _A_Setter_Setter_foo_set, _A_Setter_Setter_foo_set_1, _A_Setter_StaticField_instances, _a, _A_Setter_StaticField_foo_set, _A_Setter_StaticField_foo, _A_Setter_StaticMethod_instances, _b, _A_Setter_StaticMethod_foo_set, _A_Setter_StaticMethod_foo, _A_Setter_StaticGetter_instances, _c, _A_Setter_StaticGetter_foo_set, _A_Setter_StaticGetter_foo_get, _A_Setter_StaticSetter_instances, _d, _A_Setter_StaticSetter_foo_set, _A_Setter_StaticSetter_foo_set_1; // Error class A_Setter_Field { constructor() { @@ -621,7 +621,7 @@ function Setter() { _A_Setter_StaticField_instances.add(this); } } - _A_Setter_StaticField_instances = new WeakSet(); + _a = A_Setter_StaticField, _A_Setter_StaticField_instances = new WeakSet(); _A_Setter_StaticField_foo = { value: "foo" }; // Error class A_Setter_StaticMethod { @@ -629,31 +629,31 @@ function Setter() { _A_Setter_StaticMethod_instances.add(this); } } - _A_Setter_StaticMethod_instances = new WeakSet(), _A_Setter_StaticMethod_foo = function _A_Setter_StaticMethod_foo(value) { }, _A_Setter_StaticMethod_foo = function _A_Setter_StaticMethod_foo() { }; + _b = A_Setter_StaticMethod, _A_Setter_StaticMethod_instances = new WeakSet(), _A_Setter_StaticMethod_foo = function _A_Setter_StaticMethod_foo(value) { }, _A_Setter_StaticMethod_foo = function _A_Setter_StaticMethod_foo() { }; // Error class A_Setter_StaticGetter { constructor() { _A_Setter_StaticGetter_instances.add(this); } } - _A_Setter_StaticGetter_instances = new WeakSet(), _A_Setter_StaticGetter_foo_get = function _A_Setter_StaticGetter_foo_get() { return ""; }; + _c = A_Setter_StaticGetter, _A_Setter_StaticGetter_instances = new WeakSet(), _A_Setter_StaticGetter_foo_get = function _A_Setter_StaticGetter_foo_get() { return ""; }; // Error class A_Setter_StaticSetter { constructor() { _A_Setter_StaticSetter_instances.add(this); } } - _A_Setter_StaticSetter_instances = new WeakSet(), _A_Setter_StaticSetter_foo_set_1 = function _A_Setter_StaticSetter_foo_set_1(value) { }, _A_Setter_StaticSetter_foo_set_1 = function _A_Setter_StaticSetter_foo_set_1(value) { }; + _d = A_Setter_StaticSetter, _A_Setter_StaticSetter_instances = new WeakSet(), _A_Setter_StaticSetter_foo_set_1 = function _A_Setter_StaticSetter_foo_set_1(value) { }, _A_Setter_StaticSetter_foo_set_1 = function _A_Setter_StaticSetter_foo_set_1(value) { }; } function StaticField() { - var _A_StaticField_Field_foo, _A_StaticField_Field_foo_1, _A_StaticField_Method_instances, _A_StaticField_Method_foo, _A_StaticField_Method_foo_1, _A_StaticField_Getter_instances, _A_StaticField_Getter_foo, _A_StaticField_Getter_foo_get, _A_StaticField_Setter_instances, _A_StaticField_Setter_foo, _A_StaticField_Setter_foo_set, _A_StaticField_StaticField_foo, _A_StaticField_StaticField_foo_1, _A_StaticField_StaticMethod_foo, _A_StaticField_StaticMethod_foo_1, _A_StaticField_StaticGetter_foo, _A_StaticField_StaticGetter_foo_get, _A_StaticField_StaticSetter_foo, _A_StaticField_StaticSetter_foo_set; + var _a, _A_StaticField_Field_foo, _A_StaticField_Field_foo_1, _A_StaticField_Method_instances, _b, _A_StaticField_Method_foo, _A_StaticField_Method_foo_1, _A_StaticField_Getter_instances, _c, _A_StaticField_Getter_foo, _A_StaticField_Getter_foo_get, _A_StaticField_Setter_instances, _d, _A_StaticField_Setter_foo, _A_StaticField_Setter_foo_set, _e, _A_StaticField_StaticField_foo, _A_StaticField_StaticField_foo_1, _f, _A_StaticField_StaticMethod_foo, _A_StaticField_StaticMethod_foo_1, _g, _A_StaticField_StaticGetter_foo, _A_StaticField_StaticGetter_foo_get, _h, _A_StaticField_StaticSetter_foo, _A_StaticField_StaticSetter_foo_set; // Error class A_StaticField_Field { constructor() { _A_StaticField_Field_foo_1.set(this, "foo"); } } - _A_StaticField_Field_foo_1 = new WeakMap(); + _a = A_StaticField_Field, _A_StaticField_Field_foo_1 = new WeakMap(); _A_StaticField_Field_foo_1.set(A_StaticField_Field, "foo"); // Error class A_StaticField_Method { @@ -661,177 +661,180 @@ function StaticField() { _A_StaticField_Method_instances.add(this); } } - _A_StaticField_Method_instances = new WeakSet(), _A_StaticField_Method_foo_1 = function _A_StaticField_Method_foo_1() { }; + _b = A_StaticField_Method, _A_StaticField_Method_instances = new WeakSet(), _A_StaticField_Method_foo_1 = function _A_StaticField_Method_foo_1() { }; // Error class A_StaticField_Getter { constructor() { _A_StaticField_Getter_instances.add(this); } } - _A_StaticField_Getter_instances = new WeakSet(), _A_StaticField_Getter_foo_get = function _A_StaticField_Getter_foo_get() { return ""; }; + _c = A_StaticField_Getter, _A_StaticField_Getter_instances = new WeakSet(), _A_StaticField_Getter_foo_get = function _A_StaticField_Getter_foo_get() { return ""; }; // Error class A_StaticField_Setter { constructor() { _A_StaticField_Setter_instances.add(this); } } - _A_StaticField_Setter_instances = new WeakSet(), _A_StaticField_Setter_foo_set = function _A_StaticField_Setter_foo_set(value) { }; + _d = A_StaticField_Setter, _A_StaticField_Setter_instances = new WeakSet(), _A_StaticField_Setter_foo_set = function _A_StaticField_Setter_foo_set(value) { }; // Error class A_StaticField_StaticField { } + _e = A_StaticField_StaticField; _A_StaticField_StaticField_foo_1 = { value: "foo" }; _A_StaticField_StaticField_foo_1 = { value: "foo" }; // Error class A_StaticField_StaticMethod { } - _A_StaticField_StaticMethod_foo_1 = function _A_StaticField_StaticMethod_foo_1() { }; + _f = A_StaticField_StaticMethod, _A_StaticField_StaticMethod_foo_1 = function _A_StaticField_StaticMethod_foo_1() { }; // Error class A_StaticField_StaticGetter { } - _A_StaticField_StaticGetter_foo_get = function _A_StaticField_StaticGetter_foo_get() { return ""; }; + _g = A_StaticField_StaticGetter, _A_StaticField_StaticGetter_foo_get = function _A_StaticField_StaticGetter_foo_get() { return ""; }; // Error class A_StaticField_StaticSetter { } - _A_StaticField_StaticSetter_foo_set = function _A_StaticField_StaticSetter_foo_set(value) { }; + _h = A_StaticField_StaticSetter, _A_StaticField_StaticSetter_foo_set = function _A_StaticField_StaticSetter_foo_set(value) { }; } function StaticMethod() { - var _A_StaticMethod_Field_foo, _A_StaticMethod_Field_foo_1, _A_StaticMethod_Method_instances, _A_StaticMethod_Method_foo, _A_StaticMethod_Method_foo_1, _A_StaticMethod_Getter_instances, _A_StaticMethod_Getter_foo, _A_StaticMethod_Getter_foo_get, _A_StaticMethod_Setter_instances, _A_StaticMethod_Setter_foo, _A_StaticMethod_Setter_foo_set, _A_StaticMethod_StaticField_foo, _A_StaticMethod_StaticField_foo_1, _A_StaticMethod_StaticMethod_foo, _A_StaticMethod_StaticMethod_foo_1, _A_StaticMethod_StaticGetter_foo, _A_StaticMethod_StaticGetter_foo_get, _A_StaticMethod_StaticSetter_foo, _A_StaticMethod_StaticSetter_foo_set; + var _a, _A_StaticMethod_Field_foo, _A_StaticMethod_Field_foo_1, _A_StaticMethod_Method_instances, _b, _A_StaticMethod_Method_foo, _A_StaticMethod_Method_foo_1, _A_StaticMethod_Getter_instances, _c, _A_StaticMethod_Getter_foo, _A_StaticMethod_Getter_foo_get, _A_StaticMethod_Setter_instances, _d, _A_StaticMethod_Setter_foo, _A_StaticMethod_Setter_foo_set, _e, _A_StaticMethod_StaticField_foo, _A_StaticMethod_StaticField_foo_1, _f, _A_StaticMethod_StaticMethod_foo, _A_StaticMethod_StaticMethod_foo_1, _g, _A_StaticMethod_StaticGetter_foo, _A_StaticMethod_StaticGetter_foo_get, _h, _A_StaticMethod_StaticSetter_foo, _A_StaticMethod_StaticSetter_foo_set; // Error class A_StaticMethod_Field { constructor() { _A_StaticMethod_Field_foo_1.set(this, "foo"); } } - _A_StaticMethod_Field_foo_1 = new WeakMap(); + _a = A_StaticMethod_Field, _A_StaticMethod_Field_foo_1 = new WeakMap(); // Error class A_StaticMethod_Method { constructor() { _A_StaticMethod_Method_instances.add(this); } } - _A_StaticMethod_Method_instances = new WeakSet(), _A_StaticMethod_Method_foo_1 = function _A_StaticMethod_Method_foo_1() { }, _A_StaticMethod_Method_foo_1 = function _A_StaticMethod_Method_foo_1() { }; + _b = A_StaticMethod_Method, _A_StaticMethod_Method_instances = new WeakSet(), _A_StaticMethod_Method_foo_1 = function _A_StaticMethod_Method_foo_1() { }, _A_StaticMethod_Method_foo_1 = function _A_StaticMethod_Method_foo_1() { }; // Error class A_StaticMethod_Getter { constructor() { _A_StaticMethod_Getter_instances.add(this); } } - _A_StaticMethod_Getter_instances = new WeakSet(), _A_StaticMethod_Getter_foo_get = function _A_StaticMethod_Getter_foo_get() { return ""; }; + _c = A_StaticMethod_Getter, _A_StaticMethod_Getter_instances = new WeakSet(), _A_StaticMethod_Getter_foo_get = function _A_StaticMethod_Getter_foo_get() { return ""; }; // Error class A_StaticMethod_Setter { constructor() { _A_StaticMethod_Setter_instances.add(this); } } - _A_StaticMethod_Setter_instances = new WeakSet(), _A_StaticMethod_Setter_foo_set = function _A_StaticMethod_Setter_foo_set(value) { }; + _d = A_StaticMethod_Setter, _A_StaticMethod_Setter_instances = new WeakSet(), _A_StaticMethod_Setter_foo_set = function _A_StaticMethod_Setter_foo_set(value) { }; // Error class A_StaticMethod_StaticField { } + _e = A_StaticMethod_StaticField; _A_StaticMethod_StaticField_foo_1 = { value: "foo" }; // Error class A_StaticMethod_StaticMethod { } - _A_StaticMethod_StaticMethod_foo_1 = function _A_StaticMethod_StaticMethod_foo_1() { }, _A_StaticMethod_StaticMethod_foo_1 = function _A_StaticMethod_StaticMethod_foo_1() { }; + _f = A_StaticMethod_StaticMethod, _A_StaticMethod_StaticMethod_foo_1 = function _A_StaticMethod_StaticMethod_foo_1() { }, _A_StaticMethod_StaticMethod_foo_1 = function _A_StaticMethod_StaticMethod_foo_1() { }; // Error class A_StaticMethod_StaticGetter { } - _A_StaticMethod_StaticGetter_foo_get = function _A_StaticMethod_StaticGetter_foo_get() { return ""; }; + _g = A_StaticMethod_StaticGetter, _A_StaticMethod_StaticGetter_foo_get = function _A_StaticMethod_StaticGetter_foo_get() { return ""; }; // Error class A_StaticMethod_StaticSetter { } - _A_StaticMethod_StaticSetter_foo_set = function _A_StaticMethod_StaticSetter_foo_set(value) { }; + _h = A_StaticMethod_StaticSetter, _A_StaticMethod_StaticSetter_foo_set = function _A_StaticMethod_StaticSetter_foo_set(value) { }; } function StaticGetter() { - var _A_StaticGetter_Field_foo_get, _A_StaticGetter_Field_foo, _A_StaticGetter_Method_instances, _A_StaticGetter_Method_foo_get, _A_StaticGetter_Method_foo, _A_StaticGetter_Getter_instances, _A_StaticGetter_Getter_foo_get, _A_StaticGetter_Getter_foo_get_1, _A_StaticGetter_Setter_instances, _A_StaticGetter_Setter_foo_get, _A_StaticGetter_Setter_foo_set, _A_StaticGetter_StaticField_foo_get, _A_StaticGetter_StaticField_foo, _A_StaticGetter_StaticMethod_foo_get, _A_StaticGetter_StaticMethod_foo, _A_StaticGetter_StaticGetter_foo_get, _A_StaticGetter_StaticGetter_foo_get_1, _A_StaticGetter_StaticSetter_foo_get, _A_StaticGetter_StaticSetter_foo_set; + var _a, _A_StaticGetter_Field_foo_get, _A_StaticGetter_Field_foo, _A_StaticGetter_Method_instances, _b, _A_StaticGetter_Method_foo_get, _A_StaticGetter_Method_foo, _A_StaticGetter_Getter_instances, _c, _A_StaticGetter_Getter_foo_get, _A_StaticGetter_Getter_foo_get_1, _A_StaticGetter_Setter_instances, _d, _A_StaticGetter_Setter_foo_get, _A_StaticGetter_Setter_foo_set, _e, _A_StaticGetter_StaticField_foo_get, _A_StaticGetter_StaticField_foo, _f, _A_StaticGetter_StaticMethod_foo_get, _A_StaticGetter_StaticMethod_foo, _g, _A_StaticGetter_StaticGetter_foo_get, _A_StaticGetter_StaticGetter_foo_get_1, _h, _A_StaticGetter_StaticSetter_foo_get, _A_StaticGetter_StaticSetter_foo_set; // Error class A_StaticGetter_Field { constructor() { _A_StaticGetter_Field_foo.set(this, "foo"); } } - _A_StaticGetter_Field_foo = new WeakMap(); + _a = A_StaticGetter_Field, _A_StaticGetter_Field_foo = new WeakMap(); // Error class A_StaticGetter_Method { constructor() { _A_StaticGetter_Method_instances.add(this); } } - _A_StaticGetter_Method_instances = new WeakSet(), _A_StaticGetter_Method_foo = function _A_StaticGetter_Method_foo() { return ""; }, _A_StaticGetter_Method_foo = function _A_StaticGetter_Method_foo() { }; + _b = A_StaticGetter_Method, _A_StaticGetter_Method_instances = new WeakSet(), _A_StaticGetter_Method_foo = function _A_StaticGetter_Method_foo() { return ""; }, _A_StaticGetter_Method_foo = function _A_StaticGetter_Method_foo() { }; // Error class A_StaticGetter_Getter { constructor() { _A_StaticGetter_Getter_instances.add(this); } } - _A_StaticGetter_Getter_instances = new WeakSet(), _A_StaticGetter_Getter_foo_get_1 = function _A_StaticGetter_Getter_foo_get_1() { return ""; }, _A_StaticGetter_Getter_foo_get_1 = function _A_StaticGetter_Getter_foo_get_1() { return ""; }; + _c = A_StaticGetter_Getter, _A_StaticGetter_Getter_instances = new WeakSet(), _A_StaticGetter_Getter_foo_get_1 = function _A_StaticGetter_Getter_foo_get_1() { return ""; }, _A_StaticGetter_Getter_foo_get_1 = function _A_StaticGetter_Getter_foo_get_1() { return ""; }; // Error class A_StaticGetter_Setter { constructor() { _A_StaticGetter_Setter_instances.add(this); } } - _A_StaticGetter_Setter_instances = new WeakSet(), _A_StaticGetter_Setter_foo_set = function _A_StaticGetter_Setter_foo_set(value) { }; + _d = A_StaticGetter_Setter, _A_StaticGetter_Setter_instances = new WeakSet(), _A_StaticGetter_Setter_foo_set = function _A_StaticGetter_Setter_foo_set(value) { }; // Error class A_StaticGetter_StaticField { } - _A_StaticGetter_StaticField_foo = function _A_StaticGetter_StaticField_foo() { return ""; }, _A_StaticGetter_StaticField_foo = function _A_StaticGetter_StaticField_foo() { }; + _e = A_StaticGetter_StaticField, _A_StaticGetter_StaticField_foo = function _A_StaticGetter_StaticField_foo() { return ""; }, _A_StaticGetter_StaticField_foo = function _A_StaticGetter_StaticField_foo() { }; // Error class A_StaticGetter_StaticMethod { } - _A_StaticGetter_StaticMethod_foo = function _A_StaticGetter_StaticMethod_foo() { return ""; }, _A_StaticGetter_StaticMethod_foo = function _A_StaticGetter_StaticMethod_foo() { }; + _f = A_StaticGetter_StaticMethod, _A_StaticGetter_StaticMethod_foo = function _A_StaticGetter_StaticMethod_foo() { return ""; }, _A_StaticGetter_StaticMethod_foo = function _A_StaticGetter_StaticMethod_foo() { }; // Error class A_StaticGetter_StaticGetter { } - _A_StaticGetter_StaticGetter_foo_get_1 = function _A_StaticGetter_StaticGetter_foo_get_1() { return ""; }, _A_StaticGetter_StaticGetter_foo_get_1 = function _A_StaticGetter_StaticGetter_foo_get_1() { return ""; }; + _g = A_StaticGetter_StaticGetter, _A_StaticGetter_StaticGetter_foo_get_1 = function _A_StaticGetter_StaticGetter_foo_get_1() { return ""; }, _A_StaticGetter_StaticGetter_foo_get_1 = function _A_StaticGetter_StaticGetter_foo_get_1() { return ""; }; // OK class A_StaticGetter_StaticSetter { } - _A_StaticGetter_StaticSetter_foo_get = function _A_StaticGetter_StaticSetter_foo_get() { return ""; }, _A_StaticGetter_StaticSetter_foo_set = function _A_StaticGetter_StaticSetter_foo_set(value) { }; + _h = A_StaticGetter_StaticSetter, _A_StaticGetter_StaticSetter_foo_get = function _A_StaticGetter_StaticSetter_foo_get() { return ""; }, _A_StaticGetter_StaticSetter_foo_set = function _A_StaticGetter_StaticSetter_foo_set(value) { }; } function StaticSetter() { - var _A_StaticSetter_Field_foo_set, _A_StaticSetter_Field_foo, _A_StaticSetter_Method_instances, _A_StaticSetter_Method_foo_set, _A_StaticSetter_Method_foo, _A_StaticSetter_Getter_instances, _A_StaticSetter_Getter_foo_set, _A_StaticSetter_Getter_foo_get, _A_StaticSetter_Setter_instances, _A_StaticSetter_Setter_foo_set, _A_StaticSetter_Setter_foo_set_1, _A_StaticSetter_StaticField_foo_set, _A_StaticSetter_StaticField_foo, _A_StaticSetter_StaticMethod_foo_set, _A_StaticSetter_StaticMethod_foo, _A_StaticSetter_StaticGetter_foo_set, _A_StaticSetter_StaticGetter_foo_get, _A_StaticSetter_StaticSetter_foo_set, _A_StaticSetter_StaticSetter_foo_set_1; + var _a, _A_StaticSetter_Field_foo_set, _A_StaticSetter_Field_foo, _A_StaticSetter_Method_instances, _b, _A_StaticSetter_Method_foo_set, _A_StaticSetter_Method_foo, _A_StaticSetter_Getter_instances, _c, _A_StaticSetter_Getter_foo_set, _A_StaticSetter_Getter_foo_get, _A_StaticSetter_Setter_instances, _d, _A_StaticSetter_Setter_foo_set, _A_StaticSetter_Setter_foo_set_1, _e, _A_StaticSetter_StaticField_foo_set, _A_StaticSetter_StaticField_foo, _f, _A_StaticSetter_StaticMethod_foo_set, _A_StaticSetter_StaticMethod_foo, _g, _A_StaticSetter_StaticGetter_foo_set, _A_StaticSetter_StaticGetter_foo_get, _h, _A_StaticSetter_StaticSetter_foo_set, _A_StaticSetter_StaticSetter_foo_set_1; // Error class A_StaticSetter_Field { constructor() { _A_StaticSetter_Field_foo.set(this, "foo"); } } - _A_StaticSetter_Field_foo = new WeakMap(); + _a = A_StaticSetter_Field, _A_StaticSetter_Field_foo = new WeakMap(); // Error class A_StaticSetter_Method { constructor() { _A_StaticSetter_Method_instances.add(this); } } - _A_StaticSetter_Method_instances = new WeakSet(), _A_StaticSetter_Method_foo = function _A_StaticSetter_Method_foo(value) { }, _A_StaticSetter_Method_foo = function _A_StaticSetter_Method_foo() { }; + _b = A_StaticSetter_Method, _A_StaticSetter_Method_instances = new WeakSet(), _A_StaticSetter_Method_foo = function _A_StaticSetter_Method_foo(value) { }, _A_StaticSetter_Method_foo = function _A_StaticSetter_Method_foo() { }; // Error class A_StaticSetter_Getter { constructor() { _A_StaticSetter_Getter_instances.add(this); } } - _A_StaticSetter_Getter_instances = new WeakSet(), _A_StaticSetter_Getter_foo_get = function _A_StaticSetter_Getter_foo_get() { return ""; }; + _c = A_StaticSetter_Getter, _A_StaticSetter_Getter_instances = new WeakSet(), _A_StaticSetter_Getter_foo_get = function _A_StaticSetter_Getter_foo_get() { return ""; }; // Error class A_StaticSetter_Setter { constructor() { _A_StaticSetter_Setter_instances.add(this); } } - _A_StaticSetter_Setter_instances = new WeakSet(), _A_StaticSetter_Setter_foo_set_1 = function _A_StaticSetter_Setter_foo_set_1(value) { }, _A_StaticSetter_Setter_foo_set_1 = function _A_StaticSetter_Setter_foo_set_1(value) { }; + _d = A_StaticSetter_Setter, _A_StaticSetter_Setter_instances = new WeakSet(), _A_StaticSetter_Setter_foo_set_1 = function _A_StaticSetter_Setter_foo_set_1(value) { }, _A_StaticSetter_Setter_foo_set_1 = function _A_StaticSetter_Setter_foo_set_1(value) { }; // Error class A_StaticSetter_StaticField { } + _e = A_StaticSetter_StaticField; _A_StaticSetter_StaticField_foo = { value: "foo" }; // Error class A_StaticSetter_StaticMethod { } - _A_StaticSetter_StaticMethod_foo = function _A_StaticSetter_StaticMethod_foo(value) { }, _A_StaticSetter_StaticMethod_foo = function _A_StaticSetter_StaticMethod_foo() { }; + _f = A_StaticSetter_StaticMethod, _A_StaticSetter_StaticMethod_foo = function _A_StaticSetter_StaticMethod_foo(value) { }, _A_StaticSetter_StaticMethod_foo = function _A_StaticSetter_StaticMethod_foo() { }; // OK class A_StaticSetter_StaticGetter { } - _A_StaticSetter_StaticGetter_foo_set = function _A_StaticSetter_StaticGetter_foo_set(value) { }, _A_StaticSetter_StaticGetter_foo_get = function _A_StaticSetter_StaticGetter_foo_get() { return ""; }; + _g = A_StaticSetter_StaticGetter, _A_StaticSetter_StaticGetter_foo_set = function _A_StaticSetter_StaticGetter_foo_set(value) { }, _A_StaticSetter_StaticGetter_foo_get = function _A_StaticSetter_StaticGetter_foo_get() { return ""; }; // Error class A_StaticSetter_StaticSetter { } - _A_StaticSetter_StaticSetter_foo_set_1 = function _A_StaticSetter_StaticSetter_foo_set_1(value) { }, _A_StaticSetter_StaticSetter_foo_set_1 = function _A_StaticSetter_StaticSetter_foo_set_1(value) { }; + _h = A_StaticSetter_StaticSetter, _A_StaticSetter_StaticSetter_foo_set_1 = function _A_StaticSetter_StaticSetter_foo_set_1(value) { }, _A_StaticSetter_StaticSetter_foo_set_1 = function _A_StaticSetter_StaticSetter_foo_set_1(value) { }; } diff --git a/tests/baselines/reference/privateNameES5Ban(target=es3).js b/tests/baselines/reference/privateNameES5Ban(target=es3).js index 486e2d2d5455c..c7626d30e12fb 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es3).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es3).js @@ -19,8 +19,8 @@ var A = /** @class */ (function () { _A_instances.add(this); _A_field.set(this, 123); } - var _A_instances, _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set; - _A_field = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; + var _A_instances, _a, _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set; + _a = A, _A_field = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; _A_sField = { value: "hello world" }; return A; }()); diff --git a/tests/baselines/reference/privateNameES5Ban(target=es5).js b/tests/baselines/reference/privateNameES5Ban(target=es5).js index 486e2d2d5455c..c7626d30e12fb 100644 --- a/tests/baselines/reference/privateNameES5Ban(target=es5).js +++ b/tests/baselines/reference/privateNameES5Ban(target=es5).js @@ -19,8 +19,8 @@ var A = /** @class */ (function () { _A_instances.add(this); _A_field.set(this, 123); } - var _A_instances, _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set; - _A_field = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; + var _A_instances, _a, _A_field, _A_method, _A_sField, _A_sMethod, _A_acc_get, _A_acc_set, _A_sAcc_get, _A_sAcc_set; + _a = A, _A_field = new WeakMap(), _A_instances = new WeakSet(), _A_method = function _A_method() { }, _A_sMethod = function _A_sMethod() { }, _A_acc_get = function _A_acc_get() { return ""; }, _A_acc_set = function _A_acc_set(x) { }, _A_sAcc_get = function _A_sAcc_get() { return 0; }, _A_sAcc_set = function _A_sAcc_set(x) { }; _A_sField = { value: "hello world" }; return A; }()); diff --git a/tests/baselines/reference/privateNameStaticAccessors.js b/tests/baselines/reference/privateNameStaticAccessors.js index 417e8ed72f2a3..5b241a3087f8c 100644 --- a/tests/baselines/reference/privateNameStaticAccessors.js +++ b/tests/baselines/reference/privateNameStaticAccessors.js @@ -32,13 +32,13 @@ var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessor } return fn.call(receiver); }; -var _A1_prop_get, _A1_prop_set, _A1_roProp_get; +var _a, _A1_prop_get, _A1_prop_set, _A1_roProp_get; class A1 { constructor(name) { - __classStaticPrivateAccessorSet(A1, A1, _A1_prop_set, ""); + __classStaticPrivateAccessorSet(A1, _a, _A1_prop_set, ""); __classStaticPrivateReadonly(A1, ""); // Error - console.log(__classStaticPrivateAccessorGet(A1, A1, _A1_prop_get)); - console.log(__classStaticPrivateAccessorGet(A1, A1, _A1_roProp_get)); + console.log(__classStaticPrivateAccessorGet(A1, _a, _A1_prop_get)); + console.log(__classStaticPrivateAccessorGet(A1, _a, _A1_roProp_get)); } } -_A1_prop_get = function _A1_prop_get() { return ""; }, _A1_prop_set = function _A1_prop_set(param) { }, _A1_roProp_get = function _A1_roProp_get() { return ""; }; +_a = A1, _A1_prop_get = function _A1_prop_get() { return ""; }, _A1_prop_set = function _A1_prop_set(param) { }, _A1_roProp_get = function _A1_roProp_get() { return ""; }; diff --git a/tests/baselines/reference/privateNameStaticAccessorsAccess.js b/tests/baselines/reference/privateNameStaticAccessorsAccess.js index d17b31c467e6c..5eb1d38a85363 100644 --- a/tests/baselines/reference/privateNameStaticAccessorsAccess.js +++ b/tests/baselines/reference/privateNameStaticAccessorsAccess.js @@ -34,18 +34,18 @@ var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessor } return fn.call(receiver); }; -var _A2_prop_get, _A2_prop_set; +var _a, _A2_prop_get, _A2_prop_set; class A2 { constructor() { - console.log(__classStaticPrivateAccessorGet(A2, A2, _A2_prop_get)); + console.log(__classStaticPrivateAccessorGet(A2, _a, _A2_prop_get)); let a = A2; - __classStaticPrivateAccessorGet(a, A2, _A2_prop_get); + __classStaticPrivateAccessorGet(a, _a, _A2_prop_get); function foo() { - __classStaticPrivateAccessorGet(a, A2, _A2_prop_get); + __classStaticPrivateAccessorGet(a, _a, _A2_prop_get); } } } -_A2_prop_get = function _A2_prop_get() { return ""; }, _A2_prop_set = function _A2_prop_set(param) { }; +_a = A2, _A2_prop_get = function _A2_prop_get() { return ""; }, _A2_prop_set = function _A2_prop_set(param) { }; A2.; // Error function foo() { A2.; // Error diff --git a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js index a34f6f9ee361b..9a4e3dba5248d 100644 --- a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js @@ -35,21 +35,21 @@ var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessor } return fn.call(receiver); }; -var _A_fieldFunc_get, _A_fieldFunc2_get, _A_x; +var _a, _A_fieldFunc_get, _A_fieldFunc2_get, _A_x; class A { static test() { - var _a; - __classStaticPrivateAccessorGet(this, A, _A_fieldFunc_get).call(this); - const func = __classStaticPrivateAccessorGet(this, A, _A_fieldFunc_get); + var _b; + __classStaticPrivateAccessorGet(this, _a, _A_fieldFunc_get).call(this); + const func = __classStaticPrivateAccessorGet(this, _a, _A_fieldFunc_get); func(); - new (__classStaticPrivateAccessorGet(this, A, _A_fieldFunc_get))(); + new (__classStaticPrivateAccessorGet(this, _a, _A_fieldFunc_get))(); const arr = [1, 2]; - __classStaticPrivateAccessorGet(this, A, _A_fieldFunc2_get).call(this, 0, ...arr, 3); - const b = new (__classStaticPrivateAccessorGet(this, A, _A_fieldFunc2_get))(0, ...arr, 3); - const str = __classStaticPrivateAccessorGet(this, A, _A_fieldFunc2_get).bind(this) `head${1}middle${2}tail`; - __classStaticPrivateAccessorGet((_a = this.getClass()), A, _A_fieldFunc2_get).bind(_a) `test${1}and${2}`; + __classStaticPrivateAccessorGet(this, _a, _A_fieldFunc2_get).call(this, 0, ...arr, 3); + const b = new (__classStaticPrivateAccessorGet(this, _a, _A_fieldFunc2_get))(0, ...arr, 3); + const str = __classStaticPrivateAccessorGet(this, _a, _A_fieldFunc2_get).bind(this) `head${1}middle${2}tail`; + __classStaticPrivateAccessorGet((_b = this.getClass()), _a, _A_fieldFunc2_get).bind(_b) `test${1}and${2}`; } static getClass() { return A; } } -_A_fieldFunc_get = function _A_fieldFunc_get() { return function () { __classStaticPrivateFieldSet(A, A, _A_x, 10); }; }, _A_fieldFunc2_get = function _A_fieldFunc2_get() { return function (a, ...b) { }; }; +_a = A, _A_fieldFunc_get = function _A_fieldFunc_get() { return function () { __classStaticPrivateFieldSet(A, _a, _A_x, 10); }; }, _A_fieldFunc2_get = function _A_fieldFunc2_get() { return function (a, ...b) { }; }; _A_x = { value: 1 }; diff --git a/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js index 16bf81a00cadb..db9ef90b6ccb0 100644 --- a/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js +++ b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js @@ -19,13 +19,13 @@ var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessor } return fn.call(receiver); }; -var _Base_prop_get; +var _a, _Base_prop_get; class Base { static method(x) { - console.log(__classStaticPrivateAccessorGet(x, Base, _Base_prop_get)); + console.log(__classStaticPrivateAccessorGet(x, _a, _Base_prop_get)); } } -_Base_prop_get = function _Base_prop_get() { return 123; }; +_a = Base, _Base_prop_get = function _Base_prop_get() { return 123; }; class Derived extends Base { static method(x) { console.log(x.); diff --git a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).js b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).js index 363aace223b36..13c17f4f97233 100644 --- a/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).js +++ b/tests/baselines/reference/privateNameStaticAndStaticInitializer(target=es2015).js @@ -7,8 +7,9 @@ class A { //// [privateNameStaticAndStaticInitializer.js] -var _A_foo, _A_prop; +var _a, _A_foo, _A_prop; class A { } +_a = A; _A_foo = { value: 1 }; _A_prop = { value: 2 }; diff --git a/tests/baselines/reference/privateNameStaticFieldAccess.js b/tests/baselines/reference/privateNameStaticFieldAccess.js index 9ccf5db488e29..3033f7ea26adc 100644 --- a/tests/baselines/reference/privateNameStaticFieldAccess.js +++ b/tests/baselines/reference/privateNameStaticFieldAccess.js @@ -18,11 +18,12 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _A_myField; +var _a, _A_myField; class A { constructor() { - console.log(__classStaticPrivateFieldGet(A, A, _A_myField)); //Ok - console.log(__classStaticPrivateFieldGet(this, A, _A_myField)); //Error + console.log(__classStaticPrivateFieldGet(A, _a, _A_myField)); //Ok + console.log(__classStaticPrivateFieldGet(this, _a, _A_myField)); //Error } } +_a = A; _A_myField = { value: "hello world" }; diff --git a/tests/baselines/reference/privateNameStaticFieldAssignment.js b/tests/baselines/reference/privateNameStaticFieldAssignment.js index 94778a41f3667..0c08b004ff55c 100644 --- a/tests/baselines/reference/privateNameStaticFieldAssignment.js +++ b/tests/baselines/reference/privateNameStaticFieldAssignment.js @@ -55,39 +55,40 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _A_field; +var _a, _A_field; class A { constructor() { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z; - __classStaticPrivateFieldSet(A, A, _A_field, 1); - __classStaticPrivateFieldSet(_a = A, A, _A_field, __classStaticPrivateFieldGet(_a, A, _A_field) + 2); - __classStaticPrivateFieldSet(_b = A, A, _A_field, __classStaticPrivateFieldGet(_b, A, _A_field) - 3); - __classStaticPrivateFieldSet(_c = A, A, _A_field, __classStaticPrivateFieldGet(_c, A, _A_field) / 4); - __classStaticPrivateFieldSet(_d = A, A, _A_field, __classStaticPrivateFieldGet(_d, A, _A_field) * 5); - __classStaticPrivateFieldSet(_e = A, A, _A_field, Math.pow(__classStaticPrivateFieldGet(_e, A, _A_field), 6)); - __classStaticPrivateFieldSet(_f = A, A, _A_field, __classStaticPrivateFieldGet(_f, A, _A_field) % 7); - __classStaticPrivateFieldSet(_g = A, A, _A_field, __classStaticPrivateFieldGet(_g, A, _A_field) << 8); - __classStaticPrivateFieldSet(_h = A, A, _A_field, __classStaticPrivateFieldGet(_h, A, _A_field) >> 9); - __classStaticPrivateFieldSet(_j = A, A, _A_field, __classStaticPrivateFieldGet(_j, A, _A_field) >>> 10); - __classStaticPrivateFieldSet(_k = A, A, _A_field, __classStaticPrivateFieldGet(_k, A, _A_field) & 11); - __classStaticPrivateFieldSet(_l = A, A, _A_field, __classStaticPrivateFieldGet(_l, A, _A_field) | 12); - __classStaticPrivateFieldSet(_m = A, A, _A_field, __classStaticPrivateFieldGet(_m, A, _A_field) ^ 13); - __classStaticPrivateFieldSet(A.getClass(), A, _A_field, 1); - __classStaticPrivateFieldSet(_o = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_o, A, _A_field) + 2); - __classStaticPrivateFieldSet(_p = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_p, A, _A_field) - 3); - __classStaticPrivateFieldSet(_q = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_q, A, _A_field) / 4); - __classStaticPrivateFieldSet(_r = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_r, A, _A_field) * 5); - __classStaticPrivateFieldSet(_s = A.getClass(), A, _A_field, Math.pow(__classStaticPrivateFieldGet(_s, A, _A_field), 6)); - __classStaticPrivateFieldSet(_t = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_t, A, _A_field) % 7); - __classStaticPrivateFieldSet(_u = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_u, A, _A_field) << 8); - __classStaticPrivateFieldSet(_v = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_v, A, _A_field) >> 9); - __classStaticPrivateFieldSet(_w = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_w, A, _A_field) >>> 10); - __classStaticPrivateFieldSet(_x = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_x, A, _A_field) & 11); - __classStaticPrivateFieldSet(_y = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_y, A, _A_field) | 12); - __classStaticPrivateFieldSet(_z = A.getClass(), A, _A_field, __classStaticPrivateFieldGet(_z, A, _A_field) ^ 13); + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0; + __classStaticPrivateFieldSet(A, _a, _A_field, 1); + __classStaticPrivateFieldSet(_b = A, _a, _A_field, __classStaticPrivateFieldGet(_b, _a, _A_field) + 2); + __classStaticPrivateFieldSet(_c = A, _a, _A_field, __classStaticPrivateFieldGet(_c, _a, _A_field) - 3); + __classStaticPrivateFieldSet(_d = A, _a, _A_field, __classStaticPrivateFieldGet(_d, _a, _A_field) / 4); + __classStaticPrivateFieldSet(_e = A, _a, _A_field, __classStaticPrivateFieldGet(_e, _a, _A_field) * 5); + __classStaticPrivateFieldSet(_f = A, _a, _A_field, Math.pow(__classStaticPrivateFieldGet(_f, _a, _A_field), 6)); + __classStaticPrivateFieldSet(_g = A, _a, _A_field, __classStaticPrivateFieldGet(_g, _a, _A_field) % 7); + __classStaticPrivateFieldSet(_h = A, _a, _A_field, __classStaticPrivateFieldGet(_h, _a, _A_field) << 8); + __classStaticPrivateFieldSet(_j = A, _a, _A_field, __classStaticPrivateFieldGet(_j, _a, _A_field) >> 9); + __classStaticPrivateFieldSet(_k = A, _a, _A_field, __classStaticPrivateFieldGet(_k, _a, _A_field) >>> 10); + __classStaticPrivateFieldSet(_l = A, _a, _A_field, __classStaticPrivateFieldGet(_l, _a, _A_field) & 11); + __classStaticPrivateFieldSet(_m = A, _a, _A_field, __classStaticPrivateFieldGet(_m, _a, _A_field) | 12); + __classStaticPrivateFieldSet(_o = A, _a, _A_field, __classStaticPrivateFieldGet(_o, _a, _A_field) ^ 13); + __classStaticPrivateFieldSet(A.getClass(), _a, _A_field, 1); + __classStaticPrivateFieldSet(_p = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_p, _a, _A_field) + 2); + __classStaticPrivateFieldSet(_q = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_q, _a, _A_field) - 3); + __classStaticPrivateFieldSet(_r = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_r, _a, _A_field) / 4); + __classStaticPrivateFieldSet(_s = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_s, _a, _A_field) * 5); + __classStaticPrivateFieldSet(_t = A.getClass(), _a, _A_field, Math.pow(__classStaticPrivateFieldGet(_t, _a, _A_field), 6)); + __classStaticPrivateFieldSet(_u = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_u, _a, _A_field) % 7); + __classStaticPrivateFieldSet(_v = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_v, _a, _A_field) << 8); + __classStaticPrivateFieldSet(_w = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_w, _a, _A_field) >> 9); + __classStaticPrivateFieldSet(_x = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_x, _a, _A_field) >>> 10); + __classStaticPrivateFieldSet(_y = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_y, _a, _A_field) & 11); + __classStaticPrivateFieldSet(_z = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_z, _a, _A_field) | 12); + __classStaticPrivateFieldSet(_0 = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_0, _a, _A_field) ^ 13); } static getClass() { return A; } } +_a = A; _A_field = { value: 0 }; diff --git a/tests/baselines/reference/privateNameStaticFieldCallExpression.js b/tests/baselines/reference/privateNameStaticFieldCallExpression.js index 6ecf4ee1367e5..5fd8143449ed8 100644 --- a/tests/baselines/reference/privateNameStaticFieldCallExpression.js +++ b/tests/baselines/reference/privateNameStaticFieldCallExpression.js @@ -30,26 +30,27 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _A_fieldFunc, _A_fieldFunc2; +var _a, _A_fieldFunc, _A_fieldFunc2; class A { constructor() { this.x = 1; } test() { - var _a; var _b; - __classStaticPrivateFieldGet(A, A, _A_fieldFunc).call(A); - (_a = __classStaticPrivateFieldGet(A, A, _A_fieldFunc)) === null || _a === void 0 ? void 0 : _a.call(A); - const func = __classStaticPrivateFieldGet(A, A, _A_fieldFunc); + var _c; + __classStaticPrivateFieldGet(A, _a, _A_fieldFunc).call(A); + (_b = __classStaticPrivateFieldGet(A, _a, _A_fieldFunc)) === null || _b === void 0 ? void 0 : _b.call(A); + const func = __classStaticPrivateFieldGet(A, _a, _A_fieldFunc); func(); - new (__classStaticPrivateFieldGet(A, A, _A_fieldFunc))(); + new (__classStaticPrivateFieldGet(A, _a, _A_fieldFunc))(); const arr = [1, 2]; - __classStaticPrivateFieldGet(A, A, _A_fieldFunc2).call(A, 0, ...arr, 3); - const b = new (__classStaticPrivateFieldGet(A, A, _A_fieldFunc2))(0, ...arr, 3); - const str = __classStaticPrivateFieldGet(A, A, _A_fieldFunc2).bind(A) `head${1}middle${2}tail`; - __classStaticPrivateFieldGet((_b = this.getClass()), A, _A_fieldFunc2).bind(_b) `test${1}and${2}`; + __classStaticPrivateFieldGet(A, _a, _A_fieldFunc2).call(A, 0, ...arr, 3); + const b = new (__classStaticPrivateFieldGet(A, _a, _A_fieldFunc2))(0, ...arr, 3); + const str = __classStaticPrivateFieldGet(A, _a, _A_fieldFunc2).bind(A) `head${1}middle${2}tail`; + __classStaticPrivateFieldGet((_c = this.getClass()), _a, _A_fieldFunc2).bind(_c) `test${1}and${2}`; } getClass() { return A; } } +_a = A; _A_fieldFunc = { value: function () { this.x = 10; } }; _A_fieldFunc2 = { value: function (a, ...b) { } }; diff --git a/tests/baselines/reference/privateNameStaticFieldClassExpression.js b/tests/baselines/reference/privateNameStaticFieldClassExpression.js index 78ec26dd09ebe..862a409022392 100644 --- a/tests/baselines/reference/privateNameStaticFieldClassExpression.js +++ b/tests/baselines/reference/privateNameStaticFieldClassExpression.js @@ -32,24 +32,25 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _B_foo, _B_foo2, _a, _b; +var _a, _B_foo, _B_foo2, _b, _c; class B { m() { - console.log(__classStaticPrivateFieldGet(B, B, _B_foo).test); - __classStaticPrivateFieldGet(B, B, _B_foo).test = 10; - new (__classStaticPrivateFieldGet(B, B, _B_foo))().field; + console.log(__classStaticPrivateFieldGet(B, _a, _B_foo).test); + __classStaticPrivateFieldGet(B, _a, _B_foo).test = 10; + new (__classStaticPrivateFieldGet(B, _a, _B_foo))().field; } } -_B_foo = { value: (_a = class { +_a = B; +_B_foo = { value: (_b = class { constructor() { this.field = 10; console.log("hello"); - new (__classStaticPrivateFieldGet(B, B, _B_foo2))(); + new (__classStaticPrivateFieldGet(B, _a, _B_foo2))(); } }, - _a.test = 123, - _a) }; -_B_foo2 = { value: (_b = class Foo { - }, - _b.otherClass = 123, + _b.test = 123, _b) }; +_B_foo2 = { value: (_c = class Foo { + }, + _c.otherClass = 123, + _c) }; diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js index b87120baff81c..ab43235eacb93 100644 --- a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js @@ -36,19 +36,21 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _Base_prop, _Derived_derivedProp; +var _a, _Base_prop, _b, _Derived_derivedProp; class Base { static method(x) { Derived.; // error __classStaticPrivateFieldSet(// error - Base, Base, _Base_prop, 10); + Base, _a, _Base_prop, 10); } } +_a = Base; _Base_prop = { value: 123 }; class Derived extends Base { static method(x) { - __classStaticPrivateFieldGet(Derived, Derived, _Derived_derivedProp); + __classStaticPrivateFieldGet(Derived, _b, _Derived_derivedProp); Base. = 10; // error } } +_b = Derived; _Derived_derivedProp = { value: 10 }; diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js index 670bdb67f084c..74ca6c3a9d50d 100644 --- a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js @@ -35,19 +35,19 @@ var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) | propertyDescriptor.value = value; return value; }; -var _A_field; +var _b, _A_field; class A { constructor() { - var _b; + var _c; this.otherClass = A; let y; - ({ x: ({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value, y } = this.testObject()); - ([({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value, y] = this.testArray()); - ({ a: ({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value, b: [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value] } = { a: 1, b: [2] }); - [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value, [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value]] = [1, [2]]; - ({ a: ({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value = 1, b: [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value = 1] } = { b: [] }); - [({ set value(_c) { __classStaticPrivateFieldSet(A, A, _A_field, _c); } }).value = 2] = []; - _b = this.otherClass, [({ set value(_c) { __classStaticPrivateFieldSet(_b, A, _A_field, _c); } }).value = 2] = []; + ({ x: ({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value, y } = this.testObject()); + ([({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value, y] = this.testArray()); + ({ a: ({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value, b: [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value] } = { a: 1, b: [2] }); + [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value, [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value]] = [1, [2]]; + ({ a: ({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value = 1, b: [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value = 1] } = { b: [] }); + [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value = 2] = []; + _c = this.otherClass, [({ set value(_b) { __classStaticPrivateFieldSet(_c, _b, _A_field, _b); } }).value = 2] = []; } testObject() { return { x: 10, y: 6 }; @@ -56,7 +56,8 @@ class A { return [10, 11]; } static test(_a) { - [({ set value(_b) { __classStaticPrivateFieldSet(_a, A, _A_field, _b); } }).value] = [2]; + [({ set value(_c) { __classStaticPrivateFieldSet(_a, _b, _A_field, _c); } }).value] = [2]; } } +_b = A; _A_field = { value: 1 }; diff --git a/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js index de150cb8fd87f..a9da2fa9aa41b 100644 --- a/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js +++ b/tests/baselines/reference/privateNameStaticFieldInitializer(target=es2015).js @@ -6,8 +6,9 @@ class A { //// [privateNameStaticFieldInitializer.js] -var _A_field, _A_uninitialized; +var _a, _A_field, _A_uninitialized; class A { } +_a = A; _A_field = { value: 10 }; _A_uninitialized = { value: void 0 }; diff --git a/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).js index dcfcf0ee30651..a2caf1c9fd25f 100644 --- a/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).js +++ b/tests/baselines/reference/privateNameStaticFieldNoInitializer(target=es2015).js @@ -8,11 +8,12 @@ class C2 { } //// [privateNameStaticFieldNoInitializer.js] -var _a, _C_x, _C2_x; +var _a, _C_x, _b, _C2_x; const C = (_a = class { }, _C_x = { value: void 0 }, _a); class C2 { } +_b = C2; _C2_x = { value: void 0 }; diff --git a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js index 34c9cb9d0e223..49634f15cb01c 100644 --- a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js @@ -49,34 +49,35 @@ var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) | propertyDescriptor.value = value; return value; }; -var _C_test; +var _a, _C_test; class C { constructor() { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; - __classStaticPrivateFieldSet(_a = C, C, _C_test, +__classStaticPrivateFieldGet(_a, C, _C_test) + 1); - __classStaticPrivateFieldSet(_b = C, C, _C_test, +__classStaticPrivateFieldGet(_b, C, _C_test) - 1); - __classStaticPrivateFieldSet(_c = C, C, _C_test, +__classStaticPrivateFieldGet(_c, C, _C_test) + 1); - __classStaticPrivateFieldSet(_d = C, C, _C_test, +__classStaticPrivateFieldGet(_d, C, _C_test) - 1); - const a = (__classStaticPrivateFieldSet(_e = C, C, _C_test, (_f = +__classStaticPrivateFieldGet(_e, C, _C_test)) + 1), _f); - const b = (__classStaticPrivateFieldSet(_g = C, C, _C_test, (_h = +__classStaticPrivateFieldGet(_g, C, _C_test)) - 1), _h); - const c = __classStaticPrivateFieldSet(_j = C, C, _C_test, +__classStaticPrivateFieldGet(_j, C, _C_test) + 1); - const d = __classStaticPrivateFieldSet(_k = C, C, _C_test, +__classStaticPrivateFieldGet(_k, C, _C_test) - 1); - for (__classStaticPrivateFieldSet(C, C, _C_test, 0); __classStaticPrivateFieldGet(C, C, _C_test) < 10; __classStaticPrivateFieldSet(_l = C, C, _C_test, +__classStaticPrivateFieldGet(_l, C, _C_test) + 1)) { } - for (__classStaticPrivateFieldSet(C, C, _C_test, 0); __classStaticPrivateFieldGet(C, C, _C_test) < 10; __classStaticPrivateFieldSet(_m = C, C, _C_test, +__classStaticPrivateFieldGet(_m, C, _C_test) + 1)) { } + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; + __classStaticPrivateFieldSet(_b = C, _a, _C_test, +__classStaticPrivateFieldGet(_b, _a, _C_test) + 1); + __classStaticPrivateFieldSet(_c = C, _a, _C_test, +__classStaticPrivateFieldGet(_c, _a, _C_test) - 1); + __classStaticPrivateFieldSet(_d = C, _a, _C_test, +__classStaticPrivateFieldGet(_d, _a, _C_test) + 1); + __classStaticPrivateFieldSet(_e = C, _a, _C_test, +__classStaticPrivateFieldGet(_e, _a, _C_test) - 1); + const a = (__classStaticPrivateFieldSet(_f = C, _a, _C_test, (_g = +__classStaticPrivateFieldGet(_f, _a, _C_test)) + 1), _g); + const b = (__classStaticPrivateFieldSet(_h = C, _a, _C_test, (_j = +__classStaticPrivateFieldGet(_h, _a, _C_test)) - 1), _j); + const c = __classStaticPrivateFieldSet(_k = C, _a, _C_test, +__classStaticPrivateFieldGet(_k, _a, _C_test) + 1); + const d = __classStaticPrivateFieldSet(_l = C, _a, _C_test, +__classStaticPrivateFieldGet(_l, _a, _C_test) - 1); + for (__classStaticPrivateFieldSet(C, _a, _C_test, 0); __classStaticPrivateFieldGet(C, _a, _C_test) < 10; __classStaticPrivateFieldSet(_m = C, _a, _C_test, +__classStaticPrivateFieldGet(_m, _a, _C_test) + 1)) { } + for (__classStaticPrivateFieldSet(C, _a, _C_test, 0); __classStaticPrivateFieldGet(C, _a, _C_test) < 10; __classStaticPrivateFieldSet(_o = C, _a, _C_test, +__classStaticPrivateFieldGet(_o, _a, _C_test) + 1)) { } } test() { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; - __classStaticPrivateFieldSet(_a = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_a, C, _C_test) + 1); - __classStaticPrivateFieldSet(_b = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_b, C, _C_test) - 1); - __classStaticPrivateFieldSet(_c = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_c, C, _C_test) + 1); - __classStaticPrivateFieldSet(_d = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_d, C, _C_test) - 1); - const a = (__classStaticPrivateFieldSet(_e = this.getClass(), C, _C_test, (_f = +__classStaticPrivateFieldGet(_e, C, _C_test)) + 1), _f); - const b = (__classStaticPrivateFieldSet(_g = this.getClass(), C, _C_test, (_h = +__classStaticPrivateFieldGet(_g, C, _C_test)) - 1), _h); - const c = __classStaticPrivateFieldSet(_j = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_j, C, _C_test) + 1); - const d = __classStaticPrivateFieldSet(_k = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_k, C, _C_test) - 1); - for (__classStaticPrivateFieldSet(this.getClass(), C, _C_test, 0); __classStaticPrivateFieldGet(this.getClass(), C, _C_test) < 10; __classStaticPrivateFieldSet(_l = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_l, C, _C_test) + 1)) { } - for (__classStaticPrivateFieldSet(this.getClass(), C, _C_test, 0); __classStaticPrivateFieldGet(this.getClass(), C, _C_test) < 10; __classStaticPrivateFieldSet(_m = this.getClass(), C, _C_test, +__classStaticPrivateFieldGet(_m, C, _C_test) + 1)) { } + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; + __classStaticPrivateFieldSet(_b = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_b, _a, _C_test) + 1); + __classStaticPrivateFieldSet(_c = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_c, _a, _C_test) - 1); + __classStaticPrivateFieldSet(_d = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_d, _a, _C_test) + 1); + __classStaticPrivateFieldSet(_e = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_e, _a, _C_test) - 1); + const a = (__classStaticPrivateFieldSet(_f = this.getClass(), _a, _C_test, (_g = +__classStaticPrivateFieldGet(_f, _a, _C_test)) + 1), _g); + const b = (__classStaticPrivateFieldSet(_h = this.getClass(), _a, _C_test, (_j = +__classStaticPrivateFieldGet(_h, _a, _C_test)) - 1), _j); + const c = __classStaticPrivateFieldSet(_k = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_k, _a, _C_test) + 1); + const d = __classStaticPrivateFieldSet(_l = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_l, _a, _C_test) - 1); + for (__classStaticPrivateFieldSet(this.getClass(), _a, _C_test, 0); __classStaticPrivateFieldGet(this.getClass(), _a, _C_test) < 10; __classStaticPrivateFieldSet(_m = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_m, _a, _C_test) + 1)) { } + for (__classStaticPrivateFieldSet(this.getClass(), _a, _C_test, 0); __classStaticPrivateFieldGet(this.getClass(), _a, _C_test) < 10; __classStaticPrivateFieldSet(_o = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_o, _a, _C_test) + 1)) { } } getClass() { return C; } } +_a = C; _C_test = { value: 24 }; diff --git a/tests/baselines/reference/privateNameStaticMethod.js b/tests/baselines/reference/privateNameStaticMethod.js index df59439c5d12b..14ef06a04e49f 100644 --- a/tests/baselines/reference/privateNameStaticMethod.js +++ b/tests/baselines/reference/privateNameStaticMethod.js @@ -20,15 +20,15 @@ var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) } return fn; }; -var _A1_method; +var _a, _A1_method; class A1 { constructor() { - __classStaticPrivateMethodGet(A1, A1, _A1_method).call(A1, ""); - __classStaticPrivateMethodGet(A1, A1, _A1_method).call(A1, 1); // Error - __classStaticPrivateMethodGet(A1, A1, _A1_method).call(// Error + __classStaticPrivateMethodGet(A1, _a, _A1_method).call(A1, ""); + __classStaticPrivateMethodGet(A1, _a, _A1_method).call(A1, 1); // Error + __classStaticPrivateMethodGet(A1, _a, _A1_method).call(// Error A1); // Error } } -_A1_method = function _A1_method(param) { +_a = A1, _A1_method = function _A1_method(param) { return ""; }; diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.js b/tests/baselines/reference/privateNameStaticMethodAssignment.js index 9271a62906b5d..73895eebc64d3 100644 --- a/tests/baselines/reference/privateNameStaticMethodAssignment.js +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.js @@ -22,19 +22,19 @@ var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) } return fn; }; -var _A3_method; +var _a, _A3_method; class A3 { constructor(a, b) { - var _a; + var _b; __classStaticPrivateReadonly(A3, () => { }); // Error, not writable __classStaticPrivateReadonly(// Error, not writable a, () => { }); // Error, not writable __classStaticPrivateReadonly(// Error, not writable b, () => { }); //Error, not writable - ({ x: ({ set value(_a) { __classStaticPrivateReadonly(A3, _a); } }).value } = { x: () => { } }); //Error, not writable - let x = __classStaticPrivateMethodGet(A3, A3, _A3_method); - __classStaticPrivateReadonly(_a = b, +__classStaticPrivateMethodGet(_a, A3, _A3_method) + 1); //Error, not writable + ({ x: ({ set value(_b) { __classStaticPrivateReadonly(A3, _b); } }).value } = { x: () => { } }); //Error, not writable + let x = __classStaticPrivateMethodGet(A3, _a, _A3_method); + __classStaticPrivateReadonly(_b = b, +__classStaticPrivateMethodGet(_b, _a, _A3_method) + 1); //Error, not writable } ; } -_A3_method = function _A3_method() { }; +_a = A3, _A3_method = function _A3_method() { }; diff --git a/tests/baselines/reference/privateNameStaticMethodCallExpression.js b/tests/baselines/reference/privateNameStaticMethodCallExpression.js index 0ca367948c498..18fc07816c07e 100644 --- a/tests/baselines/reference/privateNameStaticMethodCallExpression.js +++ b/tests/baselines/reference/privateNameStaticMethodCallExpression.js @@ -31,26 +31,26 @@ var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) } return fn; }; -var _AA_method, _AA_method2; +var _a, _AA_method, _AA_method2; class AA { ; ; test() { - var _a, _b, _c; - __classStaticPrivateMethodGet(AA, AA, _AA_method).call(AA); - const func = __classStaticPrivateMethodGet(AA, AA, _AA_method); + var _b, _c, _d; + __classStaticPrivateMethodGet(AA, _a, _AA_method).call(AA); + const func = __classStaticPrivateMethodGet(AA, _a, _AA_method); func(); - new (__classStaticPrivateMethodGet(AA, AA, _AA_method))(); + new (__classStaticPrivateMethodGet(AA, _a, _AA_method))(); const arr = [1, 2]; - __classStaticPrivateMethodGet(AA, AA, _AA_method2).call(AA, 0, ...arr, 3); - const b = new (__classStaticPrivateMethodGet(AA, AA, _AA_method2))(0, ...arr, 3); //Error - const str = __classStaticPrivateMethodGet(AA, AA, _AA_method2).bind(AA) `head${1}middle${2}tail`; - __classStaticPrivateMethodGet((_a = AA.getClass()), AA, _AA_method2).bind(_a) `test${1}and${2}`; - __classStaticPrivateMethodGet((_b = AA.getClass()), AA, _AA_method2).call(_b, 0, ...arr, 3); - const b2 = new (__classStaticPrivateMethodGet(AA.getClass(), AA, _AA_method2))(0, ...arr, 3); //Error - const str2 = __classStaticPrivateMethodGet((_c = AA.getClass()), AA, _AA_method2).bind(_c) `head${1}middle${2}tail`; + __classStaticPrivateMethodGet(AA, _a, _AA_method2).call(AA, 0, ...arr, 3); + const b = new (__classStaticPrivateMethodGet(AA, _a, _AA_method2))(0, ...arr, 3); //Error + const str = __classStaticPrivateMethodGet(AA, _a, _AA_method2).bind(AA) `head${1}middle${2}tail`; + __classStaticPrivateMethodGet((_b = AA.getClass()), _a, _AA_method2).bind(_b) `test${1}and${2}`; + __classStaticPrivateMethodGet((_c = AA.getClass()), _a, _AA_method2).call(_c, 0, ...arr, 3); + const b2 = new (__classStaticPrivateMethodGet(AA.getClass(), _a, _AA_method2))(0, ...arr, 3); //Error + const str2 = __classStaticPrivateMethodGet((_d = AA.getClass()), _a, _AA_method2).bind(_d) `head${1}middle${2}tail`; } static getClass() { return AA; } } -_AA_method = function _AA_method() { this.x = 10; }, _AA_method2 = function _AA_method2(a, ...b) { }; +_a = AA, _AA_method = function _AA_method() { this.x = 10; }, _AA_method2 = function _AA_method2(a, ...b) { }; AA.x = 1; diff --git a/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js index 2dfb9750fed8a..4e2160d101585 100644 --- a/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js +++ b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js @@ -14,9 +14,9 @@ var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) } return fn; }; -var _C_method; +var _a, _C_method; class C { } -_C_method = function _C_method() { return 42; }; -C.s = __classStaticPrivateMethodGet(C, C, _C_method).call(C); +_a = C, _C_method = function _C_method() { return 42; }; +C.s = __classStaticPrivateMethodGet(C, _a, _C_method).call(C); console.log(C.s); diff --git a/tests/baselines/reference/privateNamesAndStaticFields.js b/tests/baselines/reference/privateNamesAndStaticFields.js index 09bf413c203f1..dcb14a8997386 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.js +++ b/tests/baselines/reference/privateNamesAndStaticFields.js @@ -43,22 +43,24 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _A_foo, _A_bar, _B_foo; +var _a, _A_foo, _A_bar, _b, _B_foo; class A { constructor() { - __classStaticPrivateFieldSet(A, A, _A_foo, 3); - __classStaticPrivateFieldGet(B, A, _A_foo); // Error - __classStaticPrivateFieldGet(B, A, _A_bar); // Error + __classStaticPrivateFieldSet(A, _a, _A_foo, 3); + __classStaticPrivateFieldGet(B, _a, _A_foo); // Error + __classStaticPrivateFieldGet(B, _a, _A_bar); // Error } } +_a = A; _A_foo = { value: void 0 }; _A_bar = { value: void 0 }; class B extends A { constructor() { super(); - __classStaticPrivateFieldSet(B, B, _B_foo, "some string"); + __classStaticPrivateFieldSet(B, _b, _B_foo, "some string"); } } +_b = B; _B_foo = { value: void 0 }; // We currently filter out static private identifier fields in `getUnmatchedProperties`. // We will need a more robust solution when we support static fields diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index b97c0939da014..eb0dbd87e498d 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -30,17 +30,17 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; +var _a, _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; class Parent { constructor() { _Parent_foo.set(this, 3); } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classStaticPrivateFieldGet(Child, Parent, _Parent_bar); // Error: not found + __classStaticPrivateFieldGet(Child, _a, _Parent_bar); // Error: not found } } -_Parent_foo = new WeakMap(); +_a = Parent, _Parent_foo = new WeakMap(); _Parent_bar = { value: 5 }; class Child extends Parent { constructor() { diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index 4e53e4b954c42..e54eba4f5c4ee 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -32,17 +32,17 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; +var _a, _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; class Parent { constructor() { _Parent_foo.set(this, 3); } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classStaticPrivateFieldGet(Child, Parent, _Parent_bar); // Error: not found + __classStaticPrivateFieldGet(Child, _a, _Parent_bar); // Error: not found } } -_Parent_foo = new WeakMap(); +_a = Parent, _Parent_foo = new WeakMap(); _Parent_bar = { value: 5 }; class Child extends Parent { constructor() { diff --git a/tests/baselines/reference/privateNamesInNestedClasses-2.js b/tests/baselines/reference/privateNamesInNestedClasses-2.js index 26cace2ed9b70..b64df29fe560e 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-2.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-2.js @@ -24,7 +24,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _A_x; +var _a, _A_x; class A { constructor() { var _B_x; @@ -41,4 +41,5 @@ class A { _B_x = new WeakMap(); } } +_a = A; _A_x = { value: 5 }; diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index a6a4ba06d4b6e..fc63600568b39 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -24,7 +24,7 @@ var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) | } return propertyDescriptor.value; }; -var _A_foo, _A_foo_1, _B_foo; +var _a, _A_foo, _A_foo_1, _b, _B_foo; class A { constructor() { _A_foo_1 = { value: 1 }; @@ -33,11 +33,12 @@ class A { // https://tc39.es/proposal-class-fields/#prod-ClassBody } } -_A_foo = new WeakMap(); +_a = A, _A_foo = new WeakMap(); _A_foo_1 = { value: true }; // error (duplicate) class B { test(x) { - __classStaticPrivateFieldGet(x, B, _B_foo); // error (#foo is a static property on B, not an instance property) + __classStaticPrivateFieldGet(x, _b, _B_foo); // error (#foo is a static property on B, not an instance property) } } +_b = B; _B_foo = { value: true }; diff --git a/tests/baselines/reference/privateStaticNameShadowing.js b/tests/baselines/reference/privateStaticNameShadowing.js new file mode 100644 index 0000000000000..c37aba06f7471 --- /dev/null +++ b/tests/baselines/reference/privateStaticNameShadowing.js @@ -0,0 +1,36 @@ +//// [privateStaticNameShadowing.ts] +class X { + static #f = X.#m(); + constructor() { + X.#m(); + } + static #m() { + const X: any = {}; // shadow the class + const _a: any = {}; // shadow the first generated var + X.#m(); // Should check with X as the receiver with _b as the class constructor + return 1; + } + } + + +//// [privateStaticNameShadowing.js] +var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { + if (receiver !== classConstructor) { + throw new TypeError("Private static access of wrong provenance"); + } + return fn; +}; +var _b, _X_f, _X_m; +class X { + constructor() { + __classStaticPrivateMethodGet(X, _b, _X_m).call(X); + } +} +_b = X, _X_m = function _X_m() { + const X = {}; // shadow the class + const _a = {}; // shadow the first generated var + __classStaticPrivateMethodGet(X, _b, _X_m).call(// shadow the first generated var + X); // Should check with X as the receiver with _b as the class constructor + return 1; +}; +_X_f = { value: __classStaticPrivateMethodGet(X, _b, _X_m).call(X) }; diff --git a/tests/baselines/reference/privateStaticNameShadowing.symbols b/tests/baselines/reference/privateStaticNameShadowing.symbols new file mode 100644 index 0000000000000..95ad9ffc738bb --- /dev/null +++ b/tests/baselines/reference/privateStaticNameShadowing.symbols @@ -0,0 +1,30 @@ +=== tests/cases/conformance/classes/members/privateNames/privateStaticNameShadowing.ts === +class X { +>X : Symbol(X, Decl(privateStaticNameShadowing.ts, 0, 0)) + + static #f = X.#m(); +>#f : Symbol(X.#f, Decl(privateStaticNameShadowing.ts, 0, 9)) +>X.#m : Symbol(X.#m, Decl(privateStaticNameShadowing.ts, 4, 5)) +>X : Symbol(X, Decl(privateStaticNameShadowing.ts, 0, 0)) + + constructor() { + X.#m(); +>X.#m : Symbol(X.#m, Decl(privateStaticNameShadowing.ts, 4, 5)) +>X : Symbol(X, Decl(privateStaticNameShadowing.ts, 0, 0)) + } + static #m() { +>#m : Symbol(X.#m, Decl(privateStaticNameShadowing.ts, 4, 5)) + + const X: any = {}; // shadow the class +>X : Symbol(X, Decl(privateStaticNameShadowing.ts, 6, 11)) + + const _a: any = {}; // shadow the first generated var +>_a : Symbol(_a, Decl(privateStaticNameShadowing.ts, 7, 11)) + + X.#m(); // Should check with X as the receiver with _b as the class constructor +>X : Symbol(X, Decl(privateStaticNameShadowing.ts, 6, 11)) + + return 1; + } + } + diff --git a/tests/baselines/reference/privateStaticNameShadowing.types b/tests/baselines/reference/privateStaticNameShadowing.types new file mode 100644 index 0000000000000..e636c4d063344 --- /dev/null +++ b/tests/baselines/reference/privateStaticNameShadowing.types @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/members/privateNames/privateStaticNameShadowing.ts === +class X { +>X : X + + static #f = X.#m(); +>#f : number +>X.#m() : number +>X.#m : () => number +>X : typeof X + + constructor() { + X.#m(); +>X.#m() : number +>X.#m : () => number +>X : typeof X + } + static #m() { +>#m : () => number + + const X: any = {}; // shadow the class +>X : any +>{} : {} + + const _a: any = {}; // shadow the first generated var +>_a : any +>{} : {} + + X.#m(); // Should check with X as the receiver with _b as the class constructor +>X.#m() : any +>X.#m : any +>X : any + + return 1; +>1 : 1 + } + } + diff --git a/tests/cases/conformance/classes/members/privateNames/privateStaticNameShadowing.ts b/tests/cases/conformance/classes/members/privateNames/privateStaticNameShadowing.ts new file mode 100644 index 0000000000000..2d660f064cf23 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateStaticNameShadowing.ts @@ -0,0 +1,15 @@ +// @target: es2015 + +class X { + static #f = X.#m(); + constructor() { + X.#m(); + } + static #m() { + const X: any = {}; // shadow the class + const _a: any = {}; // shadow the first generated var + X.#m(); // Should check with X as the receiver with _b as the class constructor + return 1; + } + } + \ No newline at end of file From dd526e7109ad0e67dc06e225854fa9b986a76a9d Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Mar 2021 08:04:44 +0000 Subject: [PATCH 53/73] fix private methods/accessors in class expr inside a loop --- src/compiler/checker.ts | 39 +++++++++++-------- .../privateNameClassExpressionLoop.js | 14 +++++-- .../privateNameClassExpressionLoop.symbols | 10 +++++ .../privateNameClassExpressionLoop.types | 15 ++++++- .../privateNameClassExpressionLoop.ts | 3 ++ 5 files changed, 60 insertions(+), 21 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d93c2ba6c8d26..d5b0bce5416cd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -32690,22 +32690,7 @@ namespace ts { if (!checkGrammarDecoratorsAndModifiers(node) && !checkGrammarProperty(node)) checkGrammarComputedPropertyName(node.name); checkVariableLikeDeclaration(node); - // Private class fields transformation relies on WeakMaps. - if (isPrivateIdentifier(node.name) && languageVersion < ScriptTarget.ESNext) { - for (let lexicalScope = getEnclosingBlockScopeContainer(node); !!lexicalScope; lexicalScope = getEnclosingBlockScopeContainer(lexicalScope)) { - getNodeLinks(lexicalScope).flags |= NodeCheckFlags.ContainsClassWithPrivateIdentifiers; - } - - // If this is a private field in a class expression inside the body of a loop, - // then we must use a block-scoped binding to store the WeakMap. - if (isClassExpression(node.parent)) { - const enclosingIterationStatement = getEnclosingIterationStatement(node.parent); - if (enclosingIterationStatement) { - getNodeLinks(node.name).flags |= NodeCheckFlags.BlockScopedBindingInLoop; - getNodeLinks(enclosingIterationStatement).flags |= NodeCheckFlags.LoopWithCapturedBlockScopedBinding; - } - } - } + setNodeLinksForPrivateIdentifierScope(node); } function checkPropertySignature(node: PropertySignature) { @@ -32732,6 +32717,27 @@ namespace ts { if (isPrivateIdentifier(node.name) && !getContainingClass(node)) { error(node, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); } + + setNodeLinksForPrivateIdentifierScope(node); + } + + function setNodeLinksForPrivateIdentifierScope(node: PropertyDeclaration | PropertySignature | MethodDeclaration | MethodSignature | AccessorDeclaration) { + if (isPrivateIdentifier(node.name) && languageVersion < ScriptTarget.ESNext) { + for (let lexicalScope = getEnclosingBlockScopeContainer(node); !!lexicalScope; lexicalScope = getEnclosingBlockScopeContainer(lexicalScope)) { + getNodeLinks(lexicalScope).flags |= NodeCheckFlags.ContainsClassWithPrivateIdentifiers; + } + + // If this is a private element in a class expression inside the body of a loop, + // then we must use a block-scoped binding to store the additional variables required + // to transform private elements. + if (isClassExpression(node.parent)) { + const enclosingIterationStatement = getEnclosingIterationStatement(node.parent); + if (enclosingIterationStatement) { + getNodeLinks(node.name).flags |= NodeCheckFlags.BlockScopedBindingInLoop; + getNodeLinks(enclosingIterationStatement).flags |= NodeCheckFlags.LoopWithCapturedBlockScopedBinding; + } + } + } } function checkConstructorDeclaration(node: ConstructorDeclaration) { @@ -32865,6 +32871,7 @@ namespace ts { } } checkSourceElement(node.body); + setNodeLinksForPrivateIdentifierScope(node); } function checkAccessorDeclarationTypesIdentical(first: AccessorDeclaration, second: AccessorDeclaration, getAnnotatedType: (a: AccessorDeclaration) => Type | undefined, message: DiagnosticMessage) { diff --git a/tests/baselines/reference/privateNameClassExpressionLoop.js b/tests/baselines/reference/privateNameClassExpressionLoop.js index bd83a8c9db829..dac5891a65ec3 100644 --- a/tests/baselines/reference/privateNameClassExpressionLoop.js +++ b/tests/baselines/reference/privateNameClassExpressionLoop.js @@ -3,6 +3,9 @@ const array = []; for (let i = 0; i < 10; ++i) { array.push(class C { #myField = "hello"; + #method() {} + get #accessor() { return 42; } + set #accessor(val) { } }); } @@ -11,12 +14,17 @@ for (let i = 0; i < 10; ++i) { var _a; const array = []; for (let i = 0; i < 10; ++i) { - let _myField; + let _C_instances, _C_myField, _C_method, _C_accessor_get, _C_accessor_set; array.push((_a = class C { constructor() { - _myField.set(this, "hello"); + _C_instances.add(this); + _C_myField.set(this, "hello"); } }, - _myField = new WeakMap(), + _C_myField = new WeakMap(), + _C_instances = new WeakSet(), + _C_method = function _C_method() { }, + _C_accessor_get = function _C_accessor_get() { return 42; }, + _C_accessor_set = function _C_accessor_set(val) { }, _a)); } diff --git a/tests/baselines/reference/privateNameClassExpressionLoop.symbols b/tests/baselines/reference/privateNameClassExpressionLoop.symbols index ac503fc6c9c08..3f303cbdde849 100644 --- a/tests/baselines/reference/privateNameClassExpressionLoop.symbols +++ b/tests/baselines/reference/privateNameClassExpressionLoop.symbols @@ -16,6 +16,16 @@ for (let i = 0; i < 10; ++i) { #myField = "hello"; >#myField : Symbol(C.#myField, Decl(privateNameClassExpressionLoop.ts, 2, 24)) + #method() {} +>#method : Symbol(C.#method, Decl(privateNameClassExpressionLoop.ts, 3, 27)) + + get #accessor() { return 42; } +>#accessor : Symbol(C.#accessor, Decl(privateNameClassExpressionLoop.ts, 4, 20), Decl(privateNameClassExpressionLoop.ts, 5, 38)) + + set #accessor(val) { } +>#accessor : Symbol(C.#accessor, Decl(privateNameClassExpressionLoop.ts, 4, 20), Decl(privateNameClassExpressionLoop.ts, 5, 38)) +>val : Symbol(val, Decl(privateNameClassExpressionLoop.ts, 6, 22)) + }); } diff --git a/tests/baselines/reference/privateNameClassExpressionLoop.types b/tests/baselines/reference/privateNameClassExpressionLoop.types index 5775f9fd042d8..5367c80e5db06 100644 --- a/tests/baselines/reference/privateNameClassExpressionLoop.types +++ b/tests/baselines/reference/privateNameClassExpressionLoop.types @@ -13,17 +13,28 @@ for (let i = 0; i < 10; ++i) { >i : number array.push(class C { ->array.push(class C { #myField = "hello"; }) : number +>array.push(class C { #myField = "hello"; #method() {} get #accessor() { return 42; } set #accessor(val) { } }) : number >array.push : (...items: any[]) => number >array : any[] >push : (...items: any[]) => number ->class C { #myField = "hello"; } : typeof C +>class C { #myField = "hello"; #method() {} get #accessor() { return 42; } set #accessor(val) { } } : typeof C >C : typeof C #myField = "hello"; >#myField : string >"hello" : "hello" + #method() {} +>#method : () => void + + get #accessor() { return 42; } +>#accessor : number +>42 : 42 + + set #accessor(val) { } +>#accessor : number +>val : number + }); } diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameClassExpressionLoop.ts b/tests/cases/conformance/classes/members/privateNames/privateNameClassExpressionLoop.ts index 222be787d0e67..333a69f79f570 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameClassExpressionLoop.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameClassExpressionLoop.ts @@ -3,5 +3,8 @@ const array = []; for (let i = 0; i < 10; ++i) { array.push(class C { #myField = "hello"; + #method() {} + get #accessor() { return 42; } + set #accessor(val) { } }); } From f6ecfab59a6e09cf997ea6506132f1b7cdcf50d5 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Mar 2021 08:48:03 +0000 Subject: [PATCH 54/73] collapse switch case --- src/compiler/transformers/classFields.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 47f32762f7bfd..b0863c4a4e875 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -192,10 +192,8 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - return visitMethodDeclaration(node as AccessorDeclaration); - case SyntaxKind.MethodDeclaration: - return visitMethodDeclaration(node as MethodDeclaration); + return visitMethodOrAccessorDeclaration(node as MethodDeclaration | AccessorDeclaration); case SyntaxKind.PropertyDeclaration: return visitPropertyDeclaration(node as PropertyDeclaration); @@ -238,7 +236,7 @@ namespace ts { return node; } - function visitMethodDeclaration(node: MethodDeclaration | AccessorDeclaration) { + function visitMethodOrAccessorDeclaration(node: MethodDeclaration | AccessorDeclaration) { Debug.assert(!some(node.decorators)); const transformedMethod = visitEachChild(node, classElementVisitor, context); From 6c3f6610500fa9d39681c39c40428af4df910e9a Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Mar 2021 08:48:17 +0000 Subject: [PATCH 55/73] fix class name --- 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 b0863c4a4e875..63f9ebd965c15 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -571,7 +571,7 @@ namespace ts { const name = getNameOfDeclaration(node); if (name && isIdentifier(name)) { - getPrivateIdentifierEnvironment().className = name.escapedText as string; + getPrivateIdentifierEnvironment().className = idText(name); } const privateInstanceMethods = getPrivateInstanceMethods(node); From ef69c6c7d8587bb8122fa967abcc9ce12e30e1c4 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Mar 2021 08:48:37 +0000 Subject: [PATCH 56/73] simplify getPrivateMethodsAndAccessors --- src/compiler/transformers/classFields.ts | 24 +++++++-------- src/compiler/transformers/utilities.ts | 37 ++---------------------- src/compiler/types.ts | 2 ++ 3 files changed, 17 insertions(+), 46 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 63f9ebd965c15..31cc86f0e1aa2 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -574,9 +574,12 @@ namespace ts { getPrivateIdentifierEnvironment().className = idText(name); } - const privateInstanceMethods = getPrivateInstanceMethods(node); - if (some(privateInstanceMethods)) { - getPrivateIdentifierEnvironment().weakSetName = createHoistedVariableForClass("instances", privateInstanceMethods[0].name as PrivateIdentifier); + const privateInstanceMethodsAndAccessors = getPrivateInstanceMethodsAndAccessors(node); + if (some(privateInstanceMethodsAndAccessors)) { + getPrivateIdentifierEnvironment().weakSetName = createHoistedVariableForClass( + "instances", + privateInstanceMethodsAndAccessors[0].name + ); } } @@ -595,11 +598,8 @@ namespace ts { return isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && isPrivateIdentifier(node.name)); } - function getPrivateInstanceMethods(node: ClassLikeDeclaration) { - return filter( - [...getMethods(node, /*isStatic*/ false), ...getAccessors(node, /*isStatic*/ false)], - method => isPrivateIdentifier(method.name) - ); + function getPrivateInstanceMethodsAndAccessors(node: ClassLikeDeclaration) { + return filter(node.members, isNonStaticMethodOrAccessorWithPrivateName); } function visitClassDeclaration(node: ClassDeclaration) { @@ -721,7 +721,7 @@ namespace ts { } } - if (some(getPrivateInstanceMethods(node))) { + if (some(getPrivateInstanceMethodsAndAccessors(node))) { createBrandCheckWeakSetForPrivateMethods(); } } @@ -794,8 +794,8 @@ namespace ts { properties = filter(properties, property => !!property.initializer || isPrivateIdentifier(property.name)); } - const privateMethods = getPrivateInstanceMethods(node); - const needsConstructorBody = some(properties) || some(privateMethods); + const privateMethodsAndAccessors = getPrivateInstanceMethodsAndAccessors(node); + const needsConstructorBody = some(properties) || some(privateMethodsAndAccessors); // Only generate synthetic constructor when there are property initializers to move. if (!constructor && !needsConstructorBody) { @@ -850,7 +850,7 @@ namespace ts { } const receiver = factory.createThis(); // private methods can be called in property initializers, they should execute first. - addMethodStatements(statements, privateMethods, receiver); + addMethodStatements(statements, privateMethodsAndAccessors, receiver); addPropertyStatements(statements, properties, receiver); // Add existing statements, skipping the initial super call. diff --git a/src/compiler/transformers/utilities.ts b/src/compiler/transformers/utilities.ts index 8f6ea8edf9ea3..e1c3b0b957d6d 100644 --- a/src/compiler/transformers/utilities.ts +++ b/src/compiler/transformers/utilities.ts @@ -342,26 +342,6 @@ namespace ts { return filter(node.members, m => isInitializedOrStaticProperty(m, requireInitializer, isStatic)) as PropertyDeclaration[]; } - /** - * Gets all the static or all the instance method declarations of a class. - * - * @param node The class node. - * @param isStatic A value indicating whether to get methods from the static or instance side of the class. - */ - export function getMethods(node: ClassExpression | ClassDeclaration, isStatic: boolean): readonly MethodDeclaration[] { - return filter(node.members, m => isStaticMethodDeclaration(m, isStatic)) as MethodDeclaration[]; - } - - /** - * Gets all the static or all the instance accessor declarations of a class. - * - * @param node The class node. - * @param isStatic A value indicating whether to get accessors from the static or instance side of the class. - */ - export function getAccessors(node: ClassExpression | ClassDeclaration, isStatic: boolean): readonly AccessorDeclaration[] { - return filter(node.members, m => isStaticAccessorDeclaration(m, isStatic)) as AccessorDeclaration[]; - } - /** * Is a class element either a static or an instance property declaration with an initializer? * @@ -386,22 +366,11 @@ namespace ts { } /** - * Gets a value indicating whether a class element is either a static or an instance method declaration. - * - * @param member The class element node. - * @param isStatic A value indicating whether the member should be a static or instance member. - */ - export function isStaticMethodDeclaration(member: ClassElement, isStatic: boolean): member is MethodDeclaration { - return isMethodDeclaration(member) && hasStaticModifier(member) === isStatic; - } - - /** - * Gets a value indicating whether a class element is either a static or an instance accessor declaration. + * Gets a value indicating whether a class element is a private instance method or accessor. * * @param member The class element node. - * @param isStatic A value indicating whether the member should be a static or instance member. */ - export function isStaticAccessorDeclaration(member: ClassElement, isStatic: boolean): member is AccessorDeclaration { - return isGetOrSetAccessorDeclaration(member) && hasStaticModifier(member) === isStatic; + export function isNonStaticMethodOrAccessorWithPrivateName(member: ClassElement): member is PrivateIdentifierMethodDeclaration | PrivateIdentifierAccessorDeclaration { + return !hasStaticModifier(member) && isMethodOrAccessor(member) && isPrivateIdentifier(member.name); } } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 44190aa10c388..11f4c6d3ea7e1 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1315,6 +1315,8 @@ namespace ts { name: PrivateIdentifier; } /*@internal*/ + export type PrivateIdentifierAccessorDeclaration = PrivateIdentifierGetAccessorDeclaration | PrivateIdentifierSetAccessorDeclaration; + /*@internal*/ export type PrivateClassElementDeclaration = | PrivateIdentifierPropertyDeclaration | PrivateIdentifierMethodDeclaration From 2a646ed7e7f2bb140aee50408a70b1a6333bb9f3 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Mar 2021 08:54:19 +0000 Subject: [PATCH 57/73] remove findPreviousAccessorInfo --- src/compiler/transformers/classFields.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 31cc86f0e1aa2..b0d85b3b2612c 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -1134,7 +1134,7 @@ namespace ts { }; } else if (isAccessor(node)) { - const previousInfo = findPreviousAccessorInfo(node); + const previousInfo = getPrivateIdentifierEnvironment().identifiers.get(node.name.escapedText); if (isGetAccessor(node)) { const getterName = createHoistedVariableForPrivateName(text + "_get", node); @@ -1183,16 +1183,6 @@ namespace ts { getPendingExpressions().push(...assignmentExpressions); } - function findPreviousAccessorInfo( - node: PrivateIdentifierGetAccessorDeclaration | PrivateIdentifierSetAccessorDeclaration - ): PrivateIdentifierInstanceGetterOnly | PrivateIdentifierInstanceSetterOnly | undefined { - const info = getPrivateIdentifierEnvironment().identifiers.get(node.name.escapedText); - if (info?.placement === PrivateIdentifierPlacement.InstanceGetterOnly || - info?.placement === PrivateIdentifierPlacement.InstanceSetterOnly) { - return info; - } - } - function createHoistedVariableForClass(name: string, node: PrivateIdentifier): Identifier { const { className } = getPrivateIdentifierEnvironment(); const prefix = className ? `_${className}` : ""; From d8136f7628467e07a81ec42cdb4ad9b093213eef Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 17 Mar 2021 13:48:03 +0000 Subject: [PATCH 58/73] lazily create weakSetName identifier --- src/compiler/transformers/classFields.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index b0d85b3b2612c..74fd686373c32 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -61,7 +61,7 @@ namespace ts { /** * Used for brand check on private methods. */ - weakSetName: Identifier; + weakSetName?: Identifier; /** * A mapping of private names to information needed for transformation. */ @@ -736,9 +736,12 @@ namespace ts { } function createBrandCheckWeakSetForPrivateMethods() { + const { weakSetName } = getPrivateIdentifierEnvironment(); + Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); + getPendingExpressions().push( factory.createAssignment( - getPrivateIdentifierEnvironment().weakSetName, + weakSetName, factory.createNewExpression( factory.createIdentifier("WeakSet"), /*typeArguments*/ undefined, @@ -997,9 +1000,11 @@ namespace ts { return; } + const { weakSetName } = getPrivateIdentifierEnvironment(); + Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); statements.push( factory.createExpressionStatement( - createPrivateInstanceMethodInitializer(receiver, getPrivateIdentifierEnvironment().weakSetName) + createPrivateInstanceMethodInitializer(receiver, weakSetName) ) ); } @@ -1092,7 +1097,6 @@ namespace ts { if (!currentPrivateIdentifierEnvironment) { currentPrivateIdentifierEnvironment = { className: "", - weakSetName: factory.createUniqueName("_instances", GeneratedIdentifierFlags.Optimistic), identifiers: new Map() }; } @@ -1127,6 +1131,8 @@ namespace ts { )); } else if (isMethodDeclaration(node)) { + Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); + info = { placement: PrivateIdentifierPlacement.InstanceMethod, weakSetName, @@ -1134,6 +1140,7 @@ namespace ts { }; } else if (isAccessor(node)) { + Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); const previousInfo = getPrivateIdentifierEnvironment().identifiers.get(node.name.escapedText); if (isGetAccessor(node)) { From 7490a36397b3dc4b9425b2293756e00d7b496148 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Thu, 18 Mar 2021 09:13:31 +0000 Subject: [PATCH 59/73] do not allocate a node if not needed in visitMehodDeclaration (#55) --- src/compiler/transformers/classFields.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index b0bdec96bf229..0ed4509fcd906 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -278,10 +278,9 @@ namespace ts { function visitMethodOrAccessorDeclaration(node: MethodDeclaration | AccessorDeclaration) { Debug.assert(!some(node.decorators)); - const transformedMethod = visitEachChild(node, classElementVisitor, context); - if (!shouldTransformPrivateElements || !isPrivateIdentifier(node.name) || !transformedMethod.body) { - return transformedMethod; + if (!shouldTransformPrivateElements || !isPrivateIdentifier(node.name)) { + return visitEachChild(node, classElementVisitor, context); } const functionName = getHoistedFunctionName(node); @@ -290,13 +289,13 @@ namespace ts { factory.createAssignment( functionName, factory.createFunctionExpression( - filter(transformedMethod.modifiers, m => !isStaticModifier(m)), - transformedMethod.asteriskToken, + filter(node.modifiers, m => !isStaticModifier(m)), + node.asteriskToken, functionName, - transformedMethod.typeParameters, - transformedMethod.parameters, - transformedMethod.type, - transformedMethod.body + /* typeParameters */ undefined, + visitParameterList(node.parameters, classElementVisitor, context), + /* type */ undefined, + visitFunctionBody(node.body!, classElementVisitor, context) ) ) ); From c273258a38f0f242e5b231a4c4ba3432dea51d45 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Wed, 17 Mar 2021 20:11:45 +0200 Subject: [PATCH 60/73] Removed all the emit helpers for private identifier methods accessors and modified the existing helpers for get and set fields to do the same job. --- src/compiler/factory/emitHelpers.ts | 300 +++--------------- src/compiler/transformers/classFields.ts | 69 ++-- .../reference/privateNameAccessors.js | 31 +- .../reference/privateNameAccessorsAccess.js | 15 +- .../privateNameAccessorsCallExpression.js | 23 +- .../privateNameAccessorssDerivedClasses.js | 11 +- .../baselines/reference/privateNameAndAny.js | 36 +-- .../privateNameAndObjectRestSpread.js | 22 +- .../reference/privateNameBadAssignment.js | 11 +- .../reference/privateNameCircularReference.js | 9 +- ...ameComputedPropertyName1(target=es2015).js | 20 +- ...ameComputedPropertyName2(target=es2015).js | 9 +- ...ameComputedPropertyName3(target=es2015).js | 20 +- .../privateNameConstructorSignature.js | 11 +- .../privateNameDeclarationMerging.js | 9 +- tests/baselines/reference/privateNameField.js | 11 +- .../reference/privateNameFieldAccess.js | 9 +- .../reference/privateNameFieldAssignment.js | 20 +- .../privateNameFieldCallExpression.js | 9 +- .../privateNameFieldDerivedClasses.js | 9 +- ...FieldDestructuredBinding(target=es2015).js | 11 +- .../privateNameFieldUnaryMutation.js | 20 +- .../privateNameInLhsReceiverExpression.js | 20 +- .../baselines/reference/privateNameMethod.js | 15 +- .../reference/privateNameMethodAccess.js | 15 +- .../reference/privateNameMethodAssignment.js | 32 +- .../reference/privateNameMethodAsync.js | 13 +- .../privateNameMethodCallExpression.js | 29 +- .../privateNameMethodClassExpression.js | 17 +- .../privateNameMethodInStaticFieldInit.js | 11 +- .../privateNameMethodsDerivedClasses.js | 11 +- ...rivateNameNestedClassAccessorsShadowing.js | 13 +- .../privateNameNestedClassFieldShadowing.js | 9 +- .../privateNameNestedClassMethodShadowing.js | 13 +- .../privateNameNestedMethodAccess.js | 31 +- .../reference/privateNameReadonly.js | 9 +- .../privateNameSetterExprReturnValue.js | 13 +- .../reference/privateNameSetterNoGetter.js | 19 +- .../reference/privateNameStaticAccessors.js | 31 +- .../privateNameStaticAccessorsAccess.js | 15 +- ...rivateNameStaticAccessorsCallExpression.js | 39 +-- ...ivateNameStaticAccessorssDerivedClasses.js | 11 +- .../reference/privateNameStaticFieldAccess.js | 16 +- .../privateNameStaticFieldAssignment.js | 78 ++--- .../privateNameStaticFieldCallExpression.js | 28 +- .../privateNameStaticFieldClassExpression.js | 20 +- .../privateNameStaticFieldDerivedClasses.js | 32 +- ...FieldDestructuredBinding(target=es2015).js | 30 +- .../privateNameStaticFieldUnaryMutation.js | 66 ++-- .../reference/privateNameStaticMethod.js | 15 +- .../privateNameStaticMethodAssignment.js | 32 +- .../reference/privateNameStaticMethodAsync.js | 13 +- .../privateNameStaticMethodCallExpression.js | 29 +- .../privateNameStaticMethodClassExpression.js | 22 +- ...rivateNameStaticMethodInStaticFieldInit.js | 11 +- .../reference/privateNamesAndFields.js | 11 +- .../privateNamesAndGenericClasses-2.js | 28 +- .../reference/privateNamesAndStaticFields.js | 34 +- .../privateNamesConstructorChain-1.js | 20 +- .../privateNamesConstructorChain-2.js | 20 +- .../reference/privateNamesInGenericClasses.js | 44 +-- .../privateNamesInNestedClasses-1.js | 9 +- .../privateNamesInNestedClasses-2.js | 9 +- .../privateNamesInterfaceExtendingClass.js | 11 +- .../reference/privateNamesNoDelete.js | 9 +- .../reference/privateNamesUnique-2.js | 9 +- .../reference/privateNamesUnique-3.js | 14 +- .../reference/privateNamesUseBeforeDef.js | 25 +- .../reference/privateStaticNameShadowing.js | 15 +- .../reference/strictPropertyInitialization.js | 20 +- 70 files changed, 656 insertions(+), 1065 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index a65e32b220ef7..29049f126057b 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -32,21 +32,8 @@ namespace ts { createImportDefaultHelper(expression: Expression): Expression; createExportStarHelper(moduleExpression: Expression, exportsExpression?: Expression): Expression; // Class Fields Helpers - createClassPrivateFieldGetHelper(receiver: Expression, privateField: Identifier): Expression; - createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression): Expression; - createClassPrivateMethodGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; - createClassPrivateReadonlyHelper(receiver: Expression, value: Expression): Expression; - createClassPrivateWriteonlyHelper(receiver: Expression): Expression; - createClassPrivateAccessorGetHelper(receiver: Expression, instances: Identifier, fn: Identifier): Expression; - createClassPrivateAccessorSetHelper(receiver: Expression, instances: Identifier, fn: Identifier, value: Expression): Expression; - // Class Static Private Helpers - createClassStaticPrivateFieldGetHelper(receiver: Expression, classConstructor: Identifier, privateField: Identifier): Expression; - createClassStaticPrivateFieldSetHelper(receiver: Expression, classConstructor: Identifier, privateField: Identifier, value: Expression): Expression; - createClassStaticPrivateMethodGetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier): Expression; - createClassStaticPrivateReadonlyHelper(receiver: Expression, value: Expression): Expression; - createClassStaticPrivateWriteonlyHelper(receiver: Expression): Expression; - createClassStaticPrivateAccessorGetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier): Expression; - createClassStaticPrivateAccessorSetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier, value: Expression): Expression; + createClassPrivateFieldGetHelper(receiver: Expression, privateField: Identifier, kind?: "a" | "m" | undefined, f?: Identifier | undefined): Expression; + createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression, kind?: "a" | "m" | undefined, f?: Identifier | undefined): Expression; } export function createEmitHelperFactory(context: TransformationContext): EmitHelperFactory { @@ -85,18 +72,6 @@ namespace ts { // Class Fields Helpers createClassPrivateFieldGetHelper, createClassPrivateFieldSetHelper, - createClassPrivateMethodGetHelper, - createClassPrivateReadonlyHelper, - createClassPrivateWriteonlyHelper, - createClassPrivateAccessorGetHelper, - createClassPrivateAccessorSetHelper, - createClassStaticPrivateFieldGetHelper, - createClassStaticPrivateFieldSetHelper, - createClassStaticPrivateMethodGetHelper, - createClassStaticPrivateReadonlyHelper, - createClassStaticPrivateWriteonlyHelper, - createClassStaticPrivateAccessorGetHelper, - createClassStaticPrivateAccessorSetHelper, }; /** @@ -393,75 +368,42 @@ namespace ts { // Class Fields Helpers - function createClassPrivateFieldGetHelper(receiver: Expression, privateField: Identifier) { + function createClassPrivateFieldGetHelper(receiver: Expression, state: Identifier, kind?: "a" | "m" | undefined, f?: Identifier | undefined) { context.requestEmitHelper(classPrivateFieldGetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldGet"), /*typeArguments*/ undefined, [receiver, privateField]); + let args; + if(!kind && !f) { + args = [receiver, state]; + } + else if(kind && !f) { + args = [receiver, state, factory.createStringLiteral(kind)]; + } + else if(!kind && f) { + args = [receiver, state, factory.createVoidZero(), f]; + } + else { + args = [receiver, state, factory.createStringLiteral(kind!), f!]; + } + return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldGet"), /*typeArguments*/ undefined, args); } - function createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression) { + function createClassPrivateFieldSetHelper(receiver: Expression, state: Identifier, value: Expression, kind?: "a" | "m" | undefined, f?: Identifier | undefined) { context.requestEmitHelper(classPrivateFieldSetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldSet"), /*typeArguments*/ undefined, [receiver, privateField, value]); - } - - function createClassPrivateMethodGetHelper(receiver: Expression, instances: Identifier, fn: Identifier) { - context.requestEmitHelper(classPrivateMethodGetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateMethodGet"), /*typeArguments*/ undefined, [receiver, instances, fn]); - } - - function createClassPrivateReadonlyHelper(receiver: Expression, value: Expression) { - context.requestEmitHelper(classPrivateReadonlyHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateReadonly"), /*typeArguments*/ undefined, [receiver, value]); - } - - function createClassPrivateWriteonlyHelper(receiver: Expression) { - context.requestEmitHelper(classPrivateWriteonlyHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateWriteonly"), /*typeArguments*/ undefined, [receiver]); - } - - function createClassPrivateAccessorGetHelper(receiver: Expression, instances: Identifier, fn: Identifier) { - context.requestEmitHelper(classPrivateAccessorGetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateAccessorGet"), /*typeArguments*/ undefined, [receiver, instances, fn]); - } - - function createClassPrivateAccessorSetHelper(receiver: Expression, instances: Identifier, fn: Identifier, value: Expression) { - context.requestEmitHelper(classPrivateAccessorSetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classPrivateAccessorSet"), /*typeArguments*/ undefined, [receiver, instances, fn, value]); - } - // Class Private Static Helpers - function createClassStaticPrivateFieldGetHelper(receiver: Expression, classConstructor: Identifier, privateField: Identifier) { - context.requestEmitHelper(classStaticPrivateFieldGetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateFieldGet"), /*typeArguments*/ undefined, [receiver, classConstructor, privateField]); - } - - function createClassStaticPrivateFieldSetHelper(receiver: Expression, classConstructor: Identifier, privateField: Identifier, value: Expression) { - context.requestEmitHelper(classStaticPrivateFieldSetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateFieldSet"), /*typeArguments*/ undefined, [receiver, classConstructor, privateField, value]); - } - - function createClassStaticPrivateMethodGetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier) { - context.requestEmitHelper(classStaticPrivateMethodGetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateMethodGet"), /*typeArguments*/ undefined, [receiver, classConstructor, fn]); - } - - function createClassStaticPrivateReadonlyHelper(receiver: Expression, value: Expression) { - context.requestEmitHelper(classStaticPrivateReadonlyHelper); - return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateReadonly"), /*typeArguments*/ undefined, [receiver, value]); - } - - function createClassStaticPrivateWriteonlyHelper(receiver: Expression) { - context.requestEmitHelper(classStaticPrivateWriteonlyHelper); - return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateWriteonly"), /*typeArguments*/ undefined, [receiver]); - } - - function createClassStaticPrivateAccessorGetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier) { - context.requestEmitHelper(classStaticPrivateAccessorGetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateAccessorGet"), /*typeArguments*/ undefined, [receiver, classConstructor, fn]); + let args; + if(!kind && !f) { + args = [receiver, state, value]; + } + else if(kind && !f) { + args = [receiver, state, value, factory.createStringLiteral(kind)]; + } + else if(!kind && f) { + args = [receiver, state, value, factory.createVoidZero(), f]; + } + else { + args = [receiver, state, value, factory.createStringLiteral(kind!), f!]; + } + return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldSet"), /*typeArguments*/ undefined, args); } - function createClassStaticPrivateAccessorSetHelper(receiver: Expression, classConstructor: Identifier, fn: Identifier, value: Expression) { - context.requestEmitHelper(classStaticPrivateAccessorSetHelper); - return factory.createCallExpression(getUnscopedHelperName("__classStaticPrivateAccessorSet"), /*typeArguments*/ undefined, [receiver, classConstructor, fn, value]); - } } /* @internal */ @@ -907,11 +849,10 @@ namespace ts { importName: "__classPrivateFieldGet", scoped: false, text: ` - var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); + var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); };` }; @@ -920,165 +861,11 @@ namespace ts { importName: "__classPrivateFieldSet", scoped: false, text: ` - var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; - };` - }; - - export const classPrivateMethodGetHelper: UnscopedEmitHelper = { - name: "typescript:classPrivateMethodGet", - importName: "__classPrivateMethodGet", - scoped: false, - text: ` - var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; - };` - }; - - export const classPrivateReadonlyHelper: UnscopedEmitHelper = { - name: "typescript:classPrivateReadonly", - importName: "__classPrivateReadonly", - scoped: false, - text: ` - var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { - throw new TypeError("private element is not writable"); - };` - }; - - export const classPrivateWriteonlyHelper: UnscopedEmitHelper = { - name: "typescript:classPrivateWriteonly", - importName: "__classPrivateWriteonly", - scoped: false, - text: ` - var __classPrivateWriteonly = (this && this.__classPrivateWriteonly) || function () { - throw new TypeError("private setter was defined without a getter"); - };` - }; - - export const classPrivateAccessorGetHelper: UnscopedEmitHelper = { - name: "typescript:classPrivateAccessorGet", - importName: "__classPrivateAccessorGet", - scoped: false, - text: ` - var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); - };` - }; - - export const classPrivateAccessorSetHelper: UnscopedEmitHelper = { - name: "typescript:classPrivateAccessorSet", - importName: "__classPrivateAccessorSet", - scoped: false, - text: ` - var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to set private accessor on non-instance"); - } - fn.call(receiver, value); - return value; - };` - }; - - export const classStaticPrivateFieldGetHelper: UnscopedEmitHelper = { - name: "typescript:classStaticPrivateFieldGet", - importName: "__classStaticPrivateFieldGet", - scoped: false, - text: ` - var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; - };` - }; - - export const classStaticPrivateFieldSetHelper: UnscopedEmitHelper = { - name: "typescript:classStaticPrivateFieldSet", - importName: "__classStaticPrivateFieldSet", - scoped: false, - text: ` - var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - propertyDescriptor.value = value; - return value; - };` - }; - - export const classStaticPrivateMethodGetHelper: UnscopedEmitHelper = { - name: "typescript:classStaticPrivateMethodGet", - importName: "__classStaticPrivateMethodGet", - scoped: false, - text: ` - var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; - };` - }; - - export const classStaticPrivateReadonlyHelper: UnscopedEmitHelper = { - name: "typescript:classStaticPrivateReadonly", - importName: "__classStaticPrivateReadonly", - scoped: false, - text: ` - var __classStaticPrivateReadonly = (this && this.__classStaticPrivateReadonly) || function () { - throw new TypeError("Private static element is not writable"); - };` - }; - - export const classStaticPrivateWriteonlyHelper: UnscopedEmitHelper = { - name: "typescript:classStaticPrivateWriteonly", - importName: "__classStaticPrivateWriteonly", - scoped: false, - text: ` - var __classStaticPrivateWriteonly = (this && this.__classStaticPrivateWriteonly) || function () { - throw new TypeError("Private static element is not readable"); - };` - }; - - export const classStaticPrivateAccessorGetHelper: UnscopedEmitHelper = { - name: "typescript:classStaticPrivateAccessorGet", - importName: "__classStaticPrivateAccessorGet", - scoped: false, - text: ` - var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn.call(receiver); - };` - }; - - export const classStaticPrivateAccessorSetHelper: UnscopedEmitHelper = { - name: "typescript:classStaticPrivateAccessorSet", - importName: "__classStaticPrivateAccessorSet", - scoped: false, - text: ` - var __classStaticPrivateAccessorSet = (this && this.__classStaticPrivateAccessorSet) || function (receiver, classConstructor, fn, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - fn.call(receiver, value); - return value; + var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; };` }; @@ -1107,11 +894,6 @@ namespace ts { exportStarHelper, classPrivateFieldGetHelper, classPrivateFieldSetHelper, - classPrivateMethodGetHelper, - classPrivateReadonlyHelper, - classPrivateWriteonlyHelper, - classPrivateAccessorGetHelper, - classPrivateAccessorSetHelper, createBindingHelper, setModuleDefaultHelper ], helper => helper.name)); diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 0ed4509fcd906..01b289d8e125a 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -46,11 +46,13 @@ namespace ts { interface PrivateIdentifierStaticGetterOnly { placement: PrivateIdentifierPlacement.StaticGetterOnly; getterName: Identifier; + setterName?: undefined; classConstructor: Identifier; } interface PrivateIdentifierStaticSetterOnly { placement: PrivateIdentifierPlacement.StaticSetterOnly; setterName: Identifier; + getterName?: undefined; classConstructor: Identifier; } interface PrivateIdentifierStaticGetterAndSetterOnly { @@ -74,12 +76,14 @@ namespace ts { placement: PrivateIdentifierPlacement.InstanceGetterOnly; weakSetName: Identifier; getterName: Identifier; + setterName?: undefined; } interface PrivateIdentifierInstanceSetterOnly { placement: PrivateIdentifierPlacement.InstanceSetterOnly; weakSetName: Identifier; setterName: Identifier; + getterName?: undefined; } interface PrivateIdentifierInstanceGetterAndSetter { @@ -368,44 +372,48 @@ namespace ts { info.weakMapName ); case PrivateIdentifierPlacement.InstanceMethod: - return context.getEmitHelperFactory().createClassPrivateMethodGetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.weakSetName, + "m", info.functionName ); case PrivateIdentifierPlacement.InstanceGetterOnly: case PrivateIdentifierPlacement.InstanceGetterAndSetter: - return context.getEmitHelperFactory().createClassPrivateAccessorGetHelper( + case PrivateIdentifierPlacement.InstanceSetterOnly: + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.weakSetName, + "a", info.getterName ); - case PrivateIdentifierPlacement.InstanceSetterOnly: - return context.getEmitHelperFactory().createClassPrivateWriteonlyHelper( - receiver - ); case PrivateIdentifierPlacement.StaticField: - return context.getEmitHelperFactory().createClassStaticPrivateFieldGetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.classConstructor, + undefined, info.variableName ); case PrivateIdentifierPlacement.StaticMethod: - return context.getEmitHelperFactory().createClassStaticPrivateMethodGetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.classConstructor, + "m", info.functionName ); case PrivateIdentifierPlacement.StaticGetterOnly: case PrivateIdentifierPlacement.StaticGetterAndSetter: - return context.getEmitHelperFactory().createClassStaticPrivateAccessorGetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.classConstructor, + "a", info.getterName ); case PrivateIdentifierPlacement.StaticSetterOnly: - return context.getEmitHelperFactory().createClassStaticPrivateWriteonlyHelper( - receiver + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( + receiver, + info.classConstructor, + "a" ); default: return Debug.fail("Unexpected private identifier placement"); } @@ -609,39 +617,58 @@ namespace ts { right ); case PrivateIdentifierPlacement.InstanceMethod: + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + receiver, + info.weakSetName, + right, + "m" + ); case PrivateIdentifierPlacement.InstanceGetterOnly: - return context.getEmitHelperFactory().createClassPrivateReadonlyHelper( + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, - right + info.weakSetName, + right, + "a" ); case PrivateIdentifierPlacement.InstanceSetterOnly: case PrivateIdentifierPlacement.InstanceGetterAndSetter: - return context.getEmitHelperFactory().createClassPrivateAccessorSetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.weakSetName, + right, + "a", info.setterName, - right ); case PrivateIdentifierPlacement.StaticField: - return context.getEmitHelperFactory().createClassStaticPrivateFieldSetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.classConstructor, + right, + undefined, info.variableName, - right ); case PrivateIdentifierPlacement.StaticMethod: + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + receiver, + info.classConstructor, + right, + "m", + ); case PrivateIdentifierPlacement.StaticGetterOnly: - return context.getEmitHelperFactory().createClassStaticPrivateReadonlyHelper( + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, - right + info.classConstructor, + right, + "a", ); case PrivateIdentifierPlacement.StaticSetterOnly: case PrivateIdentifierPlacement.StaticGetterAndSetter: - return context.getEmitHelperFactory().createClassStaticPrivateAccessorSetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.classConstructor, + right, + "a", info.setterName, - right ); default: return Debug.fail("Unexpected private identifier placement"); } diff --git a/tests/baselines/reference/privateNameAccessors.js b/tests/baselines/reference/privateNameAccessors.js index f2c736fa52376..231ea602882b8 100644 --- a/tests/baselines/reference/privateNameAccessors.js +++ b/tests/baselines/reference/privateNameAccessors.js @@ -16,30 +16,25 @@ class A1 { //// [privateNameAccessors.js] "use strict"; -var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to set private accessor on non-instance"); - } - fn.call(receiver, value); - return value; -}; -var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { - throw new TypeError("private element is not writable"); +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A1_instances, _A1_prop_get, _A1_prop_set, _A1_roProp_get; class A1 { constructor(name) { _A1_instances.add(this); - __classPrivateAccessorSet(this, _A1_instances, _A1_prop_set, ""); - __classPrivateReadonly(this, ""); // Error - console.log(__classPrivateAccessorGet(this, _A1_instances, _A1_prop_get)); - console.log(__classPrivateAccessorGet(this, _A1_instances, _A1_roProp_get)); + __classPrivateFieldSet(this, _A1_instances, "", "a", _A1_prop_set); + __classPrivateFieldSet(this, _A1_instances, "", "a"); // Error + console.log(__classPrivateFieldGet(this, _A1_instances, "a", _A1_prop_get)); + console.log(__classPrivateFieldGet(this, _A1_instances, "a", _A1_roProp_get)); } } _A1_instances = new WeakSet(), _A1_prop_get = function _A1_prop_get() { return ""; }, _A1_prop_set = function _A1_prop_set(param) { }, _A1_roProp_get = function _A1_roProp_get() { return ""; }; diff --git a/tests/baselines/reference/privateNameAccessorsAccess.js b/tests/baselines/reference/privateNameAccessorsAccess.js index 5420d8bec82bb..b680f6964e2c9 100644 --- a/tests/baselines/reference/privateNameAccessorsAccess.js +++ b/tests/baselines/reference/privateNameAccessorsAccess.js @@ -26,21 +26,20 @@ class B2 { //// [privateNameAccessorsAccess.js] -var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A2_instances, _A2_prop_get, _A2_prop_set; class A2 { constructor() { _A2_instances.add(this); - console.log(__classPrivateAccessorGet(this, _A2_instances, _A2_prop_get)); + console.log(__classPrivateFieldGet(this, _A2_instances, "a", _A2_prop_get)); let a = this; - __classPrivateAccessorGet(a, _A2_instances, _A2_prop_get); + __classPrivateFieldGet(a, _A2_instances, "a", _A2_prop_get); function foo() { - __classPrivateAccessorGet(a, _A2_instances, _A2_prop_get); + __classPrivateFieldGet(a, _A2_instances, "a", _A2_prop_get); } } } diff --git a/tests/baselines/reference/privateNameAccessorsCallExpression.js b/tests/baselines/reference/privateNameAccessorsCallExpression.js index edfc6ae9aa08c..a75e534b816a9 100644 --- a/tests/baselines/reference/privateNameAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameAccessorsCallExpression.js @@ -19,11 +19,10 @@ class A { } //// [privateNameAccessorsCallExpression.js] -var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_instances, _A_fieldFunc_get, _A_fieldFunc2_get; class A { @@ -33,15 +32,15 @@ class A { } test() { var _a; - __classPrivateAccessorGet(this, _A_instances, _A_fieldFunc_get).call(this); - const func = __classPrivateAccessorGet(this, _A_instances, _A_fieldFunc_get); + __classPrivateFieldGet(this, _A_instances, "a", _A_fieldFunc_get).call(this); + const func = __classPrivateFieldGet(this, _A_instances, "a", _A_fieldFunc_get); func(); - new (__classPrivateAccessorGet(this, _A_instances, _A_fieldFunc_get))(); + new (__classPrivateFieldGet(this, _A_instances, "a", _A_fieldFunc_get))(); const arr = [1, 2]; - __classPrivateAccessorGet(this, _A_instances, _A_fieldFunc2_get).call(this, 0, ...arr, 3); - const b = new (__classPrivateAccessorGet(this, _A_instances, _A_fieldFunc2_get))(0, ...arr, 3); - const str = __classPrivateAccessorGet(this, _A_instances, _A_fieldFunc2_get).bind(this) `head${1}middle${2}tail`; - __classPrivateAccessorGet((_a = this.getInstance()), _A_instances, _A_fieldFunc2_get).bind(_a) `test${1}and${2}`; + __classPrivateFieldGet(this, _A_instances, "a", _A_fieldFunc2_get).call(this, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(this, _A_instances, "a", _A_fieldFunc2_get))(0, ...arr, 3); + const str = __classPrivateFieldGet(this, _A_instances, "a", _A_fieldFunc2_get).bind(this) `head${1}middle${2}tail`; + __classPrivateFieldGet((_a = this.getInstance()), _A_instances, "a", _A_fieldFunc2_get).bind(_a) `test${1}and${2}`; } getInstance() { return new A(); } } diff --git a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js index 445716f35f753..fca5cb4544b68 100644 --- a/tests/baselines/reference/privateNameAccessorssDerivedClasses.js +++ b/tests/baselines/reference/privateNameAccessorssDerivedClasses.js @@ -13,11 +13,10 @@ class Derived extends Base { //// [privateNameAccessorssDerivedClasses.js] -var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Base_instances, _Base_prop_get; class Base { @@ -25,7 +24,7 @@ class Base { _Base_instances.add(this); } static method(x) { - console.log(__classPrivateAccessorGet(x, _Base_instances, _Base_prop_get)); + console.log(__classPrivateFieldGet(x, _Base_instances, "a", _Base_prop_get)); } } _Base_instances = new WeakSet(), _Base_prop_get = function _Base_prop_get() { return 123; }; diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index e80ac060f9ab6..8d2a35e26e0f5 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -29,26 +29,10 @@ class A { //// [privateNameAndAny.js] "use strict"; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; -var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; -}; -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A_foo, _A_baz, _A_m; class A { @@ -57,24 +41,24 @@ class A { } method(thing) { __classPrivateFieldGet(thing, _A_foo); // OK - __classStaticPrivateMethodGet(thing, _a, _A_m).call(// OK + __classPrivateFieldGet(thing, _a, "m", _A_m).call(// OK thing); - __classStaticPrivateFieldGet(thing, _a, _A_baz); + __classPrivateFieldGet(thing, _a, void 0, _A_baz); thing.; // Error __classPrivateFieldGet(thing, _A_foo).call(// Error thing); } methodU(thing) { __classPrivateFieldGet(thing, _A_foo); - __classStaticPrivateMethodGet(thing, _a, _A_m).call(thing); - __classStaticPrivateFieldGet(thing, _a, _A_baz); + __classPrivateFieldGet(thing, _a, "m", _A_m).call(thing); + __classPrivateFieldGet(thing, _a, void 0, _A_baz); thing.; __classPrivateFieldGet(thing, _A_foo).call(thing); } methodN(thing) { __classPrivateFieldGet(thing, _A_foo); - __classStaticPrivateMethodGet(thing, _a, _A_m).call(thing); - __classStaticPrivateFieldGet(thing, _a, _A_baz); + __classPrivateFieldGet(thing, _a, "m", _A_m).call(thing); + __classPrivateFieldGet(thing, _a, void 0, _A_baz); thing.; __classPrivateFieldGet(thing, _A_foo).call(thing); } diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.js b/tests/baselines/reference/privateNameAndObjectRestSpread.js index 7dba9fa4fb55d..40578d864c3e3 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.js +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.js @@ -18,20 +18,10 @@ class C { //// [privateNameAndObjectRestSpread.js] "use strict"; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; @@ -55,9 +45,9 @@ class C { const rest = __rest(other, []); __classPrivateFieldGet(rest, _C_prop); const statics = Object.assign({}, C); - __classStaticPrivateFieldGet(statics, _a, _C_propStatic); + __classPrivateFieldGet(statics, _a, void 0, _C_propStatic); const sRest = __rest(C, []); - __classStaticPrivateFieldGet(sRest, _a, _C_propStatic); + __classPrivateFieldGet(sRest, _a, void 0, _C_propStatic); } } _a = C, _C_prop = new WeakMap(); diff --git a/tests/baselines/reference/privateNameBadAssignment.js b/tests/baselines/reference/privateNameBadAssignment.js index 7d13cbd05de64..6dfdb911e3745 100644 --- a/tests/baselines/reference/privateNameBadAssignment.js +++ b/tests/baselines/reference/privateNameBadAssignment.js @@ -16,12 +16,11 @@ class C { //// [privateNameBadAssignment.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _C_bar; exports. = 1; // Error (outside class body) diff --git a/tests/baselines/reference/privateNameCircularReference.js b/tests/baselines/reference/privateNameCircularReference.js index c74ba4d84e9b2..731447f0a43dc 100644 --- a/tests/baselines/reference/privateNameCircularReference.js +++ b/tests/baselines/reference/privateNameCircularReference.js @@ -8,11 +8,10 @@ class A { //// [privateNameCircularReference.js] "use strict"; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_foo, _A_bar; class A { diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js index 3392289b5bc4c..60c0aae5b378d 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js @@ -38,18 +38,16 @@ new A().test(); //// [privateNameComputedPropertyName1.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_a, _A_b, _A_c, _A_d, _A_e; class A { diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js index 23a34074d441d..f1c2f488c88f6 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js @@ -10,11 +10,10 @@ console.log(getX(new A)); //// [privateNameComputedPropertyName2.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_x; let getX; diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js index f404487ac3501..931acdae9fc35 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js @@ -25,18 +25,16 @@ console.log(new Foo("NAME").getValue(100)); //// [privateNameComputedPropertyName3.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Foo_name; class Foo { diff --git a/tests/baselines/reference/privateNameConstructorSignature.js b/tests/baselines/reference/privateNameConstructorSignature.js index adc58b3d9b8e0..897e2ae76041a 100644 --- a/tests/baselines/reference/privateNameConstructorSignature.js +++ b/tests/baselines/reference/privateNameConstructorSignature.js @@ -18,12 +18,11 @@ interface C { //// [privateNameConstructorSignature.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _C_x; class C { diff --git a/tests/baselines/reference/privateNameDeclarationMerging.js b/tests/baselines/reference/privateNameDeclarationMerging.js index 0927854a50f29..a55b1a7336dd8 100644 --- a/tests/baselines/reference/privateNameDeclarationMerging.js +++ b/tests/baselines/reference/privateNameDeclarationMerging.js @@ -16,11 +16,10 @@ interface C { //// [privateNameDeclarationMerging.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _C_x; class D { diff --git a/tests/baselines/reference/privateNameField.js b/tests/baselines/reference/privateNameField.js index 96a11b48cdb7b..b070508ba3557 100644 --- a/tests/baselines/reference/privateNameField.js +++ b/tests/baselines/reference/privateNameField.js @@ -9,12 +9,11 @@ class A { //// [privateNameField.js] "use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _A_name; class A { diff --git a/tests/baselines/reference/privateNameFieldAccess.js b/tests/baselines/reference/privateNameFieldAccess.js index 1c8d1920c6de1..bb50afdef80e9 100644 --- a/tests/baselines/reference/privateNameFieldAccess.js +++ b/tests/baselines/reference/privateNameFieldAccess.js @@ -8,11 +8,10 @@ class A { //// [privateNameFieldAccess.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_myField; class A { diff --git a/tests/baselines/reference/privateNameFieldAssignment.js b/tests/baselines/reference/privateNameFieldAssignment.js index 717d782cd3e48..e264a767fc821 100644 --- a/tests/baselines/reference/privateNameFieldAssignment.js +++ b/tests/baselines/reference/privateNameFieldAssignment.js @@ -36,18 +36,16 @@ class A { //// [privateNameFieldAssignment.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_field; class A { diff --git a/tests/baselines/reference/privateNameFieldCallExpression.js b/tests/baselines/reference/privateNameFieldCallExpression.js index 47026bcc59e59..956b43152a0d9 100644 --- a/tests/baselines/reference/privateNameFieldCallExpression.js +++ b/tests/baselines/reference/privateNameFieldCallExpression.js @@ -21,11 +21,10 @@ class A { //// [privateNameFieldCallExpression.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_fieldFunc, _A_fieldFunc2; class A { diff --git a/tests/baselines/reference/privateNameFieldDerivedClasses.js b/tests/baselines/reference/privateNameFieldDerivedClasses.js index 8241accdcb85d..5b7d8adb9287b 100644 --- a/tests/baselines/reference/privateNameFieldDerivedClasses.js +++ b/tests/baselines/reference/privateNameFieldDerivedClasses.js @@ -14,11 +14,10 @@ class Derived extends Base { //// [privateNameFieldDerivedClasses.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Base_prop; class Base { diff --git a/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js b/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js index 618ab2c02897b..d7ae4ace24f10 100644 --- a/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js +++ b/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js @@ -25,12 +25,11 @@ class A { //// [privateNameFieldDestructuredBinding.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _A_field; class A { diff --git a/tests/baselines/reference/privateNameFieldUnaryMutation.js b/tests/baselines/reference/privateNameFieldUnaryMutation.js index 43e87ce7e6ac0..0ea369296adac 100644 --- a/tests/baselines/reference/privateNameFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameFieldUnaryMutation.js @@ -30,18 +30,16 @@ class C { //// [privateNameFieldUnaryMutation.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _C_test; class C { diff --git a/tests/baselines/reference/privateNameInLhsReceiverExpression.js b/tests/baselines/reference/privateNameInLhsReceiverExpression.js index 9a12ec666de0c..f335acb32c029 100644 --- a/tests/baselines/reference/privateNameInLhsReceiverExpression.js +++ b/tests/baselines/reference/privateNameInLhsReceiverExpression.js @@ -10,18 +10,16 @@ class Test { //// [privateNameInLhsReceiverExpression.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Test_y; class Test { diff --git a/tests/baselines/reference/privateNameMethod.js b/tests/baselines/reference/privateNameMethod.js index 204ea377e1590..5f2ec20469a81 100644 --- a/tests/baselines/reference/privateNameMethod.js +++ b/tests/baselines/reference/privateNameMethod.js @@ -14,19 +14,18 @@ class A1 { //// [privateNameMethod.js] "use strict"; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A1_instances, _A1_method; class A1 { constructor(name) { _A1_instances.add(this); - __classPrivateMethodGet(this, _A1_instances, _A1_method).call(this, ""); - __classPrivateMethodGet(this, _A1_instances, _A1_method).call(this, 1); // Error - __classPrivateMethodGet(this, _A1_instances, _A1_method).call(// Error + __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(this, ""); + __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(this, 1); // Error + __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(// Error this); // Error } } diff --git a/tests/baselines/reference/privateNameMethodAccess.js b/tests/baselines/reference/privateNameMethodAccess.js index 7d07b2275238e..de9680a242698 100644 --- a/tests/baselines/reference/privateNameMethodAccess.js +++ b/tests/baselines/reference/privateNameMethodAccess.js @@ -24,21 +24,20 @@ class B2 { //// [privateNameMethodAccess.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A2_instances, _A2_method, _a; class A2 { constructor() { _A2_instances.add(this); - console.log(__classPrivateMethodGet(this, _A2_instances, _A2_method)); + console.log(__classPrivateFieldGet(this, _A2_instances, "m", _A2_method)); let a = this; - __classPrivateMethodGet(a, _A2_instances, _A2_method).call(a); + __classPrivateFieldGet(a, _A2_instances, "m", _A2_method).call(a); function foo() { - __classPrivateMethodGet(a, _A2_instances, _A2_method).call(a); + __classPrivateFieldGet(a, _A2_instances, "m", _A2_method).call(a); } } } diff --git a/tests/baselines/reference/privateNameMethodAssignment.js b/tests/baselines/reference/privateNameMethodAssignment.js index 3e1041bad4e47..47eff0877d838 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.js +++ b/tests/baselines/reference/privateNameMethodAssignment.js @@ -13,28 +13,30 @@ class A3 { //// [privateNameMethodAssignment.js] -var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { - throw new TypeError("private element is not writable"); +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A3_instances, _A3_method; class A3 { constructor(a, b) { var _a, _b; _A3_instances.add(this); - __classPrivateReadonly(this, () => { }); // Error, not writable - __classPrivateReadonly(// Error, not writable - a, () => { }); // Error, not writable - __classPrivateReadonly(// Error, not writable - b, () => { }); //Error, not writable - (_a = this, { x: ({ set value(_b) { __classPrivateReadonly(_a, _b); } }).value } = { x: () => { } }); //Error, not writable - let x = __classPrivateMethodGet(this, _A3_instances, _A3_method); - __classPrivateReadonly(_b = b, +__classPrivateMethodGet(_b, _A3_instances, _A3_method) + 1); //Error, not writable + __classPrivateFieldSet(this, _A3_instances, () => { }, "m"); // Error, not writable + __classPrivateFieldSet(// Error, not writable + a, _A3_instances, () => { }, "m"); // Error, not writable + __classPrivateFieldSet(// Error, not writable + 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 } ; } diff --git a/tests/baselines/reference/privateNameMethodAsync.js b/tests/baselines/reference/privateNameMethodAsync.js index 1e9924c5e35d0..71c5cef304ef1 100644 --- a/tests/baselines/reference/privateNameMethodAsync.js +++ b/tests/baselines/reference/privateNameMethodAsync.js @@ -15,11 +15,10 @@ new C().foo().then(console.log); //// [privateNameMethodAsync.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _C_instances, _C_bar, _C_baz, _C_qux, _a; const C = (_a = class { @@ -27,8 +26,8 @@ const C = (_a = class { _C_instances.add(this); } async foo() { - const b = await __classPrivateMethodGet(this, _C_instances, _C_bar).call(this); - return b + (__classPrivateMethodGet(this, _C_instances, _C_baz).call(this).next().value || 0) + ((await __classPrivateMethodGet(this, _C_instances, _C_qux).call(this).next()).value || 0); + const b = await __classPrivateFieldGet(this, _C_instances, "m", _C_bar).call(this); + return b + (__classPrivateFieldGet(this, _C_instances, "m", _C_baz).call(this).next().value || 0) + ((await __classPrivateFieldGet(this, _C_instances, "m", _C_qux).call(this).next()).value || 0); } }, _C_instances = new WeakSet(), diff --git a/tests/baselines/reference/privateNameMethodCallExpression.js b/tests/baselines/reference/privateNameMethodCallExpression.js index 7d1ac5e672104..caa5c421fc548 100644 --- a/tests/baselines/reference/privateNameMethodCallExpression.js +++ b/tests/baselines/reference/privateNameMethodCallExpression.js @@ -25,11 +25,10 @@ class AA { //// [privateNameMethodCallExpression.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _AA_instances, _AA_method, _AA_method2; class AA { @@ -41,18 +40,18 @@ class AA { ; test() { var _a, _b, _c; - __classPrivateMethodGet(this, _AA_instances, _AA_method).call(this); - const func = __classPrivateMethodGet(this, _AA_instances, _AA_method); + __classPrivateFieldGet(this, _AA_instances, "m", _AA_method).call(this); + const func = __classPrivateFieldGet(this, _AA_instances, "m", _AA_method); func(); - new (__classPrivateMethodGet(this, _AA_instances, _AA_method))(); + new (__classPrivateFieldGet(this, _AA_instances, "m", _AA_method))(); const arr = [1, 2]; - __classPrivateMethodGet(this, _AA_instances, _AA_method2).call(this, 0, ...arr, 3); - const b = new (__classPrivateMethodGet(this, _AA_instances, _AA_method2))(0, ...arr, 3); //Error - const str = __classPrivateMethodGet(this, _AA_instances, _AA_method2).bind(this) `head${1}middle${2}tail`; - __classPrivateMethodGet((_a = this.getInstance()), _AA_instances, _AA_method2).bind(_a) `test${1}and${2}`; - __classPrivateMethodGet((_b = this.getInstance()), _AA_instances, _AA_method2).call(_b, 0, ...arr, 3); - const b2 = new (__classPrivateMethodGet(this.getInstance(), _AA_instances, _AA_method2))(0, ...arr, 3); //Error - const str2 = __classPrivateMethodGet((_c = this.getInstance()), _AA_instances, _AA_method2).bind(_c) `head${1}middle${2}tail`; + __classPrivateFieldGet(this, _AA_instances, "m", _AA_method2).call(this, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(this, _AA_instances, "m", _AA_method2))(0, ...arr, 3); //Error + const str = __classPrivateFieldGet(this, _AA_instances, "m", _AA_method2).bind(this) `head${1}middle${2}tail`; + __classPrivateFieldGet((_a = this.getInstance()), _AA_instances, "m", _AA_method2).bind(_a) `test${1}and${2}`; + __classPrivateFieldGet((_b = this.getInstance()), _AA_instances, "m", _AA_method2).call(_b, 0, ...arr, 3); + const b2 = new (__classPrivateFieldGet(this.getInstance(), _AA_instances, "m", _AA_method2))(0, ...arr, 3); //Error + const str2 = __classPrivateFieldGet((_c = this.getInstance()), _AA_instances, "m", _AA_method2).bind(_c) `head${1}middle${2}tail`; } getInstance() { return new AA(); } } diff --git a/tests/baselines/reference/privateNameMethodClassExpression.js b/tests/baselines/reference/privateNameMethodClassExpression.js index af2caf339cef9..08bee9225835e 100644 --- a/tests/baselines/reference/privateNameMethodClassExpression.js +++ b/tests/baselines/reference/privateNameMethodClassExpression.js @@ -13,23 +13,16 @@ C.getInstance().#field; // Error //// [privateNameMethodClassExpression.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; -}; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _C_instances, _C_field, _C_method, _a; const C = (_a = class { constructor() { _C_instances.add(this); - _C_field.set(this, __classPrivateMethodGet(this, _C_instances, _C_method).call(this)); + _C_field.set(this, __classPrivateFieldGet(this, _C_instances, "m", _C_method).call(this)); } static getInstance() { return new C(); } getField() { return __classPrivateFieldGet(this, _C_field); } diff --git a/tests/baselines/reference/privateNameMethodInStaticFieldInit.js b/tests/baselines/reference/privateNameMethodInStaticFieldInit.js index 0b330e3ed2109..199c1c17e0114 100644 --- a/tests/baselines/reference/privateNameMethodInStaticFieldInit.js +++ b/tests/baselines/reference/privateNameMethodInStaticFieldInit.js @@ -8,11 +8,10 @@ console.log(C.s); //// [privateNameMethodInStaticFieldInit.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _C_instances, _C_method, _a; class C { @@ -21,5 +20,5 @@ class C { } } _C_instances = new WeakSet(), _C_method = function _C_method() { return 42; }; -C.s = __classPrivateMethodGet((_a = new C()), _C_instances, _C_method).call(_a); +C.s = __classPrivateFieldGet((_a = new C()), _C_instances, "m", _C_method).call(_a); console.log(C.s); diff --git a/tests/baselines/reference/privateNameMethodsDerivedClasses.js b/tests/baselines/reference/privateNameMethodsDerivedClasses.js index 509e385aec786..b6b4027e749b1 100644 --- a/tests/baselines/reference/privateNameMethodsDerivedClasses.js +++ b/tests/baselines/reference/privateNameMethodsDerivedClasses.js @@ -13,11 +13,10 @@ class Derived extends Base { //// [privateNameMethodsDerivedClasses.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Base_instances, _Base_prop; class Base { @@ -25,7 +24,7 @@ class Base { _Base_instances.add(this); } static method(x) { - console.log(__classPrivateMethodGet(x, _Base_instances, _Base_prop).call(x)); + console.log(__classPrivateFieldGet(x, _Base_instances, "m", _Base_prop).call(x)); } } _Base_instances = new WeakSet(), _Base_prop = function _Base_prop() { return 123; }; diff --git a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js index c41b08adf1506..05e47e8bc5337 100644 --- a/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassAccessorsShadowing.js @@ -16,11 +16,10 @@ class Base { //// [privateNameNestedClassAccessorsShadowing.js] -var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Base_instances, _Base_x_get; class Base { @@ -33,10 +32,10 @@ class Base { } ; testBase(x) { - console.log(__classPrivateAccessorGet(x, _Derived_instances, _Derived_x_get)); + console.log(__classPrivateFieldGet(x, _Derived_instances, "a", _Derived_x_get)); } testDerived(x) { - console.log(__classPrivateAccessorGet(x, _Derived_instances, _Derived_x_get)); + console.log(__classPrivateFieldGet(x, _Derived_instances, "a", _Derived_x_get)); } } _Derived_instances = new WeakSet(), _Derived_x_get = function _Derived_x_get() { return 1; }; diff --git a/tests/baselines/reference/privateNameNestedClassFieldShadowing.js b/tests/baselines/reference/privateNameNestedClassFieldShadowing.js index f55944d9e53aa..598acfb16a403 100644 --- a/tests/baselines/reference/privateNameNestedClassFieldShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassFieldShadowing.js @@ -16,11 +16,10 @@ class Base { //// [privateNameNestedClassFieldShadowing.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Base_x; class Base { diff --git a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js index da45fba97e18d..df19ceac68b07 100644 --- a/tests/baselines/reference/privateNameNestedClassMethodShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassMethodShadowing.js @@ -16,11 +16,10 @@ class Base { //// [privateNameNestedClassMethodShadowing.js] -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Base_instances, _Base_x; class Base { @@ -33,10 +32,10 @@ class Base { } ; testBase(x) { - console.log(__classPrivateMethodGet(x, _Derived_instances, _Derived_x)); + console.log(__classPrivateFieldGet(x, _Derived_instances, "m", _Derived_x)); } testDerived(x) { - console.log(__classPrivateMethodGet(x, _Derived_instances, _Derived_x)); + console.log(__classPrivateFieldGet(x, _Derived_instances, "m", _Derived_x)); } } _Derived_instances = new WeakSet(), _Derived_x = function _Derived_x() { }; diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.js b/tests/baselines/reference/privateNameNestedMethodAccess.js index a870c205da41f..e80fc49be6e90 100644 --- a/tests/baselines/reference/privateNameNestedMethodAccess.js +++ b/tests/baselines/reference/privateNameNestedMethodAccess.js @@ -25,23 +25,10 @@ class C { //// [privateNameNestedMethodAccess.js] -var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); -}; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _C_instances, _C_foo, _C_bar, _C_baz_get; class C { @@ -55,13 +42,13 @@ class C { constructor() { _D_instances.add(this); __classPrivateFieldGet(new C(), _C_foo); - __classPrivateMethodGet(new C(), _D_instances, _D_bar); // Error - __classPrivateAccessorGet(new C(), _C_instances, _C_baz_get); - __classPrivateMethodGet(new D(), _D_instances, _D_bar); + __classPrivateFieldGet(new C(), _D_instances, "m", _D_bar); // Error + __classPrivateFieldGet(new C(), _C_instances, "a", _C_baz_get); + __classPrivateFieldGet(new D(), _D_instances, "m", _D_bar); } n(x) { __classPrivateFieldGet(x, _C_foo); - __classPrivateMethodGet(x, _D_instances, _D_bar); + __classPrivateFieldGet(x, _D_instances, "m", _D_bar); x.; // Error } }, @@ -70,4 +57,4 @@ class C { _a; } } -_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_bar = function _C_bar() { __classPrivateAccessorGet(new C(), _C_instances, _C_baz_get); }, _C_baz_get = function _C_baz_get() { return 42; }; +_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_bar = function _C_bar() { __classPrivateFieldGet(new C(), _C_instances, "a", _C_baz_get); }, _C_baz_get = function _C_baz_get() { return 42; }; diff --git a/tests/baselines/reference/privateNameReadonly.js b/tests/baselines/reference/privateNameReadonly.js index b87dd98372218..30c7378c25f8c 100644 --- a/tests/baselines/reference/privateNameReadonly.js +++ b/tests/baselines/reference/privateNameReadonly.js @@ -10,8 +10,11 @@ console.log(new C().foo()); //// [privateNameReadonly.js] -var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () { - throw new TypeError("private element is not writable"); +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _C_instances, _C_bar, _a; const C = (_a = class { @@ -19,7 +22,7 @@ const C = (_a = class { _C_instances.add(this); } foo() { - __classPrivateReadonly(this, console.log("should log this then throw")); + __classPrivateFieldSet(this, _C_instances, console.log("should log this then throw"), "m"); } }, _C_instances = new WeakSet(), diff --git a/tests/baselines/reference/privateNameSetterExprReturnValue.js b/tests/baselines/reference/privateNameSetterExprReturnValue.js index f4ef50f2d28d2..2f4af65aff2ff 100644 --- a/tests/baselines/reference/privateNameSetterExprReturnValue.js +++ b/tests/baselines/reference/privateNameSetterExprReturnValue.js @@ -11,12 +11,11 @@ new C().bar(); //// [privateNameSetterExprReturnValue.js] -var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to set private accessor on non-instance"); - } - fn.call(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _C_instances, _C_foo_set; class C { @@ -24,7 +23,7 @@ class C { _C_instances.add(this); } bar() { - let x = (__classPrivateAccessorSet(this, _C_instances, _C_foo_set, 42 * 2)); + let x = (__classPrivateFieldSet(this, _C_instances, 42 * 2, "a", _C_foo_set)); console.log(x); // 84 } } diff --git a/tests/baselines/reference/privateNameSetterNoGetter.js b/tests/baselines/reference/privateNameSetterNoGetter.js index 3a4c9e97ea619..c3408a5dc8fd0 100644 --- a/tests/baselines/reference/privateNameSetterNoGetter.js +++ b/tests/baselines/reference/privateNameSetterNoGetter.js @@ -10,15 +10,16 @@ console.log(new C().m()); //// [privateNameSetterNoGetter.js] -var __classPrivateWriteonly = (this && this.__classPrivateWriteonly) || function () { - throw new TypeError("private setter was defined without a getter"); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; -var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to set private accessor on non-instance"); - } - fn.call(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _C_instances, _C_x_set, _a; const C = (_a = class { @@ -26,7 +27,7 @@ const C = (_a = class { _C_instances.add(this); } m() { - __classPrivateAccessorSet(this, _C_instances, _C_x_set, __classPrivateWriteonly(this) + 2); // Error + __classPrivateFieldSet(this, _C_instances, __classPrivateFieldGet(this, _C_instances, "a") + 2, "a", _C_x_set); // Error } }, _C_instances = new WeakSet(), diff --git a/tests/baselines/reference/privateNameStaticAccessors.js b/tests/baselines/reference/privateNameStaticAccessors.js index 5b241a3087f8c..8859c2ca2b736 100644 --- a/tests/baselines/reference/privateNameStaticAccessors.js +++ b/tests/baselines/reference/privateNameStaticAccessors.js @@ -16,29 +16,24 @@ class A1 { //// [privateNameStaticAccessors.js] "use strict"; -var __classStaticPrivateAccessorSet = (this && this.__classStaticPrivateAccessorSet) || function (receiver, classConstructor, fn, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - fn.call(receiver, value); - return value; -}; -var __classStaticPrivateReadonly = (this && this.__classStaticPrivateReadonly) || function () { - throw new TypeError("Private static element is not writable"); +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A1_prop_get, _A1_prop_set, _A1_roProp_get; class A1 { constructor(name) { - __classStaticPrivateAccessorSet(A1, _a, _A1_prop_set, ""); - __classStaticPrivateReadonly(A1, ""); // Error - console.log(__classStaticPrivateAccessorGet(A1, _a, _A1_prop_get)); - console.log(__classStaticPrivateAccessorGet(A1, _a, _A1_roProp_get)); + __classPrivateFieldSet(A1, _a, "", "a", _A1_prop_set); + __classPrivateFieldSet(A1, _a, "", "a"); // Error + console.log(__classPrivateFieldGet(A1, _a, "a", _A1_prop_get)); + console.log(__classPrivateFieldGet(A1, _a, "a", _A1_roProp_get)); } } _a = A1, _A1_prop_get = function _A1_prop_get() { return ""; }, _A1_prop_set = function _A1_prop_set(param) { }, _A1_roProp_get = function _A1_roProp_get() { return ""; }; diff --git a/tests/baselines/reference/privateNameStaticAccessorsAccess.js b/tests/baselines/reference/privateNameStaticAccessorsAccess.js index 5eb1d38a85363..f79688892ec10 100644 --- a/tests/baselines/reference/privateNameStaticAccessorsAccess.js +++ b/tests/baselines/reference/privateNameStaticAccessorsAccess.js @@ -28,20 +28,19 @@ class B2 { //// [privateNameStaticAccessorsAccess.js] -var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A2_prop_get, _A2_prop_set; class A2 { constructor() { - console.log(__classStaticPrivateAccessorGet(A2, _a, _A2_prop_get)); + console.log(__classPrivateFieldGet(A2, _a, "a", _A2_prop_get)); let a = A2; - __classStaticPrivateAccessorGet(a, _a, _A2_prop_get); + __classPrivateFieldGet(a, _a, "a", _A2_prop_get); function foo() { - __classStaticPrivateAccessorGet(a, _a, _A2_prop_get); + __classPrivateFieldGet(a, _a, "a", _A2_prop_get); } } } diff --git a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js index 9a4e3dba5248d..13a9847b775d4 100644 --- a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js @@ -19,37 +19,32 @@ class A { } //// [privateNameStaticAccessorsCallExpression.js] -var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - propertyDescriptor.value = value; - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A_fieldFunc_get, _A_fieldFunc2_get, _A_x; class A { static test() { var _b; - __classStaticPrivateAccessorGet(this, _a, _A_fieldFunc_get).call(this); - const func = __classStaticPrivateAccessorGet(this, _a, _A_fieldFunc_get); + __classPrivateFieldGet(this, _a, "a", _A_fieldFunc_get).call(this); + const func = __classPrivateFieldGet(this, _a, "a", _A_fieldFunc_get); func(); - new (__classStaticPrivateAccessorGet(this, _a, _A_fieldFunc_get))(); + new (__classPrivateFieldGet(this, _a, "a", _A_fieldFunc_get))(); const arr = [1, 2]; - __classStaticPrivateAccessorGet(this, _a, _A_fieldFunc2_get).call(this, 0, ...arr, 3); - const b = new (__classStaticPrivateAccessorGet(this, _a, _A_fieldFunc2_get))(0, ...arr, 3); - const str = __classStaticPrivateAccessorGet(this, _a, _A_fieldFunc2_get).bind(this) `head${1}middle${2}tail`; - __classStaticPrivateAccessorGet((_b = this.getClass()), _a, _A_fieldFunc2_get).bind(_b) `test${1}and${2}`; + __classPrivateFieldGet(this, _a, "a", _A_fieldFunc2_get).call(this, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(this, _a, "a", _A_fieldFunc2_get))(0, ...arr, 3); + const str = __classPrivateFieldGet(this, _a, "a", _A_fieldFunc2_get).bind(this) `head${1}middle${2}tail`; + __classPrivateFieldGet((_b = this.getClass()), _a, "a", _A_fieldFunc2_get).bind(_b) `test${1}and${2}`; } static getClass() { return A; } } -_a = A, _A_fieldFunc_get = function _A_fieldFunc_get() { return function () { __classStaticPrivateFieldSet(A, _a, _A_x, 10); }; }, _A_fieldFunc2_get = function _A_fieldFunc2_get() { return function (a, ...b) { }; }; +_a = A, _A_fieldFunc_get = function _A_fieldFunc_get() { return function () { __classPrivateFieldSet(A, _a, 10, void 0, _A_x); }; }, _A_fieldFunc2_get = function _A_fieldFunc2_get() { return function (a, ...b) { }; }; _A_x = { value: 1 }; diff --git a/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js index db9ef90b6ccb0..dfcbb352150bf 100644 --- a/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js +++ b/tests/baselines/reference/privateNameStaticAccessorssDerivedClasses.js @@ -13,16 +13,15 @@ class Derived extends Base { //// [privateNameStaticAccessorssDerivedClasses.js] -var __classStaticPrivateAccessorGet = (this && this.__classStaticPrivateAccessorGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _Base_prop_get; class Base { static method(x) { - console.log(__classStaticPrivateAccessorGet(x, _a, _Base_prop_get)); + console.log(__classPrivateFieldGet(x, _a, "a", _Base_prop_get)); } } _a = Base, _Base_prop_get = function _Base_prop_get() { return 123; }; diff --git a/tests/baselines/reference/privateNameStaticFieldAccess.js b/tests/baselines/reference/privateNameStaticFieldAccess.js index 3033f7ea26adc..7c9accb92a4e9 100644 --- a/tests/baselines/reference/privateNameStaticFieldAccess.js +++ b/tests/baselines/reference/privateNameStaticFieldAccess.js @@ -9,20 +9,16 @@ class A { //// [privateNameStaticFieldAccess.js] -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A_myField; class A { constructor() { - console.log(__classStaticPrivateFieldGet(A, _a, _A_myField)); //Ok - console.log(__classStaticPrivateFieldGet(this, _a, _A_myField)); //Error + console.log(__classPrivateFieldGet(A, _a, void 0, _A_myField)); //Ok + console.log(__classPrivateFieldGet(this, _a, void 0, _A_myField)); //Error } } _a = A; diff --git a/tests/baselines/reference/privateNameStaticFieldAssignment.js b/tests/baselines/reference/privateNameStaticFieldAssignment.js index 0c08b004ff55c..5561dc1ce8492 100644 --- a/tests/baselines/reference/privateNameStaticFieldAssignment.js +++ b/tests/baselines/reference/privateNameStaticFieldAssignment.js @@ -36,55 +36,47 @@ class A { //// [privateNameStaticFieldAssignment.js] -var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - propertyDescriptor.value = value; - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A_field; class A { constructor() { var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0; - __classStaticPrivateFieldSet(A, _a, _A_field, 1); - __classStaticPrivateFieldSet(_b = A, _a, _A_field, __classStaticPrivateFieldGet(_b, _a, _A_field) + 2); - __classStaticPrivateFieldSet(_c = A, _a, _A_field, __classStaticPrivateFieldGet(_c, _a, _A_field) - 3); - __classStaticPrivateFieldSet(_d = A, _a, _A_field, __classStaticPrivateFieldGet(_d, _a, _A_field) / 4); - __classStaticPrivateFieldSet(_e = A, _a, _A_field, __classStaticPrivateFieldGet(_e, _a, _A_field) * 5); - __classStaticPrivateFieldSet(_f = A, _a, _A_field, Math.pow(__classStaticPrivateFieldGet(_f, _a, _A_field), 6)); - __classStaticPrivateFieldSet(_g = A, _a, _A_field, __classStaticPrivateFieldGet(_g, _a, _A_field) % 7); - __classStaticPrivateFieldSet(_h = A, _a, _A_field, __classStaticPrivateFieldGet(_h, _a, _A_field) << 8); - __classStaticPrivateFieldSet(_j = A, _a, _A_field, __classStaticPrivateFieldGet(_j, _a, _A_field) >> 9); - __classStaticPrivateFieldSet(_k = A, _a, _A_field, __classStaticPrivateFieldGet(_k, _a, _A_field) >>> 10); - __classStaticPrivateFieldSet(_l = A, _a, _A_field, __classStaticPrivateFieldGet(_l, _a, _A_field) & 11); - __classStaticPrivateFieldSet(_m = A, _a, _A_field, __classStaticPrivateFieldGet(_m, _a, _A_field) | 12); - __classStaticPrivateFieldSet(_o = A, _a, _A_field, __classStaticPrivateFieldGet(_o, _a, _A_field) ^ 13); - __classStaticPrivateFieldSet(A.getClass(), _a, _A_field, 1); - __classStaticPrivateFieldSet(_p = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_p, _a, _A_field) + 2); - __classStaticPrivateFieldSet(_q = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_q, _a, _A_field) - 3); - __classStaticPrivateFieldSet(_r = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_r, _a, _A_field) / 4); - __classStaticPrivateFieldSet(_s = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_s, _a, _A_field) * 5); - __classStaticPrivateFieldSet(_t = A.getClass(), _a, _A_field, Math.pow(__classStaticPrivateFieldGet(_t, _a, _A_field), 6)); - __classStaticPrivateFieldSet(_u = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_u, _a, _A_field) % 7); - __classStaticPrivateFieldSet(_v = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_v, _a, _A_field) << 8); - __classStaticPrivateFieldSet(_w = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_w, _a, _A_field) >> 9); - __classStaticPrivateFieldSet(_x = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_x, _a, _A_field) >>> 10); - __classStaticPrivateFieldSet(_y = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_y, _a, _A_field) & 11); - __classStaticPrivateFieldSet(_z = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_z, _a, _A_field) | 12); - __classStaticPrivateFieldSet(_0 = A.getClass(), _a, _A_field, __classStaticPrivateFieldGet(_0, _a, _A_field) ^ 13); + __classPrivateFieldSet(A, _a, 1, void 0, _A_field); + __classPrivateFieldSet(_b = A, _a, __classPrivateFieldGet(_b, _a, void 0, _A_field) + 2, void 0, _A_field); + __classPrivateFieldSet(_c = A, _a, __classPrivateFieldGet(_c, _a, void 0, _A_field) - 3, void 0, _A_field); + __classPrivateFieldSet(_d = A, _a, __classPrivateFieldGet(_d, _a, void 0, _A_field) / 4, void 0, _A_field); + __classPrivateFieldSet(_e = A, _a, __classPrivateFieldGet(_e, _a, void 0, _A_field) * 5, void 0, _A_field); + __classPrivateFieldSet(_f = A, _a, Math.pow(__classPrivateFieldGet(_f, _a, void 0, _A_field), 6), void 0, _A_field); + __classPrivateFieldSet(_g = A, _a, __classPrivateFieldGet(_g, _a, void 0, _A_field) % 7, void 0, _A_field); + __classPrivateFieldSet(_h = A, _a, __classPrivateFieldGet(_h, _a, void 0, _A_field) << 8, void 0, _A_field); + __classPrivateFieldSet(_j = A, _a, __classPrivateFieldGet(_j, _a, void 0, _A_field) >> 9, void 0, _A_field); + __classPrivateFieldSet(_k = A, _a, __classPrivateFieldGet(_k, _a, void 0, _A_field) >>> 10, void 0, _A_field); + __classPrivateFieldSet(_l = A, _a, __classPrivateFieldGet(_l, _a, void 0, _A_field) & 11, void 0, _A_field); + __classPrivateFieldSet(_m = A, _a, __classPrivateFieldGet(_m, _a, void 0, _A_field) | 12, void 0, _A_field); + __classPrivateFieldSet(_o = A, _a, __classPrivateFieldGet(_o, _a, void 0, _A_field) ^ 13, void 0, _A_field); + __classPrivateFieldSet(A.getClass(), _a, 1, void 0, _A_field); + __classPrivateFieldSet(_p = A.getClass(), _a, __classPrivateFieldGet(_p, _a, void 0, _A_field) + 2, void 0, _A_field); + __classPrivateFieldSet(_q = A.getClass(), _a, __classPrivateFieldGet(_q, _a, void 0, _A_field) - 3, void 0, _A_field); + __classPrivateFieldSet(_r = A.getClass(), _a, __classPrivateFieldGet(_r, _a, void 0, _A_field) / 4, void 0, _A_field); + __classPrivateFieldSet(_s = A.getClass(), _a, __classPrivateFieldGet(_s, _a, void 0, _A_field) * 5, void 0, _A_field); + __classPrivateFieldSet(_t = A.getClass(), _a, Math.pow(__classPrivateFieldGet(_t, _a, void 0, _A_field), 6), void 0, _A_field); + __classPrivateFieldSet(_u = A.getClass(), _a, __classPrivateFieldGet(_u, _a, void 0, _A_field) % 7, void 0, _A_field); + __classPrivateFieldSet(_v = A.getClass(), _a, __classPrivateFieldGet(_v, _a, void 0, _A_field) << 8, void 0, _A_field); + __classPrivateFieldSet(_w = A.getClass(), _a, __classPrivateFieldGet(_w, _a, void 0, _A_field) >> 9, void 0, _A_field); + __classPrivateFieldSet(_x = A.getClass(), _a, __classPrivateFieldGet(_x, _a, void 0, _A_field) >>> 10, void 0, _A_field); + __classPrivateFieldSet(_y = A.getClass(), _a, __classPrivateFieldGet(_y, _a, void 0, _A_field) & 11, void 0, _A_field); + __classPrivateFieldSet(_z = A.getClass(), _a, __classPrivateFieldGet(_z, _a, void 0, _A_field) | 12, void 0, _A_field); + __classPrivateFieldSet(_0 = A.getClass(), _a, __classPrivateFieldGet(_0, _a, void 0, _A_field) ^ 13, void 0, _A_field); } static getClass() { return A; diff --git a/tests/baselines/reference/privateNameStaticFieldCallExpression.js b/tests/baselines/reference/privateNameStaticFieldCallExpression.js index 5fd8143449ed8..ca6f4817de647 100644 --- a/tests/baselines/reference/privateNameStaticFieldCallExpression.js +++ b/tests/baselines/reference/privateNameStaticFieldCallExpression.js @@ -21,14 +21,10 @@ class A { //// [privateNameStaticFieldCallExpression.js] -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A_fieldFunc, _A_fieldFunc2; class A { @@ -38,16 +34,16 @@ class A { test() { var _b; var _c; - __classStaticPrivateFieldGet(A, _a, _A_fieldFunc).call(A); - (_b = __classStaticPrivateFieldGet(A, _a, _A_fieldFunc)) === null || _b === void 0 ? void 0 : _b.call(A); - const func = __classStaticPrivateFieldGet(A, _a, _A_fieldFunc); + __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc).call(A); + (_b = __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc)) === null || _b === void 0 ? void 0 : _b.call(A); + const func = __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc); func(); - new (__classStaticPrivateFieldGet(A, _a, _A_fieldFunc))(); + new (__classPrivateFieldGet(A, _a, void 0, _A_fieldFunc))(); const arr = [1, 2]; - __classStaticPrivateFieldGet(A, _a, _A_fieldFunc2).call(A, 0, ...arr, 3); - const b = new (__classStaticPrivateFieldGet(A, _a, _A_fieldFunc2))(0, ...arr, 3); - const str = __classStaticPrivateFieldGet(A, _a, _A_fieldFunc2).bind(A) `head${1}middle${2}tail`; - __classStaticPrivateFieldGet((_c = this.getClass()), _a, _A_fieldFunc2).bind(_c) `test${1}and${2}`; + __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc2).call(A, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(A, _a, void 0, _A_fieldFunc2))(0, ...arr, 3); + const str = __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc2).bind(A) `head${1}middle${2}tail`; + __classPrivateFieldGet((_c = this.getClass()), _a, void 0, _A_fieldFunc2).bind(_c) `test${1}and${2}`; } getClass() { return A; } } diff --git a/tests/baselines/reference/privateNameStaticFieldClassExpression.js b/tests/baselines/reference/privateNameStaticFieldClassExpression.js index 862a409022392..f7029035947ff 100644 --- a/tests/baselines/reference/privateNameStaticFieldClassExpression.js +++ b/tests/baselines/reference/privateNameStaticFieldClassExpression.js @@ -23,21 +23,17 @@ class B { //// [privateNameStaticFieldClassExpression.js] -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _B_foo, _B_foo2, _b, _c; class B { m() { - console.log(__classStaticPrivateFieldGet(B, _a, _B_foo).test); - __classStaticPrivateFieldGet(B, _a, _B_foo).test = 10; - new (__classStaticPrivateFieldGet(B, _a, _B_foo))().field; + console.log(__classPrivateFieldGet(B, _a, void 0, _B_foo).test); + __classPrivateFieldGet(B, _a, void 0, _B_foo).test = 10; + new (__classPrivateFieldGet(B, _a, void 0, _B_foo))().field; } } _a = B; @@ -45,7 +41,7 @@ _B_foo = { value: (_b = class { constructor() { this.field = 10; console.log("hello"); - new (__classStaticPrivateFieldGet(B, _a, _B_foo2))(); + new (__classPrivateFieldGet(B, _a, void 0, _B_foo2))(); } }, _b.test = 123, diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js index ab43235eacb93..69c22f9523292 100644 --- a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js @@ -17,38 +17,30 @@ class Derived extends Base { //// [privateNameStaticFieldDerivedClasses.js] -var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - propertyDescriptor.value = value; - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _Base_prop, _b, _Derived_derivedProp; class Base { static method(x) { Derived.; // error - __classStaticPrivateFieldSet(// error - Base, _a, _Base_prop, 10); + __classPrivateFieldSet(// error + Base, _a, 10, void 0, _Base_prop); } } _a = Base; _Base_prop = { value: 123 }; class Derived extends Base { static method(x) { - __classStaticPrivateFieldGet(Derived, _b, _Derived_derivedProp); + __classPrivateFieldGet(Derived, _b, void 0, _Derived_derivedProp); Base. = 10; // error } } diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js index 74ca6c3a9d50d..d8295ab570489 100644 --- a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js @@ -25,15 +25,11 @@ class A { //// [privateNameStaticFieldDestructuredBinding.js] -var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - propertyDescriptor.value = value; - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _b, _A_field; class A { @@ -41,13 +37,13 @@ class A { var _c; this.otherClass = A; let y; - ({ x: ({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value, y } = this.testObject()); - ([({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value, y] = this.testArray()); - ({ a: ({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value, b: [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value] } = { a: 1, b: [2] }); - [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value, [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value]] = [1, [2]]; - ({ a: ({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value = 1, b: [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value = 1] } = { b: [] }); - [({ set value(_b) { __classStaticPrivateFieldSet(A, _b, _A_field, _b); } }).value = 2] = []; - _c = this.otherClass, [({ set value(_b) { __classStaticPrivateFieldSet(_c, _b, _A_field, _b); } }).value = 2] = []; + ({ x: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value, y } = this.testObject()); + ([({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value, y] = this.testArray()); + ({ a: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value, b: [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value] } = { a: 1, b: [2] }); + [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value, [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value]] = [1, [2]]; + ({ a: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value = 1, b: [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value = 1] } = { b: [] }); + [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value = 2] = []; + _c = this.otherClass, [({ set value(_b) { __classPrivateFieldSet(_c, _b, _b, void 0, _A_field); } }).value = 2] = []; } testObject() { return { x: 10, y: 6 }; @@ -56,7 +52,7 @@ class A { return [10, 11]; } static test(_a) { - [({ set value(_c) { __classStaticPrivateFieldSet(_a, _b, _A_field, _c); } }).value] = [2]; + [({ set value(_c) { __classPrivateFieldSet(_a, _b, _c, void 0, _A_field); } }).value] = [2]; } } _b = A; diff --git a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js index 49634f15cb01c..da157d2d83a2b 100644 --- a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js @@ -30,52 +30,44 @@ class C { //// [privateNameStaticFieldUnaryMutation.js] -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; -var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - propertyDescriptor.value = value; - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _a, _C_test; class C { constructor() { var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; - __classStaticPrivateFieldSet(_b = C, _a, _C_test, +__classStaticPrivateFieldGet(_b, _a, _C_test) + 1); - __classStaticPrivateFieldSet(_c = C, _a, _C_test, +__classStaticPrivateFieldGet(_c, _a, _C_test) - 1); - __classStaticPrivateFieldSet(_d = C, _a, _C_test, +__classStaticPrivateFieldGet(_d, _a, _C_test) + 1); - __classStaticPrivateFieldSet(_e = C, _a, _C_test, +__classStaticPrivateFieldGet(_e, _a, _C_test) - 1); - const a = (__classStaticPrivateFieldSet(_f = C, _a, _C_test, (_g = +__classStaticPrivateFieldGet(_f, _a, _C_test)) + 1), _g); - const b = (__classStaticPrivateFieldSet(_h = C, _a, _C_test, (_j = +__classStaticPrivateFieldGet(_h, _a, _C_test)) - 1), _j); - const c = __classStaticPrivateFieldSet(_k = C, _a, _C_test, +__classStaticPrivateFieldGet(_k, _a, _C_test) + 1); - const d = __classStaticPrivateFieldSet(_l = C, _a, _C_test, +__classStaticPrivateFieldGet(_l, _a, _C_test) - 1); - for (__classStaticPrivateFieldSet(C, _a, _C_test, 0); __classStaticPrivateFieldGet(C, _a, _C_test) < 10; __classStaticPrivateFieldSet(_m = C, _a, _C_test, +__classStaticPrivateFieldGet(_m, _a, _C_test) + 1)) { } - for (__classStaticPrivateFieldSet(C, _a, _C_test, 0); __classStaticPrivateFieldGet(C, _a, _C_test) < 10; __classStaticPrivateFieldSet(_o = C, _a, _C_test, +__classStaticPrivateFieldGet(_o, _a, _C_test) + 1)) { } + __classPrivateFieldSet(_b = C, _a, +__classPrivateFieldGet(_b, _a, void 0, _C_test) + 1, void 0, _C_test); + __classPrivateFieldSet(_c = C, _a, +__classPrivateFieldGet(_c, _a, void 0, _C_test) - 1, void 0, _C_test); + __classPrivateFieldSet(_d = C, _a, +__classPrivateFieldGet(_d, _a, void 0, _C_test) + 1, void 0, _C_test); + __classPrivateFieldSet(_e = C, _a, +__classPrivateFieldGet(_e, _a, void 0, _C_test) - 1, void 0, _C_test); + const a = (__classPrivateFieldSet(_f = C, _a, (_g = +__classPrivateFieldGet(_f, _a, void 0, _C_test)) + 1, void 0, _C_test), _g); + const b = (__classPrivateFieldSet(_h = C, _a, (_j = +__classPrivateFieldGet(_h, _a, void 0, _C_test)) - 1, void 0, _C_test), _j); + const c = __classPrivateFieldSet(_k = C, _a, +__classPrivateFieldGet(_k, _a, void 0, _C_test) + 1, void 0, _C_test); + const d = __classPrivateFieldSet(_l = C, _a, +__classPrivateFieldGet(_l, _a, void 0, _C_test) - 1, void 0, _C_test); + for (__classPrivateFieldSet(C, _a, 0, void 0, _C_test); __classPrivateFieldGet(C, _a, void 0, _C_test) < 10; __classPrivateFieldSet(_m = C, _a, +__classPrivateFieldGet(_m, _a, void 0, _C_test) + 1, void 0, _C_test)) { } + for (__classPrivateFieldSet(C, _a, 0, void 0, _C_test); __classPrivateFieldGet(C, _a, void 0, _C_test) < 10; __classPrivateFieldSet(_o = C, _a, +__classPrivateFieldGet(_o, _a, void 0, _C_test) + 1, void 0, _C_test)) { } } test() { var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; - __classStaticPrivateFieldSet(_b = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_b, _a, _C_test) + 1); - __classStaticPrivateFieldSet(_c = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_c, _a, _C_test) - 1); - __classStaticPrivateFieldSet(_d = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_d, _a, _C_test) + 1); - __classStaticPrivateFieldSet(_e = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_e, _a, _C_test) - 1); - const a = (__classStaticPrivateFieldSet(_f = this.getClass(), _a, _C_test, (_g = +__classStaticPrivateFieldGet(_f, _a, _C_test)) + 1), _g); - const b = (__classStaticPrivateFieldSet(_h = this.getClass(), _a, _C_test, (_j = +__classStaticPrivateFieldGet(_h, _a, _C_test)) - 1), _j); - const c = __classStaticPrivateFieldSet(_k = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_k, _a, _C_test) + 1); - const d = __classStaticPrivateFieldSet(_l = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_l, _a, _C_test) - 1); - for (__classStaticPrivateFieldSet(this.getClass(), _a, _C_test, 0); __classStaticPrivateFieldGet(this.getClass(), _a, _C_test) < 10; __classStaticPrivateFieldSet(_m = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_m, _a, _C_test) + 1)) { } - for (__classStaticPrivateFieldSet(this.getClass(), _a, _C_test, 0); __classStaticPrivateFieldGet(this.getClass(), _a, _C_test) < 10; __classStaticPrivateFieldSet(_o = this.getClass(), _a, _C_test, +__classStaticPrivateFieldGet(_o, _a, _C_test) + 1)) { } + __classPrivateFieldSet(_b = this.getClass(), _a, +__classPrivateFieldGet(_b, _a, void 0, _C_test) + 1, void 0, _C_test); + __classPrivateFieldSet(_c = this.getClass(), _a, +__classPrivateFieldGet(_c, _a, void 0, _C_test) - 1, void 0, _C_test); + __classPrivateFieldSet(_d = this.getClass(), _a, +__classPrivateFieldGet(_d, _a, void 0, _C_test) + 1, void 0, _C_test); + __classPrivateFieldSet(_e = this.getClass(), _a, +__classPrivateFieldGet(_e, _a, void 0, _C_test) - 1, void 0, _C_test); + const a = (__classPrivateFieldSet(_f = this.getClass(), _a, (_g = +__classPrivateFieldGet(_f, _a, void 0, _C_test)) + 1, void 0, _C_test), _g); + const b = (__classPrivateFieldSet(_h = this.getClass(), _a, (_j = +__classPrivateFieldGet(_h, _a, void 0, _C_test)) - 1, void 0, _C_test), _j); + const c = __classPrivateFieldSet(_k = this.getClass(), _a, +__classPrivateFieldGet(_k, _a, void 0, _C_test) + 1, void 0, _C_test); + const d = __classPrivateFieldSet(_l = this.getClass(), _a, +__classPrivateFieldGet(_l, _a, void 0, _C_test) - 1, void 0, _C_test); + for (__classPrivateFieldSet(this.getClass(), _a, 0, void 0, _C_test); __classPrivateFieldGet(this.getClass(), _a, void 0, _C_test) < 10; __classPrivateFieldSet(_m = this.getClass(), _a, +__classPrivateFieldGet(_m, _a, void 0, _C_test) + 1, void 0, _C_test)) { } + for (__classPrivateFieldSet(this.getClass(), _a, 0, void 0, _C_test); __classPrivateFieldGet(this.getClass(), _a, void 0, _C_test) < 10; __classPrivateFieldSet(_o = this.getClass(), _a, +__classPrivateFieldGet(_o, _a, void 0, _C_test) + 1, void 0, _C_test)) { } } getClass() { return C; } } diff --git a/tests/baselines/reference/privateNameStaticMethod.js b/tests/baselines/reference/privateNameStaticMethod.js index 14ef06a04e49f..38bc0e54b0b7a 100644 --- a/tests/baselines/reference/privateNameStaticMethod.js +++ b/tests/baselines/reference/privateNameStaticMethod.js @@ -14,18 +14,17 @@ class A1 { //// [privateNameStaticMethod.js] "use strict"; -var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A1_method; class A1 { constructor() { - __classStaticPrivateMethodGet(A1, _a, _A1_method).call(A1, ""); - __classStaticPrivateMethodGet(A1, _a, _A1_method).call(A1, 1); // Error - __classStaticPrivateMethodGet(A1, _a, _A1_method).call(// Error + __classPrivateFieldGet(A1, _a, "m", _A1_method).call(A1, ""); + __classPrivateFieldGet(A1, _a, "m", _A1_method).call(A1, 1); // Error + __classPrivateFieldGet(A1, _a, "m", _A1_method).call(// Error A1); // Error } } diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.js b/tests/baselines/reference/privateNameStaticMethodAssignment.js index 73895eebc64d3..909f4ca65f717 100644 --- a/tests/baselines/reference/privateNameStaticMethodAssignment.js +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.js @@ -13,27 +13,29 @@ class A3 { //// [privateNameStaticMethodAssignment.js] -var __classStaticPrivateReadonly = (this && this.__classStaticPrivateReadonly) || function () { - throw new TypeError("Private static element is not writable"); +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A3_method; class A3 { constructor(a, b) { var _b; - __classStaticPrivateReadonly(A3, () => { }); // Error, not writable - __classStaticPrivateReadonly(// Error, not writable - a, () => { }); // Error, not writable - __classStaticPrivateReadonly(// Error, not writable - b, () => { }); //Error, not writable - ({ x: ({ set value(_b) { __classStaticPrivateReadonly(A3, _b); } }).value } = { x: () => { } }); //Error, not writable - let x = __classStaticPrivateMethodGet(A3, _a, _A3_method); - __classStaticPrivateReadonly(_b = b, +__classStaticPrivateMethodGet(_b, _a, _A3_method) + 1); //Error, not writable + __classPrivateFieldSet(A3, _a, () => { }, "m"); // Error, not writable + __classPrivateFieldSet(// Error, not writable + a, _a, () => { }, "m"); // Error, not writable + __classPrivateFieldSet(// Error, not writable + 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 } ; } diff --git a/tests/baselines/reference/privateNameStaticMethodAsync.js b/tests/baselines/reference/privateNameStaticMethodAsync.js index 5cb7c6fc8c2d9..541c1b18ad5f0 100644 --- a/tests/baselines/reference/privateNameStaticMethodAsync.js +++ b/tests/baselines/reference/privateNameStaticMethodAsync.js @@ -16,17 +16,16 @@ const C = class { //// [privateNameStaticMethodAsync.js] -var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _C_bar, _C_baz, _C_qux, _C_bazBad; const C = (_a = class { static async foo() { - const b = await __classStaticPrivateMethodGet(this, _a, _C_bar).call(this); - return b + (__classStaticPrivateMethodGet(this, _a, _C_baz).call(this).next().value || 0) + ((await __classStaticPrivateMethodGet(this, _a, _C_qux).call(this).next()).value || 0); + const b = await __classPrivateFieldGet(this, _a, "m", _C_bar).call(this); + return b + (__classPrivateFieldGet(this, _a, "m", _C_baz).call(this).next().value || 0) + ((await __classPrivateFieldGet(this, _a, "m", _C_qux).call(this).next()).value || 0); } }, _C_bar = async function _C_bar() { return await Promise.resolve(42); }, diff --git a/tests/baselines/reference/privateNameStaticMethodCallExpression.js b/tests/baselines/reference/privateNameStaticMethodCallExpression.js index 18fc07816c07e..0495fc8873363 100644 --- a/tests/baselines/reference/privateNameStaticMethodCallExpression.js +++ b/tests/baselines/reference/privateNameStaticMethodCallExpression.js @@ -25,11 +25,10 @@ class AA { //// [privateNameStaticMethodCallExpression.js] -var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _AA_method, _AA_method2; class AA { @@ -37,18 +36,18 @@ class AA { ; test() { var _b, _c, _d; - __classStaticPrivateMethodGet(AA, _a, _AA_method).call(AA); - const func = __classStaticPrivateMethodGet(AA, _a, _AA_method); + __classPrivateFieldGet(AA, _a, "m", _AA_method).call(AA); + const func = __classPrivateFieldGet(AA, _a, "m", _AA_method); func(); - new (__classStaticPrivateMethodGet(AA, _a, _AA_method))(); + new (__classPrivateFieldGet(AA, _a, "m", _AA_method))(); const arr = [1, 2]; - __classStaticPrivateMethodGet(AA, _a, _AA_method2).call(AA, 0, ...arr, 3); - const b = new (__classStaticPrivateMethodGet(AA, _a, _AA_method2))(0, ...arr, 3); //Error - const str = __classStaticPrivateMethodGet(AA, _a, _AA_method2).bind(AA) `head${1}middle${2}tail`; - __classStaticPrivateMethodGet((_b = AA.getClass()), _a, _AA_method2).bind(_b) `test${1}and${2}`; - __classStaticPrivateMethodGet((_c = AA.getClass()), _a, _AA_method2).call(_c, 0, ...arr, 3); - const b2 = new (__classStaticPrivateMethodGet(AA.getClass(), _a, _AA_method2))(0, ...arr, 3); //Error - const str2 = __classStaticPrivateMethodGet((_d = AA.getClass()), _a, _AA_method2).bind(_d) `head${1}middle${2}tail`; + __classPrivateFieldGet(AA, _a, "m", _AA_method2).call(AA, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(AA, _a, "m", _AA_method2))(0, ...arr, 3); //Error + const str = __classPrivateFieldGet(AA, _a, "m", _AA_method2).bind(AA) `head${1}middle${2}tail`; + __classPrivateFieldGet((_b = AA.getClass()), _a, "m", _AA_method2).bind(_b) `test${1}and${2}`; + __classPrivateFieldGet((_c = AA.getClass()), _a, "m", _AA_method2).call(_c, 0, ...arr, 3); + const b2 = new (__classPrivateFieldGet(AA.getClass(), _a, "m", _AA_method2))(0, ...arr, 3); //Error + const str2 = __classPrivateFieldGet((_d = AA.getClass()), _a, "m", _AA_method2).bind(_d) `head${1}middle${2}tail`; } static getClass() { return AA; } } diff --git a/tests/baselines/reference/privateNameStaticMethodClassExpression.js b/tests/baselines/reference/privateNameStaticMethodClassExpression.js index 8b7e3859d885e..bd873a33fcdd4 100644 --- a/tests/baselines/reference/privateNameStaticMethodClassExpression.js +++ b/tests/baselines/reference/privateNameStaticMethodClassExpression.js @@ -13,29 +13,19 @@ C.getClass().#field; // Error //// [privateNameStaticMethodClassExpression.js] -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; -}; -var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _D_field, _D_method; const C = (_a = class D { static getClass() { return D; } - static getField() { return __classStaticPrivateFieldGet(C, _a, _D_field); } + static getField() { return __classPrivateFieldGet(C, _a, void 0, _D_field); } ; }, _D_method = function _D_method() { return 42; }, - _D_field = { value: __classStaticPrivateMethodGet(_a, _a, _D_method).call(_a) }, + _D_field = { value: __classPrivateFieldGet(_a, _a, "m", _D_method).call(_a) }, _a); console.log(C.getClass().getField()); C.getClass().; // Error diff --git a/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js index 4e2160d101585..1d2e16d722089 100644 --- a/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js +++ b/tests/baselines/reference/privateNameStaticMethodInStaticFieldInit.js @@ -8,15 +8,14 @@ console.log(C.s); //// [privateNameStaticMethodInStaticFieldInit.js] -var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _C_method; class C { } _a = C, _C_method = function _C_method() { return 42; }; -C.s = __classStaticPrivateMethodGet(C, _a, _C_method).call(C); +C.s = __classPrivateFieldGet(C, _a, "m", _C_method).call(C); console.log(C.s); diff --git a/tests/baselines/reference/privateNamesAndFields.js b/tests/baselines/reference/privateNamesAndFields.js index c2eb9e45e71ca..519a63909a276 100644 --- a/tests/baselines/reference/privateNamesAndFields.js +++ b/tests/baselines/reference/privateNamesAndFields.js @@ -17,12 +17,11 @@ class B extends A { //// [privateNamesAndFields.js] "use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _A_foo, _B_foo; class A { diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.js b/tests/baselines/reference/privateNamesAndGenericClasses-2.js index ba3bb5e3942b1..66a4fdac2208c 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.js +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.js @@ -29,24 +29,16 @@ b = a; // Error //// [privateNamesAndGenericClasses-2.js] "use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; -}; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _C_instances, _C_foo, _C_bar; class C { @@ -54,7 +46,7 @@ class C { _C_instances.add(this); _C_foo.set(this, void 0); __classPrivateFieldSet(this, _C_foo, t); - t = __classPrivateMethodGet(this, _C_instances, _C_bar).call(this); + t = __classPrivateFieldGet(this, _C_instances, "m", _C_bar).call(this); } set baz(t) { __classPrivateFieldSet(this, _C_foo, t); diff --git a/tests/baselines/reference/privateNamesAndStaticFields.js b/tests/baselines/reference/privateNamesAndStaticFields.js index dcb14a8997386..f182735068847 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.js +++ b/tests/baselines/reference/privateNamesAndStaticFields.js @@ -24,31 +24,23 @@ const willErrorSomeDay: typeof A = class {}; // OK for now //// [privateNamesAndStaticFields.js] "use strict"; -var __classStaticPrivateFieldSet = (this && this.__classStaticPrivateFieldSet) || function (receiver, classConstructor, propertyDescriptor, value) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - propertyDescriptor.value = value; - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A_foo, _A_bar, _b, _B_foo; class A { constructor() { - __classStaticPrivateFieldSet(A, _a, _A_foo, 3); - __classStaticPrivateFieldGet(B, _a, _A_foo); // Error - __classStaticPrivateFieldGet(B, _a, _A_bar); // Error + __classPrivateFieldSet(A, _a, 3, void 0, _A_foo); + __classPrivateFieldGet(B, _a, void 0, _A_foo); // Error + __classPrivateFieldGet(B, _a, void 0, _A_bar); // Error } } _a = A; @@ -57,7 +49,7 @@ _A_bar = { value: void 0 }; class B extends A { constructor() { super(); - __classStaticPrivateFieldSet(B, _b, _B_foo, "some string"); + __classPrivateFieldSet(B, _b, "some string", void 0, _B_foo); } } _b = B; diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index eb0dbd87e498d..958df88562dff 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -15,20 +15,10 @@ class Child extends Parent { //// [privateNamesConstructorChain-1.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; class Parent { @@ -37,7 +27,7 @@ class Parent { } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classStaticPrivateFieldGet(Child, _a, _Parent_bar); // Error: not found + __classPrivateFieldGet(Child, _a, void 0, _Parent_bar); // Error: not found } } _a = Parent, _Parent_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index e54eba4f5c4ee..3970efe16f821 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -17,20 +17,10 @@ new Parent().accessChildProps(); //// [privateNamesConstructorChain-2.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _Parent_foo, _Parent_bar, _Child_foo, _Child_bar; class Parent { @@ -39,7 +29,7 @@ class Parent { } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classStaticPrivateFieldGet(Child, _a, _Parent_bar); // Error: not found + __classPrivateFieldGet(Child, _a, void 0, _Parent_bar); // Error: not found } } _a = Parent, _Parent_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesInGenericClasses.js b/tests/baselines/reference/privateNamesInGenericClasses.js index efb0b6e96d90e..718ceefe54797 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.js +++ b/tests/baselines/reference/privateNamesInGenericClasses.js @@ -29,30 +29,16 @@ b = a; // Error //// [privateNamesInGenericClasses.js] "use strict"; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; -}; -var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _C_instances, _C_foo, _C_method, _C_prop_get, _C_prop_set; class C { @@ -61,14 +47,14 @@ class C { _C_foo.set(this, void 0); } bar(x) { return __classPrivateFieldGet(x, _C_foo); } // OK - bar2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method).call(x); } // OK - bar3(x) { return __classPrivateAccessorGet(x, _C_instances, _C_prop_get); } // OK + bar2(x) { return __classPrivateFieldGet(x, _C_instances, "m", _C_method).call(x); } // OK + bar3(x) { return __classPrivateFieldGet(x, _C_instances, "a", _C_prop_get); } // OK baz(x) { return __classPrivateFieldGet(x, _C_foo); } // OK - baz2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method); } // OK - baz3(x) { return __classPrivateAccessorGet(x, _C_instances, _C_prop_get); } // OK + baz2(x) { return __classPrivateFieldGet(x, _C_instances, "m", _C_method); } // OK + baz3(x) { return __classPrivateFieldGet(x, _C_instances, "a", _C_prop_get); } // OK quux(x) { return __classPrivateFieldGet(x, _C_foo); } // OK - quux2(x) { return __classPrivateMethodGet(x, _C_instances, _C_method); } // OK - quux3(x) { return __classPrivateAccessorGet(x, _C_instances, _C_prop_get); } // OK + quux2(x) { return __classPrivateFieldGet(x, _C_instances, "m", _C_method); } // OK + quux3(x) { return __classPrivateFieldGet(x, _C_instances, "a", _C_prop_get); } // OK } _C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_method = function _C_method() { return __classPrivateFieldGet(this, _C_foo); }, _C_prop_get = function _C_prop_get() { return __classPrivateFieldGet(this, _C_foo); }, _C_prop_set = function _C_prop_set(value) { __classPrivateFieldSet(this, _C_foo, value); }; a.; // Error diff --git a/tests/baselines/reference/privateNamesInNestedClasses-1.js b/tests/baselines/reference/privateNamesInNestedClasses-1.js index 22730b36fcf49..3554cd45da4bc 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-1.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-1.js @@ -28,11 +28,10 @@ new A().method(); //// [privateNamesInNestedClasses-1.js] "use strict"; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_foo, _A_bar; class A { diff --git a/tests/baselines/reference/privateNamesInNestedClasses-2.js b/tests/baselines/reference/privateNamesInNestedClasses-2.js index b64df29fe560e..70b07da3dcced 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-2.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-2.js @@ -18,11 +18,10 @@ class A { //// [privateNamesInNestedClasses-2.js] "use strict"; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A_x; class A { diff --git a/tests/baselines/reference/privateNamesInterfaceExtendingClass.js b/tests/baselines/reference/privateNamesInterfaceExtendingClass.js index 3958fa5ab2b26..1784f7de35d04 100644 --- a/tests/baselines/reference/privateNamesInterfaceExtendingClass.js +++ b/tests/baselines/reference/privateNamesInterfaceExtendingClass.js @@ -14,12 +14,11 @@ function func(x: I) { //// [privateNamesInterfaceExtendingClass.js] -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _C_prop; class C { diff --git a/tests/baselines/reference/privateNamesNoDelete.js b/tests/baselines/reference/privateNamesNoDelete.js index 1614af7f8850b..0828a447b9d9c 100644 --- a/tests/baselines/reference/privateNamesNoDelete.js +++ b/tests/baselines/reference/privateNamesNoDelete.js @@ -9,11 +9,10 @@ class A { //// [privateNamesNoDelete.js] "use strict"; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_v; class A { diff --git a/tests/baselines/reference/privateNamesUnique-2.js b/tests/baselines/reference/privateNamesUnique-2.js index b973c3fa3e5cf..380159d4fe5a6 100644 --- a/tests/baselines/reference/privateNamesUnique-2.js +++ b/tests/baselines/reference/privateNamesUnique-2.js @@ -31,11 +31,10 @@ export class Foo { } _Foo_x = new WeakMap(); //// [a.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Foo_x; export class Foo { diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index fc63600568b39..c12ac22c347d9 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -15,14 +15,10 @@ class B { //// [privateNamesUnique-3.js] -var __classStaticPrivateFieldGet = (this && this.__classStaticPrivateFieldGet) || function (receiver, classConstructor, propertyDescriptor) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - if (propertyDescriptor === undefined) { - throw new TypeError("Private static field was accessed before its declaration."); - } - return propertyDescriptor.value; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _A_foo, _A_foo_1, _b, _B_foo; class A { @@ -37,7 +33,7 @@ _a = A, _A_foo = new WeakMap(); _A_foo_1 = { value: true }; // error (duplicate) class B { test(x) { - __classStaticPrivateFieldGet(x, _b, _B_foo); // error (#foo is a static property on B, not an instance property) + __classPrivateFieldGet(x, _b, void 0, _B_foo); // error (#foo is a static property on B, not an instance property) } } _b = B; diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.js b/tests/baselines/reference/privateNamesUseBeforeDef.js index 90146102f9e35..c250d4cc2c50a 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.js +++ b/tests/baselines/reference/privateNamesUseBeforeDef.js @@ -21,23 +21,10 @@ class B { //// [privateNamesUseBeforeDef.js] -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -}; -var __classPrivateMethodGet = (this && this.__classPrivateMethodGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private method on non-instance"); - } - return fn; -}; -var __classPrivateAccessorGet = (this && this.__classPrivateAccessorGet) || function (receiver, instances, fn) { - if (!instances.has(receiver)) { - throw new TypeError("attempted to get private accessor on non-instance"); - } - return fn.call(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _A_foo, _A_bar, _A2_instances, _A2_foo, _A2_bar, _A3_instances, _A3_foo, _A3_bar_get, _B_foo, _B_bar; class A { @@ -50,7 +37,7 @@ _A_foo = new WeakMap(), _A_bar = new WeakMap(); class A2 { constructor() { _A2_instances.add(this); - _A2_foo.set(this, __classPrivateMethodGet(this, _A2_instances, _A2_bar).call(this)); // No Error + _A2_foo.set(this, __classPrivateFieldGet(this, _A2_instances, "m", _A2_bar).call(this)); // No Error } ; } @@ -58,7 +45,7 @@ _A2_foo = new WeakMap(), _A2_instances = new WeakSet(), _A2_bar = function _A2_b class A3 { constructor() { _A3_instances.add(this); - _A3_foo.set(this, __classPrivateAccessorGet(this, _A3_instances, _A3_bar_get)); // No Error + _A3_foo.set(this, __classPrivateFieldGet(this, _A3_instances, "a", _A3_bar_get)); // No Error } ; } diff --git a/tests/baselines/reference/privateStaticNameShadowing.js b/tests/baselines/reference/privateStaticNameShadowing.js index c37aba06f7471..4959e2fec893b 100644 --- a/tests/baselines/reference/privateStaticNameShadowing.js +++ b/tests/baselines/reference/privateStaticNameShadowing.js @@ -14,23 +14,22 @@ class X { //// [privateStaticNameShadowing.js] -var __classStaticPrivateMethodGet = (this && this.__classStaticPrivateMethodGet) || function (receiver, classConstructor, fn) { - if (receiver !== classConstructor) { - throw new TypeError("Private static access of wrong provenance"); - } - return fn; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _b, _X_f, _X_m; class X { constructor() { - __classStaticPrivateMethodGet(X, _b, _X_m).call(X); + __classPrivateFieldGet(X, _b, "m", _X_m).call(X); } } _b = X, _X_m = function _X_m() { const X = {}; // shadow the class const _a = {}; // shadow the first generated var - __classStaticPrivateMethodGet(X, _b, _X_m).call(// shadow the first generated var + __classPrivateFieldGet(X, _b, "m", _X_m).call(// shadow the first generated var X); // Should check with X as the receiver with _b as the class constructor return 1; }; -_X_f = { value: __classStaticPrivateMethodGet(X, _b, _X_m).call(X) }; +_X_f = { value: __classPrivateFieldGet(X, _b, "m", _X_m).call(X) }; diff --git a/tests/baselines/reference/strictPropertyInitialization.js b/tests/baselines/reference/strictPropertyInitialization.js index 23505b7087f47..0d74861983dec 100644 --- a/tests/baselines/reference/strictPropertyInitialization.js +++ b/tests/baselines/reference/strictPropertyInitialization.js @@ -137,18 +137,16 @@ class C11 { //// [strictPropertyInitialization.js] "use strict"; // Properties with non-undefined types require initialization -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _C1_f, _C1_g, _C1_h, _C1_i, _C4_d, _C4_e, _C4_f, _C5_b, _C6_b, _C7_b, _C10_d, _C11_b; class C1 { From 1addbb3c74894a7a27800a22b74c0dd079ca3835 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Thu, 18 Mar 2021 09:45:33 +0200 Subject: [PATCH 61/73] Simplified emit for private identifier class elements. --- src/compiler/factory/emitHelpers.ts | 129 +++++- src/compiler/transformers/classFields.ts | 409 +++++++----------- tests/baselines/reference/importHelpersES6.js | 2 +- .../baselines/reference/privateNameAndAny.js | 18 +- .../privateNameAndObjectRestSpread.js | 8 +- .../reference/privateNameBadAssignment.js | 2 +- .../reference/privateNameCircularReference.js | 4 +- ...ameComputedPropertyName1(target=es2015).js | 16 +- ...ameComputedPropertyName2(target=es2015).js | 2 +- ...ameComputedPropertyName3(target=es2015).js | 8 +- .../privateNameConstructorSignature.js | 2 +- .../privateNameDeclarationMerging.js | 4 +- .../reference/privateNameDuplicateField.js | 8 +- tests/baselines/reference/privateNameField.js | 2 +- .../reference/privateNameFieldAccess.js | 2 +- .../reference/privateNameFieldAssignment.js | 52 +-- .../privateNameFieldCallExpression.js | 16 +- .../privateNameFieldDerivedClasses.js | 2 +- ...FieldDestructuredBinding(target=es2015).js | 16 +- .../privateNameFieldUnaryMutation.js | 40 +- .../privateNameInLhsReceiverExpression.js | 4 +- .../privateNameMethodClassExpression.js | 2 +- .../privateNameNestedClassFieldShadowing.js | 4 +- .../privateNameNestedMethodAccess.js | 4 +- ...rivateNameStaticAccessorsCallExpression.js | 2 +- .../reference/privateNameStaticFieldAccess.js | 4 +- .../privateNameStaticFieldAssignment.js | 52 +-- .../privateNameStaticFieldCallExpression.js | 16 +- .../privateNameStaticFieldClassExpression.js | 8 +- .../privateNameStaticFieldDerivedClasses.js | 4 +- ...FieldDestructuredBinding(target=es2015).js | 16 +- .../privateNameStaticFieldUnaryMutation.js | 40 +- .../privateNameStaticMethodClassExpression.js | 2 +- .../reference/privateNamesAndFields.js | 4 +- .../privateNamesAndGenericClasses-2.js | 8 +- .../reference/privateNamesAndStaticFields.js | 8 +- .../privateNamesConstructorChain-1.js | 4 +- .../privateNamesConstructorChain-2.js | 4 +- .../reference/privateNamesInGenericClasses.js | 8 +- .../privateNamesInNestedClasses-1.js | 6 +- .../privateNamesInNestedClasses-2.js | 2 +- .../privateNamesInterfaceExtendingClass.js | 2 +- .../reference/privateNamesNoDelete.js | 2 +- .../reference/privateNamesUnique-2.js | 2 +- .../reference/privateNamesUnique-3.js | 2 +- .../reference/privateNamesUseBeforeDef.js | 6 +- .../reference/strictPropertyInitialization.js | 14 +- 47 files changed, 478 insertions(+), 494 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 29049f126057b..8eb5affa73f8f 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -32,8 +32,8 @@ namespace ts { createImportDefaultHelper(expression: Expression): Expression; createExportStarHelper(moduleExpression: Expression, exportsExpression?: Expression): Expression; // Class Fields Helpers - createClassPrivateFieldGetHelper(receiver: Expression, privateField: Identifier, kind?: "a" | "m" | undefined, f?: Identifier | undefined): Expression; - createClassPrivateFieldSetHelper(receiver: Expression, privateField: Identifier, value: Expression, kind?: "a" | "m" | undefined, f?: Identifier | undefined): Expression; + createClassPrivateFieldGetHelper(receiver: Expression, state: Identifier, kind: PrivateIdentifierKind, f: Identifier | undefined): Expression; + createClassPrivateFieldSetHelper(receiver: Expression, state: Identifier, value: Expression, kind: PrivateIdentifierKind, f: Identifier | undefined): Expression; } export function createEmitHelperFactory(context: TransformationContext): EmitHelperFactory { @@ -368,38 +368,26 @@ namespace ts { // Class Fields Helpers - function createClassPrivateFieldGetHelper(receiver: Expression, state: Identifier, kind?: "a" | "m" | undefined, f?: Identifier | undefined) { + function createClassPrivateFieldGetHelper(receiver: Expression, state: Identifier, kind: PrivateIdentifierKind, f: Identifier | undefined) { context.requestEmitHelper(classPrivateFieldGetHelper); let args; - if(!kind && !f) { - args = [receiver, state]; - } - else if(kind && !f) { + if (!f) { args = [receiver, state, factory.createStringLiteral(kind)]; } - else if(!kind && f) { - args = [receiver, state, factory.createVoidZero(), f]; - } else { - args = [receiver, state, factory.createStringLiteral(kind!), f!]; + args = [receiver, state, factory.createStringLiteral(kind), f]; } return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldGet"), /*typeArguments*/ undefined, args); } - function createClassPrivateFieldSetHelper(receiver: Expression, state: Identifier, value: Expression, kind?: "a" | "m" | undefined, f?: Identifier | undefined) { + function createClassPrivateFieldSetHelper(receiver: Expression, state: Identifier, value: Expression, kind: PrivateIdentifierKind, f: Identifier | undefined) { context.requestEmitHelper(classPrivateFieldSetHelper); let args; - if(!kind && !f) { - args = [receiver, state, value]; - } - else if(kind && !f) { + if (!f) { args = [receiver, state, value, factory.createStringLiteral(kind)]; } - else if(!kind && f) { - args = [receiver, state, value, factory.createVoidZero(), f]; - } else { - args = [receiver, state, value, factory.createStringLiteral(kind!), f!]; + args = [receiver, state, value, factory.createStringLiteral(kind), f]; } return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldSet"), /*typeArguments*/ undefined, args); } @@ -830,7 +818,6 @@ namespace ts { };` }; - // emit output for the __export helper function export const exportStarHelper: UnscopedEmitHelper = { name: "typescript:export-star", importName: "__exportStar", @@ -843,7 +830,57 @@ namespace ts { };` }; - // Class fields helpers + /** + * Parameters: + * @param receiver — The object on which the private member will be set. + * @param state — One of the following: + * - A WeakMap used to store a private instance field. + * - A WeakSet used as an instance brand for private instance methods and accessors. + * - A function value that should be the undecorated class constructor used to brand check private static fields, methods, and accessors. + * @param value — The value to set. + * @param kind — (optional pre TS 4.3, required for TS 4.3+) One of the following values: + * - undefined — Indicates a private instance field (pre TS 4.3). + * - "f" — Indicates a private field (instance or static). + * - "m" — Indicates a private method (instance or static). + * - "a" — Indicates a private accessor (instance or static). + * @param f — (optional pre TS 4.3) Depends on the arguments for state and kind: + * - If kind is "m", this should be the function corresponding to the static or instance method. + * - If kind is "a", this should be the function corresponding to the setter method, or undefined if the setter was not defined. + * - If kind is "f" and state is a function, this should be an object holding the value of a static field, or undefined if the static field declaration has not yet been evaluated. + * Usage: + * This helper will only ever be used by the compiler in the following ways: + * + * Writing to a private instance field (pre TS 4.3): + * __classPrivateFieldSet(, , ) + * + * Writing to a private instance field (TS 4.3+): + * __classPrivateFieldSet(, , , "f") + * + * Writing to a private instance set accessor (when defined, TS 4.3+): + * __classPrivateFieldSet(, , , "a", ) + * + * Writing to a private instance set accessor (when not defined, TS 4.3+): + * __classPrivateFieldSet(, , , "a", void 0) + * NOTE: This always results in a runtime error. + * + * Writing to a private instance method (TS 4.3+): + * __classPrivateFieldSet(, , , "m", ) + * NOTE: This always results in a runtime error. + * + * Writing to a private static field (TS 4.3+): + * __classPrivateFieldSet(, , , "f", <{ value: any }>) + * + * Writing to a private static set accessor (when defined, TS 4.3+): + * __classPrivateFieldSet(, , , "a", ) + * + * Writing to a private static set accessor (when not defined, TS 4.3+): + * __classPrivateFieldSet(, , , "a", void 0) + * NOTE: This always results in a runtime error. + * + * Writing to a private static method (TS 4.3+): + * __classPrivateFieldSet(, , , "m", ) + * NOTE: This always results in a runtime error. + */ export const classPrivateFieldGetHelper: UnscopedEmitHelper = { name: "typescript:classPrivateFieldGet", importName: "__classPrivateFieldGet", @@ -856,6 +893,54 @@ namespace ts { };` }; + /** + * Parameters: + * @param receiver — The object from which the private member will be read. + * @param state — One of the following: + * - A WeakMap used to read a private instance field. + * - A WeakSet used as an instance brand for private instance methods and accessors. + * - A function value that should be the undecorated class constructor used to brand check private static fields, methods, and accessors. + * @param kind — (optional pre TS 4.3, required for TS 4.3+) One of the following values: + * - undefined — Indicates a private instance field (pre TS 4.3). + * - "f" — Indicates a private field (instance or static). + * - "m" — Indicates a private method (instance or static). + * - "a" — Indicates a private accessor (instance or static). + * @param f — (optional pre TS 4.3) Depends on the arguments for state and kind: + * - If kind is "m", this should be the function corresponding to the static or instance method. + * - If kind is "a", this should be the function corresponding to the getter method, or undefined if the getter was not defined. + * - If kind is "f" and state is a function, this should be an object holding the value of a static field, or undefined if the static field declaration has not yet been evaluated. + * Usage: + * This helper will only ever be used by the compiler in the following ways: + * + * Reading from a private instance field (pre TS 4.3): + * __classPrivateFieldGet(, ) + * + * Reading from a private instance field (TS 4.3+): + * __classPrivateFieldGet(, , "f") + * + * Reading from a private instance get accessor (when defined, TS 4.3+): + * __classPrivateFieldGet(, , "a", ) + * + * Reading from a private instance get accessor (when not defined, TS 4.3+): + * __classPrivateFieldGet(, , "a", void 0) + * NOTE: This always results in a runtime error. + * + * Reading from a private instance method (TS 4.3+): + * __classPrivateFieldGet(, , "m", ) + * + * Reading from a private static field (TS 4.3+): + * __classPrivateFieldGet(, , "f", <{ value: any }>) + * + * Reading from a private static get accessor (when defined, TS 4.3+): + * __classPrivateFieldGet(, , "a", ) + * + * Reading from a private static get accessor (when not defined, TS 4.3+): + * __classPrivateFieldGet(, , "a", void 0) + * NOTE: This always results in a runtime error. + * + * Reading from a private static method (TS 4.3+): + * __classPrivateFieldGet(, , "m", ) + */ export const classPrivateFieldSetHelper: UnscopedEmitHelper = { name: "typescript:classPrivateFieldSet", importName: "__classPrivateFieldSet", diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 01b289d8e125a..23544963ccde5 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -7,91 +7,64 @@ namespace ts { */ ClassAliases = 1 << 0, } - - const enum PrivateIdentifierPlacement { - InstanceField, - InstanceMethod, - InstanceGetterOnly, - InstanceSetterOnly, - InstanceGetterAndSetter, - StaticField, - StaticMethod, - StaticGetterOnly, - StaticSetterOnly, - StaticGetterAndSetter, - } - - type PrivateIdentifierInfo = - | PrivateIdentifierStaticField - | PrivateIdentifierStaticMethod - | PrivateIdentifierStaticGetterOnly - | PrivateIdentifierStaticSetterOnly - | PrivateIdentifierStaticGetterAndSetterOnly - | PrivateIdentifierInstanceField - | PrivateIdentifierInstanceMethod - | PrivateIdentifierInstanceGetterOnly - | PrivateIdentifierInstanceSetterOnly - | PrivateIdentifierInstanceGetterAndSetter; - - interface PrivateIdentifierStaticField { - placement: PrivateIdentifierPlacement.StaticField; - variableName: Identifier; - classConstructor: Identifier; - } - interface PrivateIdentifierStaticMethod { - placement: PrivateIdentifierPlacement.StaticMethod; - functionName: Identifier; - classConstructor: Identifier; + export const enum PrivateIdentifierKind { + Field = "f", + Method = "m", + Accessor = "a" } - interface PrivateIdentifierStaticGetterOnly { - placement: PrivateIdentifierPlacement.StaticGetterOnly; - getterName: Identifier; - setterName?: undefined; - classConstructor: Identifier; - } - interface PrivateIdentifierStaticSetterOnly { - placement: PrivateIdentifierPlacement.StaticSetterOnly; - setterName: Identifier; - getterName?: undefined; - classConstructor: Identifier; - } - interface PrivateIdentifierStaticGetterAndSetterOnly { - placement: PrivateIdentifierPlacement.StaticGetterAndSetter; - getterName: Identifier; - setterName: Identifier; - classConstructor: Identifier; + interface PrivateIdentifierInfoBase { + /** + * brandCheckIdentifier can contain: + * - For instance field: The WeakMap that will be the storage for the field. + * - For instance methods or accessors: The WeakSet that will be used for brand checking. + * - For static members: The constructor that will be used for brand checking. + */ + brandCheckIdentifier: Identifier; + /** + * Stores if the identifier is static or not + */ + isStatic: boolean; } - interface PrivateIdentifierInstanceField { - placement: PrivateIdentifierPlacement.InstanceField; - weakMapName: Identifier; + interface PrivateIdentifierAccessorInfo extends PrivateIdentifierInfoBase { + kind: PrivateIdentifierKind.Accessor; + /** + * Identifier for a variable that will contain the private get accessor implementation, if any. + */ + getterName?: Identifier; + /** + * Identifier for a variable that will contain the private set accessor implementation, if any. + */ + setterName?: Identifier; } - - interface PrivateIdentifierInstanceMethod { - placement: PrivateIdentifierPlacement.InstanceMethod; - weakSetName: Identifier; - functionName: Identifier; + interface PrivateIdentifierMethodInfo extends PrivateIdentifierInfoBase { + kind: PrivateIdentifierKind.Method; + /** + * Identifier for a variable that will contain the private method implementation. + */ + methodName: Identifier; } - - interface PrivateIdentifierInstanceGetterOnly { - placement: PrivateIdentifierPlacement.InstanceGetterOnly; - weakSetName: Identifier; - getterName: Identifier; - setterName?: undefined; + interface PrivateIdentifierInstanceFieldInfo extends PrivateIdentifierInfoBase { + kind: PrivateIdentifierKind.Field; + isStatic: false; + /** + * Defined for ease of access when in a union with PrivateIdentifierStaticFieldInfo. + */ + variableName: undefined; } - - interface PrivateIdentifierInstanceSetterOnly { - placement: PrivateIdentifierPlacement.InstanceSetterOnly; - weakSetName: Identifier; - setterName: Identifier; - getterName?: undefined; + interface PrivateIdentifierStaticFieldInfo extends PrivateIdentifierInfoBase { + kind: PrivateIdentifierKind.Field; + isStatic: true; + /** + * Contains the variable that will server as the storage for the field. + */ + variableName: Identifier; } - interface PrivateIdentifierInstanceGetterAndSetter { - placement: PrivateIdentifierPlacement.InstanceGetterAndSetter; - weakSetName: Identifier; - getterName: Identifier; - setterName: Identifier; - } + type PrivateIdentifierInfo = + | PrivateIdentifierMethodInfo + | PrivateIdentifierInstanceFieldInfo + | PrivateIdentifierStaticFieldInfo + | PrivateIdentifierAccessorInfo; interface PrivateIdentifierEnvironment { /** @@ -99,7 +72,7 @@ namespace ts { */ className: string; /** - * Used for brand ckeck on static members + * Used for brand check on static members */ classConstructor?: Identifier; /** @@ -314,23 +287,17 @@ namespace ts { const info = accessPrivateIdentifier(node.name); Debug.assert(info, "Undeclared private name for property declaration."); - if (info.placement === PrivateIdentifierPlacement.InstanceMethod || info.placement === PrivateIdentifierPlacement.StaticMethod) { - return info.functionName; + if (info.kind === PrivateIdentifierKind.Method) { + return info.methodName; } - if (isGetAccessor(node) && - (info.placement === PrivateIdentifierPlacement.InstanceGetterOnly || - info.placement === PrivateIdentifierPlacement.StaticGetterOnly || - info.placement === PrivateIdentifierPlacement.InstanceGetterAndSetter || - info.placement === PrivateIdentifierPlacement.StaticGetterAndSetter)) { - return info.getterName; - } - if (isSetAccessor(node) && - (info.placement === PrivateIdentifierPlacement.InstanceSetterOnly || - info.placement === PrivateIdentifierPlacement.StaticSetterOnly || - info.placement === PrivateIdentifierPlacement.InstanceGetterAndSetter || - info.placement === PrivateIdentifierPlacement.StaticGetterAndSetter)) { - return info.setterName; + if (info.kind === PrivateIdentifierKind.Accessor) { + if (isGetAccessor(node)) { + return info.getterName; + } + if (isSetAccessor(node)) { + return info.setterName; + } } } @@ -365,57 +332,30 @@ namespace ts { } function createPrivateIdentifierAccessHelper(info: PrivateIdentifierInfo, receiver: Expression): Expression { - switch (info.placement) { - case PrivateIdentifierPlacement.InstanceField: - return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( - receiver, - info.weakMapName - ); - case PrivateIdentifierPlacement.InstanceMethod: - return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( - receiver, - info.weakSetName, - "m", - info.functionName - ); - case PrivateIdentifierPlacement.InstanceGetterOnly: - case PrivateIdentifierPlacement.InstanceGetterAndSetter: - case PrivateIdentifierPlacement.InstanceSetterOnly: + switch(info.kind) { + case PrivateIdentifierKind.Accessor: return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, - info.weakSetName, - "a", + info.brandCheckIdentifier, + info.kind, info.getterName ); - case PrivateIdentifierPlacement.StaticField: - return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( - receiver, - info.classConstructor, - undefined, - info.variableName - ); - case PrivateIdentifierPlacement.StaticMethod: - return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( - receiver, - info.classConstructor, - "m", - info.functionName - ); - case PrivateIdentifierPlacement.StaticGetterOnly: - case PrivateIdentifierPlacement.StaticGetterAndSetter: + case PrivateIdentifierKind.Method: return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, - info.classConstructor, - "a", - info.getterName + info.brandCheckIdentifier, + info.kind, + info.methodName ); - case PrivateIdentifierPlacement.StaticSetterOnly: + case PrivateIdentifierKind.Field: return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, - info.classConstructor, - "a" + info.brandCheckIdentifier, + info.kind, + info.variableName ); - default: return Debug.fail("Unexpected private identifier placement"); + default: + Debug.assertNever(info, "Unknown private element type"); } } @@ -609,68 +549,33 @@ namespace ts { ); } - switch (info.placement) { - case PrivateIdentifierPlacement.InstanceField: + switch(info.kind) { + case PrivateIdentifierKind.Accessor: return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, - info.weakMapName, - right - ); - case PrivateIdentifierPlacement.InstanceMethod: - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( - receiver, - info.weakSetName, + info.brandCheckIdentifier, right, - "m" + info.kind, + info.setterName ); - case PrivateIdentifierPlacement.InstanceGetterOnly: + case PrivateIdentifierKind.Method: return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, - info.weakSetName, + info.brandCheckIdentifier, right, - "a" + info.kind, + /* f */ undefined ); - case PrivateIdentifierPlacement.InstanceSetterOnly: - case PrivateIdentifierPlacement.InstanceGetterAndSetter: + case PrivateIdentifierKind.Field: return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, - info.weakSetName, + info.brandCheckIdentifier, right, - "a", - info.setterName, - ); - case PrivateIdentifierPlacement.StaticField: - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( - receiver, - info.classConstructor, - right, - undefined, - info.variableName, - ); - case PrivateIdentifierPlacement.StaticMethod: - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( - receiver, - info.classConstructor, - right, - "m", - ); - case PrivateIdentifierPlacement.StaticGetterOnly: - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( - receiver, - info.classConstructor, - right, - "a", - ); - case PrivateIdentifierPlacement.StaticSetterOnly: - case PrivateIdentifierPlacement.StaticGetterAndSetter: - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( - receiver, - info.classConstructor, - right, - "a", - info.setterName, + info.kind, + info.variableName ); - default: return Debug.fail("Unexpected private identifier placement"); + default: + Debug.assertNever(info, "Unknown private element type"); } } @@ -1073,22 +978,23 @@ namespace ts { if (shouldTransformPrivateElements && isPrivateIdentifier(propertyName)) { const privateIdentifierInfo = accessPrivateIdentifier(propertyName); if (privateIdentifierInfo) { - switch (privateIdentifierInfo.placement) { - case PrivateIdentifierPlacement.InstanceField: { + if (privateIdentifierInfo.kind === PrivateIdentifierKind.Field) { + if (!privateIdentifierInfo.isStatic) { return createPrivateInstanceFieldInitializer( receiver, visitNode(property.initializer, visitor, isExpression), - privateIdentifierInfo.weakMapName + privateIdentifierInfo.brandCheckIdentifier ); } - case PrivateIdentifierPlacement.StaticField: { + else { return createPrivateStaticFieldInitializer( privateIdentifierInfo.variableName, visitNode(property.initializer, visitor, isExpression) ); } - default: - return undefined; + } + else { + return undefined; } } else { @@ -1257,60 +1163,57 @@ namespace ts { const text = getTextOfPropertyName(node.name) as string; const env = getPrivateIdentifierEnvironment(); const { weakSetName, classConstructor } = env; - let info: PrivateIdentifierInfo; const assignmentExpressions: Expression[] = []; if (hasStaticModifier(node)) { Debug.assert(classConstructor, "weakSetName should be set in private identifier environment"); if (isPropertyDeclaration(node)) { const variableName = createHoistedVariableForPrivateName(text, node); - info = { - placement: PrivateIdentifierPlacement.StaticField, + env.identifiers.set(node.name.escapedText, { + kind: PrivateIdentifierKind.Field, variableName, - classConstructor - }; + brandCheckIdentifier: classConstructor, + isStatic: true, + }); } else if (isMethodDeclaration(node)) { const functionName = createHoistedVariableForPrivateName(text, node); - info = { - placement: PrivateIdentifierPlacement.StaticMethod, - functionName, - classConstructor - }; + env.identifiers.set(node.name.escapedText, { + kind: PrivateIdentifierKind.Method, + methodName: functionName, + brandCheckIdentifier: classConstructor, + isStatic: true, + }); } else if (isGetAccessorDeclaration(node)) { const getterName = createHoistedVariableForPrivateName(text + "_get", node); const previousInfo = env.identifiers.get(node.name.escapedText); - if (previousInfo?.placement === PrivateIdentifierPlacement.StaticSetterOnly) { - info = { - ...previousInfo, - placement: PrivateIdentifierPlacement.StaticGetterAndSetter, - getterName, - }; + if (previousInfo?.kind === PrivateIdentifierKind.Accessor) { + previousInfo.getterName = getterName; } else { - info = { - placement: PrivateIdentifierPlacement.StaticGetterOnly, + env.identifiers.set(node.name.escapedText, { + kind: PrivateIdentifierKind.Accessor, getterName, - classConstructor - }; + setterName: undefined, + brandCheckIdentifier: classConstructor, + isStatic: true, + }); } } else if (isSetAccessorDeclaration(node)) { const setterName = createHoistedVariableForPrivateName(text + "_set", node); const previousInfo = env.identifiers.get(node.name.escapedText); - if (previousInfo?.placement === PrivateIdentifierPlacement.StaticGetterOnly) { - info = { - ...previousInfo, - placement: PrivateIdentifierPlacement.StaticGetterAndSetter, - setterName, - }; + if (previousInfo?.kind === PrivateIdentifierKind.Accessor) { + previousInfo.setterName = setterName; } else { - info = { - placement: PrivateIdentifierPlacement.StaticSetterOnly, + env.identifiers.set(node.name.escapedText, { + kind: PrivateIdentifierKind.Accessor, + getterName: undefined, setterName, - classConstructor - }; + brandCheckIdentifier: classConstructor, + isStatic: true, + }); } } else { @@ -1319,10 +1222,12 @@ namespace ts { } else if (isPropertyDeclaration(node)) { const weakMapName = createHoistedVariableForPrivateName(text, node); - info = { - placement: PrivateIdentifierPlacement.InstanceField, - weakMapName, - }; + env.identifiers.set(node.name.escapedText, { + kind: PrivateIdentifierKind.Field, + brandCheckIdentifier: weakMapName, + isStatic: false, + variableName: undefined + }); assignmentExpressions.push(factory.createAssignment( weakMapName, @@ -1336,11 +1241,12 @@ namespace ts { else if (isMethodDeclaration(node)) { Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); - info = { - placement: PrivateIdentifierPlacement.InstanceMethod, - weakSetName, - functionName: createHoistedVariableForPrivateName(text, node), - }; + env.identifiers.set(node.name.escapedText, { + kind: PrivateIdentifierKind.Method, + methodName: createHoistedVariableForPrivateName(text, node), + brandCheckIdentifier: weakSetName, + isStatic: false, + }); } else if (isAccessor(node)) { Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); @@ -1349,39 +1255,33 @@ namespace ts { if (isGetAccessor(node)) { const getterName = createHoistedVariableForPrivateName(text + "_get", node); - if (previousInfo?.placement === PrivateIdentifierPlacement.InstanceSetterOnly) { - info = { - placement: PrivateIdentifierPlacement.InstanceGetterAndSetter, - weakSetName, - getterName, - setterName: previousInfo.setterName - }; + if (previousInfo?.kind === PrivateIdentifierKind.Accessor) { + previousInfo.getterName = getterName; } else { - info = { - placement: PrivateIdentifierPlacement.InstanceGetterOnly, - weakSetName, - getterName - }; + env.identifiers.set(node.name.escapedText, { + kind: PrivateIdentifierKind.Accessor, + getterName, + setterName: undefined, + brandCheckIdentifier: weakSetName, + isStatic: false, + }); } } else { const setterName = createHoistedVariableForPrivateName(text + "_set", node); - if (previousInfo?.placement === PrivateIdentifierPlacement.InstanceGetterOnly) { - info = { - placement: PrivateIdentifierPlacement.InstanceGetterAndSetter, - weakSetName, - setterName, - getterName: previousInfo.getterName - }; + if (previousInfo?.kind === PrivateIdentifierKind.Accessor) { + previousInfo.setterName = setterName; } else { - info = { - placement: PrivateIdentifierPlacement.InstanceSetterOnly, - weakSetName, - setterName - }; + env.identifiers.set(node.name.escapedText, { + kind: PrivateIdentifierKind.Accessor, + getterName: undefined, + setterName, + brandCheckIdentifier: weakSetName, + isStatic: false, + }); } } } @@ -1389,7 +1289,6 @@ namespace ts { Debug.assertNever(node, "Unknown class element type."); } - env.identifiers.set(node.name.escapedText, info); getPendingExpressions().push(...assignmentExpressions); } diff --git a/tests/baselines/reference/importHelpersES6.js b/tests/baselines/reference/importHelpersES6.js index a93ecc8c0281b..3137f21da06f8 100644 --- a/tests/baselines/reference/importHelpersES6.js +++ b/tests/baselines/reference/importHelpersES6.js @@ -27,7 +27,7 @@ let A = class A { _A_x.set(this, 1); } f() { - return __awaiter(this, void 0, void 0, function* () { __classPrivateFieldSet(this, _A_x, yield __classPrivateFieldGet(this, _A_x)); }); + return __awaiter(this, void 0, void 0, function* () { __classPrivateFieldSet(this, _A_x, yield __classPrivateFieldGet(this, _A_x, "f"), "f"); }); } }; _A_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index 8d2a35e26e0f5..210f8cceb9478 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -40,27 +40,27 @@ class A { _A_foo.set(this, true); } method(thing) { - __classPrivateFieldGet(thing, _A_foo); // OK + __classPrivateFieldGet(thing, _A_foo, "f"); // OK __classPrivateFieldGet(thing, _a, "m", _A_m).call(// OK thing); - __classPrivateFieldGet(thing, _a, void 0, _A_baz); + __classPrivateFieldGet(thing, _a, "f", _A_baz); thing.; // Error - __classPrivateFieldGet(thing, _A_foo).call(// Error + __classPrivateFieldGet(thing, _A_foo, "f").call(// Error thing); } methodU(thing) { - __classPrivateFieldGet(thing, _A_foo); + __classPrivateFieldGet(thing, _A_foo, "f"); __classPrivateFieldGet(thing, _a, "m", _A_m).call(thing); - __classPrivateFieldGet(thing, _a, void 0, _A_baz); + __classPrivateFieldGet(thing, _a, "f", _A_baz); thing.; - __classPrivateFieldGet(thing, _A_foo).call(thing); + __classPrivateFieldGet(thing, _A_foo, "f").call(thing); } methodN(thing) { - __classPrivateFieldGet(thing, _A_foo); + __classPrivateFieldGet(thing, _A_foo, "f"); __classPrivateFieldGet(thing, _a, "m", _A_m).call(thing); - __classPrivateFieldGet(thing, _a, void 0, _A_baz); + __classPrivateFieldGet(thing, _a, "f", _A_baz); thing.; - __classPrivateFieldGet(thing, _A_foo).call(thing); + __classPrivateFieldGet(thing, _A_foo, "f").call(thing); } } _a = A, _A_foo = new WeakMap(), _A_m = function _A_m() { }; diff --git a/tests/baselines/reference/privateNameAndObjectRestSpread.js b/tests/baselines/reference/privateNameAndObjectRestSpread.js index 40578d864c3e3..64247610dfd91 100644 --- a/tests/baselines/reference/privateNameAndObjectRestSpread.js +++ b/tests/baselines/reference/privateNameAndObjectRestSpread.js @@ -41,13 +41,13 @@ class C { } method(other) { const obj = Object.assign({}, other); - __classPrivateFieldGet(obj, _C_prop); + __classPrivateFieldGet(obj, _C_prop, "f"); const rest = __rest(other, []); - __classPrivateFieldGet(rest, _C_prop); + __classPrivateFieldGet(rest, _C_prop, "f"); const statics = Object.assign({}, C); - __classPrivateFieldGet(statics, _a, void 0, _C_propStatic); + __classPrivateFieldGet(statics, _a, "f", _C_propStatic); const sRest = __rest(C, []); - __classPrivateFieldGet(sRest, _a, void 0, _C_propStatic); + __classPrivateFieldGet(sRest, _a, "f", _C_propStatic); } } _a = C, _C_prop = new WeakMap(); diff --git a/tests/baselines/reference/privateNameBadAssignment.js b/tests/baselines/reference/privateNameBadAssignment.js index 6dfdb911e3745..aad5f192333bc 100644 --- a/tests/baselines/reference/privateNameBadAssignment.js +++ b/tests/baselines/reference/privateNameBadAssignment.js @@ -32,7 +32,7 @@ B. = 3; // Error (outside class body) class C { constructor() { _C_bar.set(this, 6); - __classPrivateFieldSet(exports, _C_bar, 6); // Error + __classPrivateFieldSet(exports, _C_bar, 6, "f"); // Error this. = 3; // Error (undeclared) } } diff --git a/tests/baselines/reference/privateNameCircularReference.js b/tests/baselines/reference/privateNameCircularReference.js index 731447f0a43dc..a88e94a11ef8b 100644 --- a/tests/baselines/reference/privateNameCircularReference.js +++ b/tests/baselines/reference/privateNameCircularReference.js @@ -16,8 +16,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _A_foo, _A_bar; class A { constructor() { - _A_foo.set(this, __classPrivateFieldGet(this, _A_bar)); - _A_bar.set(this, __classPrivateFieldGet(this, _A_foo)); + _A_foo.set(this, __classPrivateFieldGet(this, _A_bar, "f")); + _A_bar.set(this, __classPrivateFieldGet(this, _A_foo, "f")); this["#baz"] = this["#baz"]; // Error (should *not* be private name error) } } diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js index 60c0aae5b378d..ce7464a5541ec 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js @@ -57,18 +57,18 @@ class A { _A_c.set(this, 'c'); _A_d.set(this, void 0); _A_e.set(this, ''); - __classPrivateFieldSet(this, _A_b, 'b'); - __classPrivateFieldSet(this, _A_d, 'd'); + __classPrivateFieldSet(this, _A_b, 'b', "f"); + __classPrivateFieldSet(this, _A_d, 'd', "f"); } test() { const data = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; - const { [__classPrivateFieldGet(this, _A_a)]: a, [__classPrivateFieldGet(this, _A_b)]: b, [__classPrivateFieldGet(this, _A_c)]: c, [__classPrivateFieldGet(this, _A_d)]: d, [__classPrivateFieldSet(this, _A_e, 'e')]: e, } = data; + const { [__classPrivateFieldGet(this, _A_a, "f")]: a, [__classPrivateFieldGet(this, _A_b, "f")]: b, [__classPrivateFieldGet(this, _A_c, "f")]: c, [__classPrivateFieldGet(this, _A_d, "f")]: d, [__classPrivateFieldSet(this, _A_e, 'e', "f")]: e, } = data; console.log(a, b, c, d, e); - const a1 = data[__classPrivateFieldGet(this, _A_a)]; - const b1 = data[__classPrivateFieldGet(this, _A_b)]; - const c1 = data[__classPrivateFieldGet(this, _A_c)]; - const d1 = data[__classPrivateFieldGet(this, _A_d)]; - const e1 = data[__classPrivateFieldGet(this, _A_e)]; + const a1 = data[__classPrivateFieldGet(this, _A_a, "f")]; + const b1 = data[__classPrivateFieldGet(this, _A_b, "f")]; + const c1 = data[__classPrivateFieldGet(this, _A_c, "f")]; + const d1 = data[__classPrivateFieldGet(this, _A_d, "f")]; + const e1 = data[__classPrivateFieldGet(this, _A_e, "f")]; console.log(a1, b1, c1, d1); } } diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js index f1c2f488c88f6..248d8203636d6 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js @@ -21,6 +21,6 @@ class A { constructor() { _A_x.set(this, 100); } - [(_A_x = new WeakMap(), (getX = (a) => __classPrivateFieldGet(a, _A_x), "_"))]() { } + [(_A_x = new WeakMap(), (getX = (a) => __classPrivateFieldGet(a, _A_x, "f"), "_"))]() { } } console.log(getX(new A)); diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js index 931acdae9fc35..03fc2a9272b21 100644 --- a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js @@ -40,7 +40,7 @@ var _Foo_name; class Foo { constructor(name) { _Foo_name.set(this, void 0); - __classPrivateFieldSet(this, _Foo_name, name); + __classPrivateFieldSet(this, _Foo_name, name, "f"); } getValue(x) { var _Bar_y; @@ -49,11 +49,11 @@ class Foo { constructor() { _Bar_y.set(this, 100); } - [(_Bar_y = new WeakMap(), __classPrivateFieldGet(obj, _Foo_name))]() { - return x + __classPrivateFieldGet(this, _Bar_y); + [(_Bar_y = new WeakMap(), __classPrivateFieldGet(obj, _Foo_name, "f"))]() { + return x + __classPrivateFieldGet(this, _Bar_y, "f"); } } - return new Bar()[__classPrivateFieldGet(obj, _Foo_name)](); + return new Bar()[__classPrivateFieldGet(obj, _Foo_name, "f")](); } } _Foo_name = new WeakMap(); diff --git a/tests/baselines/reference/privateNameConstructorSignature.js b/tests/baselines/reference/privateNameConstructorSignature.js index 897e2ae76041a..e7c07e2316542 100644 --- a/tests/baselines/reference/privateNameConstructorSignature.js +++ b/tests/baselines/reference/privateNameConstructorSignature.js @@ -30,7 +30,7 @@ class C { _C_x.set(this, void 0); } static test() { - __classPrivateFieldSet(new C(), _C_x, 10); + __classPrivateFieldSet(new C(), _C_x, 10, "f"); const y = new C(); const z = new y(); z.x = 123; diff --git a/tests/baselines/reference/privateNameDeclarationMerging.js b/tests/baselines/reference/privateNameDeclarationMerging.js index a55b1a7336dd8..28b2a1f6b8e13 100644 --- a/tests/baselines/reference/privateNameDeclarationMerging.js +++ b/tests/baselines/reference/privateNameDeclarationMerging.js @@ -31,9 +31,9 @@ class C { } foo() { const c = new C(); - __classPrivateFieldGet(c, _C_x); // OK + __classPrivateFieldGet(c, _C_x, "f"); // OK const d = new C(); - __classPrivateFieldGet(d, _C_x); // Error + __classPrivateFieldGet(d, _C_x, "f"); // Error } } _C_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index 24ef61f637011..255fb235ecc1c 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -582,7 +582,7 @@ function Getter() { _A_Getter_StaticSetter_instances.add(this); } } - _d = A_Getter_StaticSetter, _A_Getter_StaticSetter_instances = new WeakSet(), _A_Getter_StaticSetter_foo_set = function _A_Getter_StaticSetter_foo_set(value) { }; + _d = A_Getter_StaticSetter, _A_Getter_StaticSetter_instances = new WeakSet(), _A_Getter_StaticSetter_foo_get = function _A_Getter_StaticSetter_foo_get() { return ""; }, _A_Getter_StaticSetter_foo_set = function _A_Getter_StaticSetter_foo_set(value) { }; } function Setter() { var _A_Setter_Field_instances, _A_Setter_Field_foo_set, _A_Setter_Field_foo, _A_Setter_Method_instances, _A_Setter_Method_foo_set, _A_Setter_Method_foo, _A_Setter_Getter_instances, _A_Setter_Getter_foo_set, _A_Setter_Getter_foo_get, _A_Setter_Setter_instances, _A_Setter_Setter_foo_set, _A_Setter_Setter_foo_set_1, _A_Setter_StaticField_instances, _a, _A_Setter_StaticField_foo_set, _A_Setter_StaticField_foo, _A_Setter_StaticMethod_instances, _b, _A_Setter_StaticMethod_foo_set, _A_Setter_StaticMethod_foo, _A_Setter_StaticGetter_instances, _c, _A_Setter_StaticGetter_foo_set, _A_Setter_StaticGetter_foo_get, _A_Setter_StaticSetter_instances, _d, _A_Setter_StaticSetter_foo_set, _A_Setter_StaticSetter_foo_set_1; @@ -636,7 +636,7 @@ function Setter() { _A_Setter_StaticGetter_instances.add(this); } } - _c = A_Setter_StaticGetter, _A_Setter_StaticGetter_instances = new WeakSet(), _A_Setter_StaticGetter_foo_get = function _A_Setter_StaticGetter_foo_get() { return ""; }; + _c = A_Setter_StaticGetter, _A_Setter_StaticGetter_instances = new WeakSet(), _A_Setter_StaticGetter_foo_set = function _A_Setter_StaticGetter_foo_set(value) { }, _A_Setter_StaticGetter_foo_get = function _A_Setter_StaticGetter_foo_get() { return ""; }; // Error class A_Setter_StaticSetter { constructor() { @@ -772,7 +772,7 @@ function StaticGetter() { _A_StaticGetter_Setter_instances.add(this); } } - _d = A_StaticGetter_Setter, _A_StaticGetter_Setter_instances = new WeakSet(), _A_StaticGetter_Setter_foo_set = function _A_StaticGetter_Setter_foo_set(value) { }; + _d = A_StaticGetter_Setter, _A_StaticGetter_Setter_instances = new WeakSet(), _A_StaticGetter_Setter_foo_get = function _A_StaticGetter_Setter_foo_get() { return ""; }, _A_StaticGetter_Setter_foo_set = function _A_StaticGetter_Setter_foo_set(value) { }; // Error class A_StaticGetter_StaticField { } @@ -812,7 +812,7 @@ function StaticSetter() { _A_StaticSetter_Getter_instances.add(this); } } - _c = A_StaticSetter_Getter, _A_StaticSetter_Getter_instances = new WeakSet(), _A_StaticSetter_Getter_foo_get = function _A_StaticSetter_Getter_foo_get() { return ""; }; + _c = A_StaticSetter_Getter, _A_StaticSetter_Getter_instances = new WeakSet(), _A_StaticSetter_Getter_foo_set = function _A_StaticSetter_Getter_foo_set(value) { }, _A_StaticSetter_Getter_foo_get = function _A_StaticSetter_Getter_foo_get() { return ""; }; // Error class A_StaticSetter_Setter { constructor() { diff --git a/tests/baselines/reference/privateNameField.js b/tests/baselines/reference/privateNameField.js index b070508ba3557..cf1da2bfb3f78 100644 --- a/tests/baselines/reference/privateNameField.js +++ b/tests/baselines/reference/privateNameField.js @@ -19,7 +19,7 @@ var _A_name; class A { constructor(name) { _A_name.set(this, void 0); - __classPrivateFieldSet(this, _A_name, name); + __classPrivateFieldSet(this, _A_name, name, "f"); } } _A_name = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldAccess.js b/tests/baselines/reference/privateNameFieldAccess.js index bb50afdef80e9..c6cb80234ec09 100644 --- a/tests/baselines/reference/privateNameFieldAccess.js +++ b/tests/baselines/reference/privateNameFieldAccess.js @@ -17,7 +17,7 @@ var _A_myField; class A { constructor() { _A_myField.set(this, "hello world"); - console.log(__classPrivateFieldGet(this, _A_myField)); + console.log(__classPrivateFieldGet(this, _A_myField, "f")); } } _A_myField = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldAssignment.js b/tests/baselines/reference/privateNameFieldAssignment.js index e264a767fc821..86d8d6fed8214 100644 --- a/tests/baselines/reference/privateNameFieldAssignment.js +++ b/tests/baselines/reference/privateNameFieldAssignment.js @@ -52,32 +52,32 @@ class A { constructor() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; _A_field.set(this, 0); - __classPrivateFieldSet(this, _A_field, 1); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) + 2); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) - 3); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) / 4); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) * 5); - __classPrivateFieldSet(this, _A_field, Math.pow(__classPrivateFieldGet(this, _A_field), 6)); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) % 7); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) << 8); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) >> 9); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) >>> 10); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) & 11); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) | 12); - __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field) ^ 13); - __classPrivateFieldSet(A.getInstance(), _A_field, 1); - __classPrivateFieldSet(_a = A.getInstance(), _A_field, __classPrivateFieldGet(_a, _A_field) + 2); - __classPrivateFieldSet(_b = A.getInstance(), _A_field, __classPrivateFieldGet(_b, _A_field) - 3); - __classPrivateFieldSet(_c = A.getInstance(), _A_field, __classPrivateFieldGet(_c, _A_field) / 4); - __classPrivateFieldSet(_d = A.getInstance(), _A_field, __classPrivateFieldGet(_d, _A_field) * 5); - __classPrivateFieldSet(_e = A.getInstance(), _A_field, Math.pow(__classPrivateFieldGet(_e, _A_field), 6)); - __classPrivateFieldSet(_f = A.getInstance(), _A_field, __classPrivateFieldGet(_f, _A_field) % 7); - __classPrivateFieldSet(_g = A.getInstance(), _A_field, __classPrivateFieldGet(_g, _A_field) << 8); - __classPrivateFieldSet(_h = A.getInstance(), _A_field, __classPrivateFieldGet(_h, _A_field) >> 9); - __classPrivateFieldSet(_j = A.getInstance(), _A_field, __classPrivateFieldGet(_j, _A_field) >>> 10); - __classPrivateFieldSet(_k = A.getInstance(), _A_field, __classPrivateFieldGet(_k, _A_field) & 11); - __classPrivateFieldSet(_l = A.getInstance(), _A_field, __classPrivateFieldGet(_l, _A_field) | 12); - __classPrivateFieldSet(_m = A.getInstance(), _A_field, __classPrivateFieldGet(_m, _A_field) ^ 13); + __classPrivateFieldSet(this, _A_field, 1, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") + 2, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") - 3, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") / 4, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") * 5, "f"); + __classPrivateFieldSet(this, _A_field, Math.pow(__classPrivateFieldGet(this, _A_field, "f"), 6), "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") % 7, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") << 8, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") >> 9, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") >>> 10, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") & 11, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") | 12, "f"); + __classPrivateFieldSet(this, _A_field, __classPrivateFieldGet(this, _A_field, "f") ^ 13, "f"); + __classPrivateFieldSet(A.getInstance(), _A_field, 1, "f"); + __classPrivateFieldSet(_a = A.getInstance(), _A_field, __classPrivateFieldGet(_a, _A_field, "f") + 2, "f"); + __classPrivateFieldSet(_b = A.getInstance(), _A_field, __classPrivateFieldGet(_b, _A_field, "f") - 3, "f"); + __classPrivateFieldSet(_c = A.getInstance(), _A_field, __classPrivateFieldGet(_c, _A_field, "f") / 4, "f"); + __classPrivateFieldSet(_d = A.getInstance(), _A_field, __classPrivateFieldGet(_d, _A_field, "f") * 5, "f"); + __classPrivateFieldSet(_e = A.getInstance(), _A_field, Math.pow(__classPrivateFieldGet(_e, _A_field, "f"), 6), "f"); + __classPrivateFieldSet(_f = A.getInstance(), _A_field, __classPrivateFieldGet(_f, _A_field, "f") % 7, "f"); + __classPrivateFieldSet(_g = A.getInstance(), _A_field, __classPrivateFieldGet(_g, _A_field, "f") << 8, "f"); + __classPrivateFieldSet(_h = A.getInstance(), _A_field, __classPrivateFieldGet(_h, _A_field, "f") >> 9, "f"); + __classPrivateFieldSet(_j = A.getInstance(), _A_field, __classPrivateFieldGet(_j, _A_field, "f") >>> 10, "f"); + __classPrivateFieldSet(_k = A.getInstance(), _A_field, __classPrivateFieldGet(_k, _A_field, "f") & 11, "f"); + __classPrivateFieldSet(_l = A.getInstance(), _A_field, __classPrivateFieldGet(_l, _A_field, "f") | 12, "f"); + __classPrivateFieldSet(_m = A.getInstance(), _A_field, __classPrivateFieldGet(_m, _A_field, "f") ^ 13, "f"); } static getInstance() { return new A(); diff --git a/tests/baselines/reference/privateNameFieldCallExpression.js b/tests/baselines/reference/privateNameFieldCallExpression.js index 956b43152a0d9..07eb4455d03d7 100644 --- a/tests/baselines/reference/privateNameFieldCallExpression.js +++ b/tests/baselines/reference/privateNameFieldCallExpression.js @@ -36,16 +36,16 @@ class A { test() { var _a; var _b; - __classPrivateFieldGet(this, _A_fieldFunc).call(this); - (_a = __classPrivateFieldGet(this, _A_fieldFunc)) === null || _a === void 0 ? void 0 : _a.call(this); - const func = __classPrivateFieldGet(this, _A_fieldFunc); + __classPrivateFieldGet(this, _A_fieldFunc, "f").call(this); + (_a = __classPrivateFieldGet(this, _A_fieldFunc, "f")) === null || _a === void 0 ? void 0 : _a.call(this); + const func = __classPrivateFieldGet(this, _A_fieldFunc, "f"); func(); - new (__classPrivateFieldGet(this, _A_fieldFunc))(); + new (__classPrivateFieldGet(this, _A_fieldFunc, "f"))(); const arr = [1, 2]; - __classPrivateFieldGet(this, _A_fieldFunc2).call(this, 0, ...arr, 3); - const b = new (__classPrivateFieldGet(this, _A_fieldFunc2))(0, ...arr, 3); - const str = __classPrivateFieldGet(this, _A_fieldFunc2).bind(this) `head${1}middle${2}tail`; - __classPrivateFieldGet((_b = this.getInstance()), _A_fieldFunc2).bind(_b) `test${1}and${2}`; + __classPrivateFieldGet(this, _A_fieldFunc2, "f").call(this, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(this, _A_fieldFunc2, "f"))(0, ...arr, 3); + const str = __classPrivateFieldGet(this, _A_fieldFunc2, "f").bind(this) `head${1}middle${2}tail`; + __classPrivateFieldGet((_b = this.getInstance()), _A_fieldFunc2, "f").bind(_b) `test${1}and${2}`; } getInstance() { return new A(); } } diff --git a/tests/baselines/reference/privateNameFieldDerivedClasses.js b/tests/baselines/reference/privateNameFieldDerivedClasses.js index 5b7d8adb9287b..a469e47df30b1 100644 --- a/tests/baselines/reference/privateNameFieldDerivedClasses.js +++ b/tests/baselines/reference/privateNameFieldDerivedClasses.js @@ -25,7 +25,7 @@ class Base { _Base_prop.set(this, 123); } static method(x) { - console.log(__classPrivateFieldGet(x, _Base_prop)); + console.log(__classPrivateFieldGet(x, _Base_prop, "f")); } } _Base_prop = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js b/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js index d7ae4ace24f10..e81cf2550e0a0 100644 --- a/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js +++ b/tests/baselines/reference/privateNameFieldDestructuredBinding(target=es2015).js @@ -38,13 +38,13 @@ class A { _A_field.set(this, 1); this.otherObject = new A(); let y; - (_b = this, { x: ({ set value(_m) { __classPrivateFieldSet(_b, _A_field, _m); } }).value, y } = this.testObject()); - (_c = this, [({ set value(_m) { __classPrivateFieldSet(_c, _A_field, _m); } }).value, y] = this.testArray()); - (_d = this, _e = this, { a: ({ set value(_m) { __classPrivateFieldSet(_d, _A_field, _m); } }).value, b: [({ set value(_m) { __classPrivateFieldSet(_e, _A_field, _m); } }).value] } = { a: 1, b: [2] }); - _f = this, _g = this, [({ set value(_m) { __classPrivateFieldSet(_f, _A_field, _m); } }).value, [({ set value(_m) { __classPrivateFieldSet(_g, _A_field, _m); } }).value]] = [1, [2]]; - (_h = this, _j = this, { a: ({ set value(_m) { __classPrivateFieldSet(_h, _A_field, _m); } }).value = 1, b: [({ set value(_m) { __classPrivateFieldSet(_j, _A_field, _m); } }).value = 1] } = { b: [] }); - _k = this, [({ set value(_m) { __classPrivateFieldSet(_k, _A_field, _m); } }).value = 2] = []; - _l = this.otherObject, [({ set value(_m) { __classPrivateFieldSet(_l, _A_field, _m); } }).value = 2] = []; + (_b = this, { x: ({ set value(_m) { __classPrivateFieldSet(_b, _A_field, _m, "f"); } }).value, y } = this.testObject()); + (_c = this, [({ set value(_m) { __classPrivateFieldSet(_c, _A_field, _m, "f"); } }).value, y] = this.testArray()); + (_d = this, _e = this, { a: ({ set value(_m) { __classPrivateFieldSet(_d, _A_field, _m, "f"); } }).value, b: [({ set value(_m) { __classPrivateFieldSet(_e, _A_field, _m, "f"); } }).value] } = { a: 1, b: [2] }); + _f = this, _g = this, [({ set value(_m) { __classPrivateFieldSet(_f, _A_field, _m, "f"); } }).value, [({ set value(_m) { __classPrivateFieldSet(_g, _A_field, _m, "f"); } }).value]] = [1, [2]]; + (_h = this, _j = this, { a: ({ set value(_m) { __classPrivateFieldSet(_h, _A_field, _m, "f"); } }).value = 1, b: [({ set value(_m) { __classPrivateFieldSet(_j, _A_field, _m, "f"); } }).value = 1] } = { b: [] }); + _k = this, [({ set value(_m) { __classPrivateFieldSet(_k, _A_field, _m, "f"); } }).value = 2] = []; + _l = this.otherObject, [({ set value(_m) { __classPrivateFieldSet(_l, _A_field, _m, "f"); } }).value = 2] = []; } testObject() { return { x: 10, y: 6 }; @@ -53,7 +53,7 @@ class A { return [10, 11]; } static test(_a) { - [({ set value(_b) { __classPrivateFieldSet(_a, _A_field, _b); } }).value] = [2]; + [({ set value(_b) { __classPrivateFieldSet(_a, _A_field, _b, "f"); } }).value] = [2]; } } _A_field = new WeakMap(); diff --git a/tests/baselines/reference/privateNameFieldUnaryMutation.js b/tests/baselines/reference/privateNameFieldUnaryMutation.js index 0ea369296adac..5ff58fdd5d68a 100644 --- a/tests/baselines/reference/privateNameFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameFieldUnaryMutation.js @@ -46,29 +46,29 @@ class C { constructor() { var _a, _b; _C_test.set(this, 24); - __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1); - __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) - 1); - __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1); - __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) - 1); - const a = (__classPrivateFieldSet(this, _C_test, (_a = +__classPrivateFieldGet(this, _C_test)) + 1), _a); - const b = (__classPrivateFieldSet(this, _C_test, (_b = +__classPrivateFieldGet(this, _C_test)) - 1), _b); - const c = __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1); - const d = __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) - 1); - for (__classPrivateFieldSet(this, _C_test, 0); __classPrivateFieldGet(this, _C_test) < 10; __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1)) { } - for (__classPrivateFieldSet(this, _C_test, 0); __classPrivateFieldGet(this, _C_test) < 10; __classPrivateFieldSet(this, _C_test, +__classPrivateFieldGet(this, _C_test) + 1)) { } + __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")) { } } test() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; - __classPrivateFieldSet(_a = this.getInstance(), _C_test, +__classPrivateFieldGet(_a, _C_test) + 1); - __classPrivateFieldSet(_b = this.getInstance(), _C_test, +__classPrivateFieldGet(_b, _C_test) - 1); - __classPrivateFieldSet(_c = this.getInstance(), _C_test, +__classPrivateFieldGet(_c, _C_test) + 1); - __classPrivateFieldSet(_d = this.getInstance(), _C_test, +__classPrivateFieldGet(_d, _C_test) - 1); - const a = (__classPrivateFieldSet(_e = this.getInstance(), _C_test, (_f = +__classPrivateFieldGet(_e, _C_test)) + 1), _f); - const b = (__classPrivateFieldSet(_g = this.getInstance(), _C_test, (_h = +__classPrivateFieldGet(_g, _C_test)) - 1), _h); - const c = __classPrivateFieldSet(_j = this.getInstance(), _C_test, +__classPrivateFieldGet(_j, _C_test) + 1); - const d = __classPrivateFieldSet(_k = this.getInstance(), _C_test, +__classPrivateFieldGet(_k, _C_test) - 1); - for (__classPrivateFieldSet(this.getInstance(), _C_test, 0); __classPrivateFieldGet(this.getInstance(), _C_test) < 10; __classPrivateFieldSet(_l = this.getInstance(), _C_test, +__classPrivateFieldGet(_l, _C_test) + 1)) { } - for (__classPrivateFieldSet(this.getInstance(), _C_test, 0); __classPrivateFieldGet(this.getInstance(), _C_test) < 10; __classPrivateFieldSet(_m = this.getInstance(), _C_test, +__classPrivateFieldGet(_m, _C_test) + 1)) { } + __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")) { } } getInstance() { return new C(); } } diff --git a/tests/baselines/reference/privateNameInLhsReceiverExpression.js b/tests/baselines/reference/privateNameInLhsReceiverExpression.js index f335acb32c029..91dc82f992e8c 100644 --- a/tests/baselines/reference/privateNameInLhsReceiverExpression.js +++ b/tests/baselines/reference/privateNameInLhsReceiverExpression.js @@ -35,7 +35,7 @@ class Test { } }, _x = new WeakMap(), - _a)).s], _Test_y, 1); + _a)).s], _Test_y, 1, "f"); __classPrivateFieldSet(_c = obj[(new (_b = class { constructor() { _x_1.set(this, 1); @@ -43,7 +43,7 @@ class Test { } }, _x_1 = new WeakMap(), - _b)).s], _Test_y, __classPrivateFieldGet(_c, _Test_y) + 1); + _b)).s], _Test_y, __classPrivateFieldGet(_c, _Test_y, "f") + 1, "f"); } } _Test_y = new WeakMap(); diff --git a/tests/baselines/reference/privateNameMethodClassExpression.js b/tests/baselines/reference/privateNameMethodClassExpression.js index 08bee9225835e..85523a2af7e2d 100644 --- a/tests/baselines/reference/privateNameMethodClassExpression.js +++ b/tests/baselines/reference/privateNameMethodClassExpression.js @@ -25,7 +25,7 @@ const C = (_a = class { _C_field.set(this, __classPrivateFieldGet(this, _C_instances, "m", _C_method).call(this)); } static getInstance() { return new C(); } - getField() { return __classPrivateFieldGet(this, _C_field); } + getField() { return __classPrivateFieldGet(this, _C_field, "f"); } ; }, _C_field = new WeakMap(), diff --git a/tests/baselines/reference/privateNameNestedClassFieldShadowing.js b/tests/baselines/reference/privateNameNestedClassFieldShadowing.js index 598acfb16a403..f717f1d1801cc 100644 --- a/tests/baselines/reference/privateNameNestedClassFieldShadowing.js +++ b/tests/baselines/reference/privateNameNestedClassFieldShadowing.js @@ -31,10 +31,10 @@ class Base { _Derived_x.set(this, void 0); } testBase(x) { - console.log(__classPrivateFieldGet(x, _Derived_x)); + console.log(__classPrivateFieldGet(x, _Derived_x, "f")); } testDerived(x) { - console.log(__classPrivateFieldGet(x, _Derived_x)); + console.log(__classPrivateFieldGet(x, _Derived_x, "f")); } } _Derived_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.js b/tests/baselines/reference/privateNameNestedMethodAccess.js index e80fc49be6e90..2bdd57e019e76 100644 --- a/tests/baselines/reference/privateNameNestedMethodAccess.js +++ b/tests/baselines/reference/privateNameNestedMethodAccess.js @@ -41,13 +41,13 @@ class C { return _a = class D { constructor() { _D_instances.add(this); - __classPrivateFieldGet(new C(), _C_foo); + __classPrivateFieldGet(new C(), _C_foo, "f"); __classPrivateFieldGet(new C(), _D_instances, "m", _D_bar); // Error __classPrivateFieldGet(new C(), _C_instances, "a", _C_baz_get); __classPrivateFieldGet(new D(), _D_instances, "m", _D_bar); } n(x) { - __classPrivateFieldGet(x, _C_foo); + __classPrivateFieldGet(x, _C_foo, "f"); __classPrivateFieldGet(x, _D_instances, "m", _D_bar); x.; // Error } diff --git a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js index 13a9847b775d4..b0f5eee7579e5 100644 --- a/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js +++ b/tests/baselines/reference/privateNameStaticAccessorsCallExpression.js @@ -46,5 +46,5 @@ class A { } static getClass() { return A; } } -_a = A, _A_fieldFunc_get = function _A_fieldFunc_get() { return function () { __classPrivateFieldSet(A, _a, 10, void 0, _A_x); }; }, _A_fieldFunc2_get = function _A_fieldFunc2_get() { return function (a, ...b) { }; }; +_a = A, _A_fieldFunc_get = function _A_fieldFunc_get() { return function () { __classPrivateFieldSet(A, _a, 10, "f", _A_x); }; }, _A_fieldFunc2_get = function _A_fieldFunc2_get() { return function (a, ...b) { }; }; _A_x = { value: 1 }; diff --git a/tests/baselines/reference/privateNameStaticFieldAccess.js b/tests/baselines/reference/privateNameStaticFieldAccess.js index 7c9accb92a4e9..9c6e297cea9a8 100644 --- a/tests/baselines/reference/privateNameStaticFieldAccess.js +++ b/tests/baselines/reference/privateNameStaticFieldAccess.js @@ -17,8 +17,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _a, _A_myField; class A { constructor() { - console.log(__classPrivateFieldGet(A, _a, void 0, _A_myField)); //Ok - console.log(__classPrivateFieldGet(this, _a, void 0, _A_myField)); //Error + console.log(__classPrivateFieldGet(A, _a, "f", _A_myField)); //Ok + console.log(__classPrivateFieldGet(this, _a, "f", _A_myField)); //Error } } _a = A; diff --git a/tests/baselines/reference/privateNameStaticFieldAssignment.js b/tests/baselines/reference/privateNameStaticFieldAssignment.js index 5561dc1ce8492..9cb2ddab90a58 100644 --- a/tests/baselines/reference/privateNameStaticFieldAssignment.js +++ b/tests/baselines/reference/privateNameStaticFieldAssignment.js @@ -51,32 +51,32 @@ var _a, _A_field; class A { constructor() { var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0; - __classPrivateFieldSet(A, _a, 1, void 0, _A_field); - __classPrivateFieldSet(_b = A, _a, __classPrivateFieldGet(_b, _a, void 0, _A_field) + 2, void 0, _A_field); - __classPrivateFieldSet(_c = A, _a, __classPrivateFieldGet(_c, _a, void 0, _A_field) - 3, void 0, _A_field); - __classPrivateFieldSet(_d = A, _a, __classPrivateFieldGet(_d, _a, void 0, _A_field) / 4, void 0, _A_field); - __classPrivateFieldSet(_e = A, _a, __classPrivateFieldGet(_e, _a, void 0, _A_field) * 5, void 0, _A_field); - __classPrivateFieldSet(_f = A, _a, Math.pow(__classPrivateFieldGet(_f, _a, void 0, _A_field), 6), void 0, _A_field); - __classPrivateFieldSet(_g = A, _a, __classPrivateFieldGet(_g, _a, void 0, _A_field) % 7, void 0, _A_field); - __classPrivateFieldSet(_h = A, _a, __classPrivateFieldGet(_h, _a, void 0, _A_field) << 8, void 0, _A_field); - __classPrivateFieldSet(_j = A, _a, __classPrivateFieldGet(_j, _a, void 0, _A_field) >> 9, void 0, _A_field); - __classPrivateFieldSet(_k = A, _a, __classPrivateFieldGet(_k, _a, void 0, _A_field) >>> 10, void 0, _A_field); - __classPrivateFieldSet(_l = A, _a, __classPrivateFieldGet(_l, _a, void 0, _A_field) & 11, void 0, _A_field); - __classPrivateFieldSet(_m = A, _a, __classPrivateFieldGet(_m, _a, void 0, _A_field) | 12, void 0, _A_field); - __classPrivateFieldSet(_o = A, _a, __classPrivateFieldGet(_o, _a, void 0, _A_field) ^ 13, void 0, _A_field); - __classPrivateFieldSet(A.getClass(), _a, 1, void 0, _A_field); - __classPrivateFieldSet(_p = A.getClass(), _a, __classPrivateFieldGet(_p, _a, void 0, _A_field) + 2, void 0, _A_field); - __classPrivateFieldSet(_q = A.getClass(), _a, __classPrivateFieldGet(_q, _a, void 0, _A_field) - 3, void 0, _A_field); - __classPrivateFieldSet(_r = A.getClass(), _a, __classPrivateFieldGet(_r, _a, void 0, _A_field) / 4, void 0, _A_field); - __classPrivateFieldSet(_s = A.getClass(), _a, __classPrivateFieldGet(_s, _a, void 0, _A_field) * 5, void 0, _A_field); - __classPrivateFieldSet(_t = A.getClass(), _a, Math.pow(__classPrivateFieldGet(_t, _a, void 0, _A_field), 6), void 0, _A_field); - __classPrivateFieldSet(_u = A.getClass(), _a, __classPrivateFieldGet(_u, _a, void 0, _A_field) % 7, void 0, _A_field); - __classPrivateFieldSet(_v = A.getClass(), _a, __classPrivateFieldGet(_v, _a, void 0, _A_field) << 8, void 0, _A_field); - __classPrivateFieldSet(_w = A.getClass(), _a, __classPrivateFieldGet(_w, _a, void 0, _A_field) >> 9, void 0, _A_field); - __classPrivateFieldSet(_x = A.getClass(), _a, __classPrivateFieldGet(_x, _a, void 0, _A_field) >>> 10, void 0, _A_field); - __classPrivateFieldSet(_y = A.getClass(), _a, __classPrivateFieldGet(_y, _a, void 0, _A_field) & 11, void 0, _A_field); - __classPrivateFieldSet(_z = A.getClass(), _a, __classPrivateFieldGet(_z, _a, void 0, _A_field) | 12, void 0, _A_field); - __classPrivateFieldSet(_0 = A.getClass(), _a, __classPrivateFieldGet(_0, _a, void 0, _A_field) ^ 13, void 0, _A_field); + __classPrivateFieldSet(A, _a, 1, "f", _A_field); + __classPrivateFieldSet(_b = A, _a, __classPrivateFieldGet(_b, _a, "f", _A_field) + 2, "f", _A_field); + __classPrivateFieldSet(_c = A, _a, __classPrivateFieldGet(_c, _a, "f", _A_field) - 3, "f", _A_field); + __classPrivateFieldSet(_d = A, _a, __classPrivateFieldGet(_d, _a, "f", _A_field) / 4, "f", _A_field); + __classPrivateFieldSet(_e = A, _a, __classPrivateFieldGet(_e, _a, "f", _A_field) * 5, "f", _A_field); + __classPrivateFieldSet(_f = A, _a, Math.pow(__classPrivateFieldGet(_f, _a, "f", _A_field), 6), "f", _A_field); + __classPrivateFieldSet(_g = A, _a, __classPrivateFieldGet(_g, _a, "f", _A_field) % 7, "f", _A_field); + __classPrivateFieldSet(_h = A, _a, __classPrivateFieldGet(_h, _a, "f", _A_field) << 8, "f", _A_field); + __classPrivateFieldSet(_j = A, _a, __classPrivateFieldGet(_j, _a, "f", _A_field) >> 9, "f", _A_field); + __classPrivateFieldSet(_k = A, _a, __classPrivateFieldGet(_k, _a, "f", _A_field) >>> 10, "f", _A_field); + __classPrivateFieldSet(_l = A, _a, __classPrivateFieldGet(_l, _a, "f", _A_field) & 11, "f", _A_field); + __classPrivateFieldSet(_m = A, _a, __classPrivateFieldGet(_m, _a, "f", _A_field) | 12, "f", _A_field); + __classPrivateFieldSet(_o = A, _a, __classPrivateFieldGet(_o, _a, "f", _A_field) ^ 13, "f", _A_field); + __classPrivateFieldSet(A.getClass(), _a, 1, "f", _A_field); + __classPrivateFieldSet(_p = A.getClass(), _a, __classPrivateFieldGet(_p, _a, "f", _A_field) + 2, "f", _A_field); + __classPrivateFieldSet(_q = A.getClass(), _a, __classPrivateFieldGet(_q, _a, "f", _A_field) - 3, "f", _A_field); + __classPrivateFieldSet(_r = A.getClass(), _a, __classPrivateFieldGet(_r, _a, "f", _A_field) / 4, "f", _A_field); + __classPrivateFieldSet(_s = A.getClass(), _a, __classPrivateFieldGet(_s, _a, "f", _A_field) * 5, "f", _A_field); + __classPrivateFieldSet(_t = A.getClass(), _a, Math.pow(__classPrivateFieldGet(_t, _a, "f", _A_field), 6), "f", _A_field); + __classPrivateFieldSet(_u = A.getClass(), _a, __classPrivateFieldGet(_u, _a, "f", _A_field) % 7, "f", _A_field); + __classPrivateFieldSet(_v = A.getClass(), _a, __classPrivateFieldGet(_v, _a, "f", _A_field) << 8, "f", _A_field); + __classPrivateFieldSet(_w = A.getClass(), _a, __classPrivateFieldGet(_w, _a, "f", _A_field) >> 9, "f", _A_field); + __classPrivateFieldSet(_x = A.getClass(), _a, __classPrivateFieldGet(_x, _a, "f", _A_field) >>> 10, "f", _A_field); + __classPrivateFieldSet(_y = A.getClass(), _a, __classPrivateFieldGet(_y, _a, "f", _A_field) & 11, "f", _A_field); + __classPrivateFieldSet(_z = A.getClass(), _a, __classPrivateFieldGet(_z, _a, "f", _A_field) | 12, "f", _A_field); + __classPrivateFieldSet(_0 = A.getClass(), _a, __classPrivateFieldGet(_0, _a, "f", _A_field) ^ 13, "f", _A_field); } static getClass() { return A; diff --git a/tests/baselines/reference/privateNameStaticFieldCallExpression.js b/tests/baselines/reference/privateNameStaticFieldCallExpression.js index ca6f4817de647..e2c00c8905510 100644 --- a/tests/baselines/reference/privateNameStaticFieldCallExpression.js +++ b/tests/baselines/reference/privateNameStaticFieldCallExpression.js @@ -34,16 +34,16 @@ class A { test() { var _b; var _c; - __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc).call(A); - (_b = __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc)) === null || _b === void 0 ? void 0 : _b.call(A); - const func = __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc); + __classPrivateFieldGet(A, _a, "f", _A_fieldFunc).call(A); + (_b = __classPrivateFieldGet(A, _a, "f", _A_fieldFunc)) === null || _b === void 0 ? void 0 : _b.call(A); + const func = __classPrivateFieldGet(A, _a, "f", _A_fieldFunc); func(); - new (__classPrivateFieldGet(A, _a, void 0, _A_fieldFunc))(); + new (__classPrivateFieldGet(A, _a, "f", _A_fieldFunc))(); const arr = [1, 2]; - __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc2).call(A, 0, ...arr, 3); - const b = new (__classPrivateFieldGet(A, _a, void 0, _A_fieldFunc2))(0, ...arr, 3); - const str = __classPrivateFieldGet(A, _a, void 0, _A_fieldFunc2).bind(A) `head${1}middle${2}tail`; - __classPrivateFieldGet((_c = this.getClass()), _a, void 0, _A_fieldFunc2).bind(_c) `test${1}and${2}`; + __classPrivateFieldGet(A, _a, "f", _A_fieldFunc2).call(A, 0, ...arr, 3); + const b = new (__classPrivateFieldGet(A, _a, "f", _A_fieldFunc2))(0, ...arr, 3); + const str = __classPrivateFieldGet(A, _a, "f", _A_fieldFunc2).bind(A) `head${1}middle${2}tail`; + __classPrivateFieldGet((_c = this.getClass()), _a, "f", _A_fieldFunc2).bind(_c) `test${1}and${2}`; } getClass() { return A; } } diff --git a/tests/baselines/reference/privateNameStaticFieldClassExpression.js b/tests/baselines/reference/privateNameStaticFieldClassExpression.js index f7029035947ff..7b159cdaebed2 100644 --- a/tests/baselines/reference/privateNameStaticFieldClassExpression.js +++ b/tests/baselines/reference/privateNameStaticFieldClassExpression.js @@ -31,9 +31,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _a, _B_foo, _B_foo2, _b, _c; class B { m() { - console.log(__classPrivateFieldGet(B, _a, void 0, _B_foo).test); - __classPrivateFieldGet(B, _a, void 0, _B_foo).test = 10; - new (__classPrivateFieldGet(B, _a, void 0, _B_foo))().field; + console.log(__classPrivateFieldGet(B, _a, "f", _B_foo).test); + __classPrivateFieldGet(B, _a, "f", _B_foo).test = 10; + new (__classPrivateFieldGet(B, _a, "f", _B_foo))().field; } } _a = B; @@ -41,7 +41,7 @@ _B_foo = { value: (_b = class { constructor() { this.field = 10; console.log("hello"); - new (__classPrivateFieldGet(B, _a, void 0, _B_foo2))(); + new (__classPrivateFieldGet(B, _a, "f", _B_foo2))(); } }, _b.test = 123, diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js index 69c22f9523292..8b9a8f45bbced 100644 --- a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js @@ -33,14 +33,14 @@ class Base { static method(x) { Derived.; // error __classPrivateFieldSet(// error - Base, _a, 10, void 0, _Base_prop); + Base, _a, 10, "f", _Base_prop); } } _a = Base; _Base_prop = { value: 123 }; class Derived extends Base { static method(x) { - __classPrivateFieldGet(Derived, _b, void 0, _Derived_derivedProp); + __classPrivateFieldGet(Derived, _b, "f", _Derived_derivedProp); Base. = 10; // error } } diff --git a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js index d8295ab570489..f5ddbe3a7856a 100644 --- a/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js +++ b/tests/baselines/reference/privateNameStaticFieldDestructuredBinding(target=es2015).js @@ -37,13 +37,13 @@ class A { var _c; this.otherClass = A; let y; - ({ x: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value, y } = this.testObject()); - ([({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value, y] = this.testArray()); - ({ a: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value, b: [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value] } = { a: 1, b: [2] }); - [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value, [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value]] = [1, [2]]; - ({ a: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value = 1, b: [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value = 1] } = { b: [] }); - [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, void 0, _A_field); } }).value = 2] = []; - _c = this.otherClass, [({ set value(_b) { __classPrivateFieldSet(_c, _b, _b, void 0, _A_field); } }).value = 2] = []; + ({ x: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value, y } = this.testObject()); + ([({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value, y] = this.testArray()); + ({ a: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value, b: [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value] } = { a: 1, b: [2] }); + [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value, [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value]] = [1, [2]]; + ({ a: ({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value = 1, b: [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value = 1] } = { b: [] }); + [({ set value(_b) { __classPrivateFieldSet(A, _b, _b, "f", _A_field); } }).value = 2] = []; + _c = this.otherClass, [({ set value(_b) { __classPrivateFieldSet(_c, _b, _b, "f", _A_field); } }).value = 2] = []; } testObject() { return { x: 10, y: 6 }; @@ -52,7 +52,7 @@ class A { return [10, 11]; } static test(_a) { - [({ set value(_c) { __classPrivateFieldSet(_a, _b, _c, void 0, _A_field); } }).value] = [2]; + [({ set value(_c) { __classPrivateFieldSet(_a, _b, _c, "f", _A_field); } }).value] = [2]; } } _b = A; diff --git a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js index da157d2d83a2b..810c3df10b50c 100644 --- a/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js +++ b/tests/baselines/reference/privateNameStaticFieldUnaryMutation.js @@ -45,29 +45,29 @@ 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, void 0, _C_test) + 1, void 0, _C_test); - __classPrivateFieldSet(_c = C, _a, +__classPrivateFieldGet(_c, _a, void 0, _C_test) - 1, void 0, _C_test); - __classPrivateFieldSet(_d = C, _a, +__classPrivateFieldGet(_d, _a, void 0, _C_test) + 1, void 0, _C_test); - __classPrivateFieldSet(_e = C, _a, +__classPrivateFieldGet(_e, _a, void 0, _C_test) - 1, void 0, _C_test); - const a = (__classPrivateFieldSet(_f = C, _a, (_g = +__classPrivateFieldGet(_f, _a, void 0, _C_test)) + 1, void 0, _C_test), _g); - const b = (__classPrivateFieldSet(_h = C, _a, (_j = +__classPrivateFieldGet(_h, _a, void 0, _C_test)) - 1, void 0, _C_test), _j); - const c = __classPrivateFieldSet(_k = C, _a, +__classPrivateFieldGet(_k, _a, void 0, _C_test) + 1, void 0, _C_test); - const d = __classPrivateFieldSet(_l = C, _a, +__classPrivateFieldGet(_l, _a, void 0, _C_test) - 1, void 0, _C_test); - for (__classPrivateFieldSet(C, _a, 0, void 0, _C_test); __classPrivateFieldGet(C, _a, void 0, _C_test) < 10; __classPrivateFieldSet(_m = C, _a, +__classPrivateFieldGet(_m, _a, void 0, _C_test) + 1, void 0, _C_test)) { } - for (__classPrivateFieldSet(C, _a, 0, void 0, _C_test); __classPrivateFieldGet(C, _a, void 0, _C_test) < 10; __classPrivateFieldSet(_o = C, _a, +__classPrivateFieldGet(_o, _a, void 0, _C_test) + 1, void 0, _C_test)) { } + __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)) { } } test() { var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; - __classPrivateFieldSet(_b = this.getClass(), _a, +__classPrivateFieldGet(_b, _a, void 0, _C_test) + 1, void 0, _C_test); - __classPrivateFieldSet(_c = this.getClass(), _a, +__classPrivateFieldGet(_c, _a, void 0, _C_test) - 1, void 0, _C_test); - __classPrivateFieldSet(_d = this.getClass(), _a, +__classPrivateFieldGet(_d, _a, void 0, _C_test) + 1, void 0, _C_test); - __classPrivateFieldSet(_e = this.getClass(), _a, +__classPrivateFieldGet(_e, _a, void 0, _C_test) - 1, void 0, _C_test); - const a = (__classPrivateFieldSet(_f = this.getClass(), _a, (_g = +__classPrivateFieldGet(_f, _a, void 0, _C_test)) + 1, void 0, _C_test), _g); - const b = (__classPrivateFieldSet(_h = this.getClass(), _a, (_j = +__classPrivateFieldGet(_h, _a, void 0, _C_test)) - 1, void 0, _C_test), _j); - const c = __classPrivateFieldSet(_k = this.getClass(), _a, +__classPrivateFieldGet(_k, _a, void 0, _C_test) + 1, void 0, _C_test); - const d = __classPrivateFieldSet(_l = this.getClass(), _a, +__classPrivateFieldGet(_l, _a, void 0, _C_test) - 1, void 0, _C_test); - for (__classPrivateFieldSet(this.getClass(), _a, 0, void 0, _C_test); __classPrivateFieldGet(this.getClass(), _a, void 0, _C_test) < 10; __classPrivateFieldSet(_m = this.getClass(), _a, +__classPrivateFieldGet(_m, _a, void 0, _C_test) + 1, void 0, _C_test)) { } - for (__classPrivateFieldSet(this.getClass(), _a, 0, void 0, _C_test); __classPrivateFieldGet(this.getClass(), _a, void 0, _C_test) < 10; __classPrivateFieldSet(_o = this.getClass(), _a, +__classPrivateFieldGet(_o, _a, void 0, _C_test) + 1, void 0, _C_test)) { } + __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)) { } } getClass() { return C; } } diff --git a/tests/baselines/reference/privateNameStaticMethodClassExpression.js b/tests/baselines/reference/privateNameStaticMethodClassExpression.js index bd873a33fcdd4..cca04691e0928 100644 --- a/tests/baselines/reference/privateNameStaticMethodClassExpression.js +++ b/tests/baselines/reference/privateNameStaticMethodClassExpression.js @@ -21,7 +21,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _a, _D_field, _D_method; const C = (_a = class D { static getClass() { return D; } - static getField() { return __classPrivateFieldGet(C, _a, void 0, _D_field); } + static getField() { return __classPrivateFieldGet(C, _a, "f", _D_field); } ; }, _D_method = function _D_method() { return 42; }, diff --git a/tests/baselines/reference/privateNamesAndFields.js b/tests/baselines/reference/privateNamesAndFields.js index 519a63909a276..69beae57f5d64 100644 --- a/tests/baselines/reference/privateNamesAndFields.js +++ b/tests/baselines/reference/privateNamesAndFields.js @@ -27,7 +27,7 @@ var _A_foo, _B_foo; class A { constructor() { _A_foo.set(this, void 0); - __classPrivateFieldSet(this, _A_foo, 3); + __classPrivateFieldSet(this, _A_foo, 3, "f"); } } _A_foo = new WeakMap(); @@ -35,7 +35,7 @@ class B extends A { constructor() { super(); _B_foo.set(this, void 0); - __classPrivateFieldSet(this, _B_foo, "some string"); + __classPrivateFieldSet(this, _B_foo, "some string", "f"); } } _B_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.js b/tests/baselines/reference/privateNamesAndGenericClasses-2.js index 66a4fdac2208c..8e0d5c27c5619 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.js +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.js @@ -45,18 +45,18 @@ class C { constructor(t) { _C_instances.add(this); _C_foo.set(this, void 0); - __classPrivateFieldSet(this, _C_foo, t); + __classPrivateFieldSet(this, _C_foo, t, "f"); t = __classPrivateFieldGet(this, _C_instances, "m", _C_bar).call(this); } set baz(t) { - __classPrivateFieldSet(this, _C_foo, t); + __classPrivateFieldSet(this, _C_foo, t, "f"); } get baz() { - return __classPrivateFieldGet(this, _C_foo); + return __classPrivateFieldGet(this, _C_foo, "f"); } } _C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_bar = function _C_bar() { - return __classPrivateFieldGet(this, _C_foo); + return __classPrivateFieldGet(this, _C_foo, "f"); }; let a = new C(3); let b = new C("hello"); diff --git a/tests/baselines/reference/privateNamesAndStaticFields.js b/tests/baselines/reference/privateNamesAndStaticFields.js index f182735068847..a9bba00f8e17a 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.js +++ b/tests/baselines/reference/privateNamesAndStaticFields.js @@ -38,9 +38,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _a, _A_foo, _A_bar, _b, _B_foo; class A { constructor() { - __classPrivateFieldSet(A, _a, 3, void 0, _A_foo); - __classPrivateFieldGet(B, _a, void 0, _A_foo); // Error - __classPrivateFieldGet(B, _a, void 0, _A_bar); // Error + __classPrivateFieldSet(A, _a, 3, "f", _A_foo); + __classPrivateFieldGet(B, _a, "f", _A_foo); // Error + __classPrivateFieldGet(B, _a, "f", _A_bar); // Error } } _a = A; @@ -49,7 +49,7 @@ _A_bar = { value: void 0 }; class B extends A { constructor() { super(); - __classPrivateFieldSet(B, _b, "some string", void 0, _B_foo); + __classPrivateFieldSet(B, _b, "some string", "f", _B_foo); } } _b = B; diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index 958df88562dff..cb4c1076945af 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -26,8 +26,8 @@ class Parent { _Parent_foo.set(this, 3); } accessChildProps() { - __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(Child, _a, void 0, _Parent_bar); // Error: not found + __classPrivateFieldGet(new Child(), _Parent_foo, "f"); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) + __classPrivateFieldGet(Child, _a, "f", _Parent_bar); // Error: not found } } _a = Parent, _Parent_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index 3970efe16f821..80e569c8ab7bc 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -28,8 +28,8 @@ class Parent { _Parent_foo.set(this, 3); } accessChildProps() { - __classPrivateFieldGet(new Child(), _Parent_foo); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(Child, _a, void 0, _Parent_bar); // Error: not found + __classPrivateFieldGet(new Child(), _Parent_foo, "f"); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) + __classPrivateFieldGet(Child, _a, "f", _Parent_bar); // Error: not found } } _a = Parent, _Parent_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesInGenericClasses.js b/tests/baselines/reference/privateNamesInGenericClasses.js index 718ceefe54797..6817e938884e5 100644 --- a/tests/baselines/reference/privateNamesInGenericClasses.js +++ b/tests/baselines/reference/privateNamesInGenericClasses.js @@ -46,17 +46,17 @@ class C { _C_instances.add(this); _C_foo.set(this, void 0); } - bar(x) { return __classPrivateFieldGet(x, _C_foo); } // OK + bar(x) { return __classPrivateFieldGet(x, _C_foo, "f"); } // OK bar2(x) { return __classPrivateFieldGet(x, _C_instances, "m", _C_method).call(x); } // OK bar3(x) { return __classPrivateFieldGet(x, _C_instances, "a", _C_prop_get); } // OK - baz(x) { return __classPrivateFieldGet(x, _C_foo); } // OK + baz(x) { return __classPrivateFieldGet(x, _C_foo, "f"); } // OK baz2(x) { return __classPrivateFieldGet(x, _C_instances, "m", _C_method); } // OK baz3(x) { return __classPrivateFieldGet(x, _C_instances, "a", _C_prop_get); } // OK - quux(x) { return __classPrivateFieldGet(x, _C_foo); } // OK + quux(x) { return __classPrivateFieldGet(x, _C_foo, "f"); } // OK quux2(x) { return __classPrivateFieldGet(x, _C_instances, "m", _C_method); } // OK quux3(x) { return __classPrivateFieldGet(x, _C_instances, "a", _C_prop_get); } // OK } -_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_method = function _C_method() { return __classPrivateFieldGet(this, _C_foo); }, _C_prop_get = function _C_prop_get() { return __classPrivateFieldGet(this, _C_foo); }, _C_prop_set = function _C_prop_set(value) { __classPrivateFieldSet(this, _C_foo, value); }; +_C_foo = new WeakMap(), _C_instances = new WeakSet(), _C_method = function _C_method() { return __classPrivateFieldGet(this, _C_foo, "f"); }, _C_prop_get = function _C_prop_get() { return __classPrivateFieldGet(this, _C_foo, "f"); }, _C_prop_set = function _C_prop_set(value) { __classPrivateFieldSet(this, _C_foo, value, "f"); }; a.; // Error a.; // Error a.; // Error diff --git a/tests/baselines/reference/privateNamesInNestedClasses-1.js b/tests/baselines/reference/privateNamesInNestedClasses-1.js index 3554cd45da4bc..a40651375293d 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-1.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-1.js @@ -46,13 +46,13 @@ class A { _B_foo.set(this, "B's #foo"); } bar(a) { - __classPrivateFieldGet(a, _B_foo); // OK, no compile-time error, don't know what `a` is + __classPrivateFieldGet(a, _B_foo, "f"); // OK, no compile-time error, don't know what `a` is } baz(a) { - __classPrivateFieldGet(a, _B_foo); // compile-time error, shadowed + __classPrivateFieldGet(a, _B_foo, "f"); // compile-time error, shadowed } quux(b) { - __classPrivateFieldGet(b, _B_foo); // OK + __classPrivateFieldGet(b, _B_foo, "f"); // OK } } _B_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesInNestedClasses-2.js b/tests/baselines/reference/privateNamesInNestedClasses-2.js index 70b07da3dcced..6b879f0c55cd1 100644 --- a/tests/baselines/reference/privateNamesInNestedClasses-2.js +++ b/tests/baselines/reference/privateNamesInNestedClasses-2.js @@ -32,7 +32,7 @@ class A { _B_x.set(this, 5); class C { constructor() { - __classPrivateFieldGet(A, _B_x); // error + __classPrivateFieldGet(A, _B_x, "f"); // error } } } diff --git a/tests/baselines/reference/privateNamesInterfaceExtendingClass.js b/tests/baselines/reference/privateNamesInterfaceExtendingClass.js index 1784f7de35d04..d43aaaa1b27b9 100644 --- a/tests/baselines/reference/privateNamesInterfaceExtendingClass.js +++ b/tests/baselines/reference/privateNamesInterfaceExtendingClass.js @@ -26,7 +26,7 @@ class C { _C_prop.set(this, void 0); } func(x) { - __classPrivateFieldSet(x, _C_prop, 123); + __classPrivateFieldSet(x, _C_prop, 123, "f"); } } _C_prop = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesNoDelete.js b/tests/baselines/reference/privateNamesNoDelete.js index 0828a447b9d9c..dc60d87edec5b 100644 --- a/tests/baselines/reference/privateNamesNoDelete.js +++ b/tests/baselines/reference/privateNamesNoDelete.js @@ -18,7 +18,7 @@ var _A_v; class A { constructor() { _A_v.set(this, 1); - delete __classPrivateFieldGet(this, _A_v); // Error: The operand of a delete operator cannot be a private name. + delete __classPrivateFieldGet(this, _A_v, "f"); // Error: The operand of a delete operator cannot be a private name. } } _A_v = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesUnique-2.js b/tests/baselines/reference/privateNamesUnique-2.js index 380159d4fe5a6..563007f6b8083 100644 --- a/tests/baselines/reference/privateNamesUnique-2.js +++ b/tests/baselines/reference/privateNamesUnique-2.js @@ -42,7 +42,7 @@ export class Foo { _Foo_x.set(this, void 0); } copy(other) { - __classPrivateFieldGet(other, _Foo_x); // error + __classPrivateFieldGet(other, _Foo_x, "f"); // error } } _Foo_x = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index c12ac22c347d9..0447e3cf6f852 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -33,7 +33,7 @@ _a = A, _A_foo = new WeakMap(); _A_foo_1 = { value: true }; // error (duplicate) class B { test(x) { - __classPrivateFieldGet(x, _b, void 0, _B_foo); // error (#foo is a static property on B, not an instance property) + __classPrivateFieldGet(x, _b, "f", _B_foo); // error (#foo is a static property on B, not an instance property) } } _b = B; diff --git a/tests/baselines/reference/privateNamesUseBeforeDef.js b/tests/baselines/reference/privateNamesUseBeforeDef.js index c250d4cc2c50a..3521d28206b07 100644 --- a/tests/baselines/reference/privateNamesUseBeforeDef.js +++ b/tests/baselines/reference/privateNamesUseBeforeDef.js @@ -29,7 +29,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _A_foo, _A_bar, _A2_instances, _A2_foo, _A2_bar, _A3_instances, _A3_foo, _A3_bar_get, _B_foo, _B_bar; class A { constructor() { - _A_foo.set(this, __classPrivateFieldGet(this, _A_bar)); // Error + _A_foo.set(this, __classPrivateFieldGet(this, _A_bar, "f")); // Error _A_bar.set(this, 3); } } @@ -52,8 +52,8 @@ class A3 { _A3_foo = new WeakMap(), _A3_instances = new WeakSet(), _A3_bar_get = function _A3_bar_get() { return 3; }; class B { constructor() { - _B_foo.set(this, __classPrivateFieldGet(this, _B_bar)); // Error - _B_bar.set(this, __classPrivateFieldGet(this, _B_foo)); + _B_foo.set(this, __classPrivateFieldGet(this, _B_bar, "f")); // Error + _B_bar.set(this, __classPrivateFieldGet(this, _B_foo, "f")); } } _B_foo = new WeakMap(), _B_bar = new WeakMap(); diff --git a/tests/baselines/reference/strictPropertyInitialization.js b/tests/baselines/reference/strictPropertyInitialization.js index 0d74861983dec..30867a3773de1 100644 --- a/tests/baselines/reference/strictPropertyInitialization.js +++ b/tests/baselines/reference/strictPropertyInitialization.js @@ -178,7 +178,7 @@ class C5 { constructor() { _C5_b.set(this, void 0); this.a = 0; - __classPrivateFieldSet(this, _C5_b, 0); + __classPrivateFieldSet(this, _C5_b, 0, "f"); } } _C5_b = new WeakMap(); @@ -190,7 +190,7 @@ class C6 { return; } this.a = 0; - __classPrivateFieldSet(this, _C6_b, 0); + __classPrivateFieldSet(this, _C6_b, 0, "f"); } } _C6_b = new WeakMap(); @@ -199,11 +199,11 @@ class C7 { _C7_b.set(this, void 0); if (cond) { this.a = 1; - __classPrivateFieldSet(this, _C7_b, 1); + __classPrivateFieldSet(this, _C7_b, 1, "f"); return; } this.a = 0; - __classPrivateFieldSet(this, _C7_b, 1); + __classPrivateFieldSet(this, _C7_b, 1, "f"); } } _C7_b = new WeakMap(); @@ -220,9 +220,9 @@ class C10 { _C10_d.set(this, void 0); let x = this.a; // Error this.a = this.b; // Error - this.b = __classPrivateFieldGet(this, _C10_d); //Error + this.b = __classPrivateFieldGet(this, _C10_d, "f"); //Error this.b = x; - __classPrivateFieldSet(this, _C10_d, x); + __classPrivateFieldSet(this, _C10_d, x, "f"); let y = this.c; } } @@ -231,7 +231,7 @@ class C11 { constructor() { _C11_b.set(this, void 0); this.a = someValue(); - __classPrivateFieldSet(this, _C11_b, someValue()); + __classPrivateFieldSet(this, _C11_b, someValue(), "f"); } } _C11_b = new WeakMap(); From c461b921d93d171a49f3a38b4b6cb41c015d7fd3 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Thu, 18 Mar 2021 15:24:22 +0000 Subject: [PATCH 62/73] do not clone the receiver (#57) --- src/compiler/transformers/classFields.ts | 4 +--- tests/baselines/reference/privateNameAndAny.js | 6 ++++-- tests/baselines/reference/privateNameMethod.js | 3 ++- tests/baselines/reference/privateNameNestedMethodAccess.js | 3 ++- tests/baselines/reference/privateNameStaticMethod.js | 3 ++- tests/baselines/reference/privateNamesAndStaticFields.js | 3 ++- tests/baselines/reference/privateNamesConstructorChain-1.js | 3 ++- tests/baselines/reference/privateNamesConstructorChain-2.js | 3 ++- tests/baselines/reference/privateStaticNameShadowing.js | 3 ++- 9 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 23544963ccde5..84a1f32c6f943 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -326,9 +326,7 @@ namespace ts { } function createPrivateIdentifierAccess(info: PrivateIdentifierInfo, receiver: Expression): Expression { - receiver = visitNode(receiver, visitor, isExpression); - const synthesizedReceiver = nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver); - return createPrivateIdentifierAccessHelper(info, synthesizedReceiver); + return createPrivateIdentifierAccessHelper(info, visitNode(receiver, visitor, isExpression)); } function createPrivateIdentifierAccessHelper(info: PrivateIdentifierInfo, receiver: Expression): Expression { diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index 210f8cceb9478..805039736409c 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -41,11 +41,13 @@ class A { } method(thing) { __classPrivateFieldGet(thing, _A_foo, "f"); // OK - __classPrivateFieldGet(thing, _a, "m", _A_m).call(// OK + __classPrivateFieldGet(// OK + thing, _a, "m", _A_m).call(// OK thing); __classPrivateFieldGet(thing, _a, "f", _A_baz); thing.; // Error - __classPrivateFieldGet(thing, _A_foo, "f").call(// Error + __classPrivateFieldGet(// Error + thing, _A_foo, "f").call(// Error thing); } methodU(thing) { diff --git a/tests/baselines/reference/privateNameMethod.js b/tests/baselines/reference/privateNameMethod.js index 5f2ec20469a81..11915e5eaea28 100644 --- a/tests/baselines/reference/privateNameMethod.js +++ b/tests/baselines/reference/privateNameMethod.js @@ -25,7 +25,8 @@ class A1 { _A1_instances.add(this); __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(this, ""); __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(this, 1); // Error - __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(// Error + __classPrivateFieldGet(// Error + this, _A1_instances, "m", _A1_method).call(// Error this); // Error } } diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.js b/tests/baselines/reference/privateNameNestedMethodAccess.js index 2bdd57e019e76..aa22d016ad0fd 100644 --- a/tests/baselines/reference/privateNameNestedMethodAccess.js +++ b/tests/baselines/reference/privateNameNestedMethodAccess.js @@ -43,7 +43,8 @@ class C { _D_instances.add(this); __classPrivateFieldGet(new C(), _C_foo, "f"); __classPrivateFieldGet(new C(), _D_instances, "m", _D_bar); // Error - __classPrivateFieldGet(new C(), _C_instances, "a", _C_baz_get); + __classPrivateFieldGet(// Error + new C(), _C_instances, "a", _C_baz_get); __classPrivateFieldGet(new D(), _D_instances, "m", _D_bar); } n(x) { diff --git a/tests/baselines/reference/privateNameStaticMethod.js b/tests/baselines/reference/privateNameStaticMethod.js index 38bc0e54b0b7a..0274884d235e8 100644 --- a/tests/baselines/reference/privateNameStaticMethod.js +++ b/tests/baselines/reference/privateNameStaticMethod.js @@ -24,7 +24,8 @@ class A1 { constructor() { __classPrivateFieldGet(A1, _a, "m", _A1_method).call(A1, ""); __classPrivateFieldGet(A1, _a, "m", _A1_method).call(A1, 1); // Error - __classPrivateFieldGet(A1, _a, "m", _A1_method).call(// Error + __classPrivateFieldGet(// Error + A1, _a, "m", _A1_method).call(// Error A1); // Error } } diff --git a/tests/baselines/reference/privateNamesAndStaticFields.js b/tests/baselines/reference/privateNamesAndStaticFields.js index a9bba00f8e17a..0ba4bd832d501 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.js +++ b/tests/baselines/reference/privateNamesAndStaticFields.js @@ -40,7 +40,8 @@ class A { constructor() { __classPrivateFieldSet(A, _a, 3, "f", _A_foo); __classPrivateFieldGet(B, _a, "f", _A_foo); // Error - __classPrivateFieldGet(B, _a, "f", _A_bar); // Error + __classPrivateFieldGet(// Error + B, _a, "f", _A_bar); // Error } } _a = A; diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index cb4c1076945af..abde705d8bbb2 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -27,7 +27,8 @@ class Parent { } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo, "f"); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(Child, _a, "f", _Parent_bar); // Error: not found + __classPrivateFieldGet(// OK (`#foo` was added when `Parent`'s constructor was called on `child`) + Child, _a, "f", _Parent_bar); // Error: not found } } _a = Parent, _Parent_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index 80e569c8ab7bc..9f1341b8fb382 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -29,7 +29,8 @@ class Parent { } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo, "f"); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(Child, _a, "f", _Parent_bar); // Error: not found + __classPrivateFieldGet(// OK (`#foo` was added when `Parent`'s constructor was called on `child`) + Child, _a, "f", _Parent_bar); // Error: not found } } _a = Parent, _Parent_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateStaticNameShadowing.js b/tests/baselines/reference/privateStaticNameShadowing.js index 4959e2fec893b..fd61fae53faeb 100644 --- a/tests/baselines/reference/privateStaticNameShadowing.js +++ b/tests/baselines/reference/privateStaticNameShadowing.js @@ -28,7 +28,8 @@ class X { _b = X, _X_m = function _X_m() { const X = {}; // shadow the class const _a = {}; // shadow the first generated var - __classPrivateFieldGet(X, _b, "m", _X_m).call(// shadow the first generated var + __classPrivateFieldGet(// shadow the first generated var + X, _b, "m", _X_m).call(// shadow the first generated var X); // Should check with X as the receiver with _b as the class constructor return 1; }; From a61fd5f7d48d9141615e7b16a7c537de6bd8738c Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Fri, 19 Mar 2021 16:14:26 +0000 Subject: [PATCH 63/73] leave bad code in for #constructor and duplicate private names (#58) --- src/compiler/transformers/classFields.ts | 90 +++++--- .../privateNameConstructorReserved.js | 3 +- .../reference/privateNameDuplicateField.js | 212 ++++++++++++++---- .../reference/privateNamesUnique-3.js | 2 + 4 files changed, 233 insertions(+), 74 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 84a1f32c6f943..326ecdfeab343 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -24,6 +24,11 @@ namespace ts { * Stores if the identifier is static or not */ isStatic: boolean; + /** + * Stores if the identifier declaration is valid or not. Reserved names (e.g. #constructor) + * or duplicate identifiers are considered invalid. + */ + isValid: boolean; } interface PrivateIdentifierAccessorInfo extends PrivateIdentifierInfoBase { kind: PrivateIdentifierKind.Accessor; @@ -260,6 +265,13 @@ namespace ts { return visitEachChild(node, classElementVisitor, context); } + // leave invalid code untransformed + const info = accessPrivateIdentifier(node.name); + Debug.assert(info, "Undeclared private name for property declaration."); + if (!info.isValid) { + return node; + } + const functionName = getHoistedFunctionName(node); if (functionName) { getPendingExpressions().push( @@ -303,17 +315,27 @@ namespace ts { function visitPropertyDeclaration(node: PropertyDeclaration) { Debug.assert(!some(node.decorators)); - if (!shouldTransformPrivateElements && isPrivateIdentifier(node.name)) { - // Initializer is elided as the field is initialized in transformConstructor. - return factory.updatePropertyDeclaration( - node, - /*decorators*/ undefined, - visitNodes(node.modifiers, visitor, isModifier), - node.name, - /*questionOrExclamationToken*/ undefined, - /*type*/ undefined, - /*initializer*/ undefined - ); + + if (isPrivateIdentifier(node.name)) { + if (!shouldTransformPrivateElements) { + // Initializer is elided as the field is initialized in transformConstructor. + return factory.updatePropertyDeclaration( + node, + /*decorators*/ undefined, + visitNodes(node.modifiers, visitor, isModifier), + node.name, + /*questionOrExclamationToken*/ undefined, + /*type*/ undefined, + /*initializer*/ undefined + ); + } + + // leave invalid code untransformed + const info = accessPrivateIdentifier(node.name); + Debug.assert(info, "Undeclared private name for property declaration."); + if (!info.isValid) { + return node; + } } // Create a temporary variable to store a computed property name (if necessary). // If it's not inlineable, then we emit an expression after the class which assigns @@ -1162,55 +1184,62 @@ namespace ts { const env = getPrivateIdentifierEnvironment(); const { weakSetName, classConstructor } = env; const assignmentExpressions: Expression[] = []; + + const privateName = node.name.escapedText; + const previousInfo = env.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(node.name.escapedText, { + env.identifiers.set(privateName, { kind: PrivateIdentifierKind.Field, variableName, brandCheckIdentifier: classConstructor, isStatic: true, + isValid, }); } else if (isMethodDeclaration(node)) { const functionName = createHoistedVariableForPrivateName(text, node); - env.identifiers.set(node.name.escapedText, { + env.identifiers.set(privateName, { kind: PrivateIdentifierKind.Method, methodName: functionName, brandCheckIdentifier: classConstructor, isStatic: true, + isValid, }); } else if (isGetAccessorDeclaration(node)) { const getterName = createHoistedVariableForPrivateName(text + "_get", node); - const previousInfo = env.identifiers.get(node.name.escapedText); - if (previousInfo?.kind === PrivateIdentifierKind.Accessor) { + if (previousInfo?.kind === PrivateIdentifierKind.Accessor && previousInfo.isStatic && !previousInfo.getterName) { previousInfo.getterName = getterName; } else { - env.identifiers.set(node.name.escapedText, { + env.identifiers.set(privateName, { kind: PrivateIdentifierKind.Accessor, getterName, setterName: undefined, brandCheckIdentifier: classConstructor, isStatic: true, + isValid, }); } } else if (isSetAccessorDeclaration(node)) { const setterName = createHoistedVariableForPrivateName(text + "_set", node); - const previousInfo = env.identifiers.get(node.name.escapedText); - if (previousInfo?.kind === PrivateIdentifierKind.Accessor) { + if (previousInfo?.kind === PrivateIdentifierKind.Accessor && previousInfo.isStatic && !previousInfo.setterName) { previousInfo.setterName = setterName; } else { - env.identifiers.set(node.name.escapedText, { + env.identifiers.set(privateName, { kind: PrivateIdentifierKind.Accessor, getterName: undefined, setterName, brandCheckIdentifier: classConstructor, isStatic: true, + isValid, }); } } @@ -1220,11 +1249,12 @@ namespace ts { } else if (isPropertyDeclaration(node)) { const weakMapName = createHoistedVariableForPrivateName(text, node); - env.identifiers.set(node.name.escapedText, { + env.identifiers.set(privateName, { kind: PrivateIdentifierKind.Field, brandCheckIdentifier: weakMapName, isStatic: false, - variableName: undefined + variableName: undefined, + isValid, }); assignmentExpressions.push(factory.createAssignment( @@ -1239,46 +1269,48 @@ namespace ts { else if (isMethodDeclaration(node)) { Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); - env.identifiers.set(node.name.escapedText, { + env.identifiers.set(privateName, { kind: PrivateIdentifierKind.Method, methodName: createHoistedVariableForPrivateName(text, node), brandCheckIdentifier: weakSetName, isStatic: false, + isValid, }); } else if (isAccessor(node)) { Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); - const previousInfo = env.identifiers.get(node.name.escapedText); if (isGetAccessor(node)) { const getterName = createHoistedVariableForPrivateName(text + "_get", node); - if (previousInfo?.kind === PrivateIdentifierKind.Accessor) { + if (previousInfo?.kind === PrivateIdentifierKind.Accessor && !previousInfo.isStatic && !previousInfo.getterName) { previousInfo.getterName = getterName; } else { - env.identifiers.set(node.name.escapedText, { + env.identifiers.set(privateName, { kind: PrivateIdentifierKind.Accessor, getterName, setterName: undefined, brandCheckIdentifier: weakSetName, isStatic: false, + isValid, }); } } else { const setterName = createHoistedVariableForPrivateName(text + "_set", node); - if (previousInfo?.kind === PrivateIdentifierKind.Accessor) { + if (previousInfo?.kind === PrivateIdentifierKind.Accessor && !previousInfo.isStatic && !previousInfo.setterName) { previousInfo.setterName = setterName; } else { - env.identifiers.set(node.name.escapedText, { + env.identifiers.set(privateName, { kind: PrivateIdentifierKind.Accessor, getterName: undefined, setterName, brandCheckIdentifier: weakSetName, isStatic: false, + isValid, }); } } @@ -1475,4 +1507,8 @@ namespace ts { [receiver] ); } + + function isReservedPrivateName(node: PrivateIdentifier) { + return node.escapedText === "#constructor"; + } } diff --git a/tests/baselines/reference/privateNameConstructorReserved.js b/tests/baselines/reference/privateNameConstructorReserved.js index d1de278658b38..9e6a7eb62da90 100644 --- a/tests/baselines/reference/privateNameConstructorReserved.js +++ b/tests/baselines/reference/privateNameConstructorReserved.js @@ -10,5 +10,6 @@ class A { constructor() { _A_instances.add(this); } + #constructor() { } // Error: `#constructor` is a reserved word. } -_A_instances = new WeakSet(), _A_constructor = function _A_constructor() { }; +_A_instances = new WeakSet(); diff --git a/tests/baselines/reference/privateNameDuplicateField.js b/tests/baselines/reference/privateNameDuplicateField.js index 255fb235ecc1c..3b59b74ad8165 100644 --- a/tests/baselines/reference/privateNameDuplicateField.js +++ b/tests/baselines/reference/privateNameDuplicateField.js @@ -413,6 +413,8 @@ function Field() { _A_Field_Field_foo_1.set(this, "foo"); _A_Field_Field_foo_1.set(this, "foo"); } + #foo = "foo"; + #foo = "foo"; } _A_Field_Field_foo = new WeakMap(), _A_Field_Field_foo_1 = new WeakMap(); // Error @@ -420,27 +422,35 @@ function Field() { constructor() { _A_Field_Method_instances.add(this); } + #foo = "foo"; + #foo() { } } - _A_Field_Method_foo = new WeakMap(), _A_Field_Method_instances = new WeakSet(), _A_Field_Method_foo_1 = function _A_Field_Method_foo_1() { }; + _A_Field_Method_foo = new WeakMap(), _A_Field_Method_instances = new WeakSet(); // Error class A_Field_Getter { constructor() { _A_Field_Getter_instances.add(this); } + #foo = "foo"; + get #foo() { return ""; } } - _A_Field_Getter_foo = new WeakMap(), _A_Field_Getter_instances = new WeakSet(), _A_Field_Getter_foo_get = function _A_Field_Getter_foo_get() { return ""; }; + _A_Field_Getter_foo = new WeakMap(), _A_Field_Getter_instances = new WeakSet(); // Error class A_Field_Setter { constructor() { _A_Field_Setter_instances.add(this); } + #foo = "foo"; + set #foo(value) { } } - _A_Field_Setter_foo = new WeakMap(), _A_Field_Setter_instances = new WeakSet(), _A_Field_Setter_foo_set = function _A_Field_Setter_foo_set(value) { }; + _A_Field_Setter_foo = new WeakMap(), _A_Field_Setter_instances = new WeakSet(); // Error class A_Field_StaticField { constructor() { _A_Field_StaticField_foo_1 = { value: "foo" }; } + #foo = "foo"; + static #foo = "foo"; } _a = A_Field_StaticField, _A_Field_StaticField_foo = new WeakMap(); _A_Field_StaticField_foo_1 = { value: "foo" }; @@ -448,20 +458,26 @@ function Field() { class A_Field_StaticMethod { constructor() { } + #foo = "foo"; + static #foo() { } } - _b = A_Field_StaticMethod, _A_Field_StaticMethod_foo = new WeakMap(), _A_Field_StaticMethod_foo_1 = function _A_Field_StaticMethod_foo_1() { }; + _b = A_Field_StaticMethod, _A_Field_StaticMethod_foo = new WeakMap(); // Error class A_Field_StaticGetter { constructor() { } + #foo = "foo"; + static get #foo() { return ""; } } - _c = A_Field_StaticGetter, _A_Field_StaticGetter_foo = new WeakMap(), _A_Field_StaticGetter_foo_get = function _A_Field_StaticGetter_foo_get() { return ""; }; + _c = A_Field_StaticGetter, _A_Field_StaticGetter_foo = new WeakMap(); // Error class A_Field_StaticSetter { constructor() { } + #foo = "foo"; + static set #foo(value) { } } - _d = A_Field_StaticSetter, _A_Field_StaticSetter_foo = new WeakMap(), _A_Field_StaticSetter_foo_set = function _A_Field_StaticSetter_foo_set(value) { }; + _d = A_Field_StaticSetter, _A_Field_StaticSetter_foo = new WeakMap(); } function Method() { var _A_Method_Field_instances, _A_Method_Field_foo, _A_Method_Field_foo_1, _A_Method_Method_instances, _A_Method_Method_foo, _A_Method_Method_foo_1, _A_Method_Getter_instances, _A_Method_Getter_foo, _A_Method_Getter_foo_get, _A_Method_Setter_instances, _A_Method_Setter_foo, _A_Method_Setter_foo_set, _A_Method_StaticField_instances, _a, _A_Method_StaticField_foo, _A_Method_StaticField_foo_1, _A_Method_StaticMethod_instances, _b, _A_Method_StaticMethod_foo, _A_Method_StaticMethod_foo_1, _A_Method_StaticGetter_instances, _c, _A_Method_StaticGetter_foo, _A_Method_StaticGetter_foo_get, _A_Method_StaticSetter_instances, _d, _A_Method_StaticSetter_foo, _A_Method_StaticSetter_foo_set; @@ -471,6 +487,8 @@ function Method() { _A_Method_Field_instances.add(this); _A_Method_Field_foo_1.set(this, "foo"); } + #foo() { } + #foo = "foo"; } _A_Method_Field_foo_1 = new WeakMap(), _A_Method_Field_instances = new WeakSet(); // Error @@ -478,27 +496,35 @@ function Method() { constructor() { _A_Method_Method_instances.add(this); } + #foo() { } + #foo() { } } - _A_Method_Method_instances = new WeakSet(), _A_Method_Method_foo_1 = function _A_Method_Method_foo_1() { }, _A_Method_Method_foo_1 = function _A_Method_Method_foo_1() { }; + _A_Method_Method_instances = new WeakSet(); // Error class A_Method_Getter { constructor() { _A_Method_Getter_instances.add(this); } + #foo() { } + get #foo() { return ""; } } - _A_Method_Getter_instances = new WeakSet(), _A_Method_Getter_foo_get = function _A_Method_Getter_foo_get() { return ""; }; + _A_Method_Getter_instances = new WeakSet(); // Error class A_Method_Setter { constructor() { _A_Method_Setter_instances.add(this); } + #foo() { } + set #foo(value) { } } - _A_Method_Setter_instances = new WeakSet(), _A_Method_Setter_foo_set = function _A_Method_Setter_foo_set(value) { }; + _A_Method_Setter_instances = new WeakSet(); // Error class A_Method_StaticField { constructor() { _A_Method_StaticField_instances.add(this); } + #foo() { } + static #foo = "foo"; } _a = A_Method_StaticField, _A_Method_StaticField_instances = new WeakSet(); _A_Method_StaticField_foo_1 = { value: "foo" }; @@ -507,22 +533,28 @@ function Method() { constructor() { _A_Method_StaticMethod_instances.add(this); } + #foo() { } + static #foo() { } } - _b = A_Method_StaticMethod, _A_Method_StaticMethod_instances = new WeakSet(), _A_Method_StaticMethod_foo_1 = function _A_Method_StaticMethod_foo_1() { }, _A_Method_StaticMethod_foo_1 = function _A_Method_StaticMethod_foo_1() { }; + _b = A_Method_StaticMethod, _A_Method_StaticMethod_instances = new WeakSet(); // Error class A_Method_StaticGetter { constructor() { _A_Method_StaticGetter_instances.add(this); } + #foo() { } + static get #foo() { return ""; } } - _c = A_Method_StaticGetter, _A_Method_StaticGetter_instances = new WeakSet(), _A_Method_StaticGetter_foo_get = function _A_Method_StaticGetter_foo_get() { return ""; }; + _c = A_Method_StaticGetter, _A_Method_StaticGetter_instances = new WeakSet(); // Error class A_Method_StaticSetter { constructor() { _A_Method_StaticSetter_instances.add(this); } + #foo() { } + static set #foo(value) { } } - _d = A_Method_StaticSetter, _A_Method_StaticSetter_instances = new WeakSet(), _A_Method_StaticSetter_foo_set = function _A_Method_StaticSetter_foo_set(value) { }; + _d = A_Method_StaticSetter, _A_Method_StaticSetter_instances = new WeakSet(); } function Getter() { var _A_Getter_Field_instances, _A_Getter_Field_foo_get, _A_Getter_Field_foo, _A_Getter_Method_instances, _A_Getter_Method_foo_get, _A_Getter_Method_foo, _A_Getter_Getter_instances, _A_Getter_Getter_foo_get, _A_Getter_Getter_foo_get_1, _A_Getter_Setter_instances, _A_Getter_Setter_foo_get, _A_Getter_Setter_foo_set, _A_Getter_StaticField_instances, _a, _A_Getter_StaticField_foo_get, _A_Getter_StaticField_foo, _A_Getter_StaticMethod_instances, _b, _A_Getter_StaticMethod_foo_get, _A_Getter_StaticMethod_foo, _A_Getter_StaticGetter_instances, _c, _A_Getter_StaticGetter_foo_get, _A_Getter_StaticGetter_foo_get_1, _A_Getter_StaticSetter_instances, _d, _A_Getter_StaticSetter_foo_get, _A_Getter_StaticSetter_foo_set; @@ -532,6 +564,8 @@ function Getter() { _A_Getter_Field_instances.add(this); _A_Getter_Field_foo.set(this, "foo"); } + get #foo() { return ""; } + #foo = "foo"; } _A_Getter_Field_foo = new WeakMap(), _A_Getter_Field_instances = new WeakSet(); // Error @@ -539,15 +573,19 @@ function Getter() { constructor() { _A_Getter_Method_instances.add(this); } + get #foo() { return ""; } + #foo() { } } - _A_Getter_Method_instances = new WeakSet(), _A_Getter_Method_foo = function _A_Getter_Method_foo() { return ""; }, _A_Getter_Method_foo = function _A_Getter_Method_foo() { }; + _A_Getter_Method_instances = new WeakSet(); // Error class A_Getter_Getter { constructor() { _A_Getter_Getter_instances.add(this); } + get #foo() { return ""; } + get #foo() { return ""; } } - _A_Getter_Getter_instances = new WeakSet(), _A_Getter_Getter_foo_get_1 = function _A_Getter_Getter_foo_get_1() { return ""; }, _A_Getter_Getter_foo_get_1 = function _A_Getter_Getter_foo_get_1() { return ""; }; + _A_Getter_Getter_instances = new WeakSet(); //OK class A_Getter_Setter { constructor() { @@ -560,29 +598,37 @@ function Getter() { constructor() { _A_Getter_StaticField_instances.add(this); } + get #foo() { return ""; } + static #foo() { } } - _a = A_Getter_StaticField, _A_Getter_StaticField_instances = new WeakSet(), _A_Getter_StaticField_foo = function _A_Getter_StaticField_foo() { return ""; }, _A_Getter_StaticField_foo = function _A_Getter_StaticField_foo() { }; + _a = A_Getter_StaticField, _A_Getter_StaticField_instances = new WeakSet(); // Error class A_Getter_StaticMethod { constructor() { _A_Getter_StaticMethod_instances.add(this); } + get #foo() { return ""; } + static #foo() { } } - _b = A_Getter_StaticMethod, _A_Getter_StaticMethod_instances = new WeakSet(), _A_Getter_StaticMethod_foo = function _A_Getter_StaticMethod_foo() { return ""; }, _A_Getter_StaticMethod_foo = function _A_Getter_StaticMethod_foo() { }; + _b = A_Getter_StaticMethod, _A_Getter_StaticMethod_instances = new WeakSet(); // Error class A_Getter_StaticGetter { constructor() { _A_Getter_StaticGetter_instances.add(this); } + get #foo() { return ""; } + static get #foo() { return ""; } } - _c = A_Getter_StaticGetter, _A_Getter_StaticGetter_instances = new WeakSet(), _A_Getter_StaticGetter_foo_get_1 = function _A_Getter_StaticGetter_foo_get_1() { return ""; }, _A_Getter_StaticGetter_foo_get_1 = function _A_Getter_StaticGetter_foo_get_1() { return ""; }; + _c = A_Getter_StaticGetter, _A_Getter_StaticGetter_instances = new WeakSet(); // Error class A_Getter_StaticSetter { constructor() { _A_Getter_StaticSetter_instances.add(this); } + get #foo() { return ""; } + static set #foo(value) { } } - _d = A_Getter_StaticSetter, _A_Getter_StaticSetter_instances = new WeakSet(), _A_Getter_StaticSetter_foo_get = function _A_Getter_StaticSetter_foo_get() { return ""; }, _A_Getter_StaticSetter_foo_set = function _A_Getter_StaticSetter_foo_set(value) { }; + _d = A_Getter_StaticSetter, _A_Getter_StaticSetter_instances = new WeakSet(); } function Setter() { var _A_Setter_Field_instances, _A_Setter_Field_foo_set, _A_Setter_Field_foo, _A_Setter_Method_instances, _A_Setter_Method_foo_set, _A_Setter_Method_foo, _A_Setter_Getter_instances, _A_Setter_Getter_foo_set, _A_Setter_Getter_foo_get, _A_Setter_Setter_instances, _A_Setter_Setter_foo_set, _A_Setter_Setter_foo_set_1, _A_Setter_StaticField_instances, _a, _A_Setter_StaticField_foo_set, _A_Setter_StaticField_foo, _A_Setter_StaticMethod_instances, _b, _A_Setter_StaticMethod_foo_set, _A_Setter_StaticMethod_foo, _A_Setter_StaticGetter_instances, _c, _A_Setter_StaticGetter_foo_set, _A_Setter_StaticGetter_foo_get, _A_Setter_StaticSetter_instances, _d, _A_Setter_StaticSetter_foo_set, _A_Setter_StaticSetter_foo_set_1; @@ -592,6 +638,8 @@ function Setter() { _A_Setter_Field_instances.add(this); _A_Setter_Field_foo.set(this, "foo"); } + set #foo(value) { } + #foo = "foo"; } _A_Setter_Field_foo = new WeakMap(), _A_Setter_Field_instances = new WeakSet(); // Error @@ -599,8 +647,10 @@ function Setter() { constructor() { _A_Setter_Method_instances.add(this); } + set #foo(value) { } + #foo() { } } - _A_Setter_Method_instances = new WeakSet(), _A_Setter_Method_foo = function _A_Setter_Method_foo(value) { }, _A_Setter_Method_foo = function _A_Setter_Method_foo() { }; + _A_Setter_Method_instances = new WeakSet(); // OK class A_Setter_Getter { constructor() { @@ -613,13 +663,17 @@ function Setter() { constructor() { _A_Setter_Setter_instances.add(this); } + set #foo(value) { } + set #foo(value) { } } - _A_Setter_Setter_instances = new WeakSet(), _A_Setter_Setter_foo_set_1 = function _A_Setter_Setter_foo_set_1(value) { }, _A_Setter_Setter_foo_set_1 = function _A_Setter_Setter_foo_set_1(value) { }; + _A_Setter_Setter_instances = new WeakSet(); // Error class A_Setter_StaticField { constructor() { _A_Setter_StaticField_instances.add(this); } + set #foo(value) { } + static #foo = "foo"; } _a = A_Setter_StaticField, _A_Setter_StaticField_instances = new WeakSet(); _A_Setter_StaticField_foo = { value: "foo" }; @@ -628,22 +682,28 @@ function Setter() { constructor() { _A_Setter_StaticMethod_instances.add(this); } + set #foo(value) { } + static #foo() { } } - _b = A_Setter_StaticMethod, _A_Setter_StaticMethod_instances = new WeakSet(), _A_Setter_StaticMethod_foo = function _A_Setter_StaticMethod_foo(value) { }, _A_Setter_StaticMethod_foo = function _A_Setter_StaticMethod_foo() { }; + _b = A_Setter_StaticMethod, _A_Setter_StaticMethod_instances = new WeakSet(); // Error class A_Setter_StaticGetter { constructor() { _A_Setter_StaticGetter_instances.add(this); } + set #foo(value) { } + static get #foo() { return ""; } } - _c = A_Setter_StaticGetter, _A_Setter_StaticGetter_instances = new WeakSet(), _A_Setter_StaticGetter_foo_set = function _A_Setter_StaticGetter_foo_set(value) { }, _A_Setter_StaticGetter_foo_get = function _A_Setter_StaticGetter_foo_get() { return ""; }; + _c = A_Setter_StaticGetter, _A_Setter_StaticGetter_instances = new WeakSet(); // Error class A_Setter_StaticSetter { constructor() { _A_Setter_StaticSetter_instances.add(this); } + set #foo(value) { } + static set #foo(value) { } } - _d = A_Setter_StaticSetter, _A_Setter_StaticSetter_instances = new WeakSet(), _A_Setter_StaticSetter_foo_set_1 = function _A_Setter_StaticSetter_foo_set_1(value) { }, _A_Setter_StaticSetter_foo_set_1 = function _A_Setter_StaticSetter_foo_set_1(value) { }; + _d = A_Setter_StaticSetter, _A_Setter_StaticSetter_instances = new WeakSet(); } function StaticField() { var _a, _A_StaticField_Field_foo, _A_StaticField_Field_foo_1, _A_StaticField_Method_instances, _b, _A_StaticField_Method_foo, _A_StaticField_Method_foo_1, _A_StaticField_Getter_instances, _c, _A_StaticField_Getter_foo, _A_StaticField_Getter_foo_get, _A_StaticField_Setter_instances, _d, _A_StaticField_Setter_foo, _A_StaticField_Setter_foo_set, _e, _A_StaticField_StaticField_foo, _A_StaticField_StaticField_foo_1, _f, _A_StaticField_StaticMethod_foo, _A_StaticField_StaticMethod_foo_1, _g, _A_StaticField_StaticGetter_foo, _A_StaticField_StaticGetter_foo_get, _h, _A_StaticField_StaticSetter_foo, _A_StaticField_StaticSetter_foo_set; @@ -652,6 +712,8 @@ function StaticField() { constructor() { _A_StaticField_Field_foo_1.set(this, "foo"); } + static #foo = "foo"; + #foo = "foo"; } _a = A_StaticField_Field, _A_StaticField_Field_foo_1 = new WeakMap(); _A_StaticField_Field_foo_1.set(A_StaticField_Field, "foo"); @@ -660,40 +722,54 @@ function StaticField() { constructor() { _A_StaticField_Method_instances.add(this); } + static #foo = "foo"; + #foo() { } } - _b = A_StaticField_Method, _A_StaticField_Method_instances = new WeakSet(), _A_StaticField_Method_foo_1 = function _A_StaticField_Method_foo_1() { }; + _b = A_StaticField_Method, _A_StaticField_Method_instances = new WeakSet(); // Error class A_StaticField_Getter { constructor() { _A_StaticField_Getter_instances.add(this); } + static #foo = "foo"; + get #foo() { return ""; } } - _c = A_StaticField_Getter, _A_StaticField_Getter_instances = new WeakSet(), _A_StaticField_Getter_foo_get = function _A_StaticField_Getter_foo_get() { return ""; }; + _c = A_StaticField_Getter, _A_StaticField_Getter_instances = new WeakSet(); // Error class A_StaticField_Setter { constructor() { _A_StaticField_Setter_instances.add(this); } + static #foo = "foo"; + set #foo(value) { } } - _d = A_StaticField_Setter, _A_StaticField_Setter_instances = new WeakSet(), _A_StaticField_Setter_foo_set = function _A_StaticField_Setter_foo_set(value) { }; + _d = A_StaticField_Setter, _A_StaticField_Setter_instances = new WeakSet(); // Error class A_StaticField_StaticField { + static #foo = "foo"; + static #foo = "foo"; } _e = A_StaticField_StaticField; _A_StaticField_StaticField_foo_1 = { value: "foo" }; _A_StaticField_StaticField_foo_1 = { value: "foo" }; // Error class A_StaticField_StaticMethod { + static #foo = "foo"; + static #foo() { } } - _f = A_StaticField_StaticMethod, _A_StaticField_StaticMethod_foo_1 = function _A_StaticField_StaticMethod_foo_1() { }; + _f = A_StaticField_StaticMethod; // Error class A_StaticField_StaticGetter { + static #foo = "foo"; + static get #foo() { return ""; } } - _g = A_StaticField_StaticGetter, _A_StaticField_StaticGetter_foo_get = function _A_StaticField_StaticGetter_foo_get() { return ""; }; + _g = A_StaticField_StaticGetter; // Error class A_StaticField_StaticSetter { + static #foo = "foo"; + static set #foo(value) { } } - _h = A_StaticField_StaticSetter, _A_StaticField_StaticSetter_foo_set = function _A_StaticField_StaticSetter_foo_set(value) { }; + _h = A_StaticField_StaticSetter; } function StaticMethod() { var _a, _A_StaticMethod_Field_foo, _A_StaticMethod_Field_foo_1, _A_StaticMethod_Method_instances, _b, _A_StaticMethod_Method_foo, _A_StaticMethod_Method_foo_1, _A_StaticMethod_Getter_instances, _c, _A_StaticMethod_Getter_foo, _A_StaticMethod_Getter_foo_get, _A_StaticMethod_Setter_instances, _d, _A_StaticMethod_Setter_foo, _A_StaticMethod_Setter_foo_set, _e, _A_StaticMethod_StaticField_foo, _A_StaticMethod_StaticField_foo_1, _f, _A_StaticMethod_StaticMethod_foo, _A_StaticMethod_StaticMethod_foo_1, _g, _A_StaticMethod_StaticGetter_foo, _A_StaticMethod_StaticGetter_foo_get, _h, _A_StaticMethod_StaticSetter_foo, _A_StaticMethod_StaticSetter_foo_set; @@ -702,6 +778,8 @@ function StaticMethod() { constructor() { _A_StaticMethod_Field_foo_1.set(this, "foo"); } + static #foo() { } + #foo = "foo"; } _a = A_StaticMethod_Field, _A_StaticMethod_Field_foo_1 = new WeakMap(); // Error @@ -709,39 +787,53 @@ function StaticMethod() { constructor() { _A_StaticMethod_Method_instances.add(this); } + static #foo() { } + #foo() { } } - _b = A_StaticMethod_Method, _A_StaticMethod_Method_instances = new WeakSet(), _A_StaticMethod_Method_foo_1 = function _A_StaticMethod_Method_foo_1() { }, _A_StaticMethod_Method_foo_1 = function _A_StaticMethod_Method_foo_1() { }; + _b = A_StaticMethod_Method, _A_StaticMethod_Method_instances = new WeakSet(); // Error class A_StaticMethod_Getter { constructor() { _A_StaticMethod_Getter_instances.add(this); } + static #foo() { } + get #foo() { return ""; } } - _c = A_StaticMethod_Getter, _A_StaticMethod_Getter_instances = new WeakSet(), _A_StaticMethod_Getter_foo_get = function _A_StaticMethod_Getter_foo_get() { return ""; }; + _c = A_StaticMethod_Getter, _A_StaticMethod_Getter_instances = new WeakSet(); // Error class A_StaticMethod_Setter { constructor() { _A_StaticMethod_Setter_instances.add(this); } + static #foo() { } + set #foo(value) { } } - _d = A_StaticMethod_Setter, _A_StaticMethod_Setter_instances = new WeakSet(), _A_StaticMethod_Setter_foo_set = function _A_StaticMethod_Setter_foo_set(value) { }; + _d = A_StaticMethod_Setter, _A_StaticMethod_Setter_instances = new WeakSet(); // Error class A_StaticMethod_StaticField { + static #foo() { } + static #foo = "foo"; } _e = A_StaticMethod_StaticField; _A_StaticMethod_StaticField_foo_1 = { value: "foo" }; // Error class A_StaticMethod_StaticMethod { + static #foo() { } + static #foo() { } } - _f = A_StaticMethod_StaticMethod, _A_StaticMethod_StaticMethod_foo_1 = function _A_StaticMethod_StaticMethod_foo_1() { }, _A_StaticMethod_StaticMethod_foo_1 = function _A_StaticMethod_StaticMethod_foo_1() { }; + _f = A_StaticMethod_StaticMethod; // Error class A_StaticMethod_StaticGetter { + static #foo() { } + static get #foo() { return ""; } } - _g = A_StaticMethod_StaticGetter, _A_StaticMethod_StaticGetter_foo_get = function _A_StaticMethod_StaticGetter_foo_get() { return ""; }; + _g = A_StaticMethod_StaticGetter; // Error class A_StaticMethod_StaticSetter { + static #foo() { } + static set #foo(value) { } } - _h = A_StaticMethod_StaticSetter, _A_StaticMethod_StaticSetter_foo_set = function _A_StaticMethod_StaticSetter_foo_set(value) { }; + _h = A_StaticMethod_StaticSetter; } function StaticGetter() { var _a, _A_StaticGetter_Field_foo_get, _A_StaticGetter_Field_foo, _A_StaticGetter_Method_instances, _b, _A_StaticGetter_Method_foo_get, _A_StaticGetter_Method_foo, _A_StaticGetter_Getter_instances, _c, _A_StaticGetter_Getter_foo_get, _A_StaticGetter_Getter_foo_get_1, _A_StaticGetter_Setter_instances, _d, _A_StaticGetter_Setter_foo_get, _A_StaticGetter_Setter_foo_set, _e, _A_StaticGetter_StaticField_foo_get, _A_StaticGetter_StaticField_foo, _f, _A_StaticGetter_StaticMethod_foo_get, _A_StaticGetter_StaticMethod_foo, _g, _A_StaticGetter_StaticGetter_foo_get, _A_StaticGetter_StaticGetter_foo_get_1, _h, _A_StaticGetter_StaticSetter_foo_get, _A_StaticGetter_StaticSetter_foo_set; @@ -750,6 +842,8 @@ function StaticGetter() { constructor() { _A_StaticGetter_Field_foo.set(this, "foo"); } + static get #foo() { return ""; } + #foo = "foo"; } _a = A_StaticGetter_Field, _A_StaticGetter_Field_foo = new WeakMap(); // Error @@ -757,34 +851,46 @@ function StaticGetter() { constructor() { _A_StaticGetter_Method_instances.add(this); } + static get #foo() { return ""; } + #foo() { } } - _b = A_StaticGetter_Method, _A_StaticGetter_Method_instances = new WeakSet(), _A_StaticGetter_Method_foo = function _A_StaticGetter_Method_foo() { return ""; }, _A_StaticGetter_Method_foo = function _A_StaticGetter_Method_foo() { }; + _b = A_StaticGetter_Method, _A_StaticGetter_Method_instances = new WeakSet(); // Error class A_StaticGetter_Getter { constructor() { _A_StaticGetter_Getter_instances.add(this); } + static get #foo() { return ""; } + get #foo() { return ""; } } - _c = A_StaticGetter_Getter, _A_StaticGetter_Getter_instances = new WeakSet(), _A_StaticGetter_Getter_foo_get_1 = function _A_StaticGetter_Getter_foo_get_1() { return ""; }, _A_StaticGetter_Getter_foo_get_1 = function _A_StaticGetter_Getter_foo_get_1() { return ""; }; + _c = A_StaticGetter_Getter, _A_StaticGetter_Getter_instances = new WeakSet(); // Error class A_StaticGetter_Setter { constructor() { _A_StaticGetter_Setter_instances.add(this); } + static get #foo() { return ""; } + set #foo(value) { } } - _d = A_StaticGetter_Setter, _A_StaticGetter_Setter_instances = new WeakSet(), _A_StaticGetter_Setter_foo_get = function _A_StaticGetter_Setter_foo_get() { return ""; }, _A_StaticGetter_Setter_foo_set = function _A_StaticGetter_Setter_foo_set(value) { }; + _d = A_StaticGetter_Setter, _A_StaticGetter_Setter_instances = new WeakSet(); // Error class A_StaticGetter_StaticField { + static get #foo() { return ""; } + static #foo() { } } - _e = A_StaticGetter_StaticField, _A_StaticGetter_StaticField_foo = function _A_StaticGetter_StaticField_foo() { return ""; }, _A_StaticGetter_StaticField_foo = function _A_StaticGetter_StaticField_foo() { }; + _e = A_StaticGetter_StaticField; // Error class A_StaticGetter_StaticMethod { + static get #foo() { return ""; } + static #foo() { } } - _f = A_StaticGetter_StaticMethod, _A_StaticGetter_StaticMethod_foo = function _A_StaticGetter_StaticMethod_foo() { return ""; }, _A_StaticGetter_StaticMethod_foo = function _A_StaticGetter_StaticMethod_foo() { }; + _f = A_StaticGetter_StaticMethod; // Error class A_StaticGetter_StaticGetter { + static get #foo() { return ""; } + static get #foo() { return ""; } } - _g = A_StaticGetter_StaticGetter, _A_StaticGetter_StaticGetter_foo_get_1 = function _A_StaticGetter_StaticGetter_foo_get_1() { return ""; }, _A_StaticGetter_StaticGetter_foo_get_1 = function _A_StaticGetter_StaticGetter_foo_get_1() { return ""; }; + _g = A_StaticGetter_StaticGetter; // OK class A_StaticGetter_StaticSetter { } @@ -797,6 +903,8 @@ function StaticSetter() { constructor() { _A_StaticSetter_Field_foo.set(this, "foo"); } + static set #foo(value) { } + #foo = "foo"; } _a = A_StaticSetter_Field, _A_StaticSetter_Field_foo = new WeakMap(); // Error @@ -804,37 +912,49 @@ function StaticSetter() { constructor() { _A_StaticSetter_Method_instances.add(this); } + static set #foo(value) { } + #foo() { } } - _b = A_StaticSetter_Method, _A_StaticSetter_Method_instances = new WeakSet(), _A_StaticSetter_Method_foo = function _A_StaticSetter_Method_foo(value) { }, _A_StaticSetter_Method_foo = function _A_StaticSetter_Method_foo() { }; + _b = A_StaticSetter_Method, _A_StaticSetter_Method_instances = new WeakSet(); // Error class A_StaticSetter_Getter { constructor() { _A_StaticSetter_Getter_instances.add(this); } + static set #foo(value) { } + get #foo() { return ""; } } - _c = A_StaticSetter_Getter, _A_StaticSetter_Getter_instances = new WeakSet(), _A_StaticSetter_Getter_foo_set = function _A_StaticSetter_Getter_foo_set(value) { }, _A_StaticSetter_Getter_foo_get = function _A_StaticSetter_Getter_foo_get() { return ""; }; + _c = A_StaticSetter_Getter, _A_StaticSetter_Getter_instances = new WeakSet(); // Error class A_StaticSetter_Setter { constructor() { _A_StaticSetter_Setter_instances.add(this); } + static set #foo(value) { } + set #foo(value) { } } - _d = A_StaticSetter_Setter, _A_StaticSetter_Setter_instances = new WeakSet(), _A_StaticSetter_Setter_foo_set_1 = function _A_StaticSetter_Setter_foo_set_1(value) { }, _A_StaticSetter_Setter_foo_set_1 = function _A_StaticSetter_Setter_foo_set_1(value) { }; + _d = A_StaticSetter_Setter, _A_StaticSetter_Setter_instances = new WeakSet(); // Error class A_StaticSetter_StaticField { + static set #foo(value) { } + static #foo = "foo"; } _e = A_StaticSetter_StaticField; _A_StaticSetter_StaticField_foo = { value: "foo" }; // Error class A_StaticSetter_StaticMethod { + static set #foo(value) { } + static #foo() { } } - _f = A_StaticSetter_StaticMethod, _A_StaticSetter_StaticMethod_foo = function _A_StaticSetter_StaticMethod_foo(value) { }, _A_StaticSetter_StaticMethod_foo = function _A_StaticSetter_StaticMethod_foo() { }; + _f = A_StaticSetter_StaticMethod; // OK class A_StaticSetter_StaticGetter { } _g = A_StaticSetter_StaticGetter, _A_StaticSetter_StaticGetter_foo_set = function _A_StaticSetter_StaticGetter_foo_set(value) { }, _A_StaticSetter_StaticGetter_foo_get = function _A_StaticSetter_StaticGetter_foo_get() { return ""; }; // Error class A_StaticSetter_StaticSetter { + static set #foo(value) { } + static set #foo(value) { } } - _h = A_StaticSetter_StaticSetter, _A_StaticSetter_StaticSetter_foo_set_1 = function _A_StaticSetter_StaticSetter_foo_set_1(value) { }, _A_StaticSetter_StaticSetter_foo_set_1 = function _A_StaticSetter_StaticSetter_foo_set_1(value) { }; + _h = A_StaticSetter_StaticSetter; } diff --git a/tests/baselines/reference/privateNamesUnique-3.js b/tests/baselines/reference/privateNamesUnique-3.js index 0447e3cf6f852..5d4257eecd2c3 100644 --- a/tests/baselines/reference/privateNamesUnique-3.js +++ b/tests/baselines/reference/privateNamesUnique-3.js @@ -28,6 +28,8 @@ class A { // share the same lexical scope // https://tc39.es/proposal-class-fields/#prod-ClassBody } + #foo = 1; + static #foo = true; // error (duplicate) } _a = A, _A_foo = new WeakMap(); _A_foo_1 = { value: true }; // error (duplicate) From 89f746ac2af2b4c0a86b7ed1f1c2785a8def36e1 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Fri, 19 Mar 2021 18:42:00 +0200 Subject: [PATCH 64/73] Added check for WeakSet collision. --- package-lock.json | 1274 ++++++++--------- src/compiler/checker.ts | 20 +- .../privateNameWeakMapCollision.errors.txt | 6 +- .../reference/privateNameWeakMapCollision.js | 2 + .../privateNameWeakMapCollision.symbols | 7 +- .../privateNameWeakMapCollision.types | 3 + .../compiler/privateNameWeakMapCollision.ts | 1 + 7 files changed, 664 insertions(+), 649 deletions(-) diff --git a/package-lock.json b/package-lock.json index e73acefe1df89..2f6704a5a1ff7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -186,8 +186,8 @@ }, "@gulp-sourcemaps/identity-map": { "version": "2.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz", - "integrity": "sha1-puixq+yPeQ7GviuMUA5uaAN8ABk=", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz", + "integrity": "sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==", "dev": true, "requires": { "acorn": "^6.4.1", @@ -199,20 +199,20 @@ "dependencies": { "acorn": { "version": "6.4.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "source-map": { "version": "0.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "through2": { "version": "3.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-3.0.2.tgz", - "integrity": "sha1-mfiJMc/HYex2eLQdXXM2tbage/Q=", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "dev": true, "requires": { "inherits": "^2.0.4", @@ -223,7 +223,7 @@ }, "@gulp-sourcemaps/map-sources": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", "dev": true, "requires": { @@ -233,7 +233,7 @@ "dependencies": { "normalize-path": { "version": "2.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/normalize-path/-/normalize-path-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { @@ -242,8 +242,8 @@ }, "through2": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -280,8 +280,8 @@ }, "@octokit/auth-token": { "version": "2.4.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/auth-token/-/auth-token-2.4.5.tgz", - "integrity": "sha1-VozPuMtG82RB+sCUzjT3qHWxl/M=", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", + "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", "dev": true, "requires": { "@octokit/types": "^6.0.3" @@ -289,8 +289,8 @@ }, "@octokit/core": { "version": "3.3.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/core/-/core-3.3.1.tgz", - "integrity": "sha1-xrtroXGthKX0MIU6mIks/o+T2M0=", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.3.1.tgz", + "integrity": "sha512-Dc5NNQOYjgZU5S1goN6A/E500yXOfDUFRGQB8/2Tl16AcfvS3H9PudyOe3ZNE/MaVyHPIfC0htReHMJb1tMrvw==", "dev": true, "requires": { "@octokit/auth-token": "^2.4.4", @@ -304,8 +304,8 @@ }, "@octokit/endpoint": { "version": "6.0.11", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/endpoint/-/endpoint-6.0.11.tgz", - "integrity": "sha1-CCrcKuvKbc76H7OD9e+z7QgZSdE=", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz", + "integrity": "sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==", "dev": true, "requires": { "@octokit/types": "^6.0.3", @@ -315,8 +315,8 @@ }, "@octokit/graphql": { "version": "4.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/graphql/-/graphql-4.6.1.tgz", - "integrity": "sha1-+XVIakbJS32+WKDKdRk17cfjLMk=", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.1.tgz", + "integrity": "sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA==", "dev": true, "requires": { "@octokit/request": "^5.3.0", @@ -326,14 +326,14 @@ }, "@octokit/openapi-types": { "version": "5.3.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/openapi-types/-/openapi-types-5.3.2.tgz", - "integrity": "sha1-uKxDxcPQCu9ho0z3ROMVEQx43rQ=", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-5.3.2.tgz", + "integrity": "sha512-NxF1yfYOUO92rCx3dwvA2onF30Vdlg7YUkMVXkeptqpzA3tRLplThhFleV/UKWFgh7rpKu1yYRbvNDUtzSopKA==", "dev": true }, "@octokit/plugin-paginate-rest": { "version": "2.13.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.2.tgz", - "integrity": "sha1-e4JEoN16MRNboq3FilMyE4N7/oc=", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.2.tgz", + "integrity": "sha512-mjfBcla00UNS4EI/NN7toEbUM45ow3kk4go+LxsXAFLQodsrXcIZbftUhXTqi6ZKd+r6bcqMI+Lv4dshLtFjww==", "dev": true, "requires": { "@octokit/types": "^6.11.0" @@ -341,14 +341,14 @@ }, "@octokit/plugin-request-log": { "version": "1.0.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz", - "integrity": "sha1-cKYr4hPh7cBLuIl+5IwxFIL5cA0=", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz", + "integrity": "sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ==", "dev": true }, "@octokit/plugin-rest-endpoint-methods": { "version": "4.13.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.13.5.tgz", - "integrity": "sha1-rXYoW4L+Bfu0rfJ3SpyIfzU0qIA=", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.13.5.tgz", + "integrity": "sha512-kYKcWkFm4Ldk8bZai2RVEP1z97k1C/Ay2FN9FNTBg7JIyKoiiJjks4OtT6cuKeZX39tqa+C3J9xeYc6G+6g8uQ==", "dev": true, "requires": { "@octokit/types": "^6.12.2", @@ -357,8 +357,8 @@ }, "@octokit/request": { "version": "5.4.14", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/request/-/request-5.4.14.tgz", - "integrity": "sha1-7F+W94MzuyrzkK+l/2bxFLBjvJY=", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.14.tgz", + "integrity": "sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA==", "dev": true, "requires": { "@octokit/endpoint": "^6.0.1", @@ -373,16 +373,16 @@ "dependencies": { "node-fetch": { "version": "2.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha1-BFvTI2Mfdu0uK1VXM5RBa2OaAFI=", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "dev": true } } }, "@octokit/request-error": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/request-error/-/request-error-2.0.5.tgz", - "integrity": "sha1-csyR7chwKBrVg6QmGSVrOAxgAUM=", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.5.tgz", + "integrity": "sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==", "dev": true, "requires": { "@octokit/types": "^6.0.3", @@ -392,8 +392,8 @@ }, "@octokit/rest": { "version": "18.3.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/rest/-/rest-18.3.5.tgz", - "integrity": "sha1-qJkD1G4LQnO9MjRnTsJ3emUdaKs=", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.3.5.tgz", + "integrity": "sha512-ZPeRms3WhWxQBEvoIh0zzf8xdU2FX0Capa7+lTca8YHmRsO3QNJzf1H3PcuKKsfgp91/xVDRtX91sTe1kexlbw==", "dev": true, "requires": { "@octokit/core": "^3.2.3", @@ -404,8 +404,8 @@ }, "@octokit/types": { "version": "6.12.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@octokit/types/-/types-6.12.2.tgz", - "integrity": "sha1-W0St0HmkeLjrJ9eM84TMR+RBE2I=", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.12.2.tgz", + "integrity": "sha512-kCkiN8scbCmSq+gwdJV0iLgHc0O/GTPY1/cffo9kECu1MvatLPh9E+qFhfRIktKfHEA6ZYvv6S1B4Wnv3bi3pA==", "dev": true, "requires": { "@octokit/openapi-types": "^5.3.2" @@ -413,8 +413,8 @@ }, "@types/browserify": { "version": "12.0.36", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/browserify/-/browserify-12.0.36.tgz", - "integrity": "sha1-p7ZiVQvUECs4uoPvStbbhx6pEzE=", + "resolved": "https://registry.npmjs.org/@types/browserify/-/browserify-12.0.36.tgz", + "integrity": "sha512-hYXvPod5upkYTC7auziOATFsu/0MGxozbzNI80sZV044JTF7UtstHeNOM52b+bg7/taZ3fheK7oeb+jpm4C0/w==", "dev": true, "requires": { "@types/insert-module-globals": "*", @@ -423,14 +423,14 @@ }, "@types/chai": { "version": "4.2.15", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/chai/-/chai-4.2.15.tgz", - "integrity": "sha1-t6bSY8LOz0S23poFHPSWJJsVRVM=", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz", + "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==", "dev": true }, "@types/convert-source-map": { "version": "1.5.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-1NGA3WrcXLaK2ZvVbgPWN4gfRhY=", + "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha512-laiDIXqqthjJlyAMYAXOtN3N8+UlbM+KvZi4BaY5ZOekmVkBs/UxfK5O0HWeJVG2eW8F+Mu2ww13fTX+kY1FlQ==", "dev": true }, "@types/expect": { @@ -441,8 +441,8 @@ }, "@types/glob": { "version": "7.1.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "requires": { "@types/minimatch": "*", @@ -472,8 +472,8 @@ }, "@types/gulp-concat": { "version": "0.0.32", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/gulp-concat/-/gulp-concat-0.0.32.tgz", - "integrity": "sha1-ckhgKLHPX6qUyMHPNMYmUxzsrNY=", + "resolved": "https://registry.npmjs.org/@types/gulp-concat/-/gulp-concat-0.0.32.tgz", + "integrity": "sha512-CUCFADlITzzBfBa2bdGzhKtvBr4eFh+evb+4igVbvPoO5RyPfHifmyQlZl6lM7q19+OKncRlFXDU7B4X9Ayo2g==", "dev": true, "requires": { "@types/node": "*" @@ -481,8 +481,8 @@ }, "@types/gulp-newer": { "version": "0.0.31", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/gulp-newer/-/gulp-newer-0.0.31.tgz", - "integrity": "sha1-818j0eT+DXuP9pnknRwhdmy546c=", + "resolved": "https://registry.npmjs.org/@types/gulp-newer/-/gulp-newer-0.0.31.tgz", + "integrity": "sha512-e7J/Zv5Wd7CC0WpuA2syWVitgwrkG0u221e41w7r07XUR6hMH6kHPkq9tUrusHkbeW8QbuLbis5fODOwQCyggQ==", "dev": true, "requires": { "@types/node": "*" @@ -508,8 +508,8 @@ }, "@types/insert-module-globals": { "version": "7.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-I0+SY/azFQiCh+NZfX6YAzgEoDE=", + "resolved": "https://registry.npmjs.org/@types/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha512-qtSfo/jdYHO4jNO6QCp4CwR/TPrvR39Yan5K4nPU1iCmxcnTWiERKDXcvFGuXEmfpjrHeOCvrZPa0UrUsy+mvA==", "dev": true, "requires": { "@types/node": "*" @@ -517,8 +517,8 @@ }, "@types/jake": { "version": "0.0.32", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/jake/-/jake-0.0.32.tgz", - "integrity": "sha1-3PoC8W41EHrOXvDWy0DKX2IPhzk=", + "resolved": "https://registry.npmjs.org/@types/jake/-/jake-0.0.32.tgz", + "integrity": "sha512-uDj5tLTFknk8qmYCTan+1A8eumCxUEa+T8vhY8qf1Ll+uHmA/j9Q0ejxmLY4Bqadphg/nL7FYimf2oQZuzqkbQ==", "dev": true, "requires": { "@types/node": "*" @@ -538,8 +538,8 @@ }, "@types/merge2": { "version": "1.3.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha1-AVJSbohRhK6tUkaYxCrq5chaoec=", + "resolved": "https://registry.npmjs.org/@types/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-3xFWjsGhm5GCVlRrcrrVr9oapPxpbG5M3G/4JGF+Gra++7DWoeDOQphCEhyMpbpbptD3w/4PesYIMby/yHrzkQ==", "dev": true, "requires": { "@types/node": "*" @@ -547,26 +547,26 @@ }, "@types/microsoft__typescript-etw": { "version": "0.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/microsoft__typescript-etw/-/microsoft__typescript-etw-0.1.1.tgz", - "integrity": "sha1-8snYNYWIJ0IvO1iF+a+wy9rZU4E=", + "resolved": "https://registry.npmjs.org/@types/microsoft__typescript-etw/-/microsoft__typescript-etw-0.1.1.tgz", + "integrity": "sha512-zdgHyZJEwbFKI6zhOqWPsNMhlrAk6qMrn9VMA6VQtRt/F+jNJKeaHIMysuO9oTLv0fWcli0gwUrMv8MeFyb3Sw==", "dev": true }, "@types/minimatch": { "version": "3.0.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, "@types/minimist": { "version": "1.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/minimist/-/minimist-1.2.1.tgz", - "integrity": "sha1-KD9mn/dte4Jg34q3pCYsyD2YglY=", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, "@types/mkdirp": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/mkdirp/-/mkdirp-1.0.1.tgz", - "integrity": "sha1-CTC5SJFKeFh941RYuGyQe26Yu/Y=", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-1.0.1.tgz", + "integrity": "sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q==", "dev": true, "requires": { "@types/node": "*" @@ -574,20 +574,20 @@ }, "@types/mocha": { "version": "8.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/mocha/-/mocha-8.2.1.tgz", - "integrity": "sha1-8/OuRZDFOG/HxUOq6beNTPMP/uk=", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-NysN+bNqj6E0Hv4CTGWSlPzMW6vTKjDpOteycDkV4IWBsO+PU48JonrPzV9ODjiI2XrjmA05KInLgF5ivZ/YGQ==", "dev": true }, "@types/ms": { "version": "0.7.31", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha1-MbfKZAcSij0rvCf+LSGzRTl/YZc=", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, "@types/node": { "version": "14.14.35", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/node/-/node-14.14.35.tgz", - "integrity": "sha1-QslTpOKxirkx9yR35wEhcvT/oxM=", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz", + "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==", "dev": true }, "@types/node-fetch": { @@ -602,14 +602,14 @@ }, "@types/q": { "version": "1.5.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/q/-/q-1.5.4.tgz", - "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", "dev": true }, "@types/source-map-support": { "version": "0.5.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/source-map-support/-/source-map-support-0.5.3.tgz", - "integrity": "sha1-rLaz5JnCBpJVLRaTTBYWLIRZThY=", + "resolved": "https://registry.npmjs.org/@types/source-map-support/-/source-map-support-0.5.3.tgz", + "integrity": "sha512-fvjMjVH8Rmokw2dWh1dkj90iX5R8FPjeZzjNH+6eFXReh0QnHFf1YBl3B0CF0RohIAA3SDRJsGeeUWKl6d7HqA==", "dev": true, "requires": { "source-map": "^0.6.0" @@ -617,16 +617,16 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "@types/through2": { "version": "2.0.36", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@types/through2/-/through2-2.0.36.tgz", - "integrity": "sha1-Nf2g22NYJ9RMDgjiyUZT5kdXSgA=", + "resolved": "https://registry.npmjs.org/@types/through2/-/through2-2.0.36.tgz", + "integrity": "sha512-vuifQksQHJXhV9McpVsXKuhnf3lsoX70PnhcqIAbs9dqLH2NgrGz0DzZPDY3+Yh6eaRqcE1gnCQ6QhBn1/PT5A==", "dev": true, "requires": { "@types/node": "*" @@ -834,14 +834,14 @@ }, "@ungap/promise-all-settled": { "version": "1.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha1-qlgEJxHW4ydd033Fl+XTHowpCkQ=", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "JSONStream": { "version": "1.3.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { "jsonparse": "^1.2.0", @@ -850,7 +850,7 @@ }, "abbrev": { "version": "1.0.9", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/abbrev/-/abbrev-1.0.9.tgz", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", "dev": true }, @@ -868,8 +868,8 @@ }, "acorn-node": { "version": "1.8.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha1-EUyV1kU55T3t4j3oudlt98euKvg=", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "requires": { "acorn": "^7.0.0", @@ -879,8 +879,8 @@ }, "acorn-walk": { "version": "7.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "aggregate-error": { @@ -907,7 +907,7 @@ }, "amdefine": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/amdefine/-/amdefine-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true, "optional": true @@ -923,7 +923,7 @@ }, "ansi-cyan": { "version": "0.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", "dev": true, "requires": { @@ -932,7 +932,7 @@ }, "ansi-gray": { "version": "0.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ansi-gray/-/ansi-gray-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", "dev": true, "requires": { @@ -941,7 +941,7 @@ }, "ansi-red": { "version": "0.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ansi-red/-/ansi-red-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", "dev": true, "requires": { @@ -956,8 +956,8 @@ }, "ansi-styles": { "version": "4.3.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -1058,7 +1058,7 @@ }, "array-filter": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/array-filter/-/array-filter-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", "dev": true }, @@ -1157,8 +1157,8 @@ }, "asn1.js": { "version": "5.4.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", @@ -1169,16 +1169,16 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "assert": { "version": "1.5.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/assert/-/assert-1.5.0.tgz", - "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { "object-assign": "^4.1.1", @@ -1187,13 +1187,13 @@ "dependencies": { "inherits": { "version": "2.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/inherits/-/inherits-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, "util": { "version": "0.10.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -1204,8 +1204,8 @@ }, "assertion-error": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "assign-symbols": { @@ -1222,8 +1222,8 @@ }, "async": { "version": "3.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/async/-/async-3.2.0.tgz", - "integrity": "sha1-s6JoXF67ZB094C0WEALGD8n4VyA=", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, "async-done": { @@ -1273,8 +1273,8 @@ }, "available-typed-arrays": { "version": "1.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha1-awmMqdgDkHnuP3f3t4PESAulE/U=", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", "dev": true, "requires": { "array-filter": "^1.0.0" @@ -1371,14 +1371,14 @@ }, "base64-js": { "version": "1.5.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "before-after-hook": { "version": "2.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/before-after-hook/-/before-after-hook-2.2.0.tgz", - "integrity": "sha1-CcQNkuk2xkd3qjhcTpuQT4FH6vA=", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.0.tgz", + "integrity": "sha512-jH6rKQIfroBbhEXVmI7XmXe3ix5S/PgJqpzdDPnR8JGLHWNYLsYZ6tK5iWOF/Ra3oqEX0NobXGlzbiylIzVphQ==", "dev": true }, "binary-extensions": { @@ -1399,8 +1399,8 @@ }, "bn.js": { "version": "5.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, "brace-expansion": { @@ -1444,14 +1444,14 @@ }, "brorand": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/brorand/-/brorand-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, "browser-pack": { "version": "6.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha1-w0uhDQuc4WK1ryJ8cTHJLC7NV3Q=", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { "JSONStream": "^1.0.3", @@ -1464,8 +1464,8 @@ "dependencies": { "through2": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -1485,14 +1485,14 @@ }, "browser-stdout": { "version": "1.3.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "browserify": { "version": "17.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browserify/-/browserify-17.0.0.tgz", - "integrity": "sha1-TEj+1sAr+itR/TtnD924BXI83CI=", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", + "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "requires": { "JSONStream": "^1.0.3", @@ -1547,8 +1547,8 @@ "dependencies": { "browser-resolve": { "version": "2.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha1-mbcwTLOS+Nc9unQbstfaKMbXhCs=", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "requires": { "resolve": "^1.17.0" @@ -1556,8 +1556,8 @@ "dependencies": { "resolve": { "version": "1.20.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { "is-core-module": "^2.2.0", @@ -1568,8 +1568,8 @@ }, "is-core-module": { "version": "2.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -1577,8 +1577,8 @@ }, "through2": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -1589,8 +1589,8 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { "buffer-xor": "^1.0.3", @@ -1603,8 +1603,8 @@ }, "browserify-cipher": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { "browserify-aes": "^1.0.4", @@ -1614,8 +1614,8 @@ }, "browserify-des": { "version": "1.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { "cipher-base": "^1.0.1", @@ -1626,8 +1626,8 @@ }, "browserify-rsa": { "version": "4.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0=", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { "bn.js": "^5.0.0", @@ -1636,8 +1636,8 @@ }, "browserify-sign": { "version": "4.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { "bn.js": "^5.1.1", @@ -1653,8 +1653,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -1664,16 +1664,16 @@ }, "safe-buffer": { "version": "5.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true } } }, "browserify-zlib": { "version": "0.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { "pako": "~1.0.5" @@ -1681,8 +1681,8 @@ }, "buffer": { "version": "5.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha1-3Vf6DxCaxZxgJHkETcp7iz0LcdY=", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -1703,13 +1703,13 @@ }, "buffer-xor": { "version": "1.0.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/buffer-xor/-/buffer-xor-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "builtin-status-codes": { "version": "3.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, @@ -1732,14 +1732,14 @@ }, "cached-path-relative": { "version": "1.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha1-oT30GW0md2IgzDNW6xR6Utuixts=", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, "call-bind": { "version": "1.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -1760,8 +1760,8 @@ }, "chai": { "version": "4.3.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/chai/-/chai-4.3.4.tgz", - "integrity": "sha1-tV5lWzHh6scJm+TAjCGWT84ubEk=", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -1774,8 +1774,8 @@ }, "chalk": { "version": "4.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -1784,7 +1784,7 @@ }, "check-error": { "version": "1.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/check-error/-/check-error-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, @@ -1810,8 +1810,8 @@ }, "cipher-base": { "version": "1.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -1897,26 +1897,26 @@ }, "clone": { "version": "2.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/clone/-/clone-2.1.2.tgz", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, "clone-buffer": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/clone-buffer/-/clone-buffer-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", "dev": true }, "clone-stats": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/clone-stats/-/clone-stats-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, "cloneable-readable": { "version": "1.1.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha1-EgoAywU7+2OiIucJ+Wg+ouEdjOw=", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -1953,8 +1953,8 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -1962,8 +1962,8 @@ }, "color-name": { "version": "1.1.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "color-support": { @@ -1974,7 +1974,7 @@ }, "combine-source-map": { "version": "0.8.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/combine-source-map/-/combine-source-map-0.8.0.tgz", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { @@ -1986,7 +1986,7 @@ "dependencies": { "convert-source-map": { "version": "1.1.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/convert-source-map/-/convert-source-map-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true } @@ -2033,8 +2033,8 @@ }, "concat-with-sourcemaps": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha1-1OqT8FriV5CVG5nns7CeOQikCC4=", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "dev": true, "requires": { "source-map": "^0.6.1" @@ -2042,21 +2042,21 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "console-browserify": { "version": "1.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "constants-browserify": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/constants-browserify/-/constants-browserify-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, @@ -2068,8 +2068,8 @@ }, "convert-source-map": { "version": "1.7.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -2110,8 +2110,8 @@ }, "create-ecdh": { "version": "4.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -2120,16 +2120,16 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "create-hash": { "version": "1.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { "cipher-base": "^1.0.1", @@ -2141,8 +2141,8 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { "cipher-base": "^1.0.3", @@ -2176,8 +2176,8 @@ }, "crypto-browserify": { "version": "3.12.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { "browserify-cipher": "^1.0.0", @@ -2195,8 +2195,8 @@ }, "css": { "version": "3.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/css/-/css-3.0.0.tgz", - "integrity": "sha1-REek1Y/dAzZ8UWyp9krjZc7kql0=", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dev": true, "requires": { "inherits": "^2.0.4", @@ -2206,14 +2206,14 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-resolve": { "version": "0.6.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha1-PZ34fiNrU/FtAeWBUPx3EROOXtI=", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "dev": true, "requires": { "atob": "^2.1.2", @@ -2234,8 +2234,8 @@ }, "dash-ast": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha1-EgKbpfsviqbwqGF5WyPBtLbCfTc=", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, "debug": { @@ -2257,8 +2257,8 @@ }, "debug-fabulous": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/debug-fabulous/-/debug-fabulous-1.1.0.tgz", - "integrity": "sha1-r4oIYyRlIk70F0qfBjCMPCoevI4=", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", + "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", "dev": true, "requires": { "debug": "3.X", @@ -2268,8 +2268,8 @@ "dependencies": { "debug": { "version": "3.2.7", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/debug/-/debug-3.2.7.tgz", - "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -2291,8 +2291,8 @@ }, "deep-eql": { "version": "3.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -2378,7 +2378,7 @@ }, "defined": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/defined/-/defined-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, @@ -2406,14 +2406,14 @@ }, "deprecation": { "version": "2.3.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha1-Y2jL20Cr8zc7UlrIfkomDDpwCRk=", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, "deps-sort": { "version": "2.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/deps-sort/-/deps-sort-2.0.1.tgz", - "integrity": "sha1-nf3IdtK87DOGtoKaxSFizan6II0=", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "requires": { "JSONStream": "^1.0.3", @@ -2424,8 +2424,8 @@ "dependencies": { "through2": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -2436,8 +2436,8 @@ }, "des.js": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -2452,14 +2452,14 @@ }, "detect-newline": { "version": "2.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/detect-newline/-/detect-newline-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "dev": true }, "detective": { "version": "5.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/detective/-/detective-5.2.0.tgz", - "integrity": "sha1-/rKnfoW5BOzepFmtiXzJCpm9Kns=", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, "requires": { "acorn-node": "^1.6.1", @@ -2475,8 +2475,8 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -2486,8 +2486,8 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -2512,13 +2512,13 @@ }, "domain-browser": { "version": "1.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "duplexer2": { "version": "0.1.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/duplexer2/-/duplexer2-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { @@ -2560,8 +2560,8 @@ }, "elliptic": { "version": "6.5.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s=", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { "bn.js": "^4.11.9", @@ -2575,8 +2575,8 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -2750,8 +2750,8 @@ }, "escalade": { "version": "3.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { @@ -2762,7 +2762,7 @@ }, "escodegen": { "version": "1.8.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/escodegen/-/escodegen-1.8.1.tgz", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { @@ -2775,19 +2775,19 @@ "dependencies": { "esprima": { "version": "2.7.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/esprima/-/esprima-2.7.3.tgz", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, "estraverse": { "version": "1.9.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/estraverse/-/estraverse-1.9.3.tgz", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", "dev": true }, "source-map": { "version": "0.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, "optional": true, @@ -3187,7 +3187,7 @@ }, "event-emitter": { "version": "0.3.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/event-emitter/-/event-emitter-0.3.5.tgz", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { @@ -3197,14 +3197,14 @@ }, "events": { "version": "3.3.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/events/-/events-3.3.0.tgz", - "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "evp_bytestokey": { "version": "1.0.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { "md5.js": "^1.3.4", @@ -3390,8 +3390,8 @@ }, "fancy-log": { "version": "1.3.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha1-28GRVPVYaQFQojlToK29A1vkX8c=", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, "requires": { "ansi-gray": "^0.1.1", @@ -3488,8 +3488,8 @@ }, "fast-safe-stringify": { "version": "2.0.7", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha1-EkqohYmSYfaK7bQqfAgN6dpgh0M=", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, "fastq": { @@ -3593,8 +3593,8 @@ }, "flat": { "version": "5.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/flat/-/flat-5.0.2.tgz", - "integrity": "sha1-jKb+MyBp/6nTJMMnGYxZglnOskE=", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "flat-cache": { @@ -3652,7 +3652,7 @@ }, "foreach": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/foreach/-/foreach-2.0.5.tgz", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, @@ -3712,7 +3712,7 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/fs.realpath/-/fs.realpath-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, @@ -3740,8 +3740,8 @@ }, "get-assigned-identifiers": { "version": "1.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha1-bb9BHeZIy6+NkWnrsNLVdhkeL/E=", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, "get-caller-file": { @@ -3752,14 +3752,14 @@ }, "get-func-name": { "version": "2.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/get-func-name/-/get-func-name-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, "get-intrinsic": { "version": "1.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -3796,8 +3796,8 @@ }, "glob": { "version": "7.1.6", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/glob/-/glob-7.1.6.tgz", - "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3928,8 +3928,8 @@ }, "growl": { "version": "1.10.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/growl/-/growl-1.10.5.tgz", - "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "gulp": { @@ -3974,7 +3974,7 @@ }, "gulp-concat": { "version": "2.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/gulp-concat/-/gulp-concat-2.6.1.tgz", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", "dev": true, "requires": { @@ -3985,8 +3985,8 @@ "dependencies": { "through2": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -3997,7 +3997,7 @@ }, "gulp-insert": { "version": "0.5.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/gulp-insert/-/gulp-insert-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/gulp-insert/-/gulp-insert-0.5.0.tgz", "integrity": "sha1-MjE/E+SiPPWsylzl8MCAkjx3hgI=", "dev": true, "requires": { @@ -4007,13 +4007,13 @@ "dependencies": { "isarray": { "version": "0.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/isarray/-/isarray-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { "version": "1.1.14", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -4025,7 +4025,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -4033,8 +4033,8 @@ }, "gulp-newer": { "version": "1.4.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/gulp-newer/-/gulp-newer-1.4.0.tgz", - "integrity": "sha1-JSQ+1urI9UYrlYlODUGTexEuZfM=", + "resolved": "https://registry.npmjs.org/gulp-newer/-/gulp-newer-1.4.0.tgz", + "integrity": "sha512-h79fGO55S/P9eAADbLAP9aTtVYpLSR1ONj08VPaSdVVNVYhTS8p1CO1TW7kEMu+hC+sytmCqcUr5LesvZEtDoQ==", "dev": true, "requires": { "glob": "^7.0.3", @@ -4044,7 +4044,7 @@ "dependencies": { "arr-diff": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/arr-diff/-/arr-diff-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { @@ -4054,19 +4054,19 @@ }, "arr-union": { "version": "2.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/arr-union/-/arr-union-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", "dev": true }, "array-slice": { "version": "0.2.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/array-slice/-/array-slice-0.2.3.tgz", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true }, "extend-shallow": { "version": "1.1.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/extend-shallow/-/extend-shallow-1.1.4.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { @@ -4075,13 +4075,13 @@ }, "kind-of": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/kind-of/-/kind-of-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", "dev": true }, "plugin-error": { "version": "0.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/plugin-error/-/plugin-error-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { @@ -4096,14 +4096,14 @@ }, "gulp-rename": { "version": "2.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/gulp-rename/-/gulp-rename-2.0.0.tgz", - "integrity": "sha1-m7w5YrDA9S/GfNXq/2wiPsW5z2w=", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", + "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", "dev": true }, "gulp-sourcemaps": { "version": "3.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", - "integrity": "sha1-LhVOGi7+0DPA5IATlp5vMDN7J0M=", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", + "integrity": "sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==", "dev": true, "requires": { "@gulp-sourcemaps/identity-map": "^2.0.1", @@ -4121,20 +4121,20 @@ "dependencies": { "acorn": { "version": "6.4.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "source-map": { "version": "0.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "through2": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -4154,8 +4154,8 @@ }, "handlebars": { "version": "4.7.7", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha1-nOM0FqrQLb1sj6+oJA1dmABJRaE=", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -4167,8 +4167,8 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -4183,14 +4183,14 @@ }, "has-bigints": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM=", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { @@ -4232,8 +4232,8 @@ }, "hash-base": { "version": "3.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { "inherits": "^2.0.4", @@ -4243,8 +4243,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -4254,16 +4254,16 @@ }, "safe-buffer": { "version": "5.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true } } }, "hash.js": { "version": "1.1.7", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -4272,13 +4272,13 @@ }, "he": { "version": "1.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/he/-/he-1.2.0.tgz", - "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hmac-drbg": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { @@ -4304,20 +4304,20 @@ }, "htmlescape": { "version": "1.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/htmlescape/-/htmlescape-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, "https-browserify": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/https-browserify/-/https-browserify-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, "ieee754": { "version": "1.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "ignore": { @@ -4350,7 +4350,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/inflight/-/inflight-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { @@ -4372,7 +4372,7 @@ }, "inline-source-map": { "version": "0.6.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/inline-source-map/-/inline-source-map-0.6.2.tgz", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { @@ -4381,8 +4381,8 @@ }, "insert-module-globals": { "version": "7.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/insert-module-globals/-/insert-module-globals-7.2.1.tgz", - "integrity": "sha1-1eMxhRgaTh8zsV978QDukYkNXLM=", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "requires": { "JSONStream": "^1.0.3", @@ -4399,8 +4399,8 @@ "dependencies": { "through2": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -4459,8 +4459,8 @@ }, "is-arguments": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk=", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "dev": true, "requires": { "call-bind": "^1.0.0" @@ -4474,8 +4474,8 @@ }, "is-bigint": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha1-aSMFHfy8dkJ4VAuc4OazITql68I=", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", "dev": true }, "is-binary-path": { @@ -4489,8 +4489,8 @@ }, "is-boolean-object": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha1-4qqtOjqPyjTCj27uE1sVbtJYf/A=", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", "dev": true, "requires": { "call-bind": "^1.0.0" @@ -4580,8 +4580,8 @@ }, "is-generator-function": { "version": "1.0.8", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-generator-function/-/is-generator-function-1.0.8.tgz", - "integrity": "sha1-37XCsSDgKwqNnSxoBs1WIaqSL3s=", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", + "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", "dev": true }, "is-glob": { @@ -4626,8 +4626,8 @@ }, "is-number-object": { "version": "1.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha1-NqyV50HPGLKD/B3fXoPaeY4+wZc=", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", "dev": true }, "is-path-cwd": { @@ -4644,20 +4644,20 @@ }, "is-plain-obj": { "version": "2.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-plain-object": { "version": "5.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q=", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true }, "is-promise": { "version": "2.2.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha1-OauVnMv5p3TPB597QMeib3YxNfE=", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true }, "is-regex": { @@ -4699,8 +4699,8 @@ }, "is-typed-array": { "version": "1.1.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha1-8y5uCWRV4ynre0I4YkVqohPw604=", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", "dev": true, "requires": { "available-typed-arrays": "^1.0.2", @@ -4712,8 +4712,8 @@ "dependencies": { "es-abstract": { "version": "1.18.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha1-q4CzWe7Lft5MKYAAOQvFrD7HtaQ=", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4736,28 +4736,28 @@ "dependencies": { "has-symbols": { "version": "1.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true } } }, "is-callable": { "version": "1.2.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha1-ix4FALc6HXbHBIdjbzaOUZ3o244=", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, "is-negative-zero": { "version": "2.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, "is-regex": { "version": "1.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha1-gcjr3k2xQvLPHFP8htakV4gmYlE=", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4766,14 +4766,14 @@ }, "object-inspect": { "version": "1.9.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo=", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object.assign": { "version": "4.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -4784,8 +4784,8 @@ }, "string.prototype.trimend": { "version": "1.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4794,8 +4794,8 @@ }, "string.prototype.trimstart": { "version": "1.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4851,7 +4851,7 @@ }, "istanbul": { "version": "0.4.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/istanbul/-/istanbul-0.4.5.tgz", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { @@ -4873,19 +4873,19 @@ "dependencies": { "async": { "version": "1.5.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, "esprima": { "version": "2.7.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/esprima/-/esprima-2.7.3.tgz", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, "glob": { "version": "5.0.15", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/glob/-/glob-5.0.15.tgz", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { @@ -4898,14 +4898,14 @@ }, "has-flag": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/has-flag/-/has-flag-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, "mkdirp": { "version": "0.5.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -4913,7 +4913,7 @@ }, "supports-color": { "version": "3.2.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/supports-color/-/supports-color-3.2.3.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { @@ -4977,7 +4977,7 @@ }, "jsonparse": { "version": "1.3.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/jsonparse/-/jsonparse-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, @@ -4989,7 +4989,7 @@ }, "kew": { "version": "0.7.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/kew/-/kew-0.7.0.tgz", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", "dev": true }, @@ -5001,8 +5001,8 @@ }, "labeled-stream-splicer": { "version": "2.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha1-QqQaFqvNRv0EYwbPTyw1dv/7HCE=", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -5048,7 +5048,7 @@ }, "levn": { "version": "0.3.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/levn/-/levn-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { @@ -5113,14 +5113,14 @@ }, "lodash.memoize": { "version": "3.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, "log-symbols": { "version": "4.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha1-abPMRtIPRI7M23XqH6cz2eghySA=", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "requires": { "chalk": "^4.0.0" @@ -5128,7 +5128,7 @@ }, "lru-queue": { "version": "0.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/lru-queue/-/lru-queue-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", "dev": true, "requires": { @@ -5214,8 +5214,8 @@ }, "md5.js": { "version": "1.3.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { "hash-base": "^3.0.0", @@ -5236,8 +5236,8 @@ }, "memoizee": { "version": "0.4.15", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha1-5vPS2oY/MY0CIlORgppsWVZVW3I=", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "dev": true, "requires": { "d": "^1.0.1", @@ -5252,16 +5252,16 @@ "dependencies": { "next-tick": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha1-GDbuMK1W1n7ygbIr0Zn3CUSbNes=", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true } } }, "merge2": { "version": "1.4.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "micromatch": { @@ -5287,8 +5287,8 @@ }, "miller-rabin": { "version": "4.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { "bn.js": "^4.0.0", @@ -5297,8 +5297,8 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -5326,13 +5326,13 @@ }, "minimalistic-assert": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, @@ -5347,8 +5347,8 @@ }, "minimist": { "version": "1.2.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "mixin-deep": { @@ -5383,20 +5383,20 @@ }, "mkdirp": { "version": "1.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, "mkdirp-classic": { "version": "0.5.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha1-+hDJEVzG2IZb4iG6R+6b7XhgERM=", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, "mocha": { "version": "8.3.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha1-U0BvGV+ob73r5x+LHG+yMiHWn8w=", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -5428,14 +5428,14 @@ "dependencies": { "ansi-colors": { "version": "4.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "anymatch": { "version": "3.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -5444,20 +5444,20 @@ }, "argparse": { "version": "2.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "binary-extensions": { "version": "2.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "braces": { "version": "3.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/braces/-/braces-3.0.2.tgz", - "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" @@ -5465,8 +5465,8 @@ }, "chokidar": { "version": "3.5.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha1-7pznu+vSt59J8wR5nVRo4x4U5oo=", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, "requires": { "anymatch": "~3.1.1", @@ -5481,8 +5481,8 @@ }, "cliui": { "version": "7.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -5492,8 +5492,8 @@ }, "debug": { "version": "4.3.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/debug/-/debug-4.3.1.tgz", - "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -5501,34 +5501,34 @@ "dependencies": { "ms": { "version": "2.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "diff": { "version": "5.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/diff/-/diff-5.0.0.tgz", - "integrity": "sha1-ftatdthZ0DB4fsNYVfWx2vMdhSs=", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "emoji-regex": { "version": "8.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "escape-string-regexp": { "version": "4.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "fill-range": { "version": "7.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -5536,8 +5536,8 @@ }, "find-up": { "version": "5.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { "locate-path": "^6.0.0", @@ -5546,21 +5546,21 @@ }, "fsevents": { "version": "2.3.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, "get-caller-file": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "glob-parent": { "version": "5.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -5568,8 +5568,8 @@ }, "is-binary-path": { "version": "2.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" @@ -5577,20 +5577,20 @@ }, "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-number": { "version": "7.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "js-yaml": { "version": "4.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha1-9Ca8D/S0BRkmzViMcRExg0CaEh8=", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -5598,8 +5598,8 @@ }, "locate-path": { "version": "6.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha1-VTIeswn+u8WcSAHZMackUqaB0oY=", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { "p-locate": "^5.0.0" @@ -5607,8 +5607,8 @@ }, "p-limit": { "version": "3.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { "yocto-queue": "^0.1.0" @@ -5616,8 +5616,8 @@ }, "p-locate": { "version": "5.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { "p-limit": "^3.0.2" @@ -5625,14 +5625,14 @@ }, "path-exists": { "version": "4.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "readdirp": { "version": "3.5.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -5640,8 +5640,8 @@ }, "string-width": { "version": "4.2.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -5651,8 +5651,8 @@ }, "supports-color": { "version": "8.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -5660,8 +5660,8 @@ }, "to-regex-range": { "version": "5.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" @@ -5669,8 +5669,8 @@ }, "which": { "version": "2.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/which/-/which-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -5678,8 +5678,8 @@ }, "wrap-ansi": { "version": "7.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -5689,14 +5689,14 @@ }, "y18n": { "version": "5.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha1-h2nsCNA7HqLfJQCs71YXQ7u5qxg=", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", "dev": true }, "yargs": { "version": "16.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -5710,22 +5710,22 @@ }, "yargs-parser": { "version": "20.2.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha1-tCiQ8UVmeW+Fro46JSkNIF8VSlQ=", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } }, "mocha-fivemat-progress-reporter": { "version": "0.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/mocha-fivemat-progress-reporter/-/mocha-fivemat-progress-reporter-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/mocha-fivemat-progress-reporter/-/mocha-fivemat-progress-reporter-0.1.0.tgz", "integrity": "sha1-zK/w4ckc9Vf+d+B535lUuRt0d1Y=", "dev": true }, "module-deps": { "version": "6.2.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/module-deps/-/module-deps-6.2.3.tgz", - "integrity": "sha1-FUkLwCr0tWz2IpnHwXy6Mtcalu4=", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "requires": { "JSONStream": "^1.0.3", @@ -5747,8 +5747,8 @@ "dependencies": { "browser-resolve": { "version": "2.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha1-mbcwTLOS+Nc9unQbstfaKMbXhCs=", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "requires": { "resolve": "^1.17.0" @@ -5756,8 +5756,8 @@ }, "is-core-module": { "version": "2.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -5765,8 +5765,8 @@ }, "resolve": { "version": "1.20.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { "is-core-module": "^2.2.0", @@ -5775,8 +5775,8 @@ }, "through2": { "version": "2.0.5", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -5787,8 +5787,8 @@ }, "ms": { "version": "2.1.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "mute-stdout": { @@ -5806,8 +5806,8 @@ }, "nanoid": { "version": "3.1.20", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha1-utwmPGsdzxS3HvqoX2q0wdbPx4g=", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, "nanomatch": { @@ -5837,8 +5837,8 @@ }, "neo-async": { "version": "2.6.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "next-tick": { @@ -5861,7 +5861,7 @@ }, "nopt": { "version": "3.0.6", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/nopt/-/nopt-3.0.6.tgz", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { @@ -5929,7 +5929,7 @@ }, "object-assign": { "version": "4.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/object-assign/-/object-assign-4.1.1.tgz", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, @@ -6059,8 +6059,8 @@ }, "optionator": { "version": "0.8.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", @@ -6082,7 +6082,7 @@ }, "os-browserify": { "version": "0.3.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/os-browserify/-/os-browserify-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, @@ -6148,8 +6148,8 @@ }, "pako": { "version": "1.0.11", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/pako/-/pako-1.0.11.tgz", - "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parent-module": { @@ -6163,7 +6163,7 @@ }, "parents": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/parents/-/parents-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { @@ -6172,8 +6172,8 @@ }, "parse-asn1": { "version": "5.1.6", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { "asn1.js": "^5.2.0", @@ -6205,8 +6205,8 @@ }, "parse-node-version": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true }, "parse-passwd": { @@ -6223,8 +6223,8 @@ }, "path-browserify": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha1-2YRUqcN1PVeQhg8W9ohnueRr4f0=", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, "path-dirname": { @@ -6259,7 +6259,7 @@ }, "path-platform": { "version": "0.11.15", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/path-platform/-/path-platform-0.11.15.tgz", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", "dev": true }, @@ -6286,14 +6286,14 @@ }, "pathval": { "version": "1.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha1-hTTnenfOesWiUS6iHg/bj89sPY0=", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "pbkdf2": { "version": "3.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -6341,8 +6341,8 @@ }, "plugin-error": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha1-dwFr2JGdCsN3/c3QMiMolTyleBw=", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, "requires": { "ansi-colors": "^1.0.1", @@ -6368,8 +6368,8 @@ }, "postcss": { "version": "7.0.35", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -6379,8 +6379,8 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -6388,8 +6388,8 @@ }, "chalk": { "version": "2.4.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6399,8 +6399,8 @@ "dependencies": { "supports-color": { "version": "5.5.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6410,8 +6410,8 @@ }, "color-convert": { "version": "1.9.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -6419,26 +6419,26 @@ }, "color-name": { "version": "1.1.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/color-name/-/color-name-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "has-flag": { "version": "3.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/has-flag/-/has-flag-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "source-map": { "version": "0.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "supports-color": { "version": "6.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6448,7 +6448,7 @@ }, "prelude-ls": { "version": "1.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/prelude-ls/-/prelude-ls-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, @@ -6470,7 +6470,7 @@ }, "process": { "version": "0.11.10", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/process/-/process-0.11.10.tgz", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, @@ -6488,8 +6488,8 @@ }, "public-encrypt": { "version": "4.0.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -6502,8 +6502,8 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -6531,13 +6531,13 @@ }, "punycode": { "version": "1.4.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/punycode/-/punycode-1.4.1.tgz", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "q": { "version": "1.5.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/q/-/q-1.5.1.tgz", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, @@ -6549,20 +6549,20 @@ }, "querystring": { "version": "0.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/querystring/-/querystring-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, "querystring-es3": { "version": "0.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/querystring-es3/-/querystring-es3-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, "randombytes": { "version": "2.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -6570,8 +6570,8 @@ }, "randomfill": { "version": "1.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { "randombytes": "^2.0.5", @@ -6580,7 +6580,7 @@ }, "read-only-stream": { "version": "2.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/read-only-stream/-/read-only-stream-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { @@ -6866,8 +6866,8 @@ }, "replace-ext": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha1-LW2ZbQShWFXZZ0Q2Md1fd4JbAWo=", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true }, "replace-homedir": { @@ -6953,8 +6953,8 @@ }, "ripemd160": { "version": "2.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { "hash-base": "^3.0.0", @@ -6984,8 +6984,8 @@ }, "safer-buffer": { "version": "2.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "sax": { @@ -7011,8 +7011,8 @@ }, "serialize-javascript": { "version": "5.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha1-eIbshIBJpGJGepfT2Rjrsqr5NPQ=", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -7058,8 +7058,8 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -7068,8 +7068,8 @@ }, "shasum-object": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/shasum-object/-/shasum-object-1.0.0.tgz", - "integrity": "sha1-C3t0/1tm7PkDVHVSL6BQkKxH4p4=", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, "requires": { "fast-safe-stringify": "^2.0.7" @@ -7092,8 +7092,8 @@ }, "shell-quote": { "version": "1.7.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, "signal-exit": { @@ -7104,8 +7104,8 @@ }, "simple-concat": { "version": "1.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha1-9Gl2CCujXCJj8cirXt/ibEHJVS8=", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true }, "slash": { @@ -7279,8 +7279,8 @@ }, "source-map-support": { "version": "0.5.19", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -7289,8 +7289,8 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -7383,8 +7383,8 @@ }, "stream-browserify": { "version": "3.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha1-IrCihQzfZQPnMIXaH8e30MISLy8=", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, "requires": { "inherits": "~2.0.4", @@ -7393,8 +7393,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -7406,7 +7406,7 @@ }, "stream-combiner2": { "version": "1.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { @@ -7422,8 +7422,8 @@ }, "stream-http": { "version": "3.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/stream-http/-/stream-http-3.1.1.tgz", - "integrity": "sha1-A3CoAXz40FC5qFVK/mCPBD6v9WQ=", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", + "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", @@ -7434,8 +7434,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -7453,8 +7453,8 @@ }, "stream-splicer": { "version": "2.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha1-CxO37itax+BgmnRj2DiZWJo2P80=", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -7463,7 +7463,7 @@ }, "streamqueue": { "version": "0.0.6", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/streamqueue/-/streamqueue-0.0.6.tgz", + "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.0.6.tgz", "integrity": "sha1-ZvX17JTpuK8knkrsLdH3Qb/pTeM=", "dev": true, "requires": { @@ -7472,13 +7472,13 @@ "dependencies": { "isarray": { "version": "0.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/isarray/-/isarray-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { "version": "1.1.14", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -7490,7 +7490,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -7632,7 +7632,7 @@ }, "strip-bom-string": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", "dev": true }, @@ -7650,7 +7650,7 @@ }, "subarg": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/subarg/-/subarg-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { @@ -7659,8 +7659,8 @@ }, "supports-color": { "version": "7.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -7678,8 +7678,8 @@ }, "syntax-error": { "version": "1.4.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha1-LZ1P9cBkrLcRWUo+O5UFStUdkHw=", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { "acorn-node": "^1.2.0" @@ -7705,14 +7705,14 @@ }, "through": { "version": "2.3.8", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "4.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/through2/-/through2-4.0.2.tgz", - "integrity": "sha1-p846wqeosLlmyA58SfBITDsjl2Q=", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { "readable-stream": "3" @@ -7720,8 +7720,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -7755,13 +7755,13 @@ }, "time-stamp": { "version": "1.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/time-stamp/-/time-stamp-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", "dev": true }, "timers-browserify": { "version": "1.4.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/timers-browserify/-/timers-browserify-1.4.2.tgz", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { @@ -7770,8 +7770,8 @@ }, "timers-ext": { "version": "0.1.7", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha1-b1ethXjgej+5+R2Th9ZWR1VeJcY=", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", "dev": true, "requires": { "es5-ext": "~0.10.46", @@ -7880,8 +7880,8 @@ }, "tty-browserify": { "version": "0.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha1-PwUlHuF5BN/QZ3VGZw25ZRaCuBE=", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "tunnel": { @@ -7898,7 +7898,7 @@ }, "type-check": { "version": "0.3.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/type-check/-/type-check-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { @@ -7907,8 +7907,8 @@ }, "type-detect": { "version": "4.0.8", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { @@ -7942,21 +7942,21 @@ }, "uglify-js": { "version": "3.13.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/uglify-js/-/uglify-js-3.13.1.tgz", - "integrity": "sha1-J0nUuLW31nRgtKQYAj/3PD/vpgo=", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-EWhx3fHy3M9JbaeTnO+rEqzCe1wtyQClv6q3YWq0voOj4E+bMZBErVS1GAHPDiRGONYq34M1/d8KuQMgvi6Gjw==", "dev": true, "optional": true }, "umd": { "version": "3.0.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/umd/-/umd-3.0.3.tgz", - "integrity": "sha1-qp/mU8QrkJdnhInAEACstp8LJs8=", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "unbox-primitive": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/unbox-primitive/-/unbox-primitive-1.0.0.tgz", - "integrity": "sha1-7qy8Sv+ijps9NrXq7MxQsyUbHT8=", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", + "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -7973,8 +7973,8 @@ }, "undeclared-identifiers": { "version": "1.1.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha1-klTB03vawKwrUt5LZyJ5LSqR4w8=", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, "requires": { "acorn-node": "^1.3.0", @@ -8046,8 +8046,8 @@ }, "universal-user-agent": { "version": "6.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha1-M4H4UDslHA2c0hvB3pOeyd9UgO4=", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", "dev": true }, "universalify": { @@ -8127,7 +8127,7 @@ }, "url": { "version": "0.11.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/url/-/url-0.11.0.tgz", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { @@ -8137,7 +8137,7 @@ "dependencies": { "punycode": { "version": "1.3.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/punycode/-/punycode-1.3.2.tgz", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true } @@ -8151,8 +8151,8 @@ }, "util": { "version": "0.12.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/util/-/util-0.12.3.tgz", - "integrity": "sha1-lxuwKS0swMiS2rfGpdN8K+xweIg=", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", + "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -8202,8 +8202,8 @@ }, "vinyl": { "version": "2.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha1-I8+4u6tezjgDqiwKHrKK98u6GXQ=", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, "requires": { "clone": "^2.1.1", @@ -8279,7 +8279,7 @@ }, "vinyl-sourcemaps-apply": { "version": "0.2.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { @@ -8288,8 +8288,8 @@ }, "vm-browserify": { "version": "1.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, "which": { @@ -8303,8 +8303,8 @@ }, "which-boxed-primitive": { "version": "1.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -8322,8 +8322,8 @@ }, "which-typed-array": { "version": "1.1.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha1-j8t9PuWt8tdxBm+6fPN+Mv6HEf8=", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", "dev": true, "requires": { "available-typed-arrays": "^1.0.2", @@ -8337,8 +8337,8 @@ "dependencies": { "es-abstract": { "version": "1.18.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha1-q4CzWe7Lft5MKYAAOQvFrD7HtaQ=", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -8361,28 +8361,28 @@ "dependencies": { "has-symbols": { "version": "1.0.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true } } }, "is-callable": { "version": "1.2.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha1-ix4FALc6HXbHBIdjbzaOUZ3o244=", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, "is-negative-zero": { "version": "2.0.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, "is-regex": { "version": "1.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha1-gcjr3k2xQvLPHFP8htakV4gmYlE=", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -8391,14 +8391,14 @@ }, "object-inspect": { "version": "1.9.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo=", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object.assign": { "version": "4.1.2", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -8409,8 +8409,8 @@ }, "string.prototype.trimend": { "version": "1.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -8419,8 +8419,8 @@ }, "string.prototype.trimstart": { "version": "1.0.4", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -8431,8 +8431,8 @@ }, "wide-align": { "version": "1.1.3", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { "string-width": "^1.0.2 || 2" @@ -8440,14 +8440,14 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/ansi-regex/-/ansi-regex-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "string-width": { "version": "2.1.1", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -8456,7 +8456,7 @@ }, "strip-ansi": { "version": "4.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/strip-ansi/-/strip-ansi-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { @@ -8473,14 +8473,14 @@ }, "wordwrap": { "version": "1.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/wordwrap/-/wordwrap-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "workerpool": { "version": "6.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha1-qOA4tMlFaVloUt56jqQiju/es3s=", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "wrap-ansi": { @@ -8727,8 +8727,8 @@ }, "yargs-unparser": { "version": "2.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha1-8TH5ImkRrl2a04xDL+gJNmwjJes=", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { "camelcase": "^6.0.0", @@ -8739,22 +8739,22 @@ "dependencies": { "camelcase": { "version": "6.2.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk=", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "decamelize": { "version": "4.0.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha1-qkcte/Zg6xXzSU79UxyrfypwmDc=", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true } } }, "yocto-queue": { "version": "0.1.0", - "resolved": "http://artlondon.dev.bloomberg.com/artifactory/api/npm/npm-repos/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7d15340fa8bb3..e18a3bf0da2e9 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -958,7 +958,7 @@ namespace ts { const flowNodePostSuper: (boolean | undefined)[] = []; const potentialThisCollisions: Node[] = []; const potentialNewTargetCollisions: Node[] = []; - const potentialWeakMapCollisions: Node[] = []; + const potentialWeakMapSetCollisions: Node[] = []; const awaitedTypeStack: number[] = []; const diagnostics = createDiagnosticCollection(); @@ -34646,10 +34646,11 @@ namespace ts { }); } - function checkWeakMapCollision(node: Node) { + function checkWeakMapSetCollision(node: Node) { const enclosingBlockScope = getEnclosingBlockScopeContainer(node); if (getNodeCheckFlags(enclosingBlockScope) & NodeCheckFlags.ContainsClassWithPrivateIdentifiers) { - errorSkippedOn("noEmit", node, Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, "WeakMap"); + Debug.assert(isNamedDeclaration(node) && isIdentifier(node.name) && typeof node.name.escapedText === "string", "The target of a WeakMap/WeakSet collision check should be an identifier"); + errorSkippedOn("noEmit", node, Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText); } } @@ -34915,8 +34916,9 @@ namespace ts { } checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); - if (languageVersion < ScriptTarget.ESNext && needCollisionCheckForIdentifier(node, node.name, "WeakMap")) { - potentialWeakMapCollisions.push(node); + if (languageVersion < ScriptTarget.ESNext + && (needCollisionCheckForIdentifier(node, node.name, "WeakMap") || needCollisionCheckForIdentifier(node, node.name, "WeakSet"))) { + potentialWeakMapSetCollisions.push(node); } } } @@ -38169,7 +38171,7 @@ namespace ts { clear(potentialThisCollisions); clear(potentialNewTargetCollisions); - clear(potentialWeakMapCollisions); + clear(potentialWeakMapSetCollisions); forEach(node.statements, checkSourceElement); checkSourceElement(node.endOfFileToken); @@ -38209,9 +38211,9 @@ namespace ts { clear(potentialNewTargetCollisions); } - if (potentialWeakMapCollisions.length) { - forEach(potentialWeakMapCollisions, checkWeakMapCollision); - clear(potentialWeakMapCollisions); + if (potentialWeakMapSetCollisions.length) { + forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision); + clear(potentialWeakMapSetCollisions); } links.flags |= NodeCheckFlags.TypeChecked; diff --git a/tests/baselines/reference/privateNameWeakMapCollision.errors.txt b/tests/baselines/reference/privateNameWeakMapCollision.errors.txt index 6c4904cec79e1..7d76977a61311 100644 --- a/tests/baselines/reference/privateNameWeakMapCollision.errors.txt +++ b/tests/baselines/reference/privateNameWeakMapCollision.errors.txt @@ -1,11 +1,15 @@ tests/cases/compiler/privateNameWeakMapCollision.ts(2,9): error TS18027: Compiler reserves name 'WeakMap' when emitting private identifier downlevel. +tests/cases/compiler/privateNameWeakMapCollision.ts(3,9): error TS18027: Compiler reserves name 'WeakSet' when emitting private identifier downlevel. -==== tests/cases/compiler/privateNameWeakMapCollision.ts (1 errors) ==== +==== tests/cases/compiler/privateNameWeakMapCollision.ts (2 errors) ==== function test() { let WeakMap; ~~~~~~~ !!! error TS18027: Compiler reserves name 'WeakMap' when emitting private identifier downlevel. + let WeakSet; + ~~~~~~~ +!!! error TS18027: Compiler reserves name 'WeakSet' when emitting private identifier downlevel. class C { #x; } diff --git a/tests/baselines/reference/privateNameWeakMapCollision.js b/tests/baselines/reference/privateNameWeakMapCollision.js index b8f24089dd974..969751b46aba9 100644 --- a/tests/baselines/reference/privateNameWeakMapCollision.js +++ b/tests/baselines/reference/privateNameWeakMapCollision.js @@ -1,6 +1,7 @@ //// [privateNameWeakMapCollision.ts] function test() { let WeakMap; + let WeakSet; class C { #x; } @@ -11,6 +12,7 @@ function test() { function test() { var _C_x; let WeakMap; + let WeakSet; class C { constructor() { _C_x.set(this, void 0); diff --git a/tests/baselines/reference/privateNameWeakMapCollision.symbols b/tests/baselines/reference/privateNameWeakMapCollision.symbols index 5bfd7d8070508..22f2cdb8304c1 100644 --- a/tests/baselines/reference/privateNameWeakMapCollision.symbols +++ b/tests/baselines/reference/privateNameWeakMapCollision.symbols @@ -5,11 +5,14 @@ function test() { let WeakMap; >WeakMap : Symbol(WeakMap, Decl(privateNameWeakMapCollision.ts, 1, 7)) + let WeakSet; +>WeakSet : Symbol(WeakSet, Decl(privateNameWeakMapCollision.ts, 2, 7)) + class C { ->C : Symbol(C, Decl(privateNameWeakMapCollision.ts, 1, 16)) +>C : Symbol(C, Decl(privateNameWeakMapCollision.ts, 2, 16)) #x; ->#x : Symbol(C.#x, Decl(privateNameWeakMapCollision.ts, 2, 13)) +>#x : Symbol(C.#x, Decl(privateNameWeakMapCollision.ts, 3, 13)) } } diff --git a/tests/baselines/reference/privateNameWeakMapCollision.types b/tests/baselines/reference/privateNameWeakMapCollision.types index 377c3f214c436..4475f6950d02d 100644 --- a/tests/baselines/reference/privateNameWeakMapCollision.types +++ b/tests/baselines/reference/privateNameWeakMapCollision.types @@ -5,6 +5,9 @@ function test() { let WeakMap; >WeakMap : any + let WeakSet; +>WeakSet : any + class C { >C : C diff --git a/tests/cases/compiler/privateNameWeakMapCollision.ts b/tests/cases/compiler/privateNameWeakMapCollision.ts index b9e91c5c15ac6..22f4af36bf8f0 100644 --- a/tests/cases/compiler/privateNameWeakMapCollision.ts +++ b/tests/cases/compiler/privateNameWeakMapCollision.ts @@ -2,6 +2,7 @@ function test() { let WeakMap; + let WeakSet; class C { #x; } From ff2463660b7328e551848f176e6e83df2437db22 Mon Sep 17 00:00:00 2001 From: Titian Cernicova-Dragomir Date: Mon, 22 Mar 2021 16:20:39 +0200 Subject: [PATCH 65/73] Added error for using a set only accessor. --- src/compiler/checker.ts | 6 + src/compiler/diagnosticMessages.json | 4 + src/compiler/utilities.ts | 6 + .../privateWriteOnlyAccessorRead.errors.txt | 55 +++++++ .../reference/privateWriteOnlyAccessorRead.js | 87 ++++++++++ .../privateWriteOnlyAccessorRead.symbols | 111 +++++++++++++ .../privateWriteOnlyAccessorRead.types | 150 ++++++++++++++++++ .../restPropertyWithBindingPattern.types | 10 +- .../privateWriteOnlyAccessorRead.ts | 31 ++++ 9 files changed, 455 insertions(+), 5 deletions(-) create mode 100644 tests/baselines/reference/privateWriteOnlyAccessorRead.errors.txt create mode 100644 tests/baselines/reference/privateWriteOnlyAccessorRead.js create mode 100644 tests/baselines/reference/privateWriteOnlyAccessorRead.symbols create mode 100644 tests/baselines/reference/privateWriteOnlyAccessorRead.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e18a3bf0da2e9..843048f245e41 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26815,6 +26815,12 @@ namespace ts { if (!prop && checkPrivateIdentifierPropertyAccess(leftType, right, lexicallyScopedSymbol)) { return errorType; } + else { + const isSetonlyAccessor = prop && prop.flags & SymbolFlags.SetAccessor && !(prop.flags & SymbolFlags.GetAccessor); + if (isSetonlyAccessor && !isAssignmentTarget(node)) { + error(node, Diagnostics.Private_accessor_was_defined_without_a_getter); + } + } } else { if (isAnyLike) { diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index f020c6814224a..4a2284effa353 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3296,6 +3296,10 @@ "category": "Error", "code": 2805 }, + "Private accessor was defined without a getter.": { + "category": "Error", + "code": 2806 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 1c459c83e64eb..450dbedad3170 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -2706,6 +2706,9 @@ namespace ts { case SyntaxKind.NonNullExpression: node = parent; break; + case SyntaxKind.SpreadAssignment: + node = parent.parent; + break; case SyntaxKind.ShorthandPropertyAssignment: if ((parent as ShorthandPropertyAssignment).name !== node) { return AssignmentKind.None; @@ -4814,6 +4817,9 @@ namespace ts { && isLeftHandSideExpression(node.left); } + export function isLeftHandSideOfAssignment(node: Node) { + return isAssignmentExpression(node.parent) && node.parent.left === node; + } export function isDestructuringAssignment(node: Node): node is DestructuringAssignment { if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) { const kind = node.left.kind; diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.errors.txt b/tests/baselines/reference/privateWriteOnlyAccessorRead.errors.txt new file mode 100644 index 0000000000000..47534c030719a --- /dev/null +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.errors.txt @@ -0,0 +1,55 @@ +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(8,17): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(11,5): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(16,13): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(18,17): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(21,18): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(25,9): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(26,12): error TS2806: Private accessor was defined without a getter. + + +==== tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts (7 errors) ==== + class Test { + set #value(v: { foo: { bar: number } }) {} + set #valueRest(v: number[]) {} + set #valueOne(v: number) {} + + m() { + const foo = { bar: 1 }; + console.log(this.#value); // error + ~~~~~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. + this.#value = { foo }; // ok + this.#value = { foo }; // ok + this.#value.foo = foo; // error + ~~~~~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. + + ({ o: this.#value } = { o: { foo } }); //ok + ({ ...this.#value } = { foo }); //ok + + ({ foo: this.#value.foo } = { foo }); //error + ~~~~~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. + ({ + foo: { ...this.#value.foo }, + ~~~~~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. + } = { foo }); //error + + let r = { o: this.#value }; //error + ~~~~~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. + + [this.#valueOne, ...this.#valueRest] = [1, 2, 3]; + let arr = [ + this.#valueOne, + ~~~~~~~~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. + ...this.#valueRest + ~~~~~~~~~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. + ]; + } + } + new Test().m(); + \ No newline at end of file diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.js b/tests/baselines/reference/privateWriteOnlyAccessorRead.js new file mode 100644 index 0000000000000..0f4fce73b4130 --- /dev/null +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.js @@ -0,0 +1,87 @@ +//// [privateWriteOnlyAccessorRead.ts] +class Test { + set #value(v: { foo: { bar: number } }) {} + set #valueRest(v: number[]) {} + set #valueOne(v: number) {} + + m() { + const foo = { bar: 1 }; + console.log(this.#value); // error + this.#value = { foo }; // ok + this.#value = { foo }; // ok + this.#value.foo = foo; // error + + ({ o: this.#value } = { o: { foo } }); //ok + ({ ...this.#value } = { foo }); //ok + + ({ foo: this.#value.foo } = { foo }); //error + ({ + foo: { ...this.#value.foo }, + } = { foo }); //error + + let r = { o: this.#value }; //error + + [this.#valueOne, ...this.#valueRest] = [1, 2, 3]; + let arr = [ + this.#valueOne, + ...this.#valueRest + ]; + } +} +new Test().m(); + + +//// [privateWriteOnlyAccessorRead.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +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 _Test_instances, _Test_value_set, _Test_valueRest_set, _Test_valueOne_set; +class Test { + constructor() { + _Test_instances.add(this); + } + m() { + var _a, _b, _c; + const foo = { bar: 1 }; + console.log(__classPrivateFieldGet(this, _Test_instances, "a")); // error + __classPrivateFieldSet(// error + this, _Test_instances, { foo }, "a", _Test_value_set); // ok + __classPrivateFieldSet(// ok + this, _Test_instances, { foo }, "a", _Test_value_set); // ok + __classPrivateFieldGet(// ok + 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 + ({ 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]; + let arr = [ + __classPrivateFieldGet(this, _Test_instances, "a"), + ...__classPrivateFieldGet(this, _Test_instances, "a") + ]; + } +} +_Test_instances = new WeakSet(), _Test_value_set = function _Test_value_set(v) { }, _Test_valueRest_set = function _Test_valueRest_set(v) { }, _Test_valueOne_set = function _Test_valueOne_set(v) { }; +new Test().m(); diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.symbols b/tests/baselines/reference/privateWriteOnlyAccessorRead.symbols new file mode 100644 index 0000000000000..a140e67fee604 --- /dev/null +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.symbols @@ -0,0 +1,111 @@ +=== tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts === +class Test { +>Test : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) + + set #value(v: { foo: { bar: number } }) {} +>#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>v : Symbol(v, Decl(privateWriteOnlyAccessorRead.ts, 1, 13)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) +>bar : Symbol(bar, Decl(privateWriteOnlyAccessorRead.ts, 1, 24)) + + set #valueRest(v: number[]) {} +>#valueRest : Symbol(Test.#valueRest, Decl(privateWriteOnlyAccessorRead.ts, 1, 44)) +>v : Symbol(v, Decl(privateWriteOnlyAccessorRead.ts, 2, 17)) + + set #valueOne(v: number) {} +>#valueOne : Symbol(Test.#valueOne, Decl(privateWriteOnlyAccessorRead.ts, 2, 32)) +>v : Symbol(v, Decl(privateWriteOnlyAccessorRead.ts, 3, 16)) + + m() { +>m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 3, 29)) + + const foo = { bar: 1 }; +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 6, 9)) +>bar : Symbol(bar, Decl(privateWriteOnlyAccessorRead.ts, 6, 17)) + + console.log(this.#value); // error +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) + + this.#value = { foo }; // ok +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 8, 19)) + + this.#value = { foo }; // ok +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 9, 19)) + + this.#value.foo = foo; // error +>this.#value.foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 6, 9)) + + ({ o: this.#value } = { o: { foo } }); //ok +>o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 12, 6)) +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 12, 27)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 12, 32)) + + ({ ...this.#value } = { foo }); //ok +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 13, 27)) + + ({ foo: this.#value.foo } = { foo }); //error +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 15, 6)) +>this.#value.foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 15, 33)) + + ({ + foo: { ...this.#value.foo }, +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 16, 6)) +>this.#value.foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) + + } = { foo }); //error +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 18, 9)) + + let r = { o: this.#value }; //error +>r : Symbol(r, Decl(privateWriteOnlyAccessorRead.ts, 20, 7)) +>o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 20, 13)) +>this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) + + [this.#valueOne, ...this.#valueRest] = [1, 2, 3]; +>this.#valueOne : Symbol(Test.#valueOne, Decl(privateWriteOnlyAccessorRead.ts, 2, 32)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>this.#valueRest : Symbol(Test.#valueRest, Decl(privateWriteOnlyAccessorRead.ts, 1, 44)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) + + let arr = [ +>arr : Symbol(arr, Decl(privateWriteOnlyAccessorRead.ts, 23, 7)) + + this.#valueOne, +>this.#valueOne : Symbol(Test.#valueOne, Decl(privateWriteOnlyAccessorRead.ts, 2, 32)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) + + ...this.#valueRest +>this.#valueRest : Symbol(Test.#valueRest, Decl(privateWriteOnlyAccessorRead.ts, 1, 44)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) + + ]; + } +} +new Test().m(); +>new Test().m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 3, 29)) +>Test : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) +>m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 3, 29)) + diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.types b/tests/baselines/reference/privateWriteOnlyAccessorRead.types new file mode 100644 index 0000000000000..cb2b1d22f9668 --- /dev/null +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.types @@ -0,0 +1,150 @@ +=== tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts === +class Test { +>Test : Test + + set #value(v: { foo: { bar: number } }) {} +>#value : { foo: { bar: number;}; } +>v : { foo: { bar: number;}; } +>foo : { bar: number; } +>bar : number + + set #valueRest(v: number[]) {} +>#valueRest : number[] +>v : number[] + + set #valueOne(v: number) {} +>#valueOne : number +>v : number + + m() { +>m : () => void + + const foo = { bar: 1 }; +>foo : { bar: number; } +>{ bar: 1 } : { bar: number; } +>bar : number +>1 : 1 + + console.log(this.#value); // error +>console.log(this.#value) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>this.#value : { foo: { bar: number; }; } +>this : this + + this.#value = { foo }; // ok +>this.#value = { foo } : { foo: { bar: number; }; } +>this.#value : { foo: { bar: number; }; } +>this : this +>{ foo } : { foo: { bar: number; }; } +>foo : { bar: number; } + + this.#value = { foo }; // ok +>this.#value = { foo } : { foo: { bar: number; }; } +>this.#value : { foo: { bar: number; }; } +>this : this +>{ foo } : { foo: { bar: number; }; } +>foo : { bar: number; } + + this.#value.foo = foo; // error +>this.#value.foo = foo : { bar: number; } +>this.#value.foo : { bar: number; } +>this.#value : { foo: { bar: number; }; } +>this : this +>foo : { bar: number; } +>foo : { bar: number; } + + ({ o: this.#value } = { o: { foo } }); //ok +>({ o: this.#value } = { o: { foo } }) : { o: { foo: { bar: number; }; }; } +>{ o: this.#value } = { o: { foo } } : { o: { foo: { bar: number; }; }; } +>{ o: this.#value } : { o: { foo: { bar: number; }; }; } +>o : { foo: { bar: number; }; } +>this.#value : { foo: { bar: number; }; } +>this : this +>{ o: { foo } } : { o: { foo: { bar: number; }; }; } +>o : { foo: { bar: number; }; } +>{ foo } : { foo: { bar: number; }; } +>foo : { bar: number; } + + ({ ...this.#value } = { foo }); //ok +>({ ...this.#value } = { foo }) : { foo: { bar: number; }; } +>{ ...this.#value } = { foo } : { foo: { bar: number; }; } +>{ ...this.#value } : { foo: { bar: number; }; } +>this.#value : { foo: { bar: number; }; } +>this : this +>{ foo } : { foo: { bar: number; }; } +>foo : { bar: number; } + + ({ foo: this.#value.foo } = { foo }); //error +>({ foo: this.#value.foo } = { foo }) : { foo: { bar: number; }; } +>{ foo: this.#value.foo } = { foo } : { foo: { bar: number; }; } +>{ foo: this.#value.foo } : { foo: { bar: number; }; } +>foo : { bar: number; } +>this.#value.foo : { bar: number; } +>this.#value : { foo: { bar: number; }; } +>this : this +>foo : { bar: number; } +>{ foo } : { foo: { bar: number; }; } +>foo : { bar: number; } + + ({ +>({ foo: { ...this.#value.foo }, } = { foo }) : { foo: { bar: number; }; } +>{ foo: { ...this.#value.foo }, } = { foo } : { foo: { bar: number; }; } +>{ foo: { ...this.#value.foo }, } : { foo: { bar: number; }; } + + foo: { ...this.#value.foo }, +>foo : { bar: number; } +>{ ...this.#value.foo } : { bar: number; } +>this.#value.foo : { bar: number; } +>this.#value : { foo: { bar: number; }; } +>this : this +>foo : { bar: number; } + + } = { foo }); //error +>{ foo } : { foo: { bar: number; }; } +>foo : { bar: number; } + + let r = { o: this.#value }; //error +>r : { o: { foo: { bar: number; }; }; } +>{ o: this.#value } : { o: { foo: { bar: number; }; }; } +>o : { foo: { bar: number; }; } +>this.#value : { foo: { bar: number; }; } +>this : this + + [this.#valueOne, ...this.#valueRest] = [1, 2, 3]; +>[this.#valueOne, ...this.#valueRest] = [1, 2, 3] : [number, number, number] +>[this.#valueOne, ...this.#valueRest] : [number, ...number[]] +>this.#valueOne : number +>this : this +>...this.#valueRest : number +>this.#valueRest : number[] +>this : this +>[1, 2, 3] : [number, number, number] +>1 : 1 +>2 : 2 +>3 : 3 + + let arr = [ +>arr : number[] +>[ this.#valueOne, ...this.#valueRest ] : number[] + + this.#valueOne, +>this.#valueOne : number +>this : this + + ...this.#valueRest +>...this.#valueRest : number +>this.#valueRest : number[] +>this : this + + ]; + } +} +new Test().m(); +>new Test().m() : void +>new Test().m : () => void +>new Test() : Test +>Test : typeof Test +>m : () => void + diff --git a/tests/baselines/reference/restPropertyWithBindingPattern.types b/tests/baselines/reference/restPropertyWithBindingPattern.types index b128042fb5b49..988d9b3c7afdc 100644 --- a/tests/baselines/reference/restPropertyWithBindingPattern.types +++ b/tests/baselines/reference/restPropertyWithBindingPattern.types @@ -17,15 +17,15 @@ ({...[]} = {}); >({...[]} = {}) : {} >{...[]} = {} : {} ->{...[]} : { [n: number]: undefined; length: number; toString(): string; toLocaleString(): string; pop(): undefined; push(...items: undefined[]): number; concat(...items: ConcatArray[]): undefined[]; concat(...items: ConcatArray[]): undefined[]; join(separator?: string): string; reverse(): undefined[]; shift(): undefined; slice(start?: number, end?: number): undefined[]; sort(compareFn?: (a: undefined, b: undefined) => number): undefined[]; splice(start: number, deleteCount?: number): undefined[]; splice(start: number, deleteCount: number, ...items: undefined[]): undefined[]; unshift(...items: undefined[]): number; indexOf(searchElement: undefined, fromIndex?: number): number; lastIndexOf(searchElement: undefined, fromIndex?: number): number; every(predicate: (value: undefined, index: number, array: undefined[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: undefined, index: number, array: undefined[]) => unknown, thisArg?: any): boolean; some(predicate: (value: undefined, index: number, array: undefined[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: undefined, index: number, array: undefined[]) => void, thisArg?: any): void; map(callbackfn: (value: undefined, index: number, array: undefined[]) => U, thisArg?: any): U[]; filter(predicate: (value: undefined, index: number, array: undefined[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: undefined, index: number, array: undefined[]) => unknown, thisArg?: any): undefined[]; reduce(callbackfn: (previousValue: undefined, currentValue: undefined, currentIndex: number, array: undefined[]) => undefined): undefined; reduce(callbackfn: (previousValue: undefined, currentValue: undefined, currentIndex: number, array: undefined[]) => undefined, initialValue: undefined): undefined; reduce(callbackfn: (previousValue: U, currentValue: undefined, currentIndex: number, array: undefined[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: undefined, currentValue: undefined, currentIndex: number, array: undefined[]) => undefined): undefined; reduceRight(callbackfn: (previousValue: undefined, currentValue: undefined, currentIndex: number, array: undefined[]) => undefined, initialValue: undefined): undefined; reduceRight(callbackfn: (previousValue: U, currentValue: undefined, currentIndex: number, array: undefined[]) => U, initialValue: U): U; } ->[] : undefined[] +>{...[]} : { [n: number]: never; length: 0; toString(): string; toLocaleString(): string; pop(): never; push(...items: never[]): number; concat(...items: ConcatArray[]): never[]; concat(...items: ConcatArray[]): never[]; join(separator?: string): string; reverse(): never[]; shift(): never; slice(start?: number, end?: number): never[]; sort(compareFn?: (a: never, b: never) => number): []; splice(start: number, deleteCount?: number): never[]; splice(start: number, deleteCount: number, ...items: never[]): never[]; unshift(...items: never[]): number; indexOf(searchElement: never, fromIndex?: number): number; lastIndexOf(searchElement: never, fromIndex?: number): number; every(predicate: (value: never, index: number, array: never[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: never, index: number, array: never[]) => unknown, thisArg?: any): boolean; some(predicate: (value: never, index: number, array: never[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: never, index: number, array: never[]) => void, thisArg?: any): void; map(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any): U[]; filter(predicate: (value: never, index: number, array: never[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: never, index: number, array: never[]) => unknown, thisArg?: any): never[]; reduce(callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: never[]) => never): never; reduce(callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: never[]) => never, initialValue: never): never; reduce(callbackfn: (previousValue: U, currentValue: never, currentIndex: number, array: never[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: never[]) => never): never; reduceRight(callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: never[]) => never, initialValue: never): never; reduceRight(callbackfn: (previousValue: U, currentValue: never, currentIndex: number, array: never[]) => U, initialValue: U): U; } +>[] : [] >{} : {} ({...([])} = {}); >({...([])} = {}) : {} >{...([])} = {} : {} ->{...([])} : { [n: number]: undefined; length: number; toString(): string; toLocaleString(): string; pop(): undefined; push(...items: undefined[]): number; concat(...items: ConcatArray[]): undefined[]; concat(...items: ConcatArray[]): undefined[]; join(separator?: string): string; reverse(): undefined[]; shift(): undefined; slice(start?: number, end?: number): undefined[]; sort(compareFn?: (a: undefined, b: undefined) => number): undefined[]; splice(start: number, deleteCount?: number): undefined[]; splice(start: number, deleteCount: number, ...items: undefined[]): undefined[]; unshift(...items: undefined[]): number; indexOf(searchElement: undefined, fromIndex?: number): number; lastIndexOf(searchElement: undefined, fromIndex?: number): number; every(predicate: (value: undefined, index: number, array: undefined[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: undefined, index: number, array: undefined[]) => unknown, thisArg?: any): boolean; some(predicate: (value: undefined, index: number, array: undefined[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: undefined, index: number, array: undefined[]) => void, thisArg?: any): void; map(callbackfn: (value: undefined, index: number, array: undefined[]) => U, thisArg?: any): U[]; filter(predicate: (value: undefined, index: number, array: undefined[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: undefined, index: number, array: undefined[]) => unknown, thisArg?: any): undefined[]; reduce(callbackfn: (previousValue: undefined, currentValue: undefined, currentIndex: number, array: undefined[]) => undefined): undefined; reduce(callbackfn: (previousValue: undefined, currentValue: undefined, currentIndex: number, array: undefined[]) => undefined, initialValue: undefined): undefined; reduce(callbackfn: (previousValue: U, currentValue: undefined, currentIndex: number, array: undefined[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: undefined, currentValue: undefined, currentIndex: number, array: undefined[]) => undefined): undefined; reduceRight(callbackfn: (previousValue: undefined, currentValue: undefined, currentIndex: number, array: undefined[]) => undefined, initialValue: undefined): undefined; reduceRight(callbackfn: (previousValue: U, currentValue: undefined, currentIndex: number, array: undefined[]) => U, initialValue: U): U; } ->([]) : undefined[] ->[] : undefined[] +>{...([])} : { [n: number]: never; length: 0; toString(): string; toLocaleString(): string; pop(): never; push(...items: never[]): number; concat(...items: ConcatArray[]): never[]; concat(...items: ConcatArray[]): never[]; join(separator?: string): string; reverse(): never[]; shift(): never; slice(start?: number, end?: number): never[]; sort(compareFn?: (a: never, b: never) => number): []; splice(start: number, deleteCount?: number): never[]; splice(start: number, deleteCount: number, ...items: never[]): never[]; unshift(...items: never[]): number; indexOf(searchElement: never, fromIndex?: number): number; lastIndexOf(searchElement: never, fromIndex?: number): number; every(predicate: (value: never, index: number, array: never[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: never, index: number, array: never[]) => unknown, thisArg?: any): boolean; some(predicate: (value: never, index: number, array: never[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: never, index: number, array: never[]) => void, thisArg?: any): void; map(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any): U[]; filter(predicate: (value: never, index: number, array: never[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: never, index: number, array: never[]) => unknown, thisArg?: any): never[]; reduce(callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: never[]) => never): never; reduce(callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: never[]) => never, initialValue: never): never; reduce(callbackfn: (previousValue: U, currentValue: never, currentIndex: number, array: never[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: never[]) => never): never; reduceRight(callbackfn: (previousValue: never, currentValue: never, currentIndex: number, array: never[]) => never, initialValue: never): never; reduceRight(callbackfn: (previousValue: U, currentValue: never, currentIndex: number, array: never[]) => U, initialValue: U): U; } +>([]) : [] +>[] : [] >{} : {} diff --git a/tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts b/tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts new file mode 100644 index 0000000000000..ab71685f053d2 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts @@ -0,0 +1,31 @@ +// @target: es2015 +class Test { + set #value(v: { foo: { bar: number } }) {} + set #valueRest(v: number[]) {} + set #valueOne(v: number) {} + + m() { + const foo = { bar: 1 }; + console.log(this.#value); // error + this.#value = { foo }; // ok + this.#value = { foo }; // ok + this.#value.foo = foo; // error + + ({ o: this.#value } = { o: { foo } }); //ok + ({ ...this.#value } = { foo }); //ok + + ({ foo: this.#value.foo } = { foo }); //error + ({ + foo: { ...this.#value.foo }, + } = { foo }); //error + + let r = { o: this.#value }; //error + + [this.#valueOne, ...this.#valueRest] = [1, 2, 3]; + let arr = [ + this.#valueOne, + ...this.#valueRest + ]; + } +} +new Test().m(); From f5816ab0bafd999736aa568355cca141cb8975c2 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 23 Mar 2021 09:17:59 +0000 Subject: [PATCH 66/73] update keyof tests and ?? (#62) * replace ?? with || * update keyof tests --- src/compiler/transformers/classFields.ts | 2 +- .../reference/privateNamesAndkeyof.errors.txt | 42 +++++++++++++++++++ .../reference/privateNamesAndkeyof.js | 21 +++++++++- .../reference/privateNamesAndkeyof.symbols | 26 +++++++++++- .../reference/privateNamesAndkeyof.types | 41 +++++++++++++++++- .../privateNames/privateNamesAndkeyof.ts | 12 +++++- 6 files changed, 137 insertions(+), 7 deletions(-) create mode 100644 tests/baselines/reference/privateNamesAndkeyof.errors.txt diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 326ecdfeab343..f86462dffcb08 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -750,7 +750,7 @@ namespace ts { } else { const expressions: Expression[] = []; - temp = temp ?? createClassTempVar (); + temp ||= createClassTempVar(); if (isClassWithConstructorReference) { // record an alias as the class name is not in scope for statics. enableSubstitutionForClassAliases(); diff --git a/tests/baselines/reference/privateNamesAndkeyof.errors.txt b/tests/baselines/reference/privateNamesAndkeyof.errors.txt new file mode 100644 index 0000000000000..eb8ee8b6426a5 --- /dev/null +++ b/tests/baselines/reference/privateNamesAndkeyof.errors.txt @@ -0,0 +1,42 @@ +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(14,1): error TS2322: Type '"#fooField"' is not assignable to type 'keyof A'. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(15,1): error TS2322: Type '"#fooMethod"' is not assignable to type 'keyof A'. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(16,1): error TS2322: Type '"#fooProp"' is not assignable to type 'keyof A'. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(18,1): error TS2322: Type '"fooField"' is not assignable to type 'keyof A'. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(19,1): error TS2322: Type '"fooMethod"' is not assignable to type 'keyof A'. +tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(20,1): error TS2322: Type '"fooProp"' is not assignable to type 'keyof A'. + + +==== tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts (6 errors) ==== + class A { + #fooField = 3; + #fooMethod() { }; + get #fooProp() { return 1; }; + set #fooProp(value: number) { }; + bar = 3; + baz = 3; + } + + // `keyof A` should not include '#foo*' + let k: keyof A = "bar"; // OK + k = "baz"; // OK + + k = "#fooField"; // Error + ~ +!!! error TS2322: Type '"#fooField"' is not assignable to type 'keyof A'. + k = "#fooMethod"; // Error + ~ +!!! error TS2322: Type '"#fooMethod"' is not assignable to type 'keyof A'. + k = "#fooProp"; // Error + ~ +!!! error TS2322: Type '"#fooProp"' is not assignable to type 'keyof A'. + + k = "fooField"; // Error + ~ +!!! error TS2322: Type '"fooField"' is not assignable to type 'keyof A'. + k = "fooMethod"; // Error + ~ +!!! error TS2322: Type '"fooMethod"' is not assignable to type 'keyof A'. + k = "fooProp"; // Error + ~ +!!! error TS2322: Type '"fooProp"' is not assignable to type 'keyof A'. + \ No newline at end of file diff --git a/tests/baselines/reference/privateNamesAndkeyof.js b/tests/baselines/reference/privateNamesAndkeyof.js index c250a02741afd..8497493f65a37 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.js +++ b/tests/baselines/reference/privateNamesAndkeyof.js @@ -8,7 +8,17 @@ class A { baz = 3; } -type T = keyof A // should not include '#foo*' +// `keyof A` should not include '#foo*' +let k: keyof A = "bar"; // OK +k = "baz"; // OK + +k = "#fooField"; // Error +k = "#fooMethod"; // Error +k = "#fooProp"; // Error + +k = "fooField"; // Error +k = "fooMethod"; // Error +k = "fooProp"; // Error //// [privateNamesAndkeyof.js] @@ -26,3 +36,12 @@ class A { ; } _A_fooField = new WeakMap(), _A_instances = new WeakSet(), _A_fooMethod = function _A_fooMethod() { }, _A_fooProp_get = function _A_fooProp_get() { return 1; }, _A_fooProp_set = function _A_fooProp_set(value) { }; +// `keyof A` should not include '#foo*' +let k = "bar"; // OK +k = "baz"; // OK +k = "#fooField"; // Error +k = "#fooMethod"; // Error +k = "#fooProp"; // Error +k = "fooField"; // Error +k = "fooMethod"; // Error +k = "fooProp"; // Error diff --git a/tests/baselines/reference/privateNamesAndkeyof.symbols b/tests/baselines/reference/privateNamesAndkeyof.symbols index 663c891517171..337b3ac32f246 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.symbols +++ b/tests/baselines/reference/privateNamesAndkeyof.symbols @@ -22,7 +22,29 @@ class A { >baz : Symbol(A.baz, Decl(privateNamesAndkeyof.ts, 5, 12)) } -type T = keyof A // should not include '#foo*' ->T : Symbol(T, Decl(privateNamesAndkeyof.ts, 7, 1)) +// `keyof A` should not include '#foo*' +let k: keyof A = "bar"; // OK +>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3)) >A : Symbol(A, Decl(privateNamesAndkeyof.ts, 0, 0)) +k = "baz"; // OK +>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3)) + +k = "#fooField"; // Error +>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3)) + +k = "#fooMethod"; // Error +>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3)) + +k = "#fooProp"; // Error +>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3)) + +k = "fooField"; // Error +>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3)) + +k = "fooMethod"; // Error +>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3)) + +k = "fooProp"; // Error +>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3)) + diff --git a/tests/baselines/reference/privateNamesAndkeyof.types b/tests/baselines/reference/privateNamesAndkeyof.types index 706aaf68836f7..dc5fa8297f83f 100644 --- a/tests/baselines/reference/privateNamesAndkeyof.types +++ b/tests/baselines/reference/privateNamesAndkeyof.types @@ -26,6 +26,43 @@ class A { >3 : 3 } -type T = keyof A // should not include '#foo*' ->T : keyof A +// `keyof A` should not include '#foo*' +let k: keyof A = "bar"; // OK +>k : keyof A +>"bar" : "bar" + +k = "baz"; // OK +>k = "baz" : "baz" +>k : keyof A +>"baz" : "baz" + +k = "#fooField"; // Error +>k = "#fooField" : "#fooField" +>k : keyof A +>"#fooField" : "#fooField" + +k = "#fooMethod"; // Error +>k = "#fooMethod" : "#fooMethod" +>k : keyof A +>"#fooMethod" : "#fooMethod" + +k = "#fooProp"; // Error +>k = "#fooProp" : "#fooProp" +>k : keyof A +>"#fooProp" : "#fooProp" + +k = "fooField"; // Error +>k = "fooField" : "fooField" +>k : keyof A +>"fooField" : "fooField" + +k = "fooMethod"; // Error +>k = "fooMethod" : "fooMethod" +>k : keyof A +>"fooMethod" : "fooMethod" + +k = "fooProp"; // Error +>k = "fooProp" : "fooProp" +>k : keyof A +>"fooProp" : "fooProp" diff --git a/tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts b/tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts index 4f04a5ca588e9..293dc6b03bafb 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts @@ -10,4 +10,14 @@ class A { baz = 3; } -type T = keyof A // should not include '#foo*' +// `keyof A` should not include '#foo*' +let k: keyof A = "bar"; // OK +k = "baz"; // OK + +k = "#fooField"; // Error +k = "#fooMethod"; // Error +k = "#fooProp"; // Error + +k = "fooField"; // Error +k = "fooMethod"; // Error +k = "fooProp"; // Error From 3b62d3c5f53be0b9f62f407411347d8212e1fd11 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 23 Mar 2021 09:56:01 +0000 Subject: [PATCH 67/73] fix emit helpers comments --- src/compiler/factory/emitHelpers.ts | 118 ++++++++++++++-------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 8eb5affa73f8f..f3e0004efd407 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -832,54 +832,51 @@ namespace ts { /** * Parameters: - * @param receiver — The object on which the private member will be set. + * @param receiver — The object from which the private member will be read. * @param state — One of the following: - * - A WeakMap used to store a private instance field. + * - A WeakMap used to read a private instance field. * - A WeakSet used as an instance brand for private instance methods and accessors. * - A function value that should be the undecorated class constructor used to brand check private static fields, methods, and accessors. - * @param value — The value to set. * @param kind — (optional pre TS 4.3, required for TS 4.3+) One of the following values: - * - undefined — Indicates a private instance field (pre TS 4.3). - * - "f" — Indicates a private field (instance or static). - * - "m" — Indicates a private method (instance or static). - * - "a" — Indicates a private accessor (instance or static). - * @param f — (optional pre TS 4.3) Depends on the arguments for state and kind: - * - If kind is "m", this should be the function corresponding to the static or instance method. - * - If kind is "a", this should be the function corresponding to the setter method, or undefined if the setter was not defined. - * - If kind is "f" and state is a function, this should be an object holding the value of a static field, or undefined if the static field declaration has not yet been evaluated. + * - undefined — Indicates a private instance field (pre TS 4.3). + * - "f" — Indicates a private field (instance or static). + * - "m" — Indicates a private method (instance or static). + * - "a" — Indicates a private accessor (instance or static). + * @param f — (optional pre TS 4.3) Depends on the arguments for state and kind: + * - If kind is "m", this should be the function corresponding to the static or instance method. + * - If kind is "a", this should be the function corresponding to the getter method, or undefined if the getter was not defined. + * - If kind is "f" and state is a function, this should be an object holding the value of a static field, or undefined if the static field declaration has not yet been evaluated. * Usage: * This helper will only ever be used by the compiler in the following ways: * - * Writing to a private instance field (pre TS 4.3): - * __classPrivateFieldSet(, , ) + * Reading from a private instance field (pre TS 4.3): + * __classPrivateFieldGet(, ) * - * Writing to a private instance field (TS 4.3+): - * __classPrivateFieldSet(, , , "f") + * Reading from a private instance field (TS 4.3+): + * __classPrivateFieldGet(, , "f") * - * Writing to a private instance set accessor (when defined, TS 4.3+): - * __classPrivateFieldSet(, , , "a", ) + * Reading from a private instance get accessor (when defined, TS 4.3+): + * __classPrivateFieldGet(, , "a", ) * - * Writing to a private instance set accessor (when not defined, TS 4.3+): - * __classPrivateFieldSet(, , , "a", void 0) + * Reading from a private instance get accessor (when not defined, TS 4.3+): + * __classPrivateFieldGet(, , "a", void 0) * NOTE: This always results in a runtime error. * - * Writing to a private instance method (TS 4.3+): - * __classPrivateFieldSet(, , , "m", ) - * NOTE: This always results in a runtime error. + * Reading from a private instance method (TS 4.3+): + * __classPrivateFieldGet(, , "m", ) * - * Writing to a private static field (TS 4.3+): - * __classPrivateFieldSet(, , , "f", <{ value: any }>) + * Reading from a private static field (TS 4.3+): + * __classPrivateFieldGet(, , "f", <{ value: any }>) * - * Writing to a private static set accessor (when defined, TS 4.3+): - * __classPrivateFieldSet(, , , "a", ) + * Reading from a private static get accessor (when defined, TS 4.3+): + * __classPrivateFieldGet(, , "a", ) * - * Writing to a private static set accessor (when not defined, TS 4.3+): - * __classPrivateFieldSet(, , , "a", void 0) + * Reading from a private static get accessor (when not defined, TS 4.3+): + * __classPrivateFieldGet(, , "a", void 0) * NOTE: This always results in a runtime error. * - * Writing to a private static method (TS 4.3+): - * __classPrivateFieldSet(, , , "m", ) - * NOTE: This always results in a runtime error. + * Reading from a private static method (TS 4.3+): + * __classPrivateFieldGet(, , "m", ) */ export const classPrivateFieldGetHelper: UnscopedEmitHelper = { name: "typescript:classPrivateFieldGet", @@ -895,51 +892,54 @@ namespace ts { /** * Parameters: - * @param receiver — The object from which the private member will be read. + * @param receiver — The object on which the private member will be set. * @param state — One of the following: - * - A WeakMap used to read a private instance field. + * - A WeakMap used to store a private instance field. * - A WeakSet used as an instance brand for private instance methods and accessors. * - A function value that should be the undecorated class constructor used to brand check private static fields, methods, and accessors. + * @param value — The value to set. * @param kind — (optional pre TS 4.3, required for TS 4.3+) One of the following values: - * - undefined — Indicates a private instance field (pre TS 4.3). - * - "f" — Indicates a private field (instance or static). - * - "m" — Indicates a private method (instance or static). - * - "a" — Indicates a private accessor (instance or static). - * @param f — (optional pre TS 4.3) Depends on the arguments for state and kind: - * - If kind is "m", this should be the function corresponding to the static or instance method. - * - If kind is "a", this should be the function corresponding to the getter method, or undefined if the getter was not defined. - * - If kind is "f" and state is a function, this should be an object holding the value of a static field, or undefined if the static field declaration has not yet been evaluated. + * - undefined — Indicates a private instance field (pre TS 4.3). + * - "f" — Indicates a private field (instance or static). + * - "m" — Indicates a private method (instance or static). + * - "a" — Indicates a private accessor (instance or static). + * @param f — (optional pre TS 4.3) Depends on the arguments for state and kind: + * - If kind is "m", this should be the function corresponding to the static or instance method. + * - If kind is "a", this should be the function corresponding to the setter method, or undefined if the setter was not defined. + * - If kind is "f" and state is a function, this should be an object holding the value of a static field, or undefined if the static field declaration has not yet been evaluated. * Usage: * This helper will only ever be used by the compiler in the following ways: * - * Reading from a private instance field (pre TS 4.3): - * __classPrivateFieldGet(, ) + * Writing to a private instance field (pre TS 4.3): + * __classPrivateFieldSet(, , ) * - * Reading from a private instance field (TS 4.3+): - * __classPrivateFieldGet(, , "f") + * Writing to a private instance field (TS 4.3+): + * __classPrivateFieldSet(, , , "f") * - * Reading from a private instance get accessor (when defined, TS 4.3+): - * __classPrivateFieldGet(, , "a", ) + * Writing to a private instance set accessor (when defined, TS 4.3+): + * __classPrivateFieldSet(, , , "a", ) * - * Reading from a private instance get accessor (when not defined, TS 4.3+): - * __classPrivateFieldGet(, , "a", void 0) + * Writing to a private instance set accessor (when not defined, TS 4.3+): + * __classPrivateFieldSet(, , , "a", void 0) * NOTE: This always results in a runtime error. * - * Reading from a private instance method (TS 4.3+): - * __classPrivateFieldGet(, , "m", ) + * Writing to a private instance method (TS 4.3+): + * __classPrivateFieldSet(, , , "m", ) + * NOTE: This always results in a runtime error. * - * Reading from a private static field (TS 4.3+): - * __classPrivateFieldGet(, , "f", <{ value: any }>) + * Writing to a private static field (TS 4.3+): + * __classPrivateFieldSet(, , , "f", <{ value: any }>) * - * Reading from a private static get accessor (when defined, TS 4.3+): - * __classPrivateFieldGet(, , "a", ) + * Writing to a private static set accessor (when defined, TS 4.3+): + * __classPrivateFieldSet(, , , "a", ) * - * Reading from a private static get accessor (when not defined, TS 4.3+): - * __classPrivateFieldGet(, , "a", void 0) + * Writing to a private static set accessor (when not defined, TS 4.3+): + * __classPrivateFieldSet(, , , "a", void 0) * NOTE: This always results in a runtime error. * - * Reading from a private static method (TS 4.3+): - * __classPrivateFieldGet(, , "m", ) + * Writing to a private static method (TS 4.3+): + * __classPrivateFieldSet(, , , "m", ) + * NOTE: This always results in a runtime error. */ export const classPrivateFieldSetHelper: UnscopedEmitHelper = { name: "typescript:classPrivateFieldSet", From 7d8a2b913e7351a462da2dd89f050fae2f36126e Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 23 Mar 2021 15:34:40 +0000 Subject: [PATCH 68/73] produce an error if private field helpers are not up to date --- src/compiler/checker.ts | 22 +++++++++++++++++++--- src/compiler/diagnosticMessages.json | 4 ++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 843048f245e41..bb1ac6a715b6f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26791,12 +26791,18 @@ namespace ts { const parentSymbol = getNodeLinks(left).resolvedSymbol; const assignmentKind = getAssignmentTargetKind(node); const apparentType = getApparentType(assignmentKind !== AssignmentKind.None || isMethodAccessForCall(node) ? getWidenedType(leftType) : leftType); - if (isPrivateIdentifier(right)) { - checkExternalEmitHelpers(node, ExternalEmitHelpers.ClassPrivateFieldGet); - } const isAnyLike = isTypeAny(apparentType) || apparentType === silentNeverType; let prop: Symbol | undefined; if (isPrivateIdentifier(right)) { + if (languageVersion < ScriptTarget.ESNext) { + if (assignmentKind !== AssignmentKind.None) { + checkExternalEmitHelpers(node, ExternalEmitHelpers.ClassPrivateFieldSet); + } + if (assignmentKind !== AssignmentKind.Definite) { + checkExternalEmitHelpers(node, ExternalEmitHelpers.ClassPrivateFieldGet); + } + } + const lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(right.escapedText, right); if (assignmentKind && lexicallyScopedSymbol && lexicallyScopedSymbol.valueDeclaration && isMethodDeclaration(lexicallyScopedSymbol.valueDeclaration)) { grammarErrorOnNode(right, Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable, idText(right)); @@ -39906,6 +39912,16 @@ namespace ts { if (!symbol) { error(location, Diagnostics.This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0, externalHelpersModuleNameText, name); } + else if (helper & ExternalEmitHelpers.ClassPrivateFieldGet) { + if (!some(getSignaturesOfSymbol(symbol), signature => getParameterCount(signature) > 3)) { + error(location, Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, externalHelpersModuleNameText, name, 4); + } + } + else if (helper & ExternalEmitHelpers.ClassPrivateFieldSet) { + if (!some(getSignaturesOfSymbol(symbol), signature => getParameterCount(signature) > 4)) { + error(location, Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, externalHelpersModuleNameText, name, 5); + } + } } } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 4a2284effa353..671ce09dc4969 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3300,6 +3300,10 @@ "category": "Error", "code": 2806 }, + "This syntax requires an imported helper named '{1}' with {2} parameters, which is not compatible with the one in '{0}'. Consider upgrading your version of '{0}'.": { + "category": "Error", + "code": 2807 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", From d0d2055142190df0d96e81d21d9ab775755857aa Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 23 Mar 2021 15:34:45 +0000 Subject: [PATCH 69/73] add tests --- .../privateNameEmitHelpers.errors.txt | 20 +++++++++ .../reference/privateNameEmitHelpers.js | 25 +++++++++++ .../reference/privateNameEmitHelpers.symbols | 42 +++++++++++++++++++ .../reference/privateNameEmitHelpers.types | 37 ++++++++++++++++ .../privateNameStaticEmitHelpers.errors.txt | 20 +++++++++ .../reference/privateNameStaticEmitHelpers.js | 22 ++++++++++ .../privateNameStaticEmitHelpers.symbols | 40 ++++++++++++++++++ .../privateNameStaticEmitHelpers.types | 35 ++++++++++++++++ .../privateNames/privateNameEmitHelpers.ts | 16 +++++++ .../privateNameStaticEmitHelpers.ts | 16 +++++++ 10 files changed, 273 insertions(+) create mode 100644 tests/baselines/reference/privateNameEmitHelpers.errors.txt create mode 100644 tests/baselines/reference/privateNameEmitHelpers.js create mode 100644 tests/baselines/reference/privateNameEmitHelpers.symbols create mode 100644 tests/baselines/reference/privateNameEmitHelpers.types create mode 100644 tests/baselines/reference/privateNameStaticEmitHelpers.errors.txt create mode 100644 tests/baselines/reference/privateNameStaticEmitHelpers.js create mode 100644 tests/baselines/reference/privateNameStaticEmitHelpers.symbols create mode 100644 tests/baselines/reference/privateNameStaticEmitHelpers.types create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameEmitHelpers.ts create mode 100644 tests/cases/conformance/classes/members/privateNames/privateNameStaticEmitHelpers.ts diff --git a/tests/baselines/reference/privateNameEmitHelpers.errors.txt b/tests/baselines/reference/privateNameEmitHelpers.errors.txt new file mode 100644 index 0000000000000..05d5fd4a7e8fb --- /dev/null +++ b/tests/baselines/reference/privateNameEmitHelpers.errors.txt @@ -0,0 +1,20 @@ +tests/cases/conformance/classes/members/privateNames/main.ts(3,12): error TS2807: This syntax requires an imported helper named '__classPrivateFieldSet' with 5 parameters, which is not compatible with the one in 'tslib'. Consider upgrading your version of 'tslib'. +tests/cases/conformance/classes/members/privateNames/main.ts(4,25): error TS2807: This syntax requires an imported helper named '__classPrivateFieldGet' with 4 parameters, which is not compatible with the one in 'tslib'. Consider upgrading your version of 'tslib'. + + +==== tests/cases/conformance/classes/members/privateNames/main.ts (2 errors) ==== + export class C { + #a = 1; + #b() { this.#c = 42; } + ~~~~~~~ +!!! error TS2807: This syntax requires an imported helper named '__classPrivateFieldSet' with 5 parameters, which is not compatible with the one in 'tslib'. Consider upgrading your version of 'tslib'. + set #c(v: number) { this.#a += v; } + ~~~~~~~ +!!! error TS2807: This syntax requires an imported helper named '__classPrivateFieldGet' with 4 parameters, which is not compatible with the one in 'tslib'. Consider upgrading your version of 'tslib'. + } + +==== tests/cases/conformance/classes/members/privateNames/tslib.d.ts (0 errors) ==== + // these are pre-TS4.3 versions of emit helpers, which only supported private instance fields + export declare function __classPrivateFieldGet(receiver: T, state: any): V; + export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameEmitHelpers.js b/tests/baselines/reference/privateNameEmitHelpers.js new file mode 100644 index 0000000000000..1c46c25afa8fe --- /dev/null +++ b/tests/baselines/reference/privateNameEmitHelpers.js @@ -0,0 +1,25 @@ +//// [tests/cases/conformance/classes/members/privateNames/privateNameEmitHelpers.ts] //// + +//// [main.ts] +export class C { + #a = 1; + #b() { this.#c = 42; } + set #c(v: number) { this.#a += v; } +} + +//// [tslib.d.ts] +// these are pre-TS4.3 versions of emit helpers, which only supported private instance fields +export declare function __classPrivateFieldGet(receiver: T, state: any): V; +export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; + + +//// [main.js] +var _C_instances, _C_a, _C_b, _C_c_set; +import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib"; +export class C { + constructor() { + _C_instances.add(this); + _C_a.set(this, 1); + } +} +_C_a = new WeakMap(), _C_instances = new WeakSet(), _C_b = function _C_b() { __classPrivateFieldSet(this, _C_instances, 42, "a", _C_c_set); }, _C_c_set = function _C_c_set(v) { __classPrivateFieldSet(this, _C_a, __classPrivateFieldGet(this, _C_a, "f") + v, "f"); }; diff --git a/tests/baselines/reference/privateNameEmitHelpers.symbols b/tests/baselines/reference/privateNameEmitHelpers.symbols new file mode 100644 index 0000000000000..6b34f80303b77 --- /dev/null +++ b/tests/baselines/reference/privateNameEmitHelpers.symbols @@ -0,0 +1,42 @@ +=== tests/cases/conformance/classes/members/privateNames/main.ts === +export class C { +>C : Symbol(C, Decl(main.ts, 0, 0)) + + #a = 1; +>#a : Symbol(C.#a, Decl(main.ts, 0, 16)) + + #b() { this.#c = 42; } +>#b : Symbol(C.#b, Decl(main.ts, 1, 11)) +>this.#c : Symbol(C.#c, Decl(main.ts, 2, 26)) +>this : Symbol(C, Decl(main.ts, 0, 0)) + + set #c(v: number) { this.#a += v; } +>#c : Symbol(C.#c, Decl(main.ts, 2, 26)) +>v : Symbol(v, Decl(main.ts, 3, 11)) +>this.#a : Symbol(C.#a, Decl(main.ts, 0, 16)) +>this : Symbol(C, Decl(main.ts, 0, 0)) +>v : Symbol(v, Decl(main.ts, 3, 11)) +} + +=== tests/cases/conformance/classes/members/privateNames/tslib.d.ts === +// these are pre-TS4.3 versions of emit helpers, which only supported private instance fields +export declare function __classPrivateFieldGet(receiver: T, state: any): V; +>__classPrivateFieldGet : Symbol(__classPrivateFieldGet, Decl(tslib.d.ts, --, --)) +>T : Symbol(T, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) +>receiver : Symbol(receiver, Decl(tslib.d.ts, --, --)) +>T : Symbol(T, Decl(tslib.d.ts, --, --)) +>state : Symbol(state, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) + +export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; +>__classPrivateFieldSet : Symbol(__classPrivateFieldSet, Decl(tslib.d.ts, --, --)) +>T : Symbol(T, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) +>receiver : Symbol(receiver, Decl(tslib.d.ts, --, --)) +>T : Symbol(T, Decl(tslib.d.ts, --, --)) +>state : Symbol(state, Decl(tslib.d.ts, --, --)) +>value : Symbol(value, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) + diff --git a/tests/baselines/reference/privateNameEmitHelpers.types b/tests/baselines/reference/privateNameEmitHelpers.types new file mode 100644 index 0000000000000..e45e6b60df3ce --- /dev/null +++ b/tests/baselines/reference/privateNameEmitHelpers.types @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/members/privateNames/main.ts === +export class C { +>C : C + + #a = 1; +>#a : number +>1 : 1 + + #b() { this.#c = 42; } +>#b : () => void +>this.#c = 42 : 42 +>this.#c : number +>this : this +>42 : 42 + + set #c(v: number) { this.#a += v; } +>#c : number +>v : number +>this.#a += v : number +>this.#a : number +>this : this +>v : number +} + +=== tests/cases/conformance/classes/members/privateNames/tslib.d.ts === +// these are pre-TS4.3 versions of emit helpers, which only supported private instance fields +export declare function __classPrivateFieldGet(receiver: T, state: any): V; +>__classPrivateFieldGet : (receiver: T, state: any) => V +>receiver : T +>state : any + +export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; +>__classPrivateFieldSet : (receiver: T, state: any, value: V) => V +>receiver : T +>state : any +>value : V + diff --git a/tests/baselines/reference/privateNameStaticEmitHelpers.errors.txt b/tests/baselines/reference/privateNameStaticEmitHelpers.errors.txt new file mode 100644 index 0000000000000..067e0d4b1a5dc --- /dev/null +++ b/tests/baselines/reference/privateNameStaticEmitHelpers.errors.txt @@ -0,0 +1,20 @@ +tests/cases/conformance/classes/members/privateNames/main.ts(3,19): error TS2807: This syntax requires an imported helper named '__classPrivateFieldSet' with 5 parameters, which is not compatible with the one in 'tslib'. Consider upgrading your version of 'tslib'. +tests/cases/conformance/classes/members/privateNames/main.ts(4,30): error TS2807: This syntax requires an imported helper named '__classPrivateFieldGet' with 4 parameters, which is not compatible with the one in 'tslib'. Consider upgrading your version of 'tslib'. + + +==== tests/cases/conformance/classes/members/privateNames/main.ts (2 errors) ==== + export class S { + static #a = 1; + static #b() { this.#a = 42; } + ~~~~~~~ +!!! error TS2807: This syntax requires an imported helper named '__classPrivateFieldSet' with 5 parameters, which is not compatible with the one in 'tslib'. Consider upgrading your version of 'tslib'. + static get #c() { return S.#b(); } + ~~~~ +!!! error TS2807: This syntax requires an imported helper named '__classPrivateFieldGet' with 4 parameters, which is not compatible with the one in 'tslib'. Consider upgrading your version of 'tslib'. + } + +==== tests/cases/conformance/classes/members/privateNames/tslib.d.ts (0 errors) ==== + // these are pre-TS4.3 versions of emit helpers, which only supported private instance fields + export declare function __classPrivateFieldGet(receiver: T, state: any): V; + export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; + \ No newline at end of file diff --git a/tests/baselines/reference/privateNameStaticEmitHelpers.js b/tests/baselines/reference/privateNameStaticEmitHelpers.js new file mode 100644 index 0000000000000..0e57493d5342d --- /dev/null +++ b/tests/baselines/reference/privateNameStaticEmitHelpers.js @@ -0,0 +1,22 @@ +//// [tests/cases/conformance/classes/members/privateNames/privateNameStaticEmitHelpers.ts] //// + +//// [main.ts] +export class S { + static #a = 1; + static #b() { this.#a = 42; } + static get #c() { return S.#b(); } +} + +//// [tslib.d.ts] +// these are pre-TS4.3 versions of emit helpers, which only supported private instance fields +export declare function __classPrivateFieldGet(receiver: T, state: any): V; +export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; + + +//// [main.js] +var _a, _S_a, _S_b, _S_c_get; +import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib"; +export class S { +} +_a = S, _S_b = function _S_b() { __classPrivateFieldSet(this, _a, 42, "f", _S_a); }, _S_c_get = function _S_c_get() { return __classPrivateFieldGet(S, _a, "m", _S_b).call(S); }; +_S_a = { value: 1 }; diff --git a/tests/baselines/reference/privateNameStaticEmitHelpers.symbols b/tests/baselines/reference/privateNameStaticEmitHelpers.symbols new file mode 100644 index 0000000000000..12678d86b50f8 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticEmitHelpers.symbols @@ -0,0 +1,40 @@ +=== tests/cases/conformance/classes/members/privateNames/main.ts === +export class S { +>S : Symbol(S, Decl(main.ts, 0, 0)) + + static #a = 1; +>#a : Symbol(S.#a, Decl(main.ts, 0, 16)) + + static #b() { this.#a = 42; } +>#b : Symbol(S.#b, Decl(main.ts, 1, 18)) +>this.#a : Symbol(S.#a, Decl(main.ts, 0, 16)) +>this : Symbol(S, Decl(main.ts, 0, 0)) + + static get #c() { return S.#b(); } +>#c : Symbol(S.#c, Decl(main.ts, 2, 33)) +>S.#b : Symbol(S.#b, Decl(main.ts, 1, 18)) +>S : Symbol(S, Decl(main.ts, 0, 0)) +} + +=== tests/cases/conformance/classes/members/privateNames/tslib.d.ts === +// these are pre-TS4.3 versions of emit helpers, which only supported private instance fields +export declare function __classPrivateFieldGet(receiver: T, state: any): V; +>__classPrivateFieldGet : Symbol(__classPrivateFieldGet, Decl(tslib.d.ts, --, --)) +>T : Symbol(T, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) +>receiver : Symbol(receiver, Decl(tslib.d.ts, --, --)) +>T : Symbol(T, Decl(tslib.d.ts, --, --)) +>state : Symbol(state, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) + +export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; +>__classPrivateFieldSet : Symbol(__classPrivateFieldSet, Decl(tslib.d.ts, --, --)) +>T : Symbol(T, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) +>receiver : Symbol(receiver, Decl(tslib.d.ts, --, --)) +>T : Symbol(T, Decl(tslib.d.ts, --, --)) +>state : Symbol(state, Decl(tslib.d.ts, --, --)) +>value : Symbol(value, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) +>V : Symbol(V, Decl(tslib.d.ts, --, --)) + diff --git a/tests/baselines/reference/privateNameStaticEmitHelpers.types b/tests/baselines/reference/privateNameStaticEmitHelpers.types new file mode 100644 index 0000000000000..c91637bcad3f4 --- /dev/null +++ b/tests/baselines/reference/privateNameStaticEmitHelpers.types @@ -0,0 +1,35 @@ +=== tests/cases/conformance/classes/members/privateNames/main.ts === +export class S { +>S : S + + static #a = 1; +>#a : number +>1 : 1 + + static #b() { this.#a = 42; } +>#b : () => void +>this.#a = 42 : 42 +>this.#a : number +>this : typeof S +>42 : 42 + + static get #c() { return S.#b(); } +>#c : void +>S.#b() : void +>S.#b : () => void +>S : typeof S +} + +=== tests/cases/conformance/classes/members/privateNames/tslib.d.ts === +// these are pre-TS4.3 versions of emit helpers, which only supported private instance fields +export declare function __classPrivateFieldGet(receiver: T, state: any): V; +>__classPrivateFieldGet : (receiver: T, state: any) => V +>receiver : T +>state : any + +export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; +>__classPrivateFieldSet : (receiver: T, state: any, value: V) => V +>receiver : T +>state : any +>value : V + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameEmitHelpers.ts b/tests/cases/conformance/classes/members/privateNames/privateNameEmitHelpers.ts new file mode 100644 index 0000000000000..82dc5693d42ba --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameEmitHelpers.ts @@ -0,0 +1,16 @@ +// @target: es2015 +// @importHelpers: true +// @isolatedModules: true + +// @filename: main.ts + +export class C { + #a = 1; + #b() { this.#c = 42; } + set #c(v: number) { this.#a += v; } +} + +// @filename: tslib.d.ts +// these are pre-TS4.3 versions of emit helpers, which only supported private instance fields +export declare function __classPrivateFieldGet(receiver: T, state: any): V; +export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameStaticEmitHelpers.ts b/tests/cases/conformance/classes/members/privateNames/privateNameStaticEmitHelpers.ts new file mode 100644 index 0000000000000..b1261a039e563 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameStaticEmitHelpers.ts @@ -0,0 +1,16 @@ +// @target: es2015 +// @importHelpers: true +// @isolatedModules: true + +// @filename: main.ts + +export class S { + static #a = 1; + static #b() { this.#a = 42; } + static get #c() { return S.#b(); } +} + +// @filename: tslib.d.ts +// these are pre-TS4.3 versions of emit helpers, which only supported private instance fields +export declare function __classPrivateFieldGet(receiver: T, state: any): V; +export declare function __classPrivateFieldSet(receiver: T, state: any, value: V): V; From 93a7ca3e5a8f0c4e870af43843baa53f01aa7c0d Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 23 Mar 2021 16:06:49 +0000 Subject: [PATCH 70/73] fix setter-only compound assignment --- src/compiler/checker.ts | 2 +- .../privateWriteOnlyAccessorRead.errors.txt | 22 +++++---- .../reference/privateWriteOnlyAccessorRead.js | 8 +++- .../privateWriteOnlyAccessorRead.symbols | 46 +++++++++++-------- .../privateWriteOnlyAccessorRead.types | 10 ++++ .../privateWriteOnlyAccessorRead.ts | 3 ++ 6 files changed, 61 insertions(+), 30 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index bb1ac6a715b6f..5e9ac6f054e7d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26823,7 +26823,7 @@ namespace ts { } else { const isSetonlyAccessor = prop && prop.flags & SymbolFlags.SetAccessor && !(prop.flags & SymbolFlags.GetAccessor); - if (isSetonlyAccessor && !isAssignmentTarget(node)) { + if (isSetonlyAccessor && assignmentKind !== AssignmentKind.Definite) { error(node, Diagnostics.Private_accessor_was_defined_without_a_getter); } } diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.errors.txt b/tests/baselines/reference/privateWriteOnlyAccessorRead.errors.txt index 47534c030719a..10153c7f55259 100644 --- a/tests/baselines/reference/privateWriteOnlyAccessorRead.errors.txt +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.errors.txt @@ -1,17 +1,19 @@ -tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(8,17): error TS2806: Private accessor was defined without a getter. -tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(11,5): error TS2806: Private accessor was defined without a getter. -tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(16,13): error TS2806: Private accessor was defined without a getter. -tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(18,17): error TS2806: Private accessor was defined without a getter. -tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(21,18): error TS2806: Private accessor was defined without a getter. -tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(25,9): error TS2806: Private accessor was defined without a getter. -tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(26,12): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(9,17): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(12,5): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(17,13): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(19,17): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(22,18): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(26,9): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(27,12): error TS2806: Private accessor was defined without a getter. +tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts(30,5): error TS2806: Private accessor was defined without a getter. -==== tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts (7 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts (8 errors) ==== class Test { set #value(v: { foo: { bar: number } }) {} set #valueRest(v: number[]) {} set #valueOne(v: number) {} + set #valueCompound(v: number) {} m() { const foo = { bar: 1 }; @@ -49,6 +51,10 @@ tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRea ~~~~~~~~~~~~~~~ !!! error TS2806: Private accessor was defined without a getter. ]; + + this.#valueCompound += 3; + ~~~~~~~~~~~~~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. } } new Test().m(); diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.js b/tests/baselines/reference/privateWriteOnlyAccessorRead.js index 0f4fce73b4130..bd92aaf7e8aee 100644 --- a/tests/baselines/reference/privateWriteOnlyAccessorRead.js +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.js @@ -3,6 +3,7 @@ class Test { set #value(v: { foo: { bar: number } }) {} set #valueRest(v: number[]) {} set #valueOne(v: number) {} + set #valueCompound(v: number) {} m() { const foo = { bar: 1 }; @@ -26,6 +27,8 @@ class Test { this.#valueOne, ...this.#valueRest ]; + + this.#valueCompound += 3; } } new Test().m(); @@ -54,7 +57,7 @@ var __rest = (this && this.__rest) || function (s, e) { } return t; }; -var _Test_instances, _Test_value_set, _Test_valueRest_set, _Test_valueOne_set; +var _Test_instances, _Test_value_set, _Test_valueRest_set, _Test_valueOne_set, _Test_valueCompound_set; class Test { constructor() { _Test_instances.add(this); @@ -81,7 +84,8 @@ class Test { __classPrivateFieldGet(this, _Test_instances, "a"), ...__classPrivateFieldGet(this, _Test_instances, "a") ]; + __classPrivateFieldSet(this, _Test_instances, __classPrivateFieldGet(this, _Test_instances, "a") + 3, "a", _Test_valueCompound_set); } } -_Test_instances = new WeakSet(), _Test_value_set = function _Test_value_set(v) { }, _Test_valueRest_set = function _Test_valueRest_set(v) { }, _Test_valueOne_set = function _Test_valueOne_set(v) { }; +_Test_instances = new WeakSet(), _Test_value_set = function _Test_value_set(v) { }, _Test_valueRest_set = function _Test_valueRest_set(v) { }, _Test_valueOne_set = function _Test_valueOne_set(v) { }, _Test_valueCompound_set = function _Test_valueCompound_set(v) { }; new Test().m(); diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.symbols b/tests/baselines/reference/privateWriteOnlyAccessorRead.symbols index a140e67fee604..d422e533c316c 100644 --- a/tests/baselines/reference/privateWriteOnlyAccessorRead.symbols +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.symbols @@ -16,12 +16,16 @@ class Test { >#valueOne : Symbol(Test.#valueOne, Decl(privateWriteOnlyAccessorRead.ts, 2, 32)) >v : Symbol(v, Decl(privateWriteOnlyAccessorRead.ts, 3, 16)) + set #valueCompound(v: number) {} +>#valueCompound : Symbol(Test.#valueCompound, Decl(privateWriteOnlyAccessorRead.ts, 3, 29)) +>v : Symbol(v, Decl(privateWriteOnlyAccessorRead.ts, 4, 21)) + m() { ->m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 3, 29)) +>m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 4, 34)) const foo = { bar: 1 }; ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 6, 9)) ->bar : Symbol(bar, Decl(privateWriteOnlyAccessorRead.ts, 6, 17)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 7, 9)) +>bar : Symbol(bar, Decl(privateWriteOnlyAccessorRead.ts, 7, 17)) console.log(this.#value); // error >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) @@ -33,54 +37,54 @@ class Test { this.#value = { foo }; // ok >this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 8, 19)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 9, 19)) this.#value = { foo }; // ok >this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 9, 19)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 10, 19)) this.#value.foo = foo; // error >this.#value.foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) >this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) >foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 6, 9)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 7, 9)) ({ o: this.#value } = { o: { foo } }); //ok ->o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 12, 6)) +>o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 13, 6)) >this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) ->o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 12, 27)) ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 12, 32)) +>o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 13, 27)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 13, 32)) ({ ...this.#value } = { foo }); //ok >this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 13, 27)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 14, 27)) ({ foo: this.#value.foo } = { foo }); //error ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 15, 6)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 16, 6)) >this.#value.foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) >this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) >foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 15, 33)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 16, 33)) ({ foo: { ...this.#value.foo }, ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 16, 6)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 17, 6)) >this.#value.foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) >this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) >foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 1, 17)) } = { foo }); //error ->foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 18, 9)) +>foo : Symbol(foo, Decl(privateWriteOnlyAccessorRead.ts, 19, 9)) let r = { o: this.#value }; //error ->r : Symbol(r, Decl(privateWriteOnlyAccessorRead.ts, 20, 7)) ->o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 20, 13)) +>r : Symbol(r, Decl(privateWriteOnlyAccessorRead.ts, 21, 7)) +>o : Symbol(o, Decl(privateWriteOnlyAccessorRead.ts, 21, 13)) >this.#value : Symbol(Test.#value, Decl(privateWriteOnlyAccessorRead.ts, 0, 12)) >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) @@ -91,7 +95,7 @@ class Test { >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) let arr = [ ->arr : Symbol(arr, Decl(privateWriteOnlyAccessorRead.ts, 23, 7)) +>arr : Symbol(arr, Decl(privateWriteOnlyAccessorRead.ts, 24, 7)) this.#valueOne, >this.#valueOne : Symbol(Test.#valueOne, Decl(privateWriteOnlyAccessorRead.ts, 2, 32)) @@ -102,10 +106,14 @@ class Test { >this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) ]; + + this.#valueCompound += 3; +>this.#valueCompound : Symbol(Test.#valueCompound, Decl(privateWriteOnlyAccessorRead.ts, 3, 29)) +>this : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) } } new Test().m(); ->new Test().m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 3, 29)) +>new Test().m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 4, 34)) >Test : Symbol(Test, Decl(privateWriteOnlyAccessorRead.ts, 0, 0)) ->m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 3, 29)) +>m : Symbol(Test.m, Decl(privateWriteOnlyAccessorRead.ts, 4, 34)) diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.types b/tests/baselines/reference/privateWriteOnlyAccessorRead.types index cb2b1d22f9668..23e62fda4c6d9 100644 --- a/tests/baselines/reference/privateWriteOnlyAccessorRead.types +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.types @@ -14,6 +14,10 @@ class Test { set #valueOne(v: number) {} >#valueOne : number +>v : number + + set #valueCompound(v: number) {} +>#valueCompound : number >v : number m() { @@ -139,6 +143,12 @@ class Test { >this : this ]; + + this.#valueCompound += 3; +>this.#valueCompound += 3 : number +>this.#valueCompound : number +>this : this +>3 : 3 } } new Test().m(); diff --git a/tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts b/tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts index ab71685f053d2..e30ed282df94b 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateWriteOnlyAccessorRead.ts @@ -3,6 +3,7 @@ class Test { set #value(v: { foo: { bar: number } }) {} set #valueRest(v: number[]) {} set #valueOne(v: number) {} + set #valueCompound(v: number) {} m() { const foo = { bar: 1 }; @@ -26,6 +27,8 @@ class Test { this.#valueOne, ...this.#valueRest ]; + + this.#valueCompound += 3; } } new Test().m(); From 30805b7d777167dc8b4a17f62445a809154f8b68 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Tue, 23 Mar 2021 17:11:51 +0000 Subject: [PATCH 71/73] fix tests --- tests/baselines/reference/importHelpersES6.js | 5 +++-- .../reference/importHelpersES6.symbols | 13 +++++++++++-- .../baselines/reference/importHelpersES6.types | 17 +++++++++++++---- .../privateNameSetterNoGetter.errors.txt | 15 +++++++++++++++ tests/cases/compiler/importHelpersES6.ts | 4 ++-- 5 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 tests/baselines/reference/privateNameSetterNoGetter.errors.txt diff --git a/tests/baselines/reference/importHelpersES6.js b/tests/baselines/reference/importHelpersES6.js index 3137f21da06f8..9a7a6bc30c77c 100644 --- a/tests/baselines/reference/importHelpersES6.js +++ b/tests/baselines/reference/importHelpersES6.js @@ -16,8 +16,9 @@ export declare function __decorate(decorators: Function[], target: any, key?: st export declare function __param(paramIndex: number, decorator: Function): Function; export declare function __metadata(metadataKey: any, metadataValue: any): Function; export declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any; -export declare function __classPrivateFieldGet(): any; -export declare function __classPrivateFieldSet(): any; +export declare function __classPrivateFieldGet(a: any, b: any, c: any, d: any): any; +export declare function __classPrivateFieldSet(a: any, b: any, c: any, d: any, e: any): any; + //// [a.js] var _A_x; diff --git a/tests/baselines/reference/importHelpersES6.symbols b/tests/baselines/reference/importHelpersES6.symbols index 5e7d2762a8110..38c044cbe709e 100644 --- a/tests/baselines/reference/importHelpersES6.symbols +++ b/tests/baselines/reference/importHelpersES6.symbols @@ -63,9 +63,18 @@ export declare function __awaiter(thisArg: any, _arguments: any, P: Function, ge >generator : Symbol(generator, Decl(tslib.d.ts, --, --)) >Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) -export declare function __classPrivateFieldGet(): any; +export declare function __classPrivateFieldGet(a: any, b: any, c: any, d: any): any; >__classPrivateFieldGet : Symbol(__classPrivateFieldGet, Decl(tslib.d.ts, --, --)) +>a : Symbol(a, Decl(tslib.d.ts, --, --)) +>b : Symbol(b, Decl(tslib.d.ts, --, --)) +>c : Symbol(c, Decl(tslib.d.ts, --, --)) +>d : Symbol(d, Decl(tslib.d.ts, --, --)) -export declare function __classPrivateFieldSet(): any; +export declare function __classPrivateFieldSet(a: any, b: any, c: any, d: any, e: any): any; >__classPrivateFieldSet : Symbol(__classPrivateFieldSet, Decl(tslib.d.ts, --, --)) +>a : Symbol(a, Decl(tslib.d.ts, --, --)) +>b : Symbol(b, Decl(tslib.d.ts, --, --)) +>c : Symbol(c, Decl(tslib.d.ts, --, --)) +>d : Symbol(d, Decl(tslib.d.ts, --, --)) +>e : Symbol(e, Decl(tslib.d.ts, --, --)) diff --git a/tests/baselines/reference/importHelpersES6.types b/tests/baselines/reference/importHelpersES6.types index 0402f6a17dec0..bbb6f97969104 100644 --- a/tests/baselines/reference/importHelpersES6.types +++ b/tests/baselines/reference/importHelpersES6.types @@ -61,9 +61,18 @@ export declare function __awaiter(thisArg: any, _arguments: any, P: Function, ge >P : Function >generator : Function -export declare function __classPrivateFieldGet(): any; ->__classPrivateFieldGet : () => any +export declare function __classPrivateFieldGet(a: any, b: any, c: any, d: any): any; +>__classPrivateFieldGet : (a: any, b: any, c: any, d: any) => any +>a : any +>b : any +>c : any +>d : any -export declare function __classPrivateFieldSet(): any; ->__classPrivateFieldSet : () => any +export declare function __classPrivateFieldSet(a: any, b: any, c: any, d: any, e: any): any; +>__classPrivateFieldSet : (a: any, b: any, c: any, d: any, e: any) => any +>a : any +>b : any +>c : any +>d : any +>e : any diff --git a/tests/baselines/reference/privateNameSetterNoGetter.errors.txt b/tests/baselines/reference/privateNameSetterNoGetter.errors.txt new file mode 100644 index 0000000000000..61523f9190f9f --- /dev/null +++ b/tests/baselines/reference/privateNameSetterNoGetter.errors.txt @@ -0,0 +1,15 @@ +tests/cases/conformance/classes/members/privateNames/privateNameSetterNoGetter.ts(4,9): error TS2806: Private accessor was defined without a getter. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameSetterNoGetter.ts (1 errors) ==== + const C = class { + set #x(x) {} + m() { + this.#x += 2; // Error + ~~~~~~~ +!!! error TS2806: Private accessor was defined without a getter. + } + } + + console.log(new C().m()); + \ No newline at end of file diff --git a/tests/cases/compiler/importHelpersES6.ts b/tests/cases/compiler/importHelpersES6.ts index 36d9cba73178b..394c01e147841 100644 --- a/tests/cases/compiler/importHelpersES6.ts +++ b/tests/cases/compiler/importHelpersES6.ts @@ -17,5 +17,5 @@ export declare function __decorate(decorators: Function[], target: any, key?: st export declare function __param(paramIndex: number, decorator: Function): Function; export declare function __metadata(metadataKey: any, metadataValue: any): Function; export declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any; -export declare function __classPrivateFieldGet(): any; -export declare function __classPrivateFieldSet(): any; \ No newline at end of file +export declare function __classPrivateFieldGet(a: any, b: any, c: any, d: any): any; +export declare function __classPrivateFieldSet(a: any, b: any, c: any, d: any, e: any): any; From 8d77a8e43453c9ce383920500381bc80d0cf8e8c Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 24 Mar 2021 13:25:13 +0000 Subject: [PATCH 72/73] fix duplicated trailing comments (#64) --- src/compiler/transformers/classFields.ts | 30 ++++++++++++++----- .../baselines/reference/privateNameAndAny.js | 8 ++--- .../baselines/reference/privateNameMethod.js | 4 +-- .../reference/privateNameMethodAssignment.js | 6 ++-- .../privateNameNestedMethodAccess.js | 3 +- .../privateNameStaticFieldDerivedClasses.js | 3 +- .../reference/privateNameStaticMethod.js | 4 +-- .../privateNameStaticMethodAssignment.js | 6 ++-- .../reference/privateNamesAndStaticFields.js | 3 +- .../privateNamesConstructorChain-1.js | 3 +- .../privateNamesConstructorChain-2.js | 3 +- .../reference/privateStaticNameShadowing.js | 4 +-- .../reference/privateWriteOnlyAccessorRead.js | 9 ++---- 13 files changed, 40 insertions(+), 46 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index f86462dffcb08..d6b6e70e4ec03 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -352,31 +352,39 @@ namespace ts { } function createPrivateIdentifierAccessHelper(info: PrivateIdentifierInfo, receiver: Expression): Expression { + let getExpression: Expression; + switch(info.kind) { case PrivateIdentifierKind.Accessor: - return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( + getExpression = context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.brandCheckIdentifier, info.kind, info.getterName ); + break; case PrivateIdentifierKind.Method: - return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( + getExpression = context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.brandCheckIdentifier, info.kind, info.methodName ); + break; case PrivateIdentifierKind.Field: - return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( + getExpression = context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.brandCheckIdentifier, info.kind, info.variableName ); + break; default: Debug.assertNever(info, "Unknown private element type"); } + + setCommentRange(receiver, getExpression); + return getExpression; } function visitPropertyAccessExpression(node: PropertyAccessExpression) { @@ -555,7 +563,7 @@ namespace ts { return visitEachChild(node, visitor, context); } - function createPrivateIdentifierAssignment(info: PrivateIdentifierInfo, receiver: Expression, right: Expression, operator: AssignmentOperator) { + function createPrivateIdentifierAssignment(info: PrivateIdentifierInfo, receiver: Expression, right: Expression, operator: AssignmentOperator): Expression { receiver = visitNode(receiver, visitor, isExpression); right = visitNode(right, visitor, isExpression); @@ -569,34 +577,42 @@ namespace ts { ); } + let setExpression: Expression; + switch(info.kind) { case PrivateIdentifierKind.Accessor: - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + setExpression = context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.brandCheckIdentifier, right, info.kind, info.setterName ); + break; case PrivateIdentifierKind.Method: - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + setExpression = context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.brandCheckIdentifier, right, info.kind, /* f */ undefined ); + break; case PrivateIdentifierKind.Field: - return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + setExpression = context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.brandCheckIdentifier, right, info.kind, info.variableName ); + break; default: Debug.assertNever(info, "Unknown private element type"); } + + setCommentRange(receiver, setExpression); + return setExpression; } /** diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index 805039736409c..146b34fd5affe 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -41,14 +41,10 @@ class A { } method(thing) { __classPrivateFieldGet(thing, _A_foo, "f"); // OK - __classPrivateFieldGet(// OK - thing, _a, "m", _A_m).call(// OK - thing); + __classPrivateFieldGet(thing, _a, "m", _A_m).call(thing); __classPrivateFieldGet(thing, _a, "f", _A_baz); thing.; // Error - __classPrivateFieldGet(// Error - thing, _A_foo, "f").call(// Error - thing); + __classPrivateFieldGet(thing, _A_foo, "f").call(thing); } methodU(thing) { __classPrivateFieldGet(thing, _A_foo, "f"); diff --git a/tests/baselines/reference/privateNameMethod.js b/tests/baselines/reference/privateNameMethod.js index 11915e5eaea28..21e6ff9b3cd54 100644 --- a/tests/baselines/reference/privateNameMethod.js +++ b/tests/baselines/reference/privateNameMethod.js @@ -25,9 +25,7 @@ class A1 { _A1_instances.add(this); __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(this, ""); __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(this, 1); // Error - __classPrivateFieldGet(// Error - this, _A1_instances, "m", _A1_method).call(// Error - this); // Error + __classPrivateFieldGet(this, _A1_instances, "m", _A1_method).call(this); // Error } } _A1_instances = new WeakSet(), _A1_method = function _A1_method(param) { diff --git a/tests/baselines/reference/privateNameMethodAssignment.js b/tests/baselines/reference/privateNameMethodAssignment.js index 47eff0877d838..c33e3406f9d9b 100644 --- a/tests/baselines/reference/privateNameMethodAssignment.js +++ b/tests/baselines/reference/privateNameMethodAssignment.js @@ -30,10 +30,8 @@ class A3 { var _a, _b; _A3_instances.add(this); __classPrivateFieldSet(this, _A3_instances, () => { }, "m"); // Error, not writable - __classPrivateFieldSet(// Error, not writable - a, _A3_instances, () => { }, "m"); // Error, not writable - __classPrivateFieldSet(// Error, not writable - b, _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 diff --git a/tests/baselines/reference/privateNameNestedMethodAccess.js b/tests/baselines/reference/privateNameNestedMethodAccess.js index aa22d016ad0fd..2bdd57e019e76 100644 --- a/tests/baselines/reference/privateNameNestedMethodAccess.js +++ b/tests/baselines/reference/privateNameNestedMethodAccess.js @@ -43,8 +43,7 @@ class C { _D_instances.add(this); __classPrivateFieldGet(new C(), _C_foo, "f"); __classPrivateFieldGet(new C(), _D_instances, "m", _D_bar); // Error - __classPrivateFieldGet(// Error - new C(), _C_instances, "a", _C_baz_get); + __classPrivateFieldGet(new C(), _C_instances, "a", _C_baz_get); __classPrivateFieldGet(new D(), _D_instances, "m", _D_bar); } n(x) { diff --git a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js index 8b9a8f45bbced..1b4dd4babb1c4 100644 --- a/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js +++ b/tests/baselines/reference/privateNameStaticFieldDerivedClasses.js @@ -32,8 +32,7 @@ var _a, _Base_prop, _b, _Derived_derivedProp; class Base { static method(x) { Derived.; // error - __classPrivateFieldSet(// error - Base, _a, 10, "f", _Base_prop); + __classPrivateFieldSet(Base, _a, 10, "f", _Base_prop); } } _a = Base; diff --git a/tests/baselines/reference/privateNameStaticMethod.js b/tests/baselines/reference/privateNameStaticMethod.js index 0274884d235e8..1541a630095da 100644 --- a/tests/baselines/reference/privateNameStaticMethod.js +++ b/tests/baselines/reference/privateNameStaticMethod.js @@ -24,9 +24,7 @@ class A1 { constructor() { __classPrivateFieldGet(A1, _a, "m", _A1_method).call(A1, ""); __classPrivateFieldGet(A1, _a, "m", _A1_method).call(A1, 1); // Error - __classPrivateFieldGet(// Error - A1, _a, "m", _A1_method).call(// Error - A1); // Error + __classPrivateFieldGet(A1, _a, "m", _A1_method).call(A1); // Error } } _a = A1, _A1_method = function _A1_method(param) { diff --git a/tests/baselines/reference/privateNameStaticMethodAssignment.js b/tests/baselines/reference/privateNameStaticMethodAssignment.js index 909f4ca65f717..48b6df46c24c8 100644 --- a/tests/baselines/reference/privateNameStaticMethodAssignment.js +++ b/tests/baselines/reference/privateNameStaticMethodAssignment.js @@ -29,10 +29,8 @@ class A3 { constructor(a, b) { var _b; __classPrivateFieldSet(A3, _a, () => { }, "m"); // Error, not writable - __classPrivateFieldSet(// Error, not writable - a, _a, () => { }, "m"); // Error, not writable - __classPrivateFieldSet(// Error, not writable - b, _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 diff --git a/tests/baselines/reference/privateNamesAndStaticFields.js b/tests/baselines/reference/privateNamesAndStaticFields.js index 0ba4bd832d501..a9bba00f8e17a 100644 --- a/tests/baselines/reference/privateNamesAndStaticFields.js +++ b/tests/baselines/reference/privateNamesAndStaticFields.js @@ -40,8 +40,7 @@ class A { constructor() { __classPrivateFieldSet(A, _a, 3, "f", _A_foo); __classPrivateFieldGet(B, _a, "f", _A_foo); // Error - __classPrivateFieldGet(// Error - B, _a, "f", _A_bar); // Error + __classPrivateFieldGet(B, _a, "f", _A_bar); // Error } } _a = A; diff --git a/tests/baselines/reference/privateNamesConstructorChain-1.js b/tests/baselines/reference/privateNamesConstructorChain-1.js index abde705d8bbb2..cb4c1076945af 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-1.js +++ b/tests/baselines/reference/privateNamesConstructorChain-1.js @@ -27,8 +27,7 @@ class Parent { } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo, "f"); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(// OK (`#foo` was added when `Parent`'s constructor was called on `child`) - Child, _a, "f", _Parent_bar); // Error: not found + __classPrivateFieldGet(Child, _a, "f", _Parent_bar); // Error: not found } } _a = Parent, _Parent_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNamesConstructorChain-2.js b/tests/baselines/reference/privateNamesConstructorChain-2.js index 9f1341b8fb382..80e569c8ab7bc 100644 --- a/tests/baselines/reference/privateNamesConstructorChain-2.js +++ b/tests/baselines/reference/privateNamesConstructorChain-2.js @@ -29,8 +29,7 @@ class Parent { } accessChildProps() { __classPrivateFieldGet(new Child(), _Parent_foo, "f"); // OK (`#foo` was added when `Parent`'s constructor was called on `child`) - __classPrivateFieldGet(// OK (`#foo` was added when `Parent`'s constructor was called on `child`) - Child, _a, "f", _Parent_bar); // Error: not found + __classPrivateFieldGet(Child, _a, "f", _Parent_bar); // Error: not found } } _a = Parent, _Parent_foo = new WeakMap(); diff --git a/tests/baselines/reference/privateStaticNameShadowing.js b/tests/baselines/reference/privateStaticNameShadowing.js index fd61fae53faeb..c300ba650e29a 100644 --- a/tests/baselines/reference/privateStaticNameShadowing.js +++ b/tests/baselines/reference/privateStaticNameShadowing.js @@ -28,9 +28,7 @@ class X { _b = X, _X_m = function _X_m() { const X = {}; // shadow the class const _a = {}; // shadow the first generated var - __classPrivateFieldGet(// shadow the first generated var - X, _b, "m", _X_m).call(// shadow the first generated var - X); // Should check with X as the receiver with _b as the class constructor + __classPrivateFieldGet(X, _b, "m", _X_m).call(X); // Should check with X as the receiver with _b as the class constructor return 1; }; _X_f = { value: __classPrivateFieldGet(X, _b, "m", _X_m).call(X) }; diff --git a/tests/baselines/reference/privateWriteOnlyAccessorRead.js b/tests/baselines/reference/privateWriteOnlyAccessorRead.js index bd92aaf7e8aee..8761f3f667fa1 100644 --- a/tests/baselines/reference/privateWriteOnlyAccessorRead.js +++ b/tests/baselines/reference/privateWriteOnlyAccessorRead.js @@ -66,12 +66,9 @@ class Test { var _a, _b, _c; const foo = { bar: 1 }; console.log(__classPrivateFieldGet(this, _Test_instances, "a")); // error - __classPrivateFieldSet(// error - this, _Test_instances, { foo }, "a", _Test_value_set); // ok - __classPrivateFieldSet(// ok - this, _Test_instances, { foo }, "a", _Test_value_set); // ok - __classPrivateFieldGet(// ok - this, _Test_instances, "a").foo = foo; // 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 ({ foo: __classPrivateFieldGet(this, _Test_instances, "a").foo } = { foo }); //error From 8078ae0b4fa9eef001a9f25480d44c5c1e95a703 Mon Sep 17 00:00:00 2001 From: Kubilay Kahveci Date: Wed, 24 Mar 2021 23:27:47 +0000 Subject: [PATCH 73/73] clear receiver pos and setTextRange on helper calls --- src/compiler/transformers/classFields.ts | 42 ++++++++++-------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index d6b6e70e4ec03..ff6b53655f01d 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -352,47 +352,44 @@ namespace ts { } function createPrivateIdentifierAccessHelper(info: PrivateIdentifierInfo, receiver: Expression): Expression { - let getExpression: Expression; + setCommentRange(receiver, moveRangePos(receiver, -1)); switch(info.kind) { case PrivateIdentifierKind.Accessor: - getExpression = context.getEmitHelperFactory().createClassPrivateFieldGetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.brandCheckIdentifier, info.kind, info.getterName ); - break; case PrivateIdentifierKind.Method: - getExpression = context.getEmitHelperFactory().createClassPrivateFieldGetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.brandCheckIdentifier, info.kind, info.methodName ); - break; case PrivateIdentifierKind.Field: - getExpression = context.getEmitHelperFactory().createClassPrivateFieldGetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldGetHelper( receiver, info.brandCheckIdentifier, info.kind, info.variableName ); - break; default: Debug.assertNever(info, "Unknown private element type"); } - - setCommentRange(receiver, getExpression); - return getExpression; } function visitPropertyAccessExpression(node: PropertyAccessExpression) { if (shouldTransformPrivateElements && isPrivateIdentifier(node.name)) { const privateIdentifierInfo = accessPrivateIdentifier(node.name); if (privateIdentifierInfo) { - return setOriginalNode( - createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), + return setTextRange( + setOriginalNode( + createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), + node + ), node ); } @@ -553,8 +550,11 @@ namespace ts { if (isAssignmentExpression(node) && isPrivateIdentifierPropertyAccessExpression(node.left)) { const info = accessPrivateIdentifier(node.left.name); if (info) { - return setOriginalNode( - createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), + return setTextRange( + setOriginalNode( + createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), + node + ), node ); } @@ -577,42 +577,36 @@ namespace ts { ); } - let setExpression: Expression; + setCommentRange(receiver, moveRangePos(receiver, -1)); switch(info.kind) { case PrivateIdentifierKind.Accessor: - setExpression = context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.brandCheckIdentifier, right, info.kind, info.setterName ); - break; case PrivateIdentifierKind.Method: - setExpression = context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.brandCheckIdentifier, right, info.kind, /* f */ undefined ); - break; case PrivateIdentifierKind.Field: - setExpression = context.getEmitHelperFactory().createClassPrivateFieldSetHelper( + return context.getEmitHelperFactory().createClassPrivateFieldSetHelper( receiver, info.brandCheckIdentifier, right, info.kind, info.variableName ); - break; default: Debug.assertNever(info, "Unknown private element type"); } - - setCommentRange(receiver, setExpression); - return setExpression; } /**