@@ -6118,15 +6118,18 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
61186118 // work, we should consider switching explicit property assignments instead of using `for..in`.
61196119 const node = baseFactory . createBaseSourceFileNode ( SyntaxKind . SourceFile ) as Mutable < SourceFile > ;
61206120 node . flags |= source . flags & ~ NodeFlags . Synthesized ;
6121- for ( const p in source ) {
6122- if ( hasProperty ( node , p ) || ! hasProperty ( source , p ) ) {
6121+ copyBaseNodeProperties ( source , node ) ;
6122+ const sourceData = ( source as any ) . data ?? source ;
6123+ const nodeData = ( node as any ) . data ?? node ;
6124+ for ( const p in sourceData ) {
6125+ if ( hasProperty ( nodeData , p ) || ! hasProperty ( sourceData , p ) ) {
61236126 continue ;
61246127 }
61256128 if ( p === "emitNode" ) {
6126- node . emitNode = undefined ;
6129+ nodeData . emitNode = undefined ;
61276130 continue ;
61286131 }
6129- ( node as any ) [ p ] = ( source as any ) [ p ] ;
6132+ nodeData [ p ] = sourceData [ p ] ;
61306133 }
61316134 return node ;
61326135 }
@@ -6376,18 +6379,28 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
63766379 ( clone as Mutable < T > ) . flags |= node . flags & ~ NodeFlags . Synthesized ;
63776380 ( clone as Mutable < T > ) . transformFlags = node . transformFlags ;
63786381 setOriginal ( clone , node ) ;
6379-
6380- for ( const key in node ) {
6381- if ( hasProperty ( clone , key ) || ! hasProperty ( node , key ) ) {
6382+ copyBaseNodeProperties ( node , clone ) ;
6383+ const nodeData = ( node as any ) . data ?? node ;
6384+ const cloneData = ( clone as any ) . data ?? clone ;
6385+ for ( const key in nodeData ) {
6386+ if ( hasProperty ( cloneData , key ) || ! hasProperty ( nodeData , key ) ) {
63826387 continue ;
63836388 }
6384-
6385- clone [ key ] = node [ key ] ;
6389+ cloneData [ key ] = nodeData [ key ] ;
63866390 }
6387-
63886391 return clone ;
63896392 }
6390-
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+ }
63916404 // compound nodes
63926405 function createImmediatelyInvokedFunctionExpression ( statements : readonly Statement [ ] ) : ImmediatelyInvokedFunctionExpression ;
63936406 function createImmediatelyInvokedFunctionExpression ( statements : readonly Statement [ ] , param : ParameterDeclaration , paramValue : Expression ) : ImmediatelyInvokedFunctionExpression ;
0 commit comments