Skip to content

Commit

Permalink
Fix bug with codegeneration with forward declaration
Browse files Browse the repository at this point in the history
when type was forward declared before child type which used inside that declared type later on, codegen was broken.
This lead to simplification of the struct emit, since no need to special case anon types. This lead to changes in naming which I think is reasonable, since that way always anon types prefixed with <typedef>
  • Loading branch information
kant2002 committed Sep 6, 2024
1 parent 91fd7e3 commit c7f0a57
Show file tree
Hide file tree
Showing 10 changed files with 174 additions and 162 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@
Locals:
<typedef>foo V_0
IL_0000: ldloca.s V_0
IL_0002: ldflda _Union__ <typedef>foo::_Union__
IL_0007: ldflda _Union_Int_x1_Float_x2__ _Union__::_Union_Int_x1_Float_x2__
IL_000c: ldflda _Union_Int_x2_Float_f2__ _Union_Int_x1_Float_x2__::_Union_Int_x2_Float_f2__
IL_0011: ldflda _Union_Int_x3_Float_f3__ _Union_Int_x2_Float_f2__::_Union_Int_x3_Float_f3__
IL_0016: ldflda _Union_Int_x4_Float_f4 _Union_Int_x3_Float_f3__::_Union_Int_x4_Float_f4
IL_0002: ldflda <typedef>_Union__ <typedef>foo::_Union__
IL_0007: ldflda <typedef>_Union_Int_x1_Float_x2__ <typedef>_Union__::_Union_Int_x1_Float_x2__
IL_000c: ldflda <typedef>_Union_Int_x2_Float_f2__ <typedef>_Union_Int_x1_Float_x2__::_Union_Int_x2_Float_f2__
IL_0011: ldflda <typedef>_Union_Int_x3_Float_f3__ <typedef>_Union_Int_x2_Float_f2__::_Union_Int_x3_Float_f3__
IL_0016: ldflda <typedef>_Union_Int_x4_Float_f4 <typedef>_Union_Int_x3_Float_f3__::_Union_Int_x4_Float_f4
IL_001b: ldc.r4 5.2
IL_0020: stfld System.Single _Union_Int_x4_Float_f4::f4
IL_0020: stfld System.Single <typedef>_Union_Int_x4_Float_f4::f4
IL_0025: ldloca.s V_0
IL_0027: ldflda _Union__ <typedef>foo::_Union__
IL_002c: ldflda _Union_Int_x1_Float_x2__ _Union__::_Union_Int_x1_Float_x2__
IL_0031: ldfld System.Single _Union_Int_x1_Float_x2__::x2
IL_0027: ldflda <typedef>_Union__ <typedef>foo::_Union__
IL_002c: ldflda <typedef>_Union_Int_x1_Float_x2__ <typedef>_Union__::_Union_Int_x1_Float_x2__
IL_0031: ldfld System.Single <typedef>_Union_Int_x1_Float_x2__::x2
IL_0036: ret

System.Int32 <Module>::<SyntheticEntrypoint>()
Expand All @@ -30,31 +30,31 @@

Type: <typedef>foo
Fields:
_Union__ <typedef>foo::_Union__
<typedef>_Union__ <typedef>foo::_Union__

Type: _Union_Int_x4_Float_f4
Type: <typedef>_Union__
Fields:
System.Int32 _Union_Int_x4_Float_f4::x4
System.Single _Union_Int_x4_Float_f4::f4
<typedef>_Union_Int_x1_Float_x2__ <typedef>_Union__::_Union_Int_x1_Float_x2__

Type: _Union_Int_x3_Float_f3__
Type: <typedef>_Union_Int_x1_Float_x2__
Fields:
System.Int32 _Union_Int_x3_Float_f3__::x3
System.Single _Union_Int_x3_Float_f3__::f3
_Union_Int_x4_Float_f4 _Union_Int_x3_Float_f3__::_Union_Int_x4_Float_f4
System.Int32 <typedef>_Union_Int_x1_Float_x2__::x1
System.Single <typedef>_Union_Int_x1_Float_x2__::x2
<typedef>_Union_Int_x2_Float_f2__ <typedef>_Union_Int_x1_Float_x2__::_Union_Int_x2_Float_f2__

Type: _Union_Int_x2_Float_f2__
Type: <typedef>_Union_Int_x2_Float_f2__
Fields:
System.Int32 _Union_Int_x2_Float_f2__::x2
System.Single _Union_Int_x2_Float_f2__::f2
_Union_Int_x3_Float_f3__ _Union_Int_x2_Float_f2__::_Union_Int_x3_Float_f3__
System.Int32 <typedef>_Union_Int_x2_Float_f2__::x2
System.Single <typedef>_Union_Int_x2_Float_f2__::f2
<typedef>_Union_Int_x3_Float_f3__ <typedef>_Union_Int_x2_Float_f2__::_Union_Int_x3_Float_f3__

