Skip to content

Commit 22b9236

Browse files
committed
ir/metadata: use *DIFile instead of Field in Debug Info
1 parent 5170992 commit 22b9236

File tree

3 files changed

+124
-47
lines changed

3 files changed

+124
-47
lines changed

asm/specialized_metadata.go

+88-11
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,14 @@ func (gen *generator) irDICompositeType(new metadata.SpecializedNode, old *ast.D
225225
if err != nil {
226226
return nil, errors.WithStack(err)
227227
}
228-
md.File = file
228+
switch file := file.(type) {
229+
case *metadata.NullLit:
230+
// nothing to do.
231+
case *metadata.DIFile:
232+
md.File = file
233+
default:
234+
panic(fmt.Errorf("support for metadata DICompositeType file field type %T not yet implemented", file))
235+
}
229236
case *ast.LineField:
230237
md.Line = intLit(oldField.Line())
231238
case *ast.BaseTypeField:
@@ -307,7 +314,14 @@ func (gen *generator) irDIDerivedType(new metadata.SpecializedNode, old *ast.DID
307314
if err != nil {
308315
return nil, errors.WithStack(err)
309316
}
310-
md.File = file
317+
switch file := file.(type) {
318+
case *metadata.NullLit:
319+
// nothing to do.
320+
case *metadata.DIFile:
321+
md.File = file
322+
default:
323+
panic(fmt.Errorf("support for metadata DIDerivedType file field type %T not yet implemented", file))
324+
}
311325
case *ast.LineField:
312326
md.Line = intLit(oldField.Line())
313327
case *ast.BaseTypeField:
@@ -484,7 +498,14 @@ func (gen *generator) irDIGlobalVariable(new metadata.SpecializedNode, old *ast.
484498
if err != nil {
485499
return nil, errors.WithStack(err)
486500
}
487-
md.File = file
501+
switch file := file.(type) {
502+
case *metadata.NullLit:
503+
// nothing to do.
504+
case *metadata.DIFile:
505+
md.File = file
506+
default:
507+
panic(fmt.Errorf("support for metadata DIGlobalVariable file field type %T not yet implemented", file))
508+
}
488509
case *ast.LineField:
489510
md.Line = intLit(oldField.Line())
490511
case *ast.TypeField:
@@ -587,7 +608,14 @@ func (gen *generator) irDIImportedEntity(new metadata.SpecializedNode, old *ast.
587608
if err != nil {
588609
return nil, errors.WithStack(err)
589610
}
590-
md.File = file
611+
switch file := file.(type) {
612+
case *metadata.NullLit:
613+
// nothing to do.
614+
case *metadata.DIFile:
615+
md.File = file
616+
default:
617+
panic(fmt.Errorf("support for metadata DIImportedEntity file field type %T not yet implemented", file))
618+
}
591619
case *ast.LineField:
592620
md.Line = intLit(oldField.Line())
593621
case *ast.NameField:
@@ -627,7 +655,14 @@ func (gen *generator) irDILabel(new metadata.SpecializedNode, old *ast.DILabel)
627655
if err != nil {
628656
return nil, errors.WithStack(err)
629657
}
630-
md.File = file
658+
switch file := file.(type) {
659+
case *metadata.NullLit:
660+
// nothing to do.
661+
case *metadata.DIFile:
662+
md.File = file
663+
default:
664+
panic(fmt.Errorf("support for metadata DILabel file field type %T not yet implemented", file))
665+
}
631666
case *ast.LineField:
632667
md.Line = intLit(oldField.Line())
633668
default:
@@ -663,7 +698,14 @@ func (gen *generator) irDILexicalBlock(new metadata.SpecializedNode, old *ast.DI
663698
if err != nil {
664699
return nil, errors.WithStack(err)
665700
}
666-
md.File = file
701+
switch file := file.(type) {
702+
case *metadata.NullLit:
703+
// nothing to do.
704+
case *metadata.DIFile:
705+
md.File = file
706+
default:
707+
panic(fmt.Errorf("support for metadata DILexicalBlock file field type %T not yet implemented", file))
708+
}
667709
case *ast.LineField:
668710
md.Line = intLit(oldField.Line())
669711
case *ast.ColumnField:
@@ -702,7 +744,14 @@ func (gen *generator) irDILexicalBlockFile(new metadata.SpecializedNode, old *as
702744
if err != nil {
703745
return nil, errors.WithStack(err)
704746
}
705-
md.File = file
747+
switch file := file.(type) {
748+
case *metadata.NullLit:
749+
// nothing to do.
750+
case *metadata.DIFile:
751+
md.File = file
752+
default:
753+
panic(fmt.Errorf("support for metadata DILexicalBlockFile file field type %T not yet implemented", file))
754+
}
706755
case *ast.DiscriminatorIntField:
707756
md.Discriminator = uintLit(oldField.Discriminator())
708757
default:
@@ -742,7 +791,14 @@ func (gen *generator) irDILocalVariable(new metadata.SpecializedNode, old *ast.D
742791
if err != nil {
743792
return nil, errors.WithStack(err)
744793
}
745-
md.File = file
794+
switch file := file.(type) {
795+
case *metadata.NullLit:
796+
// nothing to do.
797+
case *metadata.DIFile:
798+
md.File = file
799+
default:
800+
panic(fmt.Errorf("support for metadata DILocalVariable file field type %T not yet implemented", file))
801+
}
746802
case *ast.LineField:
747803
md.Line = intLit(oldField.Line())
748804
case *ast.TypeField:
@@ -856,7 +912,14 @@ func (gen *generator) irDIMacroFile(new metadata.SpecializedNode, old *ast.DIMac
856912
if err != nil {
857913
return nil, errors.WithStack(err)
858914
}
859-
md.File = file
915+
switch file := file.(type) {
916+
case *metadata.NullLit:
917+
// nothing to do.
918+
case *metadata.DIFile:
919+
md.File = file
920+
default:
921+
panic(fmt.Errorf("support for metadata DIMacroFile file field type %T not yet implemented", file))
922+
}
860923
case *ast.NodesField:
861924
nodes, err := gen.irMDField(oldField.Nodes())
862925
if err != nil {
@@ -960,7 +1023,14 @@ func (gen *generator) irDIObjCProperty(new metadata.SpecializedNode, old *ast.DI
9601023
if err != nil {
9611024
return nil, errors.WithStack(err)
9621025
}
963-
md.File = file
1026+
switch file := file.(type) {
1027+
case *metadata.NullLit:
1028+
// nothing to do.
1029+
case *metadata.DIFile:
1030+
md.File = file
1031+
default:
1032+
panic(fmt.Errorf("support for metadata DIObjCProperty file field type %T not yet implemented", file))
1033+
}
9641034
case *ast.LineField:
9651035
md.Line = intLit(oldField.Line())
9661036
case *ast.SetterField:
@@ -1012,7 +1082,14 @@ func (gen *generator) irDISubprogram(new metadata.SpecializedNode, old *ast.DISu
10121082
if err != nil {
10131083
return nil, errors.WithStack(err)
10141084
}
1015-
md.File = file
1085+
switch file := file.(type) {
1086+
case *metadata.NullLit:
1087+
// nothing to do.
1088+
case *metadata.DIFile:
1089+
md.File = file
1090+
default:
1091+
panic(fmt.Errorf("support for metadata DISubprogram file field type %T not yet implemented", file))
1092+
}
10161093
case *ast.LineField:
10171094
md.Line = intLit(oldField.Line())
10181095
case *ast.TypeField:

ir/metadata/specialized_metadata.go

+35-35
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ type DICompositeType struct {
192192
Tag enum.DwarfTag // required.
193193
Name string // optional; empty if not present.
194194
Scope Field // optional; nil if not present.
195-
File Field // optional; nil if not present.
195+
File *DIFile // optional; nil if not present.
196196
Line int64 // optional; zero value if not present.
197197
BaseType Field // optional; nil if not present.
198198
Size uint64 // optional; zero value if not present.
@@ -301,7 +301,7 @@ type DIDerivedType struct {
301301
Tag enum.DwarfTag // required.
302302
Name string // optional; empty if not present.
303303
Scope Field // optional; nil if not present.
304-
File Field // optional; nil if not present.
304+
File *DIFile // optional; nil if not present.
305305
Line int64 // optional; zero value if not present.
306306
BaseType Field // required.
307307
Size uint64 // optional; zero value if not present.
@@ -526,17 +526,17 @@ type DIGlobalVariable struct {
526526
// present.
527527
MetadataID
528528

529-
Name string // required.
530-
Scope Field // optional; nil if not present.
531-
LinkageName string // optional; empty if not present.
532-
File Field // optional; nil if not present.
533-
Line int64 // optional; zero value if not present.
534-
Type Field // optional; nil if not present.
535-
IsLocal bool // optional; zero value if not present.
536-
IsDefinition bool // optional; zero value if not present.
537-
TemplateParams Field // optional; nil if not present.
538-
Declaration Field // optional; nil if not present.
539-
Align uint64 // optional; zero value if not present.
529+
Name string // required.
530+
Scope Field // optional; nil if not present.
531+
LinkageName string // optional; empty if not present.
532+
File *DIFile // optional; nil if not present.
533+
Line int64 // optional; zero value if not present.
534+
Type Field // optional; nil if not present.
535+
IsLocal bool // optional; zero value if not present.
536+
IsDefinition bool // optional; zero value if not present.
537+
TemplateParams Field // optional; nil if not present.
538+
Declaration Field // optional; nil if not present.
539+
Align uint64 // optional; zero value if not present.
540540
}
541541

542542
// String returns the LLVM syntax representation of the specialized metadata node.
@@ -662,7 +662,7 @@ type DIImportedEntity struct {
662662
Tag enum.DwarfTag // required.
663663
Scope Field // required.
664664
Entity Field // optional; nil if not present.
665-
File Field // optional; nil if not present.
665+
File *DIFile // optional; nil if not present.
666666
Line int64 // optional; zero value if not present.
667667
Name string // optional; empty if not present.
668668
}
@@ -716,10 +716,10 @@ type DILabel struct {
716716
// present.
717717
MetadataID
718718

719-
Scope Field // required.
720-
Name string // required.
721-
File Field // required.
722-
Line int64 // required.
719+
Scope Field // required.
720+
Name string // required.
721+
File *DIFile // required.
722+
Line int64 // required.
723723
}
724724

725725
// String returns the LLVM syntax representation of the specialized metadata node.
@@ -759,10 +759,10 @@ type DILexicalBlock struct {
759759
// present.
760760
MetadataID
761761

762-
Scope Field // required.
763-
File Field // optional; nil if not present.
764-
Line int64 // optional; zero value if not present.
765-
Column int64 // optional; zero value if not present.
762+
Scope Field // required.
763+
File *DIFile // optional; nil if not present.
764+
Line int64 // optional; zero value if not present.
765+
Column int64 // optional; zero value if not present.
766766
}
767767

768768
// String returns the LLVM syntax representation of the specialized metadata node.
@@ -808,9 +808,9 @@ type DILexicalBlockFile struct {
808808
// present.
809809
MetadataID
810810

811-
Scope Field // required.
812-
File Field // optional; nil if not present.
813-
Discriminator uint64 // required.
811+
Scope Field // required.
812+
File *DIFile // optional; nil if not present.
813+
Discriminator uint64 // required.
814814
}
815815

816816
// String returns the LLVM syntax representation of the specialized metadata node.
@@ -854,7 +854,7 @@ type DILocalVariable struct {
854854
Name string // optional; empty if not present.
855855
Arg uint64 // optional; zero value if not present.
856856
Scope Field // required.
857-
File Field // optional; nil if not present.
857+
File *DIFile // optional; nil if not present.
858858
Line int64 // optional; zero value if not present.
859859
Type Field // optional; nil if not present.
860860
Flags enum.DIFlag // optional.
@@ -1023,7 +1023,7 @@ type DIMacroFile struct {
10231023

10241024
Type enum.DwarfMacinfo // optional; zero value if not present.
10251025
Line int64 // optional; zero value if not present.
1026-
File Field // required.
1026+
File *DIFile // required.
10271027
Nodes Field // optional; nil if not present.
10281028
}
10291029

@@ -1166,13 +1166,13 @@ type DIObjCProperty struct {
11661166
// present.
11671167
MetadataID
11681168

1169-
Name string // optional; empty if not present.
1170-
File Field // optional; nil if not present.
1171-
Line int64 // optional; zero value if not present.
1172-
Setter string // optional; empty if not present.
1173-
Getter string // optional; empty if not present.
1174-
Attributes uint64 // optional; zero value if not present.
1175-
Type Field // optional; nil if not present.
1169+
Name string // optional; empty if not present.
1170+
File *DIFile // optional; nil if not present.
1171+
Line int64 // optional; zero value if not present.
1172+
Setter string // optional; empty if not present.
1173+
Getter string // optional; empty if not present.
1174+
Attributes uint64 // optional; zero value if not present.
1175+
Type Field // optional; nil if not present.
11761176
}
11771177

11781178
// String returns the LLVM syntax representation of the specialized metadata node.
@@ -1235,7 +1235,7 @@ type DISubprogram struct {
12351235
Scope Field // optional; nil if not present.
12361236
Name string // optional; empty if not present.
12371237
LinkageName string // optional; empty if not present.
1238-
File Field // optional; nil if not present.
1238+
File *DIFile // optional; nil if not present.
12391239
Line int64 // optional; zero value if not present.
12401240
Type Field // optional; nil if not present.
12411241
IsLocal bool // optional; zero value if not present.

0 commit comments

Comments
 (0)