Skip to content

Commit d60b06d

Browse files
committed
Move Identifier.autoGenerate to EmitNode
1 parent a934019 commit d60b06d

File tree

11 files changed

+51
-40
lines changed

11 files changed

+51
-40
lines changed

src/compiler/emitter.ts

+14-12
Original file line numberDiff line numberDiff line change
@@ -5681,15 +5681,16 @@ export function createPrinter(printerOptions: PrinterOptions = {}, handlers: Pri
56815681
* Generate the text for a generated identifier.
56825682
*/
56835683
function generateName(name: GeneratedIdentifier | GeneratedPrivateIdentifier) {
5684-
if ((name.autoGenerate.flags & GeneratedIdentifierFlags.KindMask) === GeneratedIdentifierFlags.Node) {
5684+
const autoGenerate = name.emitNode.autoGenerate;
5685+
if ((autoGenerate.flags & GeneratedIdentifierFlags.KindMask) === GeneratedIdentifierFlags.Node) {
56855686
// Node names generate unique names based on their original node
56865687
// and are cached based on that node's id.
5687-
return generateNameCached(getNodeForGeneratedName(name), isPrivateIdentifier(name), name.autoGenerate.flags, name.autoGenerate.prefix, name.autoGenerate.suffix);
5688+
return generateNameCached(getNodeForGeneratedName(name), isPrivateIdentifier(name), autoGenerate.flags, autoGenerate.prefix, autoGenerate.suffix);
56885689
}
56895690
else {
56905691
// Auto, Loop, and Unique names are cached based on their unique
56915692
// autoGenerateId.
5692-
const autoGenerateId = name.autoGenerate.id;
5693+
const autoGenerateId = autoGenerate.id;
56935694
return autoGeneratedIdToGeneratedName[autoGenerateId] || (autoGeneratedIdToGeneratedName[autoGenerateId] = makeName(name));
56945695
}
56955696
}
@@ -5961,27 +5962,28 @@ export function createPrinter(printerOptions: PrinterOptions = {}, handlers: Pri
59615962
* Generates a unique identifier for a node.
59625963
*/
59635964
function makeName(name: GeneratedIdentifier | GeneratedPrivateIdentifier) {
5964-
const prefix = formatGeneratedNamePart(name.autoGenerate.prefix, generateName);
5965-
const suffix = formatGeneratedNamePart (name.autoGenerate.suffix);
5966-
switch (name.autoGenerate.flags & GeneratedIdentifierFlags.KindMask) {
5965+
const autoGenerate = name.emitNode.autoGenerate;
5966+
const prefix = formatGeneratedNamePart(autoGenerate.prefix, generateName);
5967+
const suffix = formatGeneratedNamePart(autoGenerate.suffix);
5968+
switch (autoGenerate.flags & GeneratedIdentifierFlags.KindMask) {
59675969
case GeneratedIdentifierFlags.Auto:
5968-
return makeTempVariableName(TempFlags.Auto, !!(name.autoGenerate.flags & GeneratedIdentifierFlags.ReservedInNestedScopes), isPrivateIdentifier(name), prefix, suffix);
5970+
return makeTempVariableName(TempFlags.Auto, !!(autoGenerate.flags & GeneratedIdentifierFlags.ReservedInNestedScopes), isPrivateIdentifier(name), prefix, suffix);
59695971
case GeneratedIdentifierFlags.Loop:
59705972
Debug.assertNode(name, isIdentifier);
5971-
return makeTempVariableName(TempFlags._i, !!(name.autoGenerate.flags & GeneratedIdentifierFlags.ReservedInNestedScopes), /*privateName*/ false, prefix, suffix);
5973+
return makeTempVariableName(TempFlags._i, !!(autoGenerate.flags & GeneratedIdentifierFlags.ReservedInNestedScopes), /*privateName*/ false, prefix, suffix);
59725974
case GeneratedIdentifierFlags.Unique:
59735975
return makeUniqueName(
59745976
idText(name),
5975-
(name.autoGenerate.flags & GeneratedIdentifierFlags.FileLevel) ? isFileLevelUniqueName : isUniqueName,
5976-
!!(name.autoGenerate.flags & GeneratedIdentifierFlags.Optimistic),
5977-
!!(name.autoGenerate.flags & GeneratedIdentifierFlags.ReservedInNestedScopes),
5977+
(autoGenerate.flags & GeneratedIdentifierFlags.FileLevel) ? isFileLevelUniqueName : isUniqueName,
5978+
!!(autoGenerate.flags & GeneratedIdentifierFlags.Optimistic),
5979+
!!(autoGenerate.flags & GeneratedIdentifierFlags.ReservedInNestedScopes),
59785980
isPrivateIdentifier(name),
59795981
prefix,
59805982
suffix
59815983
);
59825984
}
59835985

5984-
return Debug.fail(`Unsupported GeneratedIdentifierKind: ${Debug.formatEnum(name.autoGenerate.flags & GeneratedIdentifierFlags.KindMask, (ts as any).GeneratedIdentifierFlags, /*isFlags*/ true)}.`);
5986+
return Debug.fail(`Unsupported GeneratedIdentifierKind: ${Debug.formatEnum(autoGenerate.flags & GeneratedIdentifierFlags.KindMask, (ts as any).GeneratedIdentifierFlags, /*isFlags*/ true)}.`);
59855987
}
59865988

59875989
// Comments

src/compiler/factory/emitNode.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
AccessExpression,
33
append,
44
appendIfUnique,
5+
AutoGenerateInfo,
56
Debug,
67
EmitFlags,
78
EmitHelper,
@@ -13,6 +14,7 @@ import {
1314
Node,
1415
NodeArray,
1516
orderedRemoveItem,
17+
PrivateIdentifier,
1618
SnippetElement,
1719
some,
1820
SourceFile,
@@ -331,4 +333,15 @@ export function setIdentifierTypeArguments<T extends Identifier>(node: T, typeAr
331333
/** @internal */
332334
export function getIdentifierTypeArguments(node: Identifier): NodeArray<TypeNode | TypeParameterDeclaration> | undefined {
333335
return node.emitNode?.identifierTypeArguments;
334-
}
336+
}
337+
338+
/** @internal */
339+
export function setIdentifierAutoGenerate<T extends Identifier | PrivateIdentifier>(node: T, autoGenerate: AutoGenerateInfo | undefined) {
340+
getOrCreateEmitNode(node).autoGenerate = autoGenerate;
341+
return node;
342+
}
343+
344+
/** @internal */
345+
export function getIdentifierAutoGenerate(node: Identifier | PrivateIdentifier): AutoGenerateInfo | undefined {
346+
return node.emitNode?.autoGenerate;
347+
}

src/compiler/factory/nodeFactory.ts

+7-8
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,7 @@ import {
391391
SetAccessorDeclaration,
392392
setEachParent,
393393
setEmitFlags,
394+
setIdentifierAutoGenerate,
394395
setIdentifierTypeArguments,
395396
setParent,
396397
setTextRange,
@@ -1154,7 +1155,6 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
11541155
function createBaseIdentifier(escapedText: __String) {
11551156
const node = baseFactory.createBaseIdentifierNode(SyntaxKind.Identifier) as Mutable<Identifier>;
11561157
node.escapedText = escapedText;
1157-
node.autoGenerate = undefined;
11581158
node.jsDoc = undefined; // initialized by parser (JsDocContainer)
11591159
node.flowNode = undefined; // initialized by binder (FlowContainer)
11601160
node.symbol = undefined!; // initialized by checker
@@ -1163,12 +1163,12 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
11631163

11641164
function createBaseGeneratedIdentifier(text: string, autoGenerateFlags: GeneratedIdentifierFlags, prefix: string | GeneratedNamePart | undefined, suffix: string | undefined) {
11651165
const node = createBaseIdentifier(escapeLeadingUnderscores(text)) as Mutable<GeneratedIdentifier>;
1166-
node.autoGenerate = {
1166+
setIdentifierAutoGenerate(node, {
11671167
flags: autoGenerateFlags,
11681168
id: nextAutoGenerateId,
11691169
prefix,
11701170
suffix
1171-
};
1171+
});
11721172
nextAutoGenerateId++;
11731173
return node;
11741174
}
@@ -1239,7 +1239,6 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
12391239
function createBasePrivateIdentifier(escapedText: __String) {
12401240
const node = baseFactory.createBasePrivateIdentifierNode(SyntaxKind.PrivateIdentifier) as Mutable<PrivateIdentifier>;
12411241
node.escapedText = escapedText;
1242-
node.autoGenerate = undefined;
12431242
node.transformFlags |= TransformFlags.ContainsClassFields;
12441243
return node;
12451244
}
@@ -1252,12 +1251,12 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
12521251

12531252
function createBaseGeneratedPrivateIdentifier(text: string, autoGenerateFlags: GeneratedIdentifierFlags, prefix: string | GeneratedNamePart | undefined, suffix: string | undefined) {
12541253
const node = createBasePrivateIdentifier(escapeLeadingUnderscores(text));
1255-
node.autoGenerate = {
1254+
setIdentifierAutoGenerate(node, {
12561255
flags: autoGenerateFlags,
12571256
id: nextAutoGenerateId,
12581257
prefix,
12591258
suffix,
1260-
};
1259+
});
12611260
nextAutoGenerateId++;
12621261
return node;
12631262
}
@@ -6304,9 +6303,9 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
63046303
function cloneGeneratedIdentifier(node: GeneratedIdentifier): GeneratedIdentifier {
63056304
const clone = createBaseIdentifier(node.escapedText) as Mutable<GeneratedIdentifier>;
63066305
clone.flags |= node.flags & ~NodeFlags.Synthesized;
6307-
clone.autoGenerate = { ...node.autoGenerate };
63086306
clone.transformFlags = node.transformFlags;
63096307
setOriginalNode(clone, node);
6308+
setIdentifierAutoGenerate(clone, { ...node.emitNode.autoGenerate });
63106309
return clone;
63116310
}
63126311

@@ -6328,9 +6327,9 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
63286327
function cloneGeneratedPrivateIdentifier(node: GeneratedPrivateIdentifier): GeneratedPrivateIdentifier {
63296328
const clone = createBasePrivateIdentifier(node.escapedText) as Mutable<GeneratedPrivateIdentifier>;
63306329
clone.flags |= node.flags & ~NodeFlags.Synthesized;
6331-
clone.autoGenerate = { ...node.autoGenerate };
63326330
clone.transformFlags = node.transformFlags;
63336331
setOriginalNode(clone, node);
6332+
setIdentifierAutoGenerate(clone, { ...node.emitNode.autoGenerate });
63346333
return clone;
63356334
}
63366335

src/compiler/factory/utilities.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -1489,18 +1489,19 @@ export function elideNodes<T extends Node>(factory: NodeFactory, nodes: NodeArra
14891489
* @internal
14901490
*/
14911491
export function getNodeForGeneratedName(name: GeneratedIdentifier | GeneratedPrivateIdentifier) {
1492-
if (name.autoGenerate.flags & GeneratedIdentifierFlags.Node) {
1493-
const autoGenerateId = name.autoGenerate.id;
1492+
const autoGenerate = name.emitNode.autoGenerate;
1493+
if (autoGenerate.flags & GeneratedIdentifierFlags.Node) {
1494+
const autoGenerateId = autoGenerate.id;
14941495
let node = name as Node;
14951496
let original = node.original;
14961497
while (original) {
14971498
node = original;
1498-
1499+
const autoGenerate = node.emitNode?.autoGenerate;
14991500
// if "node" is a different generated name (having a different "autoGenerateId"), use it and stop traversing.
15001501
if (isMemberName(node) && (
1501-
node.autoGenerate === undefined ||
1502-
!!(node.autoGenerate.flags & GeneratedIdentifierFlags.Node) &&
1503-
node.autoGenerate.id !== autoGenerateId)) {
1502+
autoGenerate === undefined ||
1503+
!!(autoGenerate.flags & GeneratedIdentifierFlags.Node) &&
1504+
autoGenerate.id !== autoGenerateId)) {
15041505
break;
15051506
}
15061507

src/compiler/transformers/classFields.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1553,7 +1553,7 @@ export function transformClassFields(context: TransformationContext): (x: Source
15531553
// record an alias as the class name is not in scope for statics.
15541554
enableSubstitutionForClassAliases();
15551555
const alias = factory.cloneNode(temp) as GeneratedIdentifier;
1556-
alias.autoGenerate.flags &= ~GeneratedIdentifierFlags.ReservedInNestedScopes;
1556+
alias.emitNode.autoGenerate.flags &= ~GeneratedIdentifierFlags.ReservedInNestedScopes;
15571557
classAliases[getOriginalNodeId(node)] = alias;
15581558
}
15591559

src/compiler/transformers/module/module.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2064,7 +2064,7 @@ export function transformModule(context: TransformationContext): (x: SourceFile
20642064
}
20652065
return node;
20662066
}
2067-
else if (!(isGeneratedIdentifier(node) && !(node.autoGenerate.flags & GeneratedIdentifierFlags.AllowNameSubstitution)) && !isLocalName(node)) {
2067+
else if (!(isGeneratedIdentifier(node) && !(node.emitNode.autoGenerate.flags & GeneratedIdentifierFlags.AllowNameSubstitution)) && !isLocalName(node)) {
20682068
const exportContainer = resolver.getReferencedExportContainer(node, isExportName(node));
20692069
if (exportContainer && exportContainer.kind === SyntaxKind.SourceFile) {
20702070
return setTextRange(

src/compiler/types.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,6 @@ export interface Identifier extends PrimaryExpression, Declaration, JSDocContain
16841684
*/
16851685
readonly escapedText: __String;
16861686
readonly originalKeywordKind?: SyntaxKind; // Original syntaxKind which get set so that we can report an error later
1687-
/** @internal */ readonly autoGenerate: AutoGenerateInfo | undefined; // Used for auto-generated identifiers.
16881687
/** @internal */ generatedImportReference?: ImportSpecifier; // Reference to the generated import specifier this identifier refers to
16891688
isInJSDocNamespace?: boolean; // if the node is a member in a JSDoc namespace
16901689
/** @internal */ jsdocDotPos?: number; // Identifier occurs in JSDoc-style generic: Id.<T>
@@ -1705,7 +1704,7 @@ export interface AutoGenerateInfo {
17051704

17061705
/** @internal */
17071706
export interface GeneratedIdentifier extends Identifier {
1708-
readonly autoGenerate: AutoGenerateInfo;
1707+
readonly emitNode: EmitNode & { autoGenerate: AutoGenerateInfo; };
17091708
}
17101709

17111710
export interface QualifiedName extends Node, FlowContainer {
@@ -1783,12 +1782,11 @@ export interface PrivateIdentifier extends PrimaryExpression {
17831782
// escaping not strictly necessary
17841783
// avoids gotchas in transforms and utils
17851784
readonly escapedText: __String;
1786-
/** @internal */ readonly autoGenerate: AutoGenerateInfo | undefined; // Used for auto-generated identifiers.
17871785
}
17881786

17891787
/** @internal */
17901788
export interface GeneratedPrivateIdentifier extends PrivateIdentifier {
1791-
readonly autoGenerate: AutoGenerateInfo;
1789+
readonly emitNode: EmitNode & { autoGenerate: AutoGenerateInfo };
17921790
}
17931791

17941792
/** @internal */
@@ -7832,6 +7830,7 @@ export interface EmitNode {
78327830
snippetElement?: SnippetElement; // Snippet element of the node
78337831
typeNode?: TypeNode; // VariableDeclaration type
78347832
identifierTypeArguments?: NodeArray<TypeNode | TypeParameterDeclaration>; // Only defined on synthesized identifiers. Though not syntactically valid, used in emitting diagnostics, quickinfo, and signature help.
7833+
autoGenerate: AutoGenerateInfo | undefined; // Used for auto-generated identifiers and private identifiers.
78357834
}
78367835

78377836
/** @internal */

src/compiler/utilities.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1649,7 +1649,7 @@ export function tryGetTextOfPropertyName(name: PropertyName | NoSubstitutionTemp
16491649
switch (name.kind) {
16501650
case SyntaxKind.Identifier:
16511651
case SyntaxKind.PrivateIdentifier:
1652-
return name.autoGenerate ? undefined : name.escapedText;
1652+
return name.emitNode?.autoGenerate ? undefined : name.escapedText;
16531653
case SyntaxKind.StringLiteral:
16541654
case SyntaxKind.NumericLiteral:
16551655
case SyntaxKind.NoSubstitutionTemplateLiteral:

src/compiler/utilitiesPublic.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1476,12 +1476,12 @@ export function isStringTextContainingNode(node: Node): node is StringLiteral |
14761476

14771477
/** @internal */
14781478
export function isGeneratedIdentifier(node: Node): node is GeneratedIdentifier {
1479-
return isIdentifier(node) && node.autoGenerate !== undefined;
1479+
return isIdentifier(node) && node.emitNode?.autoGenerate !== undefined;
14801480
}
14811481

14821482
/** @internal */
14831483
export function isGeneratedPrivateIdentifier(node: Node): node is GeneratedPrivateIdentifier {
1484-
return isPrivateIdentifier(node) && node.autoGenerate !== undefined;
1484+
return isPrivateIdentifier(node) && node.emitNode?.autoGenerate !== undefined;
14851485
}
14861486

14871487
// Private Identifiers

src/harness/harnessUtils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ export function sourceFileToJSON(file: ts.Node): string {
202202
case "symbolCount":
203203
case "identifierCount":
204204
case "scriptSnapshot":
205-
case "autoGenerate":
205+
case "emitNode":
206206
// Blocklist of items we never put in the baseline file.
207207
break;
208208

src/services/services.ts

-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {
66
ApplicableRefactorInfo,
77
ApplyCodeActionCommandResult,
88
AssignmentDeclarationKind,
9-
AutoGenerateInfo,
109
BaseType,
1110
BinaryExpression,
1211
BreakpointResolver,
@@ -734,7 +733,6 @@ class TokenObject<TKind extends SyntaxKind> extends TokenOrIdentifierObject impl
734733
class IdentifierObject extends TokenOrIdentifierObject implements Identifier {
735734
public kind: SyntaxKind.Identifier = SyntaxKind.Identifier;
736735
public escapedText!: __String;
737-
public autoGenerate: AutoGenerateInfo | undefined;
738736
declare _primaryExpressionBrand: any;
739737
declare _memberExpressionBrand: any;
740738
declare _leftHandSideExpressionBrand: any;
@@ -757,7 +755,6 @@ IdentifierObject.prototype.kind = SyntaxKind.Identifier;
757755
class PrivateIdentifierObject extends TokenOrIdentifierObject implements PrivateIdentifier {
758756
public kind: SyntaxKind.PrivateIdentifier = SyntaxKind.PrivateIdentifier;
759757
public escapedText!: __String;
760-
public autoGenerate: AutoGenerateInfo | undefined;
761758
declare _primaryExpressionBrand: any;
762759
declare _memberExpressionBrand: any;
763760
declare _leftHandSideExpressionBrand: any;

0 commit comments

Comments
 (0)