@@ -327,6 +327,7 @@ import {
327
327
NodeArray ,
328
328
NodeFactory ,
329
329
NodeFlags ,
330
+ NodeImpl ,
330
331
nodeIsSynthesized ,
331
332
NonNullChain ,
332
333
NonNullExpression ,
@@ -6077,8 +6078,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
6077
6078
}
6078
6079
6079
6080
function createRedirectedSourceFile ( redirectInfo : RedirectInfo ) {
6080
- const node : SourceFile = Object . create ( redirectInfo . redirectTarget ) ;
6081
- Object . defineProperties ( node , {
6081
+ const nodeData : any = Object . create ( ( redirectInfo . redirectTarget as any as NodeImpl ) . data ) ;
6082
+ Object . defineProperties ( nodeData , {
6082
6083
id : {
6083
6084
get ( this : SourceFile ) {
6084
6085
return this . redirectInfo ! . redirectTarget . id ;
@@ -6095,9 +6096,13 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
6095
6096
this . redirectInfo ! . redirectTarget . symbol = value ;
6096
6097
} ,
6097
6098
} ,
6099
+ redirectInfo : {
6100
+ value : redirectInfo ,
6101
+ } ,
6098
6102
} ) ;
6099
- node . redirectInfo = redirectInfo ;
6100
- return node ;
6103
+ const sourceFile = baseFactory . createBaseSourceFileNode ( SyntaxKind . SourceFile ) ;
6104
+ ( sourceFile as NodeImpl ) . data = nodeData ;
6105
+ return sourceFile as SourceFile ;
6101
6106
}
6102
6107
6103
6108
function cloneRedirectedSourceFile ( source : SourceFile ) {
@@ -6118,18 +6123,17 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
6118
6123
// work, we should consider switching explicit property assignments instead of using `for..in`.
6119
6124
const node = baseFactory . createBaseSourceFileNode ( SyntaxKind . SourceFile ) as Mutable < SourceFile > ;
6120
6125
node . flags |= source . flags & ~ NodeFlags . Synthesized ;
6121
- copyBaseNodeProperties ( source , node ) ;
6122
6126
const sourceData = ( source as any ) . data ?? source ;
6123
6127
const nodeData = ( node as any ) . data ?? node ;
6124
6128
for ( const p in sourceData ) {
6125
6129
if ( hasProperty ( nodeData , p ) || ! hasProperty ( sourceData , p ) ) {
6126
6130
continue ;
6127
6131
}
6128
6132
if ( p === "emitNode" ) {
6129
- nodeData . emitNode = undefined ;
6133
+ node . emitNode = undefined ;
6130
6134
continue ;
6131
6135
}
6132
- nodeData [ p ] = sourceData [ p ] ;
6136
+ ( node as any ) [ p ] = sourceData [ p ] ;
6133
6137
}
6134
6138
return node ;
6135
6139
}
@@ -6379,28 +6383,16 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
6379
6383
( clone as Mutable < T > ) . flags |= node . flags & ~ NodeFlags . Synthesized ;
6380
6384
( clone as Mutable < T > ) . transformFlags = node . transformFlags ;
6381
6385
setOriginal ( clone , node ) ;
6382
- copyBaseNodeProperties ( node , clone ) ;
6383
6386
const nodeData = ( node as any ) . data ?? node ;
6384
6387
const cloneData = ( clone as any ) . data ?? clone ;
6385
6388
for ( const key in nodeData ) {
6386
6389
if ( hasProperty ( cloneData , key ) || ! hasProperty ( nodeData , key ) ) {
6387
6390
continue ;
6388
6391
}
6389
- cloneData [ key ] = nodeData [ key ] ;
6392
+ ( clone as any ) [ key ] = nodeData [ key ] ;
6390
6393
}
6391
6394
return clone ;
6392
6395
}
6393
- function copyBaseNodeProperties ( node : Node , clone : Mutable < Node > ) {
6394
- clone . pos = node . pos ;
6395
- clone . end = node . end ;
6396
- clone . kind = node . kind ;
6397
- clone . id = node . id ;
6398
- clone . modifierFlagsCache = node . modifierFlagsCache ;
6399
- clone . transformFlags = node . transformFlags ;
6400
- clone . parent = node . parent ;
6401
- clone . original = node . original ;
6402
- clone . emitNode = node . emitNode ;
6403
- }
6404
6396
// compound nodes
6405
6397
function createImmediatelyInvokedFunctionExpression ( statements : readonly Statement [ ] ) : ImmediatelyInvokedFunctionExpression ;
6406
6398
function createImmediatelyInvokedFunctionExpression ( statements : readonly Statement [ ] , param : ParameterDeclaration , paramValue : Expression ) : ImmediatelyInvokedFunctionExpression ;
0 commit comments