@@ -389,7 +389,7 @@ func (c *EmitContext) newGeneratedIdentifier(kind GeneratedIdentifierFlags, text
389
389
case ast .IsMemberName (node ):
390
390
text = node .Text ()
391
391
default :
392
- text = fmt .Sprintf ("(generated@%v)" , ast .GetNodeId (node ))
392
+ text = fmt .Sprintf ("(generated@%v)" , ast .GetNodeId (c . getNodeForGeneratedNameWorker ( node , id ) ))
393
393
}
394
394
text = FormatGeneratedName (false /*privateName*/ , options .Prefix , text , options .Suffix )
395
395
}
@@ -445,7 +445,7 @@ func (c *EmitContext) newGeneratedPrivateIdentifier(kind GeneratedIdentifierFlag
445
445
case ast .IsMemberName (node ):
446
446
text = node .Text ()
447
447
default :
448
- text = fmt .Sprintf ("(generated@%v)" , ast .GetNodeId (node ))
448
+ text = fmt .Sprintf ("(generated@%v)" , ast .GetNodeId (c . getNodeForGeneratedNameWorker ( node , id ) ))
449
449
}
450
450
text = FormatGeneratedName (true /*privateName*/ , options .Prefix , text , options .Suffix )
451
451
} else if ! strings .HasPrefix (text , "#" ) {
@@ -500,24 +500,28 @@ func (c *EmitContext) GetAutoGenerateInfo(name *ast.MemberName) *AutoGenerateInf
500
500
501
501
// Walks the associated AutoGenerateInfo entries of a name to find the root Nopde from which the name should be generated.
502
502
func (c * EmitContext ) GetNodeForGeneratedName (name * ast.MemberName ) * ast.Node {
503
- node := name
504
503
if autoGenerate := c .autoGenerate [name ]; autoGenerate != nil && autoGenerate .Flags .IsNode () {
505
- autoGenerateId := autoGenerate .Id
506
- source := autoGenerate .Node
507
- for source != nil {
508
- node = source
509
- if ! ast .IsMemberName (node ) {
510
- break
511
- }
504
+ return c .getNodeForGeneratedNameWorker (autoGenerate .Node , autoGenerate .Id )
505
+ }
506
+ return name
507
+ }
512
508
509
+ func (c * EmitContext ) getNodeForGeneratedNameWorker (node * ast.Node , autoGenerateId AutoGenerateId ) * ast.Node {
510
+ original := c .Original (node )
511
+ for original != nil {
512
+ node = original
513
+ if ast .IsMemberName (node ) {
513
514
// if "node" is a different generated name (having a different "autoGenerateId"), use it and stop traversing.
514
515
autoGenerate := c .autoGenerate [node ]
515
- if autoGenerate == nil || ! autoGenerate .Flags .IsNode () || autoGenerate .Id != autoGenerateId {
516
+ if autoGenerate == nil || autoGenerate .Flags .IsNode () && autoGenerate .Id != autoGenerateId {
516
517
break
517
518
}
518
-
519
- source = autoGenerate .Node
519
+ if autoGenerate .Flags .IsNode () {
520
+ original = autoGenerate .Node
521
+ continue
522
+ }
520
523
}
524
+ original = c .Original (node )
521
525
}
522
526
return node
523
527
}
0 commit comments