diff options
Diffstat (limited to 'src/grt/grt-rtis_addr.adb')
-rw-r--r-- | src/grt/grt-rtis_addr.adb | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/grt/grt-rtis_addr.adb b/src/grt/grt-rtis_addr.adb index 4881a5abd..e02aa8e89 100644 --- a/src/grt/grt-rtis_addr.adb +++ b/src/grt/grt-rtis_addr.adb @@ -283,6 +283,26 @@ package body Grt.Rtis_Addr is return Layout + Ghdl_Index_Type'(Ghdl_Indexes_Type'Size / 8); end Array_Layout_To_Bounds; + function Array_Layout_To_Element + (Layout : Address; El_Rti : Ghdl_Rti_Access) return Address is + begin + case El_Rti.Kind is + when Ghdl_Rtik_Type_Array + | Ghdl_Rtik_Subtype_Array + | Ghdl_Rtik_Subtype_Unbounded_Array => + -- Trim size to pass the bounds + return Array_Layout_To_Bounds (Layout); + when Ghdl_Rtik_Type_Unbounded_Record + | Ghdl_Rtik_Subtype_Unbounded_Record => + -- Keep full layout. + return Layout; + when Ghdl_Rtik_Type_Record => + return Null_Address; + when others => + return Null_Address; + end case; + end Array_Layout_To_Element; + procedure Bound_To_Range (Bounds_Addr : Address; Def : Ghdl_Rtin_Type_Array_Acc; Res : out Ghdl_Range_Array) |