@@ -17,7 +17,6 @@ import {
17
17
AsteriskToken ,
18
18
AwaitExpression ,
19
19
AwaitKeyword ,
20
- BaseNodeFactory ,
21
20
BigIntLiteral ,
22
21
BinaryExpression ,
23
22
BinaryOperator ,
@@ -59,7 +58,6 @@ import {
59
58
ConstructorTypeNode ,
60
59
ConstructSignatureDeclaration ,
61
60
ContinueStatement ,
62
- createBaseNodeFactory ,
63
61
createNodeConverters ,
64
62
createParenthesizerRules ,
65
63
createScanner ,
@@ -467,15 +465,15 @@ import {
467
465
WithStatement ,
468
466
YieldExpression ,
469
467
} 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";
477
468
import {
478
- SourceMapSourceObject as SourceMapSourceObject ,
469
+ IdentifierObject ,
470
+ NodeObject ,
471
+ PrivateIdentifierObject ,
472
+ SourceFileObject ,
473
+ TokenObject ,
474
+ } from "../nodeConstructors" ;
475
+ import {
476
+ SourceMapSourceObject ,
479
477
} from "../objectConstructors" ;
480
478
481
479
let nextAutoGenerateId = 0 ;
@@ -491,6 +489,8 @@ export const enum NodeFactoryFlags {
491
489
NoIndentationOnFreshPropertyAccess = 1 << 2 ,
492
490
// Do not set an `original` pointer when updating a node.
493
491
NoOriginalNode = 1 << 3 ,
492
+ // Mark nodes as synthetic
493
+ MarkSynthetic = 1 << 4 ,
494
494
}
495
495
496
496
const nodeFactoryPatchers : ( ( factory : NodeFactory ) => void ) [ ] = [ ] ;
@@ -507,7 +507,8 @@ export function addNodeFactoryPatcher(fn: (factory: NodeFactory) => void) {
507
507
*
508
508
* @internal
509
509
*/
510
- export function createNodeFactory ( flags : NodeFactoryFlags , baseFactory : BaseNodeFactory ) : NodeFactory {
510
+ export function createNodeFactory ( flags : NodeFactoryFlags ) : NodeFactory {
511
+ const markSynthetic = ( flags & NodeFactoryFlags . MarkSynthetic ) === NodeFactoryFlags . MarkSynthetic ;
511
512
const update = flags & NodeFactoryFlags . NoOriginalNode ? updateWithoutOriginal : updateWithOriginal ;
512
513
513
514
// 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
531
532
const factory : NodeFactory = {
532
533
get parenthesizer ( ) { return parenthesizerRules ( ) ; } ,
533
534
get converters ( ) { return converters ( ) ; } ,
534
- baseFactory,
535
535
flags,
536
536
createNodeArray,
537
537
createNumericLiteral,
@@ -1074,7 +1074,9 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
1074
1074
}
1075
1075
1076
1076
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 ;
1078
1080
}
1079
1081
1080
1082
function createBaseDeclaration < T extends Declaration > ( kind : T [ "kind" ] ) {
@@ -1160,7 +1162,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
1160
1162
//
1161
1163
1162
1164
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 ;
1164
1167
node . originalKeywordKind = originalKeywordKind ;
1165
1168
node . escapedText = escapedText ;
1166
1169
node . autoGenerate = undefined ;
@@ -1257,7 +1260,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
1257
1260
}
1258
1261
1259
1262
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 ;
1261
1265
node . escapedText = escapedText ;
1262
1266
node . autoGenerate = undefined ;
1263
1267
node . transformFlags |= TransformFlags . ContainsClassFields ;
@@ -1306,7 +1310,9 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
1306
1310
//
1307
1311
1308
1312
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 ;
1310
1316
}
1311
1317
1312
1318
// @api
@@ -6033,7 +6039,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
6033
6039
endOfFileToken : EndOfFileToken ,
6034
6040
flags : NodeFlags
6035
6041
) {
6036
- const node = baseFactory . createBaseSourceFileNode ( ) as Mutable < SourceFile > ;
6042
+ const node = new SourceFileObject ( ) as Mutable < SourceFile > ;
6043
+ if ( markSynthetic ) node . flags |= NodeFlags . Synthesized ;
6037
6044
node . statements = createNodeArray ( statements ) ;
6038
6045
node . endOfFileToken = endOfFileToken ;
6039
6046
node . flags |= flags ;
@@ -6116,7 +6123,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
6116
6123
function cloneSourceFileWorker ( source : SourceFile ) {
6117
6124
// TODO: This mechanism for cloning results in megamorphic property reads and writes. In future perf-related
6118
6125
// 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 ;
6120
6128
node . flags |= source . flags & ~ NodeFlags . Synthesized ;
6121
6129
for ( const p in source ) {
6122
6130
if ( hasProperty ( node , p ) || ! hasProperty ( source , p ) ) {
@@ -6452,11 +6460,12 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
6452
6460
}
6453
6461
6454
6462
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 > ;
6457
6465
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 ;
6460
6469
setOriginalNode ( clone , node ) ;
6461
6470
6462
6471
for ( const key in node ) {
@@ -7388,22 +7397,7 @@ export function getTransformFlagsSubtreeExclusions(kind: SyntaxKind) {
7388
7397
}
7389
7398
}
7390
7399
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 ) ;
7407
7401
7408
7402
export function createUnparsedSourceFile ( text : string ) : UnparsedSource ;
7409
7403
export function createUnparsedSourceFile ( inputFile : InputFiles , type : "js" | "dts" , stripInternal ?: boolean ) : UnparsedSource ;
0 commit comments