Skip to content

Commit c2c2643

Browse files
committed
Remove baseNodeFactory
1 parent cadf6e8 commit c2c2643

File tree

9 files changed

+52
-147
lines changed

9 files changed

+52
-147
lines changed

src/compiler/_namespaces/ts.NodeConstructors.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/compiler/_namespaces/ts.ObjectConstructors.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/compiler/_namespaces/ts.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ export * from "../diagnosticInformationMap.generated";
1414
export * from "../scanner";
1515
export * from "../utilitiesPublic";
1616
export * from "../utilities";
17-
export * from "../factory/baseNodeFactory";
1817
export * from "../factory/parenthesizerRules";
1918
export * from "../factory/nodeConverters";
2019
export * from "../factory/nodeFactory";
@@ -72,11 +71,5 @@ import * as moduleSpecifiers from "./ts.moduleSpecifiers";
7271
export { moduleSpecifiers };
7372
import * as performance from "./ts.performance";
7473
export { performance };
75-
/** @internal */
76-
import * as NodeConstructors from "./ts.NodeConstructors";
77-
/** @internal */
78-
export { NodeConstructors };
79-
/** @internal */
80-
import * as ObjectConstructors from "./ts.ObjectConstructors";
81-
/** @internal */
82-
export { ObjectConstructors };
74+
/** @internal */ export * as NodeConstructors from "../nodeConstructors";
75+
/** @internal */ export * as ObjectConstructors from "../objectConstructors";

src/compiler/factory/baseNodeFactory.ts

Lines changed: 0 additions & 54 deletions
This file was deleted.

