From 906a79df763f8aeebe4a72fed0a6aac3b93a144e Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Wed, 4 Oct 2017 21:24:32 -0700 Subject: [PATCH] Support dynamic names on static members of class. --- src/compiler/checker.ts | 48 ++++- src/compiler/types.ts | 1 + tests/baselines/reference/dynamicNames.js | 8 + .../baselines/reference/dynamicNames.symbols | 201 ++++++++++-------- tests/baselines/reference/dynamicNames.types | 16 ++ tests/cases/compiler/dynamicNames.ts | 7 + 6 files changed, 183 insertions(+), 98 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5b2782cef8d..9e0bcf90813 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1867,7 +1867,9 @@ namespace ts { } function getExportsOfSymbol(symbol: Symbol): SymbolTable { - return symbol.flags & SymbolFlags.Module ? getExportsOfModule(symbol) : symbol.exports || emptySymbols; + return symbol.flags & SymbolFlags.Class ? getExportsOfClass(symbol) : + symbol.flags & SymbolFlags.Module ? getExportsOfModule(symbol) : + symbol.exports || emptySymbols; } function getExportsOfModule(moduleSymbol: Symbol): SymbolTable { @@ -1875,6 +1877,33 @@ namespace ts { return links.resolvedExports || (links.resolvedExports = getExportsOfModuleWorker(moduleSymbol)); } + function getExportsOfClass(symbol: Symbol) { + const links = getSymbolLinks(symbol); + if (!links.resolvedExports) { + const earlySymbols = symbol.flags & SymbolFlags.Module ? getExportsOfModuleWorker(symbol) : symbol.exports; + const lateSymbols = getLateBoundExportsOfSymbol(symbol); + + // In the event we recursively resolve the members of the symbol, we + // should only see the early-bound members of the symbol here. + links.resolvedExports = earlySymbols || emptySymbols; + + // fill in any as-yet-unresolved late-bound members. + for (const decl of symbol.declarations) { + const members = getMembersOfDeclaration(decl); + if (members) { + for (const member of members) { + if (hasModifier(member, ModifierFlags.Static) && hasLateBindableName(member)) { + lateBindMember(decl.symbol, earlySymbols, lateSymbols, member); + } + } + } + } + + links.resolvedExports = combineSymbolTables(earlySymbols, lateSymbols) || emptySymbols; + } + return links.resolvedExports; + } + interface ExportCollisionTracker { specifierText: string; exportsWithDuplicate: ExportDeclaration[]; @@ -5507,6 +5536,16 @@ namespace ts { return links.lateMembers || (links.lateMembers = createSymbolTable()); } + /** + * Gets the symbol table used to store exports added during late-binding. + * This table is filled in as the late-bound names for dynamic members are resolved. + */ + function getLateBoundExportsOfSymbol(symbol: Symbol): SymbolTable { + Debug.assert(!!(symbol.flags & SymbolFlags.Class), "Expected a container that supports late-binding of exports."); + const links = getSymbolLinks(symbol); + return links.lateExports || (links.lateExports = createSymbolTable()); + } + /** * Adds a declaration to a late-bound dynamic member. This performs the same function for * late-bound members that `addDeclarationToSymbol` in binder.ts performs for early-bound @@ -5617,14 +5656,13 @@ namespace ts { */ function getLateBoundSymbol(symbol: Symbol) { if (symbol && (symbol.flags & SymbolFlags.ClassMember) && symbol.escapedName === InternalSymbolName.Computed) { - // NOTE: This does not yet support late-bound static members of a class. const isStaticMember = some(symbol.declarations, declaration => hasModifier(declaration, ModifierFlags.Static)); const parent = symbol.parent; - if (parent && (parent.flags & (isStaticMember ? SymbolFlags.Class : SymbolFlags.LateBindableContainer)) && !isStaticMember) { + if (parent && (parent.flags & (isStaticMember ? SymbolFlags.Class : SymbolFlags.LateBindableContainer))) { const links = getSymbolLinks(symbol); if (!links.lateSymbol) { - const earlySymbols = parent.members; - const lateSymbols = getLateBoundMembersOfSymbol(symbol.parent); + const earlySymbols = isStaticMember ? parent.exports : parent.members; + const lateSymbols = isStaticMember ? getLateBoundExportsOfSymbol(parent) : getLateBoundMembersOfSymbol(parent); // In the event we attempt to get the late-bound symbol for a symbol recursively, // fall back to the early-bound symbol. diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 54386fb04e8..eb492562961 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3070,6 +3070,7 @@ namespace ts { enumKind?: EnumKind; // Enum declaration classification lateSymbol?: Symbol; // Late-bound symbol for a computed property lateMembers?: SymbolTable; // Late-bound members resolved during check + lateExports?: SymbolTable; // Late-bound exports resolved during check } /* @internal */ diff --git a/tests/baselines/reference/dynamicNames.js b/tests/baselines/reference/dynamicNames.js index 869f7282639..3180aa35310 100644 --- a/tests/baselines/reference/dynamicNames.js +++ b/tests/baselines/reference/dynamicNames.js @@ -90,6 +90,12 @@ declare type T15 = { [s2]: boolean; }; +declare class C { + static a: number; + static 1: string; + static [s2]: boolean; +} + let t0: T0; let t1: T1; let t2: T2; @@ -115,6 +121,7 @@ let t15: T15; t0 = t1, t0 = t2, t0 = t3, t1 = t0, t1 = t2, t1 = t3, t2 = t0, t2 = t1, t2 = t3, t3 = t0, t3 = t1, t3 = t2; t4 = t5, t4 = t6, t4 = t7, t5 = t4, t5 = t6, t5 = t7, t6 = t4, t6 = t5, t6 = t7, t7 = t4, t7 = t5, t7 = t6; t0 = t12, t0 = t13, t0 = t14, t0 = t15, t12 = t0, t13 = t0, t14 = t0, t15 = t0; +t0 = C; // static side // object literals export const o1 = { @@ -173,6 +180,7 @@ let t15; t0 = t1, t0 = t2, t0 = t3, t1 = t0, t1 = t2, t1 = t3, t2 = t0, t2 = t1, t2 = t3, t3 = t0, t3 = t1, t3 = t2; t4 = t5, t4 = t6, t4 = t7, t5 = t4, t5 = t6, t5 = t7, t6 = t4, t6 = t5, t6 = t7, t7 = t4, t7 = t5, t7 = t6; t0 = t12, t0 = t13, t0 = t14, t0 = t15, t12 = t0, t13 = t0, t14 = t0, t15 = t0; +t0 = C; // static side // object literals exports.o1 = { [exports.c4]: 1, diff --git a/tests/baselines/reference/dynamicNames.symbols b/tests/baselines/reference/dynamicNames.symbols index 6ac8b66baa6..2e0a5cadfcd 100644 --- a/tests/baselines/reference/dynamicNames.symbols +++ b/tests/baselines/reference/dynamicNames.symbols @@ -232,168 +232,183 @@ declare type T15 = { }; +declare class C { +>C : Symbol(C, Decl(main.ts, 65, 2)) + + static a: number; +>a : Symbol(C.a, Decl(main.ts, 67, 17)) + + static 1: string; + static [s2]: boolean; +>s2 : Symbol(s2, Decl(main.ts, 29, 12)) +} + let t0: T0; ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) >T0 : Symbol(T0, Decl(main.ts, 0, 20)) let t1: T1; ->t1 : Symbol(t1, Decl(main.ts, 68, 3)) +>t1 : Symbol(t1, Decl(main.ts, 74, 3)) >T1 : Symbol(T1, Decl(main.ts, 0, 24)) let t2: T2; ->t2 : Symbol(t2, Decl(main.ts, 69, 3)) +>t2 : Symbol(t2, Decl(main.ts, 75, 3)) >T2 : Symbol(T2, Decl(main.ts, 0, 28)) let t3: T3; ->t3 : Symbol(t3, Decl(main.ts, 70, 3)) +>t3 : Symbol(t3, Decl(main.ts, 76, 3)) >T3 : Symbol(T3, Decl(main.ts, 0, 32)) let t0_1: M.T0; ->t0_1 : Symbol(t0_1, Decl(main.ts, 71, 3)) +>t0_1 : Symbol(t0_1, Decl(main.ts, 77, 3)) >M : Symbol(M, Decl(main.ts, 1, 6)) >T0 : Symbol(T0, Decl(module.ts, 2, 27)) let t1_1: M.T1; ->t1_1 : Symbol(t1_1, Decl(main.ts, 72, 3)) +>t1_1 : Symbol(t1_1, Decl(main.ts, 78, 3)) >M : Symbol(M, Decl(main.ts, 1, 6)) >T1 : Symbol(T1, Decl(module.ts, 7, 1)) let t2_1: M.T2; ->t2_1 : Symbol(t2_1, Decl(main.ts, 73, 3)) +>t2_1 : Symbol(t2_1, Decl(main.ts, 79, 3)) >M : Symbol(M, Decl(main.ts, 1, 6)) >T2 : Symbol(T2, Decl(module.ts, 12, 1)) let t3_1: M.T3; ->t3_1 : Symbol(t3_1, Decl(main.ts, 74, 3)) +>t3_1 : Symbol(t3_1, Decl(main.ts, 80, 3)) >M : Symbol(M, Decl(main.ts, 1, 6)) >T3 : Symbol(T3, Decl(module.ts, 14, 1)) let t4: N.T4; ->t4 : Symbol(t4, Decl(main.ts, 75, 3)) +>t4 : Symbol(t4, Decl(main.ts, 81, 3)) >N : Symbol(N, Decl(main.ts, 1, 30)) >T4 : Symbol(N.T4, Decl(main.ts, 6, 36)) let t5: N.T5; ->t5 : Symbol(t5, Decl(main.ts, 76, 3)) +>t5 : Symbol(t5, Decl(main.ts, 82, 3)) >N : Symbol(N, Decl(main.ts, 1, 30)) >T5 : Symbol(N.T5, Decl(main.ts, 12, 5)) let t6: N.T6; ->t6 : Symbol(t6, Decl(main.ts, 77, 3)) +>t6 : Symbol(t6, Decl(main.ts, 83, 3)) >N : Symbol(N, Decl(main.ts, 1, 30)) >T6 : Symbol(N.T6, Decl(main.ts, 17, 5)) let t7: N.T7; ->t7 : Symbol(t7, Decl(main.ts, 78, 3)) +>t7 : Symbol(t7, Decl(main.ts, 84, 3)) >N : Symbol(N, Decl(main.ts, 1, 30)) >T7 : Symbol(N.T7, Decl(main.ts, 19, 5)) let t8: T8; ->t8 : Symbol(t8, Decl(main.ts, 79, 3)) +>t8 : Symbol(t8, Decl(main.ts, 85, 3)) >T8 : Symbol(T8, Decl(main.ts, 29, 32)) let t9: T9; ->t9 : Symbol(t9, Decl(main.ts, 80, 3)) +>t9 : Symbol(t9, Decl(main.ts, 86, 3)) >T9 : Symbol(T9, Decl(main.ts, 35, 1)) let t10: T10; ->t10 : Symbol(t10, Decl(main.ts, 81, 3)) +>t10 : Symbol(t10, Decl(main.ts, 87, 3)) >T10 : Symbol(T10, Decl(main.ts, 40, 1)) let t11: T11; ->t11 : Symbol(t11, Decl(main.ts, 82, 3)) +>t11 : Symbol(t11, Decl(main.ts, 88, 3)) >T11 : Symbol(T11, Decl(main.ts, 42, 1)) let t12: T12; ->t12 : Symbol(t12, Decl(main.ts, 83, 3)) +>t12 : Symbol(t12, Decl(main.ts, 89, 3)) >T12 : Symbol(T12, Decl(main.ts, 47, 2)) let t13: T13; ->t13 : Symbol(t13, Decl(main.ts, 84, 3)) +>t13 : Symbol(t13, Decl(main.ts, 90, 3)) >T13 : Symbol(T13, Decl(main.ts, 53, 1)) let t14: T14; ->t14 : Symbol(t14, Decl(main.ts, 85, 3)) +>t14 : Symbol(t14, Decl(main.ts, 91, 3)) >T14 : Symbol(T14, Decl(main.ts, 58, 1)) let t15: T15; ->t15 : Symbol(t15, Decl(main.ts, 86, 3)) +>t15 : Symbol(t15, Decl(main.ts, 92, 3)) >T15 : Symbol(T15, Decl(main.ts, 60, 1)) // assignability t0 = t1, t0 = t2, t0 = t3, t1 = t0, t1 = t2, t1 = t3, t2 = t0, t2 = t1, t2 = t3, t3 = t0, t3 = t1, t3 = t2; ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t1 : Symbol(t1, Decl(main.ts, 68, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t2 : Symbol(t2, Decl(main.ts, 69, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t3 : Symbol(t3, Decl(main.ts, 70, 3)) ->t1 : Symbol(t1, Decl(main.ts, 68, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t1 : Symbol(t1, Decl(main.ts, 68, 3)) ->t2 : Symbol(t2, Decl(main.ts, 69, 3)) ->t1 : Symbol(t1, Decl(main.ts, 68, 3)) ->t3 : Symbol(t3, Decl(main.ts, 70, 3)) ->t2 : Symbol(t2, Decl(main.ts, 69, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t2 : Symbol(t2, Decl(main.ts, 69, 3)) ->t1 : Symbol(t1, Decl(main.ts, 68, 3)) ->t2 : Symbol(t2, Decl(main.ts, 69, 3)) ->t3 : Symbol(t3, Decl(main.ts, 70, 3)) ->t3 : Symbol(t3, Decl(main.ts, 70, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t3 : Symbol(t3, Decl(main.ts, 70, 3)) ->t1 : Symbol(t1, Decl(main.ts, 68, 3)) ->t3 : Symbol(t3, Decl(main.ts, 70, 3)) ->t2 : Symbol(t2, Decl(main.ts, 69, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t1 : Symbol(t1, Decl(main.ts, 74, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t2 : Symbol(t2, Decl(main.ts, 75, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t3 : Symbol(t3, Decl(main.ts, 76, 3)) +>t1 : Symbol(t1, Decl(main.ts, 74, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t1 : Symbol(t1, Decl(main.ts, 74, 3)) +>t2 : Symbol(t2, Decl(main.ts, 75, 3)) +>t1 : Symbol(t1, Decl(main.ts, 74, 3)) +>t3 : Symbol(t3, Decl(main.ts, 76, 3)) +>t2 : Symbol(t2, Decl(main.ts, 75, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t2 : Symbol(t2, Decl(main.ts, 75, 3)) +>t1 : Symbol(t1, Decl(main.ts, 74, 3)) +>t2 : Symbol(t2, Decl(main.ts, 75, 3)) +>t3 : Symbol(t3, Decl(main.ts, 76, 3)) +>t3 : Symbol(t3, Decl(main.ts, 76, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t3 : Symbol(t3, Decl(main.ts, 76, 3)) +>t1 : Symbol(t1, Decl(main.ts, 74, 3)) +>t3 : Symbol(t3, Decl(main.ts, 76, 3)) +>t2 : Symbol(t2, Decl(main.ts, 75, 3)) t4 = t5, t4 = t6, t4 = t7, t5 = t4, t5 = t6, t5 = t7, t6 = t4, t6 = t5, t6 = t7, t7 = t4, t7 = t5, t7 = t6; ->t4 : Symbol(t4, Decl(main.ts, 75, 3)) ->t5 : Symbol(t5, Decl(main.ts, 76, 3)) ->t4 : Symbol(t4, Decl(main.ts, 75, 3)) ->t6 : Symbol(t6, Decl(main.ts, 77, 3)) ->t4 : Symbol(t4, Decl(main.ts, 75, 3)) ->t7 : Symbol(t7, Decl(main.ts, 78, 3)) ->t5 : Symbol(t5, Decl(main.ts, 76, 3)) ->t4 : Symbol(t4, Decl(main.ts, 75, 3)) ->t5 : Symbol(t5, Decl(main.ts, 76, 3)) ->t6 : Symbol(t6, Decl(main.ts, 77, 3)) ->t5 : Symbol(t5, Decl(main.ts, 76, 3)) ->t7 : Symbol(t7, Decl(main.ts, 78, 3)) ->t6 : Symbol(t6, Decl(main.ts, 77, 3)) ->t4 : Symbol(t4, Decl(main.ts, 75, 3)) ->t6 : Symbol(t6, Decl(main.ts, 77, 3)) ->t5 : Symbol(t5, Decl(main.ts, 76, 3)) ->t6 : Symbol(t6, Decl(main.ts, 77, 3)) ->t7 : Symbol(t7, Decl(main.ts, 78, 3)) ->t7 : Symbol(t7, Decl(main.ts, 78, 3)) ->t4 : Symbol(t4, Decl(main.ts, 75, 3)) ->t7 : Symbol(t7, Decl(main.ts, 78, 3)) ->t5 : Symbol(t5, Decl(main.ts, 76, 3)) ->t7 : Symbol(t7, Decl(main.ts, 78, 3)) ->t6 : Symbol(t6, Decl(main.ts, 77, 3)) +>t4 : Symbol(t4, Decl(main.ts, 81, 3)) +>t5 : Symbol(t5, Decl(main.ts, 82, 3)) +>t4 : Symbol(t4, Decl(main.ts, 81, 3)) +>t6 : Symbol(t6, Decl(main.ts, 83, 3)) +>t4 : Symbol(t4, Decl(main.ts, 81, 3)) +>t7 : Symbol(t7, Decl(main.ts, 84, 3)) +>t5 : Symbol(t5, Decl(main.ts, 82, 3)) +>t4 : Symbol(t4, Decl(main.ts, 81, 3)) +>t5 : Symbol(t5, Decl(main.ts, 82, 3)) +>t6 : Symbol(t6, Decl(main.ts, 83, 3)) +>t5 : Symbol(t5, Decl(main.ts, 82, 3)) +>t7 : Symbol(t7, Decl(main.ts, 84, 3)) +>t6 : Symbol(t6, Decl(main.ts, 83, 3)) +>t4 : Symbol(t4, Decl(main.ts, 81, 3)) +>t6 : Symbol(t6, Decl(main.ts, 83, 3)) +>t5 : Symbol(t5, Decl(main.ts, 82, 3)) +>t6 : Symbol(t6, Decl(main.ts, 83, 3)) +>t7 : Symbol(t7, Decl(main.ts, 84, 3)) +>t7 : Symbol(t7, Decl(main.ts, 84, 3)) +>t4 : Symbol(t4, Decl(main.ts, 81, 3)) +>t7 : Symbol(t7, Decl(main.ts, 84, 3)) +>t5 : Symbol(t5, Decl(main.ts, 82, 3)) +>t7 : Symbol(t7, Decl(main.ts, 84, 3)) +>t6 : Symbol(t6, Decl(main.ts, 83, 3)) t0 = t12, t0 = t13, t0 = t14, t0 = t15, t12 = t0, t13 = t0, t14 = t0, t15 = t0; ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t12 : Symbol(t12, Decl(main.ts, 83, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t13 : Symbol(t13, Decl(main.ts, 84, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t14 : Symbol(t14, Decl(main.ts, 85, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t15 : Symbol(t15, Decl(main.ts, 86, 3)) ->t12 : Symbol(t12, Decl(main.ts, 83, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t13 : Symbol(t13, Decl(main.ts, 84, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t14 : Symbol(t14, Decl(main.ts, 85, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) ->t15 : Symbol(t15, Decl(main.ts, 86, 3)) ->t0 : Symbol(t0, Decl(main.ts, 67, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t12 : Symbol(t12, Decl(main.ts, 89, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t13 : Symbol(t13, Decl(main.ts, 90, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t14 : Symbol(t14, Decl(main.ts, 91, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t15 : Symbol(t15, Decl(main.ts, 92, 3)) +>t12 : Symbol(t12, Decl(main.ts, 89, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t13 : Symbol(t13, Decl(main.ts, 90, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t14 : Symbol(t14, Decl(main.ts, 91, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>t15 : Symbol(t15, Decl(main.ts, 92, 3)) +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) + +t0 = C; // static side +>t0 : Symbol(t0, Decl(main.ts, 73, 3)) +>C : Symbol(C, Decl(main.ts, 65, 2)) // object literals export const o1 = { ->o1 : Symbol(o1, Decl(main.ts, 94, 12)) +>o1 : Symbol(o1, Decl(main.ts, 101, 12)) [c4]: 1, >c4 : Symbol(c4, Decl(main.ts, 27, 12)) @@ -408,22 +423,22 @@ export const o1 = { // check element access types export const o1_c4 = o1[c4]; ->o1_c4 : Symbol(o1_c4, Decl(main.ts, 101, 12)) ->o1 : Symbol(o1, Decl(main.ts, 94, 12)) +>o1_c4 : Symbol(o1_c4, Decl(main.ts, 108, 12)) +>o1 : Symbol(o1, Decl(main.ts, 101, 12)) >c4 : Symbol(c4, Decl(main.ts, 27, 12)) export const o1_c5 = o1[c5]; ->o1_c5 : Symbol(o1_c5, Decl(main.ts, 102, 12)) ->o1 : Symbol(o1, Decl(main.ts, 94, 12)) +>o1_c5 : Symbol(o1_c5, Decl(main.ts, 109, 12)) +>o1 : Symbol(o1, Decl(main.ts, 101, 12)) >c5 : Symbol(c5, Decl(main.ts, 28, 12)) export const o1_s2 = o1[s2]; ->o1_s2 : Symbol(o1_s2, Decl(main.ts, 103, 12)) ->o1 : Symbol(o1, Decl(main.ts, 94, 12)) +>o1_s2 : Symbol(o1_s2, Decl(main.ts, 110, 12)) +>o1 : Symbol(o1, Decl(main.ts, 101, 12)) >s2 : Symbol(s2, Decl(main.ts, 29, 12)) export const o2: T0 = o1; ->o2 : Symbol(o2, Decl(main.ts, 105, 12)) +>o2 : Symbol(o2, Decl(main.ts, 112, 12)) >T0 : Symbol(T0, Decl(main.ts, 0, 20)) ->o1 : Symbol(o1, Decl(main.ts, 94, 12)) +>o1 : Symbol(o1, Decl(main.ts, 101, 12)) diff --git a/tests/baselines/reference/dynamicNames.types b/tests/baselines/reference/dynamicNames.types index 07d46736978..a568000e13e 100644 --- a/tests/baselines/reference/dynamicNames.types +++ b/tests/baselines/reference/dynamicNames.types @@ -239,6 +239,17 @@ declare type T15 = { }; +declare class C { +>C : C + + static a: number; +>a : number + + static 1: string; + static [s2]: boolean; +>s2 : unique symbol +} + let t0: T0; >t0 : T0 >T0 : T0 @@ -459,6 +470,11 @@ t0 = t12, t0 = t13, t0 = t14, t0 = t15, t12 = t0, t13 = t0, t14 = t0, t15 = t0; >t15 : { a: number; 1: string; [s2]: boolean; } >t0 : T0 +t0 = C; // static side +>t0 = C : typeof C +>t0 : T0 +>C : typeof C + // object literals export const o1 = { >o1 : { [c4]: number; [c5]: string; [s2]: boolean; } diff --git a/tests/cases/compiler/dynamicNames.ts b/tests/cases/compiler/dynamicNames.ts index e07febc7c7c..2184ee73b33 100644 --- a/tests/cases/compiler/dynamicNames.ts +++ b/tests/cases/compiler/dynamicNames.ts @@ -92,6 +92,12 @@ declare type T15 = { [s2]: boolean; }; +declare class C { + static a: number; + static 1: string; + static [s2]: boolean; +} + let t0: T0; let t1: T1; let t2: T2; @@ -117,6 +123,7 @@ let t15: T15; t0 = t1, t0 = t2, t0 = t3, t1 = t0, t1 = t2, t1 = t3, t2 = t0, t2 = t1, t2 = t3, t3 = t0, t3 = t1, t3 = t2; t4 = t5, t4 = t6, t4 = t7, t5 = t4, t5 = t6, t5 = t7, t6 = t4, t6 = t5, t6 = t7, t7 = t4, t7 = t5, t7 = t6; t0 = t12, t0 = t13, t0 = t14, t0 = t15, t12 = t0, t13 = t0, t14 = t0, t15 = t0; +t0 = C; // static side // object literals export const o1 = {