aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/translate/trans-rtis.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-07-24 18:31:11 +0200
committerTristan Gingold <tgingold@free.fr>2020-07-25 11:28:49 +0200
commit04cd83fb46bee1e7a7b37be95bee73449af9c8b8 (patch)
tree3fe35d0bc6d4b1be8d81ad44df685057c221d2dc /src/vhdl/translate/trans-rtis.adb
parent4033dd795927a4953879bdc92d395788893a5468 (diff)
downloadghdl-04cd83fb46bee1e7a7b37be95bee73449af9c8b8.tar.gz
ghdl-04cd83fb46bee1e7a7b37be95bee73449af9c8b8.tar.bz2
ghdl-04cd83fb46bee1e7a7b37be95bee73449af9c8b8.zip
ortho: add unbounded records, rework array subtypes.
Diffstat (limited to 'src/vhdl/translate/trans-rtis.adb')
-rw-r--r--src/vhdl/translate/trans-rtis.adb36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/vhdl/translate/trans-rtis.adb b/src/vhdl/translate/trans-rtis.adb
index 5b55c69c6..d52a025db 100644
--- a/src/vhdl/translate/trans-rtis.adb
+++ b/src/vhdl/translate/trans-rtis.adb
@@ -877,16 +877,19 @@ package body Trans.Rtis is
function Generate_Rti_Array (Id : O_Ident) return O_Dnode
is
- List : O_Array_Aggr_List;
- L : Rti_Array_List_Acc;
- Nbr : Integer;
- Val : O_Cnode;
- Res : O_Dnode;
+ List : O_Array_Aggr_List;
+ L : Rti_Array_List_Acc;
+ Nbr : Integer;
+ Val : O_Cnode;
+ Res : O_Dnode;
+ Stype : O_Tnode;
begin
- New_Const_Decl (Res, Id, O_Storage_Private, Ghdl_Rti_Array);
+ Stype := New_Array_Subtype
+ (Ghdl_Rti_Array, Ghdl_Rti_Access,
+ New_Index_Lit (Unsigned_64 (Cur_Block.Nbr + 1)));
+ New_Const_Decl (Res, Id, O_Storage_Private, Stype);
Start_Init_Value (Res);
- Start_Array_Aggr
- (List, Ghdl_Rti_Array, Unsigned_32 (Cur_Block.Nbr + 1));
+ Start_Array_Aggr (List, Stype, Unsigned_32 (Cur_Block.Nbr + 1));
Nbr := Cur_Block.Nbr;
-- First chunk.
@@ -1094,6 +1097,7 @@ package body Trans.Rtis is
type Dnode_Array is array (Natural range <>) of O_Dnode;
Name_Lits : Dnode_Array (0 .. Nbr_Lit - 1);
Mark : Id_Mark_Type;
+ Name_Arr_St : O_Tnode;
Name_Arr : O_Dnode;
Arr_Aggr : O_Array_Aggr_List;
@@ -1110,11 +1114,14 @@ package body Trans.Rtis is
end loop;
-- Generate array of names.
+ Name_Arr_St := New_Array_Subtype
+ (Char_Ptr_Array_Type,
+ Char_Ptr_Type,
+ New_Index_Lit (Unsigned_64 (Nbr_Lit)));
New_Const_Decl (Name_Arr, Create_Identifier ("RTINAMES"),
- O_Storage_Private, Char_Ptr_Array_Type);
+ O_Storage_Private, Name_Arr_St);
Start_Init_Value (Name_Arr);
- Start_Array_Aggr
- (Arr_Aggr, Char_Ptr_Array_Type, Unsigned_32 (Nbr_Lit));
+ Start_Array_Aggr (Arr_Aggr, Name_Arr_St, Unsigned_32 (Nbr_Lit));
for I in Name_Lits'Range loop
New_Array_Aggr_El (Arr_Aggr, New_Name_Address (Name_Lits (I)));
end loop;
@@ -1405,6 +1412,7 @@ package body Trans.Rtis is
Index : Iir;
Tmp : O_Dnode;
pragma Unreferenced (Tmp);
+ Stype : O_Tnode;
Arr_Aggr : O_Array_Aggr_List;
Val : O_Cnode;
Mark : Id_Mark_Type;
@@ -1420,11 +1428,13 @@ package body Trans.Rtis is
end loop;
-- Generate array of index.
+ Stype := New_Array_Subtype (Ghdl_Rti_Array, Ghdl_Rti_Access,
+ New_Index_Lit (Unsigned_64 (Nbr_Indexes)));
New_Const_Decl (Res, Create_Identifier ("RTIINDEXES"),
- Global_Storage, Ghdl_Rti_Array);
+ Global_Storage, Stype);
Start_Init_Value (Res);
- Start_Array_Aggr (Arr_Aggr, Ghdl_Rti_Array, Unsigned_32 (Nbr_Indexes));
+ Start_Array_Aggr (Arr_Aggr, Stype, Unsigned_32 (Nbr_Indexes));
for I in 1 .. Nbr_Indexes loop
Index := Get_Index_Type (List, I - 1);
New_Array_Aggr_El