Type: _Union_Int_x1_Float_x2__
Type: <typedef>_Union_Int_x3_Float_f3__
Fields:
System.Int32 _Union_Int_x1_Float_x2__::x1
System.Single _Union_Int_x1_Float_x2__::x2
_Union_Int_x2_Float_f2__ _Union_Int_x1_Float_x2__::_Union_Int_x2_Float_f2__
System.Int32 <typedef>_Union_Int_x3_Float_f3__::x3
System.Single <typedef>_Union_Int_x3_Float_f3__::f3
<typedef>_Union_Int_x4_Float_f4 <typedef>_Union_Int_x3_Float_f3__::_Union_Int_x4_Float_f4

Type: _Union__
Type: <typedef>_Union_Int_x4_Float_f4
Fields:
_Union_Int_x1_Float_x2__ _Union__::_Union_Int_x1_Float_x2__
System.Int32 <typedef>_Union_Int_x4_Float_f4::x4
System.Single <typedef>_Union_Int_x4_Float_f4::f4
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
Type: <typedef>foo
Fields:
System.Int64 <typedef>foo::l
_Union_Int_x_Float_f <typedef>foo::_Union_Int_x_Float_f
<typedef>_Union_Int_x_Float_f <typedef>foo::_Union_Int_x_Float_f

Type: _Union_Int_x_Float_f
Type: <typedef>_Union_Int_x_Float_f
Fields:
System.Int32 _Union_Int_x_Float_f::x
System.Single _Union_Int_x_Float_f::f
System.Int32 <typedef>_Union_Int_x_Float_f::x
System.Single <typedef>_Union_Int_x_Float_f::f
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
Locals:
<typedef>foo V_0
IL_0000: ldloca.s V_0
IL_0002: ldflda _Union_Int_x_Float_f <typedef>foo::_Union_Int_x_Float_f
IL_0002: ldflda <typedef>_Union_Int_x_Float_f <typedef>foo::_Union_Int_x_Float_f
IL_0007: ldc.r4 5.2
IL_000c: stfld System.Single _Union_Int_x_Float_f::f
IL_000c: stfld System.Single <typedef>_Union_Int_x_Float_f::f
IL_0011: ldloca.s V_0
IL_0013: ldflda _Union_Int_x_Float_f <typedef>foo::_Union_Int_x_Float_f
IL_0018: ldfld System.Int32 _Union_Int_x_Float_f::x
IL_0013: ldflda <typedef>_Union_Int_x_Float_f <typedef>foo::_Union_Int_x_Float_f
IL_0018: ldfld System.Int32 <typedef>_Union_Int_x_Float_f::x
IL_001d: ret

System.Int32 <Module>::<SyntheticEntrypoint>()
Expand All @@ -25,9 +25,9 @@

Type: <typedef>foo
Fields:
_Union_Int_x_Float_f <typedef>foo::_Union_Int_x_Float_f
<typedef>_Union_Int_x_Float_f <typedef>foo::_Union_Int_x_Float_f

