diff options
author | Tristan Gingold <tgingold@free.fr> | 2020-04-03 11:43:42 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2020-04-06 20:10:54 +0200 |
commit | 77d71c72f10cb8a1779dfddcf2a5053c728300ec (patch) | |
tree | a6adcc528dc1845e16cf7b4c992a5384a5cf6f1a /src/vhdl/vhdl-nodes.adb | |
parent | 6ccedcb1f76081df973776f0e4e6909e21de8760 (diff) | |
download | ghdl-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.adb | 35 |
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); |