aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/iirs.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/vhdl/iirs.adb')
-rw-r--r--src/vhdl/iirs.adb64
1 files changed, 54 insertions, 10 deletions
diff --git a/src/vhdl/iirs.adb b/src/vhdl/iirs.adb
index 4f19470e6..53779d7a9 100644
--- a/src/vhdl/iirs.adb
+++ b/src/vhdl/iirs.adb
@@ -1032,20 +1032,42 @@ package body Iirs is
Set_Field4 (Lit, Int32_To_Iir (Len));
end Set_String_Length;
- function Get_Bit_String_Base (Lit : Iir) return Number_Base_Type is
+ type Number_Base_Type_Conv is record
+ Flag12: Boolean;
+ Flag13: Boolean;
+ Flag14: Boolean;
+ end record;
+ pragma Pack (Number_Base_Type_Conv);
+ pragma Assert (Number_Base_Type_Conv'Size = Number_Base_Type'Size);
+
+ function Get_Bit_String_Base (Lit : Iir) return Number_Base_Type
+ is
+ function To_Number_Base_Type is new Ada.Unchecked_Conversion
+ (Number_Base_Type_Conv, Number_Base_Type);
+ Conv : Number_Base_Type_Conv;
begin
pragma Assert (Lit /= Null_Iir);
pragma Assert (Has_Bit_String_Base (Get_Kind (Lit)),
"no field Bit_String_Base");
- return Number_Base_Type'Val (Get_Odigit1 (Lit));
+ Conv.Flag12 := Get_Flag12 (Lit);
+ Conv.Flag13 := Get_Flag13 (Lit);
+ Conv.Flag14 := Get_Flag14 (Lit);
+ return To_Number_Base_Type (Conv);
end Get_Bit_String_Base;
- procedure Set_Bit_String_Base (Lit : Iir; Base : Number_Base_Type) is
+ procedure Set_Bit_String_Base (Lit : Iir; Base : Number_Base_Type)
+ is
+ function To_Number_Base_Type_Conv is new Ada.Unchecked_Conversion
+ (Number_Base_Type, Number_Base_Type_Conv);
+ Conv : Number_Base_Type_Conv;
begin
pragma Assert (Lit /= Null_Iir);
pragma Assert (Has_Bit_String_Base (Get_Kind (Lit)),
"no field Bit_String_Base");
- Set_Odigit1 (Lit, Number_Base_Type'Pos (Base));
+ Conv := To_Number_Base_Type_Conv (Base);
+ Set_Flag12 (Lit, Conv.Flag12);
+ Set_Flag13 (Lit, Conv.Flag13);
+ Set_Flag14 (Lit, Conv.Flag14);
end Set_Bit_String_Base;
function Get_Has_Signed (Lit : Iir) return Boolean is
@@ -1390,7 +1412,7 @@ package body Iirs is
pragma Assert (Target /= Null_Iir);
pragma Assert (Has_Open_Flag (Get_Kind (Target)),
"no field Open_Flag");
- return Get_Flag12 (Target);
+ return Get_Flag15 (Target);
end Get_Open_Flag;
procedure Set_Open_Flag (Target : Iir; Flag : Boolean) is
@@ -1398,7 +1420,7 @@ package body Iirs is
pragma Assert (Target /= Null_Iir);
pragma Assert (Has_Open_Flag (Get_Kind (Target)),
"no field Open_Flag");
- Set_Flag12 (Target, Flag);
+ Set_Flag15 (Target, Flag);
end Set_Open_Flag;
function Get_After_Drivers_Flag (Target : Iir) return Boolean is
@@ -2011,20 +2033,42 @@ package body Iirs is
Set_Field1 (Target, Nature);
end Set_Nature;
- function Get_Mode (Target : Iir) return Iir_Mode is
+ type Iir_Mode_Conv is record
+ Flag12: Boolean;
+ Flag13: Boolean;
+ Flag14: Boolean;
+ end record;
+ pragma Pack (Iir_Mode_Conv);
+ pragma Assert (Iir_Mode_Conv'Size = Iir_Mode'Size);
+
+ function Get_Mode (Target : Iir) return Iir_Mode
+ is
+ function To_Iir_Mode is new Ada.Unchecked_Conversion
+ (Iir_Mode_Conv, Iir_Mode);
+ Conv : Iir_Mode_Conv;
begin
pragma Assert (Target /= Null_Iir);
pragma Assert (Has_Mode (Get_Kind (Target)),
"no field Mode");
- return Iir_Mode'Val (Get_Odigit1 (Target));
+ Conv.Flag12 := Get_Flag12 (Target);
+ Conv.Flag13 := Get_Flag13 (Target);
+ Conv.Flag14 := Get_Flag14 (Target);
+ return To_Iir_Mode (Conv);
end Get_Mode;
- procedure Set_Mode (Target : Iir; Mode : Iir_Mode) is
+ procedure Set_Mode (Target : Iir; Mode : Iir_Mode)
+ is
+ function To_Iir_Mode_Conv is new Ada.Unchecked_Conversion
+ (Iir_Mode, Iir_Mode_Conv);
+ Conv : Iir_Mode_Conv;
begin
pragma Assert (Target /= Null_Iir);
pragma Assert (Has_Mode (Get_Kind (Target)),
"no field Mode");
- Set_Odigit1 (Target, Iir_Mode'Pos (Mode));
+ Conv := To_Iir_Mode_Conv (Mode);
+ Set_Flag12 (Target, Conv.Flag12);
+ Set_Flag13 (Target, Conv.Flag13);
+ Set_Flag14 (Target, Conv.Flag14);
end Set_Mode;
function Get_Guarded_Signal_Flag (Target : Iir) return Boolean is