@@ -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";
477468import {
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
481479let 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
496496const 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
74087402export function createUnparsedSourceFile ( text : string ) : UnparsedSource ;
74097403export function createUnparsedSourceFile ( inputFile : InputFiles , type : "js" | "dts" , stripInternal ?: boolean ) : UnparsedSource ;
0 commit comments