aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/vhdl-nodes.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-04-03 11:43:42 +0200
committerTristan Gingold <tgingold@free.fr>2020-04-06 20:10:54 +0200
commit77d71c72f10cb8a1779dfddcf2a5053c728300ec (patch)
treea6adcc528dc1845e16cf7b4c992a5384a5cf6f1a /src/vhdl/vhdl-nodes.adb
parent6ccedcb1f76081df973776f0e4e6909e21de8760 (diff)
downloadghdl-77d71c72f10cb8a1779dfddcf2a5053c728300ec.tar.gz
ghdl-77d71c72f10cb8a1779dfddcf2a5053c728300ec.tar.bz2
ghdl-77d71c72f10cb8a1779dfddcf2a5053c728300ec.zip
vhdl: add scalar_size. Size of scalar types is computed during analysis.
Diffstat (limited to 'src/vhdl/vhdl-nodes.adb')
-rw-r--r--src/vhdl/vhdl-nodes.adb35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb
index fed51ba7e..21697e6b1 100644
--- a/src/vhdl/vhdl-nodes.adb
+++ b/src/vhdl/vhdl-nodes.adb
@@ -5676,6 +5676,41 @@ package body Vhdl.Nodes is
Set_State1 (Target, Iir_Staticness'Pos (Static));
end Set_Expr_Staticness;
+ type Scalar_Size_Conv is record
+ Flag6: Boolean;
+ Flag7: Boolean;
+ end record;
+ pragma Pack (Scalar_Size_Conv);
+ pragma Assert (Scalar_Size_Conv'Size = Scalar_Size'Size);
+
+ function Get_Scalar_Size (N : Iir) return Scalar_Size
+ is
+ function To_Scalar_Size is new Ada.Unchecked_Conversion
+ (Scalar_Size_Conv, Scalar_Size);
+ Conv : Scalar_Size_Conv;
+ begin
+ pragma Assert (N /= Null_Iir);
+ pragma Assert (Has_Scalar_Size (Get_Kind (N)),
+ "no field Scalar_Size");
+ Conv.Flag6 := Get_Flag6 (N);
+ Conv.Flag7 := Get_Flag7 (N);
+ return To_Scalar_Size (Conv);
+ end Get_Scalar_Size;
+
+ procedure Set_Scalar_Size (N : Iir; Sz : Scalar_Size)
+ is
+ function To_Scalar_Size_Conv is new Ada.Unchecked_Conversion
+ (Scalar_Size, Scalar_Size_Conv);
+ Conv : Scalar_Size_Conv;
+ begin
+ pragma Assert (N /= Null_Iir);
+ pragma Assert (Has_Scalar_Size (Get_Kind (N)),
+ "no field Scalar_Size");
+ Conv := To_Scalar_Size_Conv (Sz);
+ Set_Flag6 (N, Conv.Flag6);
+ Set_Flag7 (N, Conv.Flag7);
+ end Set_Scalar_Size;
+
function Get_Error_Origin (Target : Iir) return Iir is
begin
pragma Assert (Target /= Null_Iir);