@@ -171,11 +171,13 @@ func (p *Package) Translate(f *File) {
171
171
for len (p .typedefs ) > numTypedefs {
172
172
numTypedefs = len (p .typedefs )
173
173
// Also ask about any typedefs we've seen so far.
174
- for _ , a := range p .typedefList {
175
- f . Name [ a ] = & Name {
176
- Go : a ,
177
- C : a ,
174
+ for _ , info := range p .typedefList {
175
+ n : = & Name {
176
+ Go : info . typedef ,
177
+ C : info . typedef ,
178
178
}
179
+ f .Name [info .typedef ] = n
180
+ f .NamePos [n ] = info .pos
179
181
}
180
182
needType := p .guessKinds (f )
181
183
if len (needType ) > 0 {
@@ -573,7 +575,7 @@ func (p *Package) loadDWARF(f *File, names []*Name) {
573
575
fatalf ("malformed __cgo__ name: %s" , name )
574
576
}
575
577
types [i ] = t .Type
576
- p .recordTypedefs (t .Type )
578
+ p .recordTypedefs (t .Type , f. NamePos [ names [ i ]] )
577
579
}
578
580
if e .Tag != dwarf .TagCompileUnit {
579
581
r .SkipChildren ()
@@ -641,10 +643,11 @@ func (p *Package) loadDWARF(f *File, names []*Name) {
641
643
}
642
644
643
645
// recordTypedefs remembers in p.typedefs all the typedefs used in dtypes and its children.
644
- func (p * Package ) recordTypedefs (dtype dwarf.Type ) {
645
- p .recordTypedefs1 (dtype , map [dwarf.Type ]bool {})
646
+ func (p * Package ) recordTypedefs (dtype dwarf.Type , pos token. Pos ) {
647
+ p .recordTypedefs1 (dtype , pos , map [dwarf.Type ]bool {})
646
648
}
647
- func (p * Package ) recordTypedefs1 (dtype dwarf.Type , visited map [dwarf.Type ]bool ) {
649
+
650
+ func (p * Package ) recordTypedefs1 (dtype dwarf.Type , pos token.Pos , visited map [dwarf.Type ]bool ) {
648
651
if dtype == nil {
649
652
return
650
653
}
@@ -660,23 +663,23 @@ func (p *Package) recordTypedefs1(dtype dwarf.Type, visited map[dwarf.Type]bool)
660
663
}
661
664
if ! p .typedefs [dt .Name ] {
662
665
p .typedefs [dt .Name ] = true
663
- p .typedefList = append (p .typedefList , dt .Name )
664
- p .recordTypedefs1 (dt .Type , visited )
666
+ p .typedefList = append (p .typedefList , typedefInfo { dt .Name , pos } )
667
+ p .recordTypedefs1 (dt .Type , pos , visited )
665
668
}
666
669
case * dwarf.PtrType :
667
- p .recordTypedefs1 (dt .Type , visited )
670
+ p .recordTypedefs1 (dt .Type , pos , visited )
668
671
case * dwarf.ArrayType :
669
- p .recordTypedefs1 (dt .Type , visited )
672
+ p .recordTypedefs1 (dt .Type , pos , visited )
670
673
case * dwarf.QualType :
671
- p .recordTypedefs1 (dt .Type , visited )
674
+ p .recordTypedefs1 (dt .Type , pos , visited )
672
675
case * dwarf.FuncType :
673
- p .recordTypedefs1 (dt .ReturnType , visited )
676
+ p .recordTypedefs1 (dt .ReturnType , pos , visited )
674
677
for _ , a := range dt .ParamType {
675
- p .recordTypedefs1 (a , visited )
678
+ p .recordTypedefs1 (a , pos , visited )
676
679
}
677
680
case * dwarf.StructType :
678
681
for _ , f := range dt .Field {
679
- p .recordTypedefs1 (f .Type , visited )
682
+ p .recordTypedefs1 (f .Type , pos , visited )
680
683
}
681
684
}
682
685
}
0 commit comments