Skip to content

Commit 1b0a6bf

Browse files
committed
Refactor node constructors in utilities to be classes
1 parent 44e8244 commit 1b0a6bf

File tree

1 file changed

+234
-43
lines changed

1 file changed

+234
-43
lines changed

src/compiler/utilities.ts

Lines changed: 234 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
AssignmentDeclarationKind,
2323
AssignmentExpression,
2424
AssignmentOperatorToken,
25+
AutoGenerateInfo,
2526
BinaryExpression,
2627
binarySearch,
2728
BindableObjectDefinePropertyCall,
@@ -100,6 +101,7 @@ import {
100101
ElementAccessExpression,
101102
EmitFlags,
102103
EmitHost,
104+
EmitNode,
103105
EmitResolver,
104106
EmitTextWriter,
105107
emptyArray,
@@ -139,6 +141,7 @@ import {
139141
flatMap,
140142
flatMapToMutable,
141143
flatten,
144+
FlowNode,
142145
forEach,
143146
forEachAncestorDirectory,
144147
forEachChild,
@@ -194,8 +197,8 @@ import {
194197
HasExpressionInitializer,
195198
hasExtension,
196199
HasFlowNode,
197-
HasInitializer,
198200
hasInitializer,
201+
HasInitializer,
199202
HasJSDoc,
200203
hasJSDocNodes,
201204
HasModifiers,
@@ -529,6 +532,15 @@ import {
529532
WriteFileCallback,
530533
WriteFileCallbackData,
531534
YieldExpression,
535+
AmdDependency,
536+
CheckJsDirective,
537+
ExportedModulesFromDeclarationEmit,
538+
FileReference,
539+
HasLocals,
540+
PackageJsonInfo,
541+
PatternAmbientModule,
542+
ReadonlyPragmaMap,
543+
RedirectInfo,
532544
} from "./_namespaces/ts";
533545

534546
/** @internal */
@@ -7293,57 +7305,236 @@ function Signature(this: Signature, checker: TypeChecker, flags: SignatureFlags)
72937305
}
72947306
}
72957307

7296-
function Node(this: Mutable<Node>, kind: SyntaxKind, pos: number, end: number) {
7297-
this.pos = pos;
7298-
this.end = end;
7299-
this.kind = kind;
7300-
this.id = 0;
7301-
this.flags = NodeFlags.None;
7302-
this.modifierFlagsCache = ModifierFlags.None;
7303-
this.transformFlags = TransformFlags.None;
7304-
this.parent = undefined!;
7305-
this.original = undefined;
7306-
this.emitNode = undefined;
7307-
}
7308-
7309-
function Token(this: Mutable<Node>, kind: SyntaxKind, pos: number, end: number) {
7310-
this.pos = pos;
7311-
this.end = end;
7312-
this.kind = kind;
7313-
this.id = 0;
7314-
this.flags = NodeFlags.None;
7315-
this.transformFlags = TransformFlags.None;
7316-
this.parent = undefined!;
7317-
this.emitNode = undefined;
7318-
}
7319-
7320-
function Identifier(this: Mutable<Node>, kind: SyntaxKind, pos: number, end: number) {
7321-
this.pos = pos;
7322-
this.end = end;
7323-
this.kind = kind;
7324-
this.id = 0;
7325-
this.flags = NodeFlags.None;
7326-
this.transformFlags = TransformFlags.None;
7327-
this.parent = undefined!;
7328-
this.original = undefined;
7329-
this.emitNode = undefined;
7330-
(this as Identifier).flowNode = undefined;
7331-
}
7332-
73337308
function SourceMapSource(this: SourceMapSource, fileName: string, text: string, skipTrivia?: (pos: number) => number) {
73347309
this.fileName = fileName;
73357310
this.text = text;
73367311
this.skipTrivia = skipTrivia || (pos => pos);
73377312
}
73387313

7314+
const Node = class implements Node {
7315+
declare kind: SyntaxKind;
7316+
declare flags: NodeFlags;
7317+
declare modifierFlagsCache: ModifierFlags;
7318+
declare transformFlags: TransformFlags;
7319+
declare id?: number | undefined;
7320+
declare parent: Node;
7321+
declare original?: Node | undefined;
7322+
declare emitNode?: EmitNode | undefined;
7323+
declare pos: number;
7324+
declare end: number;
7325+
7326+
constructor(kind: SyntaxKind, pos: number, end: number) {
7327+
this.pos = pos;
7328+
this.end = end;
7329+
this.kind = kind;
7330+
this.id = 0;
7331+
this.flags = NodeFlags.None;
7332+
this.modifierFlagsCache = ModifierFlags.None;
7333+
this.transformFlags = TransformFlags.None;
7334+
this.parent = undefined!;
7335+
this.original = undefined;
7336+
this.emitNode = undefined;
7337+
}
7338+
};
7339+
7340+
const Token = class <Kind extends SyntaxKind> implements Token<Kind> {
7341+
declare kind: Kind;
7342+
declare flags: NodeFlags;
7343+
declare modifierFlagsCache: ModifierFlags;
7344+
declare transformFlags: TransformFlags;
7345+
declare id?: number | undefined;
7346+
declare parent: Node;
7347+
declare original?: Node | undefined;
7348+
declare emitNode?: EmitNode | undefined;
7349+
declare pos: number;
7350+
declare end: number;
7351+
7352+
constructor(kind: Kind, pos: number, end: number) {
7353+
this.pos = pos;
7354+
this.end = end;
7355+
this.kind = kind;
7356+
this.id = 0;
7357+
this.flags = NodeFlags.None;
7358+
this.transformFlags = TransformFlags.None;
7359+
this.parent = undefined!;
7360+
this.emitNode = undefined;
7361+
}
7362+
};
7363+
7364+
const Identifier = class implements Identifier {
7365+
declare _primaryExpressionBrand: any;
7366+
declare _memberExpressionBrand: any;
7367+
declare _leftHandSideExpressionBrand: any;
7368+
declare _updateExpressionBrand: any;
7369+
declare _unaryExpressionBrand: any;
7370+
declare _expressionBrand: any;
7371+
declare _declarationBrand: any;
7372+
declare _jsdocContainerBrand: any;
7373+
declare _flowContainerBrand: any;
7374+
7375+
declare kind: SyntaxKind.Identifier;
7376+
declare escapedText: __String;
7377+
declare originalKeywordKind?: SyntaxKind | undefined;
7378+
declare autoGenerate: AutoGenerateInfo | undefined;
7379+
declare generatedImportReference?: ImportSpecifier | undefined;
7380+
declare isInJSDocNamespace?: boolean | undefined;
7381+
declare typeArguments?: NodeArray<TypeNode | TypeParameterDeclaration> | undefined;
7382+
declare jsdocDotPos?: number | undefined;
7383+
declare hasExtendedUnicodeEscape?: boolean | undefined;
7384+
declare flags: NodeFlags;
7385+
declare modifierFlagsCache: ModifierFlags;
7386+
declare transformFlags: TransformFlags;
7387+
declare id?: number | undefined;
7388+
declare parent: Node;
7389+
declare original?: Node | undefined;
7390+
declare emitNode?: EmitNode | undefined;
7391+
declare pos: number;
7392+
declare end: number;
7393+
declare symbol: Symbol;
7394+
declare localSymbol?: Symbol | undefined;
7395+
declare jsDoc?: JSDoc[] | undefined;
7396+
declare jsDocCache?: readonly JSDocTag[] | undefined;
7397+
declare flowNode?: FlowNode | undefined;
7398+
7399+
constructor(kind: SyntaxKind.Identifier, pos: number, end: number) {
7400+
this.pos = pos;
7401+
this.end = end;
7402+
this.kind = kind;
7403+
this.id = 0;
7404+
this.flags = NodeFlags.None;
7405+
this.transformFlags = TransformFlags.None;
7406+
this.parent = undefined!;
7407+
this.original = undefined;
7408+
this.emitNode = undefined;
7409+
this.flowNode = undefined;
7410+
}
7411+
};
7412+
7413+
const PrivateIdentifier = class implements PrivateIdentifier {
7414+
declare _primaryExpressionBrand: any;
7415+
declare _memberExpressionBrand: any;
7416+
declare _leftHandSideExpressionBrand: any;
7417+
declare _updateExpressionBrand: any;
7418+
declare _unaryExpressionBrand: any;
7419+
declare _expressionBrand: any;
7420+
declare kind: SyntaxKind.PrivateIdentifier;
7421+
declare escapedText: __String;
7422+
declare autoGenerate: AutoGenerateInfo | undefined;
7423+
declare flags: NodeFlags;
7424+
declare modifierFlagsCache: ModifierFlags;
7425+
declare transformFlags: TransformFlags;
7426+
declare id?: number | undefined;
7427+
declare parent: Node;
7428+
declare original?: Node | undefined;
7429+
declare emitNode?: EmitNode | undefined;
7430+
declare pos: number;
7431+
declare end: number;
7432+
7433+
constructor(kind: SyntaxKind.PrivateIdentifier, pos: number, end: number) {
7434+
this.pos = pos;
7435+
this.end = end;
7436+
this.kind = kind;
7437+
this.id = 0;
7438+
this.flags = NodeFlags.None;
7439+
this.transformFlags = TransformFlags.None;
7440+
this.parent = undefined!;
7441+
this.original = undefined;
7442+
this.emitNode = undefined;
7443+
}
7444+
};
7445+
7446+
const SourceFile = class implements SourceFile {
7447+
declare _declarationBrand: any;
7448+
declare _localsContainerBrand: any;
7449+
declare kind: SyntaxKind.SourceFile;
7450+
declare statements: NodeArray<Statement>;
7451+
declare endOfFileToken: Token<SyntaxKind.EndOfFileToken>;
7452+
declare fileName: string;
7453+
declare path: Path;
7454+
declare text: string;
7455+
declare resolvedPath: Path;
7456+
declare originalFileName: string;
7457+
declare redirectInfo?: RedirectInfo | undefined;
7458+
declare amdDependencies: readonly AmdDependency[];
7459+
declare moduleName?: string | undefined;
7460+
declare referencedFiles: readonly FileReference[];
7461+
declare typeReferenceDirectives: readonly FileReference[];
7462+
declare libReferenceDirectives: readonly FileReference[];
7463+
declare languageVariant: LanguageVariant;
7464+
declare isDeclarationFile: boolean;
7465+
declare renamedDependencies?: ReadonlyMap<string, string> | undefined;
7466+
declare hasNoDefaultLib: boolean;
7467+
declare languageVersion: ScriptTarget;
7468+
declare impliedNodeFormat?: ResolutionMode;
7469+
declare packageJsonLocations?: readonly string[] | undefined;
7470+
declare packageJsonScope?: PackageJsonInfo | undefined;
7471+
declare scriptKind: ScriptKind;
7472+
declare externalModuleIndicator?: true | Node | undefined;
7473+
declare setExternalModuleIndicator?: ((file: SourceFile) => void) | undefined;
7474+
declare commonJsModuleIndicator?: Node | undefined;
7475+
declare jsGlobalAugmentations?: SymbolTable | undefined;
7476+
declare identifiers: ReadonlyMap<string, string>;
7477+
declare nodeCount: number;
7478+
declare identifierCount: number;
7479+
declare symbolCount: number;
7480+
declare parseDiagnostics: DiagnosticWithLocation[];
7481+
declare bindDiagnostics: DiagnosticWithLocation[];
7482+
declare bindSuggestionDiagnostics?: DiagnosticWithLocation[] | undefined;
7483+
declare jsDocDiagnostics?: DiagnosticWithLocation[] | undefined;
7484+
declare additionalSyntacticDiagnostics?: readonly DiagnosticWithLocation[] | undefined;
7485+
declare lineMap: readonly number[];
7486+
declare classifiableNames?: ReadonlySet<__String> | undefined;
7487+
declare commentDirectives?: CommentDirective[] | undefined;
7488+
declare resolvedModules?: ModeAwareCache<ResolvedModuleWithFailedLookupLocations> | undefined;
7489+
declare resolvedTypeReferenceDirectiveNames?: ModeAwareCache<ResolvedTypeReferenceDirectiveWithFailedLookupLocations> | undefined;
7490+
declare imports: readonly StringLiteralLike[];
7491+
declare moduleAugmentations: readonly (Identifier | StringLiteral)[];
7492+
declare patternAmbientModules?: PatternAmbientModule[] | undefined;
7493+
declare ambientModuleNames: readonly string[];
7494+
declare checkJsDirective?: CheckJsDirective | undefined;
7495+
declare version: string;
7496+
declare pragmas: ReadonlyPragmaMap;
7497+
declare localJsxNamespace?: __String | undefined;
7498+
declare localJsxFragmentNamespace?: __String | undefined;
7499+
declare localJsxFactory?: EntityName | undefined;
7500+
declare localJsxFragmentFactory?: EntityName | undefined;
7501+
declare exportedModulesFromDeclarationEmit?: ExportedModulesFromDeclarationEmit | undefined;
7502+
declare endFlowNode?: FlowNode | undefined;
7503+
declare symbol: Symbol;
7504+
declare localSymbol?: Symbol | undefined;
7505+
declare flags: NodeFlags;
7506+
declare modifierFlagsCache: ModifierFlags;
7507+
declare transformFlags: TransformFlags;
7508+
declare id?: number | undefined;
7509+
declare parent: Node;
7510+
declare original?: Node | undefined;
7511+
declare emitNode?: EmitNode | undefined;
7512+
declare pos: number;
7513+
declare end: number;
7514+
declare locals?: SymbolTable | undefined;
7515+
declare nextContainer?: HasLocals | undefined;
7516+
7517+
constructor(kind: SyntaxKind.SourceFile, pos: number, end: number) {
7518+
this.pos = pos;
7519+
this.end = end;
7520+
this.kind = kind;
7521+
this.id = 0;
7522+
this.flags = NodeFlags.None;
7523+
this.transformFlags = TransformFlags.None;
7524+
this.parent = undefined!;
7525+
this.original = undefined;
7526+
this.emitNode = undefined;
7527+
}
7528+
};
7529+
73397530
// eslint-disable-next-line prefer-const
73407531
/** @internal */
73417532
export const objectAllocator: ObjectAllocator = {
7342-
getNodeConstructor: () => Node as any,
7343-
getTokenConstructor: () => Token as any,
7344-
getIdentifierConstructor: () => Identifier as any,
7345-
getPrivateIdentifierConstructor: () => Node as any,
7346-
getSourceFileConstructor: () => Node as any,
7533+
getNodeConstructor: () => Node,
7534+
getTokenConstructor: () => Token,
7535+
getIdentifierConstructor: () => Identifier,
7536+
getPrivateIdentifierConstructor: () => PrivateIdentifier,
7537+
getSourceFileConstructor: () => SourceFile,
73477538
getSymbolConstructor: () => Symbol as any,
73487539
getTypeConstructor: () => Type as any,
73497540
getSignatureConstructor: () => Signature as any,

0 commit comments

Comments
 (0)