src/compiler/factory/nodeFactory.ts

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import {
1717
AsteriskToken,
1818
AwaitExpression,
1919
AwaitKeyword,
20-
BaseNodeFactory,
2120
BigIntLiteral,
2221
BinaryExpression,
2322
BinaryOperator,
@@ -59,7 +58,6 @@ import {
5958
ConstructorTypeNode,
6059
ConstructSignatureDeclaration,
6160
ContinueStatement,
62-
createBaseNodeFactory,
6361
createNodeConverters,
6462
createParenthesizerRules,
6563
createScanner,
@@ -467,15 +465,15 @@ import {
467465
WithStatement,
468466
YieldExpression,
469467
} from "../_namespaces/ts";
470-
// import {
471-
// Node as NodeObject,
472-
// Identifier as IdentifierObject,
473-
// PrivateIdentifier as PrivateIdentifierObject,
474-
// Token as TokenObject,
475-
// SourceFile as SourceFileObject,
476-
// } from "../nodeConstructors";
477468
import {
478-
SourceMapSourceObject as SourceMapSourceObject,
469+
IdentifierObject,
470+
NodeObject,
471+
PrivateIdentifierObject,
472+
SourceFileObject,
473+
TokenObject,
474+
} from "../nodeConstructors";
475+
import {
476+
SourceMapSourceObject,
479477
} from "../objectConstructors";
480478

481479
let nextAutoGenerateId = 0;
@@ -491,6 +489,8 @@ export const enum NodeFactoryFlags {
491489
NoIndentationOnFreshPropertyAccess = 1 << 2,
492490
// Do not set an `original` pointer when updating a node.
493491
NoOriginalNode = 1 << 3,
492+
// Mark nodes as synthetic
493+
MarkSynthetic = 1 << 4,
494494
}
495495

496496
const nodeFactoryPatchers: ((factory: NodeFactory) => void)[] = [];
@@ -507,7 +507,8 @@ export function addNodeFactoryPatcher(fn: (factory: NodeFactory) => void) {
507507
*
508508
* @internal
509509
*/
510-
export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNodeFactory): NodeFactory {
510+
export function createNodeFactory(flags: NodeFactoryFlags): NodeFactory {
511+
const markSynthetic = (flags & NodeFactoryFlags.MarkSynthetic) === NodeFactoryFlags.MarkSynthetic;
511512
const update = flags & NodeFactoryFlags.NoOriginalNode ? updateWithoutOriginal : updateWithOriginal;
512513

513514
// Lazily load the parenthesizer, node converters, and some factory methods until they are used.
@@ -531,7 +532,6 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
531532
const factory: NodeFactory = {
532533
get parenthesizer() { return parenthesizerRules(); },
533534
get converters() { return converters(); },
534-
baseFactory,
535535
flags,
536536
createNodeArray,
537537
createNumericLiteral,
@@ -1074,7 +1074,9 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
10741074
}
10751075

10761076
function createBaseNode<T extends Node>(kind: T["kind"]) {
1077-
return baseFactory.createBaseNode(kind) as Mutable<T>;
1077+
const node = new NodeObject(kind) as Node as Mutable<T>;
1078+
if (markSynthetic) node.flags |= NodeFlags.Synthesized;
1079+
return node;
10781080
}
10791081

10801082
function createBaseDeclaration<T extends Declaration>(kind: T["kind"]) {
@@ -1160,7 +1162,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
11601162
//
11611163

11621164
function createBaseIdentifier(escapedText: __String, originalKeywordKind: SyntaxKind | undefined) {
1163-
const node = baseFactory.createBaseIdentifierNode() as Mutable<Identifier>;
1165+
const node = new IdentifierObject() as Mutable<Identifier>;
1166+
if (markSynthetic) node.flags |= NodeFlags.Synthesized;
11641167
node.originalKeywordKind = originalKeywordKind;
11651168
node.escapedText = escapedText;
11661169
node.autoGenerate = undefined;
@@ -1257,7 +1260,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
12571260
}
12581261

12591262
function createBasePrivateIdentifier(escapedText: __String) {
1260-
const node = baseFactory.createBasePrivateIdentifierNode() as Mutable<PrivateIdentifier>;
1263+
const node = new PrivateIdentifierObject() as Mutable<PrivateIdentifier>;
1264+
if (markSynthetic) node.flags |= NodeFlags.Synthesized;
12611265
node.escapedText = escapedText;
12621266
node.autoGenerate = undefined;
12631267
node.transformFlags |= TransformFlags.ContainsClassFields;
@@ -1306,7 +1310,9 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
13061310
//
13071311

13081312
function createBaseToken<T extends Node>(kind: T["kind"]) {
1309-
return baseFactory.createBaseTokenNode(kind) as Mutable<T>;
1313+
const node = new TokenObject(kind) as Node as Mutable<T>;
1314+
if (markSynthetic) node.flags |= NodeFlags.Synthesized;
1315+
return node;
13101316
}
13111317

13121318
// @api
@@ -6033,7 +6039,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
60336039
endOfFileToken: EndOfFileToken,
60346040
flags: NodeFlags
60356041
) {
6036-
const node = baseFactory.createBaseSourceFileNode() as Mutable<SourceFile>;
6042+
const node = new SourceFileObject() as Mutable<SourceFile>;
6043+
if (markSynthetic) node.flags |= NodeFlags.Synthesized;
60376044
node.statements = createNodeArray(statements);
60386045
node.endOfFileToken = endOfFileToken;
60396046
node.flags |= flags;
@@ -6116,7 +6123,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
61166123
function cloneSourceFileWorker(source: SourceFile) {
61176124
// TODO: This mechanism for cloning results in megamorphic property reads and writes. In future perf-related
61186125
// work, we should consider switching explicit property assignments instead of using `for..in`.
6119-
const node = baseFactory.createBaseSourceFileNode() as Mutable<SourceFile>;
6126+
const node = new SourceFileObject() as Mutable<SourceFile>;
6127+
if (markSynthetic) node.flags |= NodeFlags.Synthesized;
61206128
node.flags |= source.flags & ~NodeFlags.Synthesized;
61216129
for (const p in source) {
61226130
if (hasProperty(node, p) || !hasProperty(source, p)) {
@@ -6452,11 +6460,12 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
64526460
}
64536461

64546462
const clone =
6455-
!isNodeKind(node.kind) ? baseFactory.createBaseTokenNode(node.kind) as T :
6456-
baseFactory.createBaseNode(node.kind) as T;
6463+
!isNodeKind(node.kind) ? new TokenObject(node.kind) as Node as Mutable<T> :
6464+
new NodeObject(node.kind) as Node as Mutable<T>;
64576465

6458-
(clone as Mutable<T>).flags |= (node.flags & ~NodeFlags.Synthesized);
6459-
(clone as Mutable<T>).transformFlags = node.transformFlags;
6466+
if (markSynthetic) clone.flags |= NodeFlags.Synthesized;
6467+
clone.flags |= (node.flags & ~NodeFlags.Synthesized);
6468+
clone.transformFlags = node.transformFlags;
64606469
setOriginalNode(clone, node);
64616470

64626471
for (const key in node) {
@@ -7388,22 +7397,7 @@ export function getTransformFlagsSubtreeExclusions(kind: SyntaxKind) {
73887397
}
73897398
}
73907399

7391-
const baseFactory = createBaseNodeFactory();
7392-
7393-
function makeSynthetic(node: Node) {
7394-
(node as Mutable<Node>).flags |= NodeFlags.Synthesized;
7395-
return node;
7396-
}
7397-
7398-
const syntheticFactory: BaseNodeFactory = {
7399-
createBaseSourceFileNode: () => makeSynthetic(baseFactory.createBaseSourceFileNode()),
7400-
createBaseIdentifierNode: () => makeSynthetic(baseFactory.createBaseIdentifierNode()),
7401-
createBasePrivateIdentifierNode: () => makeSynthetic(baseFactory.createBasePrivateIdentifierNode()),
7402-
createBaseTokenNode: kind => makeSynthetic(baseFactory.createBaseTokenNode(kind)),
7403-
createBaseNode: kind => makeSynthetic(baseFactory.createBaseNode(kind)),
7404-
};
7405-
7406-
export const factory = createNodeFactory(NodeFactoryFlags.NoIndentationOnFreshPropertyAccess, syntheticFactory);
7400+
export const factory = createNodeFactory(NodeFactoryFlags.NoIndentationOnFreshPropertyAccess | NodeFactoryFlags.MarkSynthetic);
74077401

74087402
export function createUnparsedSourceFile(text: string): UnparsedSource;
74097403
export function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts", stripInternal?: boolean): UnparsedSource;

src/compiler/parser.ts

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { IdentifierObject, NodeObject, PrivateIdentifierObject, SourceFileObject, TokenObject } from "./nodeConstructors";
21
import * as ts from "./_namespaces/ts";
32
import {
43
AccessorDeclaration,
@@ -17,7 +16,6 @@ import {
1716
AsteriskToken,
1817
attachFileToDiagnostics,
1918
AwaitExpression,
20-
BaseNodeFactory,
2119
BinaryExpression,
2220
BinaryOperatorToken,
2321
BindingElement,
@@ -401,21 +399,8 @@ const enum SpeculationKind {
401399
Reparse
402400
}
403401

404-
/**
405-
* NOTE: You should not use this, it is only exported to support `createNode` in `~/src/deprecatedCompat/deprecations.ts`.
406-
*
407-
* @internal
408-
*/
409-
export const parseBaseNodeFactory: BaseNodeFactory = {
410-
createBaseSourceFileNode: () => new SourceFileObject(),
411-
createBaseIdentifierNode: () => new IdentifierObject(),
412-
createBasePrivateIdentifierNode: () => new PrivateIdentifierObject(),
413-
createBaseTokenNode: kind => new TokenObject(kind),
414-
createBaseNode: kind => new NodeObject(kind),
415-
};
416-
417402
/** @internal */
418-
export const parseNodeFactory = createNodeFactory(NodeFactoryFlags.NoParenthesizerRules, parseBaseNodeFactory);
403+
export const parseNodeFactory = createNodeFactory(NodeFactoryFlags.NoParenthesizerRules);
419404

420405
function visitNode<T>(cbNode: (node: Node) => T, node: Node | undefined): T | undefined {
421406
return node && cbNode(node);
@@ -1410,22 +1395,7 @@ namespace Parser {
14101395

14111396
const disallowInAndDecoratorContext = NodeFlags.DisallowInContext | NodeFlags.DecoratorContext;
14121397

1413-
function countNode(node: Node) {
1414-
nodeCount++;
1415-
return node;
1416-
}
1417-
1418-
// Rather than using `createBaseNodeFactory` here, we establish a `BaseNodeFactory` that closes over the
1419-
// constructors above, which are reset each time `initializeState` is called.
1420-
const baseNodeFactory: BaseNodeFactory = {
1421-
createBaseSourceFileNode: () => countNode(new SourceFileObject()),
1422-
createBaseIdentifierNode: () => countNode(new IdentifierObject()),
1423-
createBasePrivateIdentifierNode: () => countNode(new PrivateIdentifierObject()),
1424-
createBaseTokenNode: kind => countNode(new TokenObject(kind)),
1425-
createBaseNode: kind => countNode(new NodeObject(kind))
1426-
};
1427-
1428-
const factory = createNodeFactory(NodeFactoryFlags.NoParenthesizerRules | NodeFactoryFlags.NoNodeConverters | NodeFactoryFlags.NoOriginalNode, baseNodeFactory);
1398+
const factory = createNodeFactory(NodeFactoryFlags.NoParenthesizerRules | NodeFactoryFlags.NoNodeConverters | NodeFactoryFlags.NoOriginalNode);
14291399

14301400
let fileName: string;
14311401
let sourceFlags: NodeFlags;
@@ -1898,9 +1868,16 @@ namespace Parser {
18981868
setTextRangePosWidth(sourceFile, 0, sourceText.length);
18991869
setFields(sourceFile);
19001870

1871+
// include the file in the count
1872+
nodeCount++;
1873+
19011874
// If we parsed this as an external module, it may contain top-level await
19021875
if (!isDeclarationFile && isExternalModule(sourceFile) && sourceFile.transformFlags & TransformFlags.ContainsPossibleTopLevelAwait) {
1903-
sourceFile = reparseTopLevelAwait(sourceFile);
1876+
const updated = reparseTopLevelAwait(sourceFile);
1877+
if (sourceFile !== updated) {
1878+
nodeCount++;
1879+
sourceFile = updated;
1880+
}
19041881
setFields(sourceFile);
19051882
}
19061883

@@ -2514,6 +2491,7 @@ namespace Parser {
25142491
(node as Mutable<T>).flags |= NodeFlags.ThisNodeHasError;
25152492
}
25162493

2494+
nodeCount++;
25172495
return node;
25182496
}
25192497

src/compiler/types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
BaseNodeFactory,
32
CreateSourceFileOptions,
43
EmitHelperFactory,
54
GetCanonicalFileName,
@@ -8135,7 +8134,6 @@ export interface GeneratedNamePart {
81358134
export interface NodeFactory {
81368135
/** @internal */ readonly parenthesizer: ParenthesizerRules;
81378136
/** @internal */ readonly converters: NodeConverters;
8138-
/** @internal */ readonly baseFactory: BaseNodeFactory;
81398137
/** @internal */ readonly flags: NodeFactoryFlags;
81408138
createNodeArray<T extends Node>(elements?: readonly T[], hasTrailingComma?: boolean): NodeArray<T>;
81418139

src/deprecatedCompat/4.0/nodeFactoryTopLevelExports.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ import {
3737
NamedImportBindings,
3838
Node,
3939
NodeArray,
40+
NodeConstructors,
4041
NoSubstitutionTemplateLiteral,
4142
NumericLiteral,
4243
ParameterDeclaration,
43-
parseBaseNodeFactory,
4444
PostfixUnaryExpression,
4545
PrefixUnaryExpression,
4646
PrimaryExpression,
@@ -1345,11 +1345,11 @@ export const createLogicalNot = deprecate(function createLogicalNot(operand: Exp
13451345
/** @deprecated Use an appropriate `factory` method instead. */
13461346
export const createNode = deprecate(function createNode(kind: SyntaxKind, pos = 0, end = 0): Node {
13471347
return setTextRangePosEnd(
1348-
kind === SyntaxKind.SourceFile ? parseBaseNodeFactory.createBaseSourceFileNode() :
1349-
kind === SyntaxKind.Identifier ? parseBaseNodeFactory.createBaseIdentifierNode() :
1350-
kind === SyntaxKind.PrivateIdentifier ? parseBaseNodeFactory.createBasePrivateIdentifierNode() :
1351-
!isNodeKind(kind) ? parseBaseNodeFactory.createBaseTokenNode(kind) :
1352-
parseBaseNodeFactory.createBaseNode(kind),
1348+
kind === SyntaxKind.SourceFile ? new NodeConstructors.SourceFileObject() :
1349+
kind === SyntaxKind.Identifier ? new NodeConstructors.IdentifierObject() :
1350+
kind === SyntaxKind.PrivateIdentifier ? new NodeConstructors.PrivateIdentifierObject() :
1351+
!isNodeKind(kind) ? new NodeConstructors.TokenObject(kind) :
1352+
new NodeConstructors.NodeObject(kind),
13531353
pos,
13541354
end
13551355
);

src/services/textChanges.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,9 +1329,7 @@ function isTrivia(s: string) {
13291329
// are more aggressive than is strictly necessary.
13301330
const textChangesTransformationContext: TransformationContext = {
13311331
...nullTransformationContext,
1332-
factory: createNodeFactory(
1333-
nullTransformationContext.factory.flags | NodeFactoryFlags.NoParenthesizerRules,
1334-
nullTransformationContext.factory.baseFactory),
1332+
factory: createNodeFactory(nullTransformationContext.factory.flags | NodeFactoryFlags.NoParenthesizerRules),
13351333
};
13361334

13371335
/** @internal */

0 commit comments

Comments
 (0)