Type: _Union_Int_x_Float_f
Type: <typedef>_Union_Int_x_Float_f
Fields:
System.Int32 _Union_Int_x_Float_f::x
System.Single _Union_Int_x_Float_f::f
System.Int32 <typedef>_Union_Int_x_Float_f::x
System.Single <typedef>_Union_Int_x_Float_f::f
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,40 @@
IL_0002: ldc.i4.2
IL_0003: stfld System.Int32 <typedef>foo::_1
IL_0008: ldloca.s V_0
IL_000a: ldflda _Anon_Int__2a <typedef>foo::_Anon_Int__2a
IL_000a: ldflda <typedef>_Anon_Int__2a <typedef>foo::_Anon_Int__2a
IL_000f: ldc.i4.s 10
IL_0011: stfld System.Int32 _Anon_Int__2a::_2a
IL_0011: stfld System.Int32 <typedef>_Anon_Int__2a::_2a
IL_0016: ldloca.s V_0
IL_0018: ldflda _Union_Long__3u_Int__4u <typedef>foo::_Union_Long__3u_Int__4u
IL_0018: ldflda <typedef>_Union_Long__3u_Int__4u <typedef>foo::_Union_Long__3u_Int__4u
IL_001d: ldc.i4.s 10
IL_001f: conv.i8
IL_0020: stfld System.Int64 _Union_Long__3u_Int__4u::_3u
IL_0020: stfld System.Int64 <typedef>_Union_Long__3u_Int__4u::_3u
IL_0025: ldloca.s V_0
IL_0027: ldflda _Union_Long__5u_Int__6u <typedef>foo::uni
IL_0027: ldflda <typedef>_Union_Long__5u_Int__6u <typedef>foo::uni
IL_002c: ldc.i4.s 10
IL_002e: conv.i8
IL_002f: stfld System.Int64 _Union_Long__5u_Int__6u::_5u
IL_002f: stfld System.Int64 <typedef>_Union_Long__5u_Int__6u::_5u
IL_0034: ldloca.s V_0
IL_0036: ldflda _Anon_Int__7 <typedef>foo::s
IL_0036: ldflda <typedef>_Anon_Int__7 <typedef>foo::s
IL_003b: ldc.i4.s 10
IL_003d: stfld System.Int32 _Anon_Int__7::_7
IL_003d: stfld System.Int32 <typedef>_Anon_Int__7::_7
IL_0042: ldloca.s V_0
IL_0044: ldfld System.Int32 <typedef>foo::_1
IL_0049: ldloca.s V_0
IL_004b: ldflda _Anon_Int__2a <typedef>foo::_Anon_Int__2a
IL_0050: ldfld System.Int32 _Anon_Int__2a::_2a
IL_004b: ldflda <typedef>_Anon_Int__2a <typedef>foo::_Anon_Int__2a
IL_0050: ldfld System.Int32 <typedef>_Anon_Int__2a::_2a
IL_0055: add
IL_0056: ldloca.s V_0
IL_0058: ldflda _Union_Long__3u_Int__4u <typedef>foo::_Union_Long__3u_Int__4u
IL_005d: ldfld System.Int32 _Union_Long__3u_Int__4u::_4u
IL_0058: ldflda <typedef>_Union_Long__3u_Int__4u <typedef>foo::_Union_Long__3u_Int__4u
IL_005d: ldfld System.Int32 <typedef>_Union_Long__3u_Int__4u::_4u
IL_0062: add
IL_0063: ldloca.s V_0
IL_0065: ldflda _Union_Long__5u_Int__6u <typedef>foo::uni
IL_006a: ldfld System.Int32 _Union_Long__5u_Int__6u::_6u
IL_0065: ldflda <typedef>_Union_Long__5u_Int__6u <typedef>foo::uni
IL_006a: ldfld System.Int32 <typedef>_Union_Long__5u_Int__6u::_6u
IL_006f: add
IL_0070: ldloca.s V_0
IL_0072: ldflda _Anon_Int__7 <typedef>foo::s
IL_0077: ldfld System.Int32 _Anon_Int__7::_7
IL_0072: ldflda <typedef>_Anon_Int__7 <typedef>foo::s
IL_0077: ldfld System.Int32 <typedef>_Anon_Int__7::_7
IL_007c: add
IL_007d: ret

Expand All @@ -58,25 +58,25 @@
Type: <typedef>foo
Fields:
System.Int32 <typedef>foo::_1
_Anon_Int__2a <typedef>foo::_Anon_Int__2a
_Union_Long__3u_Int__4u <typedef>foo::_Union_Long__3u_Int__4u
_Union_Long__5u_Int__6u <typedef>foo::uni
_Anon_Int__7 <typedef>foo::s
<typedef>_Anon_Int__2a <typedef>foo::_Anon_Int__2a
<typedef>_Union_Long__3u_Int__4u <typedef>foo::_Union_Long__3u_Int__4u
<typedef>_Union_Long__5u_Int__6u <typedef>foo::uni
<typedef>_Anon_Int__7 <typedef>foo::s

Type: _Anon_Int__2a
Type: <typedef>_Anon_Int__2a
Fields:
System.Int32 _Anon_Int__2a::_2a
System.Int32 <typedef>_Anon_Int__2a::_2a

Type: _Union_Long__3u_Int__4u
Type: <typedef>_Union_Long__3u_Int__4u
Fields:
System.Int64 _Union_Long__3u_Int__4u::_3u
System.Int32 _Union_Long__3u_Int__4u::_4u
System.Int64 <typedef>_Union_Long__3u_Int__4u::_3u
System.Int32 <typedef>_Union_Long__3u_Int__4u::_4u

Type: _Union_Long__5u_Int__6u
Type: <typedef>_Union_Long__5u_Int__6u
Fields:
System.Int64 _Union_Long__5u_Int__6u::_5u
System.Int32 _Union_Long__5u_Int__6u::_6u
System.Int64 <typedef>_Union_Long__5u_Int__6u::_5u
System.Int32 <typedef>_Union_Long__5u_Int__6u::_6u

Type: _Anon_Int__7
Type: <typedef>_Anon_Int__7
Fields:
System.Int32 _Anon_Int__7::_7
System.Int32 <typedef>_Anon_Int__7::_7
Loading

0 comments on commit c7f0a57

Please sign in to comment.