Skip to content

Commit 9b802b3

Browse files
committed
Extract symbol intro from do_enumeration_definition
and create a new wrapper in goto_utils.
1 parent dce84f2 commit 9b802b3

File tree

3 files changed

+26
-10
lines changed

3 files changed

+26
-10
lines changed

gnat2goto/driver/goto_utils.adb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,23 @@ package body GOTO_Utils is
121121
return Ret;
122122
end Symbol_Expr;
123123

124+
procedure New_Enum_Member_Symbol_Entry (
125+
Member_Name : Symbol_Id; Base_Name : Symbol_Id; Enum_Type : Irep;
126+
Value_Expr : Irep; A_Symbol_Table : in out Symbol_Table) is
127+
Member_Symbol : Symbol;
128+
begin
129+
Member_Symbol.Name := Member_Name;
130+
Member_Symbol.PrettyName := Base_Name;
131+
Member_Symbol.BaseName := Base_Name;
132+
Member_Symbol.Mode := Intern ("C");
133+
Member_Symbol.IsStaticLifetime := True;
134+
Member_Symbol.IsStateVar := True;
135+
Member_Symbol.SymType := Enum_Type;
136+
Member_Symbol.Value := Value_Expr;
137+
138+
A_Symbol_Table.Insert (Member_Symbol.Name, Member_Symbol);
139+
end New_Enum_Member_Symbol_Entry;
140+
124141
--------------------------------
125142
-- New_Parameter_Symbol_Entry --
126143
--------------------------------

gnat2goto/driver/goto_utils.ads

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ package GOTO_Utils is
4141
function Symbol_Expr (Sym : Symbol) return Irep
4242
with Post => Kind (Symbol_Expr'Result) = I_Symbol_Expr;
4343

44+
procedure New_Enum_Member_Symbol_Entry (
45+
Member_Name : Symbol_Id; Base_Name : Symbol_Id; Enum_Type : Irep;
46+
Value_Expr : Irep; A_Symbol_Table : in out Symbol_Table);
47+
4448
procedure New_Parameter_Symbol_Entry (Name_Id : Symbol_Id;
4549
BaseName : String;
4650
Symbol_Type : Irep;

gnat2goto/driver/tree_walk.adb

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,6 @@ package body Tree_Walk is
12751275
UI_Image (Enumeration_Rep (Member));
12761276
Val_Name : constant String := Unique_Name (Member);
12771277
Base_Name : constant String := Get_Name_String (Chars (Member));
1278-
Member_Symbol : Symbol;
12791278
Member_Symbol_Init : constant Irep := New_Irep (I_Constant_Expr);
12801279
Typecast_Expr : constant Irep := New_Irep (I_Op_Typecast);
12811280
Member_Size : constant Int := UI_To_Int (Esize (Etype (Member)));
@@ -1284,22 +1283,18 @@ package body Tree_Walk is
12841283
Set_Identifier (Element, Val_Name);
12851284
Set_Basename (Element, Base_Name);
12861285
Append_Member (Enum_Body, Element);
1287-
Member_Symbol.Name := Intern (Val_Name);
1288-
Member_Symbol.PrettyName := Intern (Base_Name);
1289-
Member_Symbol.BaseName := Intern (Base_Name);
1290-
Member_Symbol.Mode := Intern ("C");
1291-
Member_Symbol.IsStaticLifetime := True;
1292-
Member_Symbol.IsStateVar := True;
1293-
Member_Symbol.SymType := Enum_Type_Symbol;
12941286
Set_Type (Member_Symbol_Init,
12951287
Make_Int_Type (Integer (Member_Size)));
12961288
Set_Value (Member_Symbol_Init,
12971289
Convert_Uint_To_Hex (Enumeration_Rep (Member),
12981290
Member_Size));
12991291
Set_Op0 (Typecast_Expr, Member_Symbol_Init);
13001292
Set_Type (Typecast_Expr, Enum_Type_Symbol);
1301-
Member_Symbol.Value := Typecast_Expr;
1302-
Global_Symbol_Table.Insert (Member_Symbol.Name, Member_Symbol);
1293+
New_Enum_Member_Symbol_Entry (Member_Name => Intern (Val_Name),
1294+
Base_Name => Intern (Base_Name),
1295+
Enum_Type => Enum_Type_Symbol,
1296+
Value_Expr => Typecast_Expr,
1297+
A_Symbol_Table => Global_Symbol_Table);
13031298
end;
13041299
Next (Member);
13051300
exit when not Present (Member);

0 commit comments

Comments
 (0)