aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2017-12-21 18:53:46 +0100
committerTristan Gingold <tgingold@free.fr>2017-12-21 18:53:46 +0100
commit9c79e3faf7ba29c9767fed41f0c7840bdedea3e9 (patch)
tree6b086b639fffcb2de952646edec723b63e8f7eed /src
parent6ebd66f4472f5e55c41ccf35bb13989b19006ed8 (diff)
downloadghdl-9c79e3faf7ba29c9767fed41f0c7840bdedea3e9.tar.gz
ghdl-9c79e3faf7ba29c9767fed41f0c7840bdedea3e9.tar.bz2
ghdl-9c79e3faf7ba29c9767fed41f0c7840bdedea3e9.zip
sem_inst: fix relocation of instances in instances.
Diffstat (limited to 'src')
-rw-r--r--src/ghdldrv/ghdlxml.adb2
-rw-r--r--src/types.ads2
-rw-r--r--src/vhdl/disp_tree.adb3
-rw-r--r--src/vhdl/iirs.adb22
-rw-r--r--src/vhdl/iirs.adb.in5
-rw-r--r--src/vhdl/iirs.ads10
-rw-r--r--src/vhdl/nodes_meta.adb414
-rw-r--r--src/vhdl/nodes_meta.ads8
-rw-r--r--src/vhdl/sem_inst.adb48
-rw-r--r--src/vhdl/translate/trans-chap2.adb1
-rw-r--r--src/vhdl/translate/trans-chap9.adb1
11 files changed, 318 insertions, 198 deletions
diff --git a/src/ghdldrv/ghdlxml.adb b/src/ghdldrv/ghdlxml.adb
index 9913aaf76..995706351 100644
--- a/src/ghdldrv/ghdlxml.adb
+++ b/src/ghdldrv/ghdlxml.adb
@@ -409,6 +409,8 @@ package body Ghdlxml is
Put_Field (F, Image_Token_Type (Get_Token_Type (N, F)));
when Type_Name_Id =>
Put_Field (F, XML_Image (Get_Name_Id (N, F)));
+ when Type_Source_File_Entry =>
+ null;
end case;
end loop;
diff --git a/src/types.ads b/src/types.ads
index c66641c73..8f4ca3a60 100644
--- a/src/types.ads
+++ b/src/types.ads
@@ -85,7 +85,7 @@ package Types is
-- Index type is the source file table.
-- This table is defined in the files_map package.
- type Source_File_Entry is new Nat32;
+ type Source_File_Entry is new Uns32;
No_Source_File_Entry: constant Source_File_Entry := 0;
-- Index into a file buffer.
diff --git a/src/vhdl/disp_tree.adb b/src/vhdl/disp_tree.adb
index 9abc1dc33..f820fcdd7 100644
--- a/src/vhdl/disp_tree.adb
+++ b/src/vhdl/disp_tree.adb
@@ -507,6 +507,9 @@ package body Disp_Tree is
(Get_PSL_Node (N, F), Sub_Indent, Depth - 1);
when Type_Source_Ptr =>
Put_Line (Source_Ptr'Image (Get_Source_Ptr (N, F)));
+ when Type_Source_File_Entry =>
+ Put_Line (Source_File_Entry'Image
+ (Get_Source_File_Entry (N, F)));
when Type_Date_Type =>
Put_Line (Date_Type'Image (Get_Date_Type (N, F)));
when Type_Number_Base_Type =>
diff --git a/src/vhdl/iirs.adb b/src/vhdl/iirs.adb
index 59eae26e3..ab42faadc 100644
--- a/src/vhdl/iirs.adb
+++ b/src/vhdl/iirs.adb
@@ -208,6 +208,11 @@ package body Iirs is
return Iir (P);
end Source_Ptr_To_Iir;
+ function Iir_To_Source_File_Entry is new Ada.Unchecked_Conversion
+ (Source => Iir, Target => Source_File_Entry);
+ function Source_File_Entry_To_Iir is new Ada.Unchecked_Conversion
+ (Source => Source_File_Entry, Target => Iir);
+
function Boolean_To_Iir_Delay_Mechanism is new Ada.Unchecked_Conversion
(Source => Boolean, Target => Iir_Delay_Mechanism);
function Iir_Delay_Mechanism_To_Boolean is new Ada.Unchecked_Conversion
@@ -4123,6 +4128,23 @@ package body Iirs is
Set_Field9 (Inst, Pkg);
end Set_Uninstantiated_Package_Decl;
+ function Get_Instance_Source_File (Inst : Iir) return Source_File_Entry is
+ begin
+ pragma Assert (Inst /= Null_Iir);
+ pragma Assert (Has_Instance_Source_File (Get_Kind (Inst)),
+ "no field Instance_Source_File");
+ return Iir_To_Source_File_Entry (Get_Field10 (Inst));
+ end Get_Instance_Source_File;
+
+ procedure Set_Instance_Source_File (Inst : Iir; File : Source_File_Entry)
+ is
+ begin
+ pragma Assert (Inst /= Null_Iir);
+ pragma Assert (Has_Instance_Source_File (Get_Kind (Inst)),
+ "no field Instance_Source_File");
+ Set_Field10 (Inst, Source_File_Entry_To_Iir (File));
+ end Set_Instance_Source_File;
+
function Get_Generate_Block_Configuration (Target : Iir) return Iir is
begin
pragma Assert (Target /= Null_Iir);
diff --git a/src/vhdl/iirs.adb.in b/src/vhdl/iirs.adb.in
index d25c48e29..8243f145f 100644
--- a/src/vhdl/iirs.adb.in
+++ b/src/vhdl/iirs.adb.in
@@ -208,6 +208,11 @@ package body Iirs is
return Iir (P);
end Source_Ptr_To_Iir;
+ function Iir_To_Source_File_Entry is new Ada.Unchecked_Conversion
+ (Source => Iir, Target => Source_File_Entry);
+ function Source_File_Entry_To_Iir is new Ada.Unchecked_Conversion
+ (Source => Source_File_Entry, Target => Iir);
+
function Boolean_To_Iir_Delay_Mechanism is new Ada.Unchecked_Conversion
(Source => Boolean, Target => Iir_Delay_Mechanism);
function Iir_Delay_Mechanism_To_Boolean is new Ada.Unchecked_Conversion
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index bca85d281..8aa7f442f 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -961,6 +961,8 @@ package Iirs is
-- The uninstantiated package declaration.
-- Get/Set_Uninstantiated_Package_Decl (Field9)
--
+ -- Get/Set_Instance_Source_File (Field10)
+ --
-- Get/Set_Generic_Chain (Field6)
--
-- Get/Set_Generic_Map_Aspect_Chain (Field8)
@@ -1314,6 +1316,8 @@ package Iirs is
--
-- Get/Set_Uninstantiated_Package_Decl (Field9)
--
+ -- Get/Set_Instance_Source_File (Field10)
+ --
-- Get/Set_Generic_Chain (Field6)
--
-- Get/Set_Generic_Map_Aspect_Chain (Field8)
@@ -6926,6 +6930,12 @@ package Iirs is
function Get_Uninstantiated_Package_Decl (Inst : Iir) return Iir;
procedure Set_Uninstantiated_Package_Decl (Inst : Iir; Pkg : Iir);
+ -- The created pseudo-file for relocating the instantiated nodes
+ -- (generics and declarations).
+ -- Field: Field10 (uc)
+ function Get_Instance_Source_File (Inst : Iir) return Source_File_Entry;
+ procedure Set_Instance_Source_File (Inst : Iir; File : Source_File_Entry);
+
-- Get/Set the block_configuration (there may be several
-- block_configuration through the use of prev_configuration singly linked
-- list) that apply to this generate statement.
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb
index cc6e78910..836614625 100644
--- a/src/vhdl/nodes_meta.adb
+++ b/src/vhdl/nodes_meta.adb
@@ -238,6 +238,7 @@ package body Nodes_Meta is
Field_Block_Header => Type_Iir,
Field_Uninstantiated_Package_Name => Type_Iir,
Field_Uninstantiated_Package_Decl => Type_Iir,
+ Field_Instance_Source_File => Type_Source_File_Entry,
Field_Generate_Block_Configuration => Type_Iir,
Field_Generate_Statement_Body => Type_Iir,
Field_Alternative_Label => Type_Name_Id,
@@ -791,6 +792,8 @@ package body Nodes_Meta is
return "uninstantiated_package_name";
when Field_Uninstantiated_Package_Decl =>
return "uninstantiated_package_decl";
+ when Field_Instance_Source_File =>
+ return "instance_source_file";
when Field_Generate_Block_Configuration =>
return "generate_block_configuration";
when Field_Generate_Statement_Body =>
@@ -1987,6 +1990,8 @@ package body Nodes_Meta is
return Attr_None;
when Field_Uninstantiated_Package_Decl =>
return Attr_Ref;
+ when Field_Instance_Source_File =>
+ return Attr_None;
when Field_Generate_Block_Configuration =>
return Attr_Forward_Ref;
when Field_Generate_Statement_Body =>
@@ -2815,6 +2820,7 @@ package body Nodes_Meta is
Field_Package_Body,
Field_Package_Origin,
-- Iir_Kind_Package_Instantiation_Declaration
+ Field_Instance_Source_File,
Field_Identifier,
Field_Visible_Flag,
Field_End_Has_Reserved_Id,
@@ -3260,6 +3266,7 @@ package body Nodes_Meta is
Field_Chain,
Field_Interface_Type_Subprograms,
-- Iir_Kind_Interface_Package_Declaration
+ Field_Instance_Source_File,
Field_Identifier,
Field_Visible_Flag,
Field_Is_Within_Flag,
@@ -4461,192 +4468,192 @@ package body Nodes_Meta is
Iir_Kind_Configuration_Declaration => 509,
Iir_Kind_Context_Declaration => 515,
Iir_Kind_Package_Declaration => 529,
- Iir_Kind_Package_Instantiation_Declaration => 542,
- Iir_Kind_Package_Body => 550,
- Iir_Kind_Architecture_Body => 562,
- Iir_Kind_Package_Header => 564,
- Iir_Kind_Unit_Declaration => 572,
- Iir_Kind_Library_Declaration => 579,
- Iir_Kind_Component_Declaration => 589,
- Iir_Kind_Attribute_Declaration => 596,
- Iir_Kind_Group_Template_Declaration => 602,
- Iir_Kind_Group_Declaration => 609,
- Iir_Kind_Element_Declaration => 617,
- Iir_Kind_Non_Object_Alias_Declaration => 625,
- Iir_Kind_Psl_Declaration => 633,
- Iir_Kind_Psl_Endpoint_Declaration => 647,
- Iir_Kind_Terminal_Declaration => 653,
- Iir_Kind_Free_Quantity_Declaration => 662,
- Iir_Kind_Across_Quantity_Declaration => 674,
- Iir_Kind_Through_Quantity_Declaration => 686,
- Iir_Kind_Enumeration_Literal => 697,
- Iir_Kind_Function_Declaration => 722,
- Iir_Kind_Procedure_Declaration => 746,
- Iir_Kind_Function_Body => 756,
- Iir_Kind_Procedure_Body => 767,
- Iir_Kind_Object_Alias_Declaration => 778,
- Iir_Kind_File_Declaration => 792,
- Iir_Kind_Guard_Signal_Declaration => 805,
- Iir_Kind_Signal_Declaration => 822,
- Iir_Kind_Variable_Declaration => 835,
- Iir_Kind_Constant_Declaration => 849,
- Iir_Kind_Iterator_Declaration => 860,
- Iir_Kind_Interface_Constant_Declaration => 876,
- Iir_Kind_Interface_Variable_Declaration => 892,
- Iir_Kind_Interface_Signal_Declaration => 913,
- Iir_Kind_Interface_File_Declaration => 929,
- Iir_Kind_Interface_Type_Declaration => 939,
- Iir_Kind_Interface_Package_Declaration => 950,
- Iir_Kind_Interface_Function_Declaration => 967,
- Iir_Kind_Interface_Procedure_Declaration => 980,
- Iir_Kind_Signal_Attribute_Declaration => 983,
- Iir_Kind_Identity_Operator => 987,
- Iir_Kind_Negation_Operator => 991,
- Iir_Kind_Absolute_Operator => 995,
- Iir_Kind_Not_Operator => 999,
- Iir_Kind_Condition_Operator => 1003,
- Iir_Kind_Reduction_And_Operator => 1007,
- Iir_Kind_Reduction_Or_Operator => 1011,
- Iir_Kind_Reduction_Nand_Operator => 1015,
- Iir_Kind_Reduction_Nor_Operator => 1019,
- Iir_Kind_Reduction_Xor_Operator => 1023,
- Iir_Kind_Reduction_Xnor_Operator => 1027,
- Iir_Kind_And_Operator => 1032,
- Iir_Kind_Or_Operator => 1037,
- Iir_Kind_Nand_Operator => 1042,
- Iir_Kind_Nor_Operator => 1047,
- Iir_Kind_Xor_Operator => 1052,
- Iir_Kind_Xnor_Operator => 1057,
- Iir_Kind_Equality_Operator => 1062,
- Iir_Kind_Inequality_Operator => 1067,
- Iir_Kind_Less_Than_Operator => 1072,
- Iir_Kind_Less_Than_Or_Equal_Operator => 1077,
- Iir_Kind_Greater_Than_Operator => 1082,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1087,
- Iir_Kind_Match_Equality_Operator => 1092,
- Iir_Kind_Match_Inequality_Operator => 1097,
- Iir_Kind_Match_Less_Than_Operator => 1102,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1107,
- Iir_Kind_Match_Greater_Than_Operator => 1112,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1117,
- Iir_Kind_Sll_Operator => 1122,
- Iir_Kind_Sla_Operator => 1127,
- Iir_Kind_Srl_Operator => 1132,
- Iir_Kind_Sra_Operator => 1137,
- Iir_Kind_Rol_Operator => 1142,
- Iir_Kind_Ror_Operator => 1147,
- Iir_Kind_Addition_Operator => 1152,
- Iir_Kind_Substraction_Operator => 1157,
- Iir_Kind_Concatenation_Operator => 1162,
- Iir_Kind_Multiplication_Operator => 1167,
- Iir_Kind_Division_Operator => 1172,
- Iir_Kind_Modulus_Operator => 1177,
- Iir_Kind_Remainder_Operator => 1182,
- Iir_Kind_Exponentiation_Operator => 1187,
- Iir_Kind_Function_Call => 1195,
- Iir_Kind_Aggregate => 1202,
- Iir_Kind_Parenthesis_Expression => 1205,
- Iir_Kind_Qualified_Expression => 1209,
- Iir_Kind_Type_Conversion => 1214,
- Iir_Kind_Allocator_By_Expression => 1218,
- Iir_Kind_Allocator_By_Subtype => 1223,
- Iir_Kind_Selected_Element => 1230,
- Iir_Kind_Dereference => 1235,
- Iir_Kind_Implicit_Dereference => 1240,
- Iir_Kind_Slice_Name => 1247,
- Iir_Kind_Indexed_Name => 1253,
- Iir_Kind_Psl_Expression => 1255,
- Iir_Kind_Sensitized_Process_Statement => 1276,
- Iir_Kind_Process_Statement => 1296,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1308,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1320,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1333,
- Iir_Kind_Concurrent_Assertion_Statement => 1341,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1348,
- Iir_Kind_Psl_Assert_Statement => 1361,
- Iir_Kind_Psl_Cover_Statement => 1374,
- Iir_Kind_Block_Statement => 1387,
- Iir_Kind_If_Generate_Statement => 1398,
- Iir_Kind_Case_Generate_Statement => 1407,
- Iir_Kind_For_Generate_Statement => 1416,
- Iir_Kind_Component_Instantiation_Statement => 1427,
- Iir_Kind_Psl_Default_Clock => 1431,
- Iir_Kind_Simple_Simultaneous_Statement => 1438,
- Iir_Kind_Generate_Statement_Body => 1449,
- Iir_Kind_If_Generate_Else_Clause => 1455,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1465,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1475,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1486,
- Iir_Kind_Null_Statement => 1490,
- Iir_Kind_Assertion_Statement => 1497,
- Iir_Kind_Report_Statement => 1503,
- Iir_Kind_Wait_Statement => 1511,
- Iir_Kind_Variable_Assignment_Statement => 1518,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1525,
- Iir_Kind_Return_Statement => 1531,
- Iir_Kind_For_Loop_Statement => 1540,
- Iir_Kind_While_Loop_Statement => 1549,
- Iir_Kind_Next_Statement => 1556,
- Iir_Kind_Exit_Statement => 1563,
- Iir_Kind_Case_Statement => 1571,
- Iir_Kind_Procedure_Call_Statement => 1577,
- Iir_Kind_If_Statement => 1587,
- Iir_Kind_Elsif => 1593,
- Iir_Kind_Character_Literal => 1601,
- Iir_Kind_Simple_Name => 1609,
- Iir_Kind_Selected_Name => 1618,
- Iir_Kind_Operator_Symbol => 1624,
- Iir_Kind_Reference_Name => 1627,
- Iir_Kind_Selected_By_All_Name => 1633,
- Iir_Kind_Parenthesis_Name => 1638,
- Iir_Kind_External_Constant_Name => 1646,
- Iir_Kind_External_Signal_Name => 1654,
- Iir_Kind_External_Variable_Name => 1662,
- Iir_Kind_Package_Pathname => 1666,
- Iir_Kind_Absolute_Pathname => 1667,
- Iir_Kind_Relative_Pathname => 1668,
- Iir_Kind_Pathname_Element => 1673,
- Iir_Kind_Base_Attribute => 1675,
- Iir_Kind_Subtype_Attribute => 1680,
- Iir_Kind_Element_Attribute => 1685,
- Iir_Kind_Left_Type_Attribute => 1690,
- Iir_Kind_Right_Type_Attribute => 1695,
- Iir_Kind_High_Type_Attribute => 1700,
- Iir_Kind_Low_Type_Attribute => 1705,
- Iir_Kind_Ascending_Type_Attribute => 1710,
- Iir_Kind_Image_Attribute => 1716,
- Iir_Kind_Value_Attribute => 1722,
- Iir_Kind_Pos_Attribute => 1728,
- Iir_Kind_Val_Attribute => 1734,
- Iir_Kind_Succ_Attribute => 1740,
- Iir_Kind_Pred_Attribute => 1746,
- Iir_Kind_Leftof_Attribute => 1752,
- Iir_Kind_Rightof_Attribute => 1758,
- Iir_Kind_Delayed_Attribute => 1767,
- Iir_Kind_Stable_Attribute => 1776,
- Iir_Kind_Quiet_Attribute => 1785,
- Iir_Kind_Transaction_Attribute => 1794,
- Iir_Kind_Event_Attribute => 1798,
- Iir_Kind_Active_Attribute => 1802,
- Iir_Kind_Last_Event_Attribute => 1806,
- Iir_Kind_Last_Active_Attribute => 1810,
- Iir_Kind_Last_Value_Attribute => 1814,
- Iir_Kind_Driving_Attribute => 1818,
- Iir_Kind_Driving_Value_Attribute => 1822,
- Iir_Kind_Behavior_Attribute => 1822,
- Iir_Kind_Structure_Attribute => 1822,
- Iir_Kind_Simple_Name_Attribute => 1829,
- Iir_Kind_Instance_Name_Attribute => 1834,
- Iir_Kind_Path_Name_Attribute => 1839,
- Iir_Kind_Left_Array_Attribute => 1846,
- Iir_Kind_Right_Array_Attribute => 1853,
- Iir_Kind_High_Array_Attribute => 1860,
- Iir_Kind_Low_Array_Attribute => 1867,
- Iir_Kind_Length_Array_Attribute => 1874,
- Iir_Kind_Ascending_Array_Attribute => 1881,
- Iir_Kind_Range_Array_Attribute => 1888,
- Iir_Kind_Reverse_Range_Array_Attribute => 1895,
- Iir_Kind_Attribute_Name => 1904
+ Iir_Kind_Package_Instantiation_Declaration => 543,
+ Iir_Kind_Package_Body => 551,
+ Iir_Kind_Architecture_Body => 563,
+ Iir_Kind_Package_Header => 565,
+ Iir_Kind_Unit_Declaration => 573,
+ Iir_Kind_Library_Declaration => 580,
+ Iir_Kind_Component_Declaration => 590,
+ Iir_Kind_Attribute_Declaration => 597,
+ Iir_Kind_Group_Template_Declaration => 603,
+ Iir_Kind_Group_Declaration => 610,
+ Iir_Kind_Element_Declaration => 618,
+ Iir_Kind_Non_Object_Alias_Declaration => 626,
+ Iir_Kind_Psl_Declaration => 634,
+ Iir_Kind_Psl_Endpoint_Declaration => 648,
+ Iir_Kind_Terminal_Declaration => 654,
+ Iir_Kind_Free_Quantity_Declaration => 663,
+ Iir_Kind_Across_Quantity_Declaration => 675,
+ Iir_Kind_Through_Quantity_Declaration => 687,
+ Iir_Kind_Enumeration_Literal => 698,
+ Iir_Kind_Function_Declaration => 723,
+ Iir_Kind_Procedure_Declaration => 747,
+ Iir_Kind_Function_Body => 757,
+ Iir_Kind_Procedure_Body => 768,
+ Iir_Kind_Object_Alias_Declaration => 779,
+ Iir_Kind_File_Declaration => 793,
+ Iir_Kind_Guard_Signal_Declaration => 806,
+ Iir_Kind_Signal_Declaration => 823,
+ Iir_Kind_Variable_Declaration => 836,
+ Iir_Kind_Constant_Declaration => 850,
+ Iir_Kind_Iterator_Declaration => 861,
+ Iir_Kind_Interface_Constant_Declaration => 877,
+ Iir_Kind_Interface_Variable_Declaration => 893,
+ Iir_Kind_Interface_Signal_Declaration => 914,
+ Iir_Kind_Interface_File_Declaration => 930,
+ Iir_Kind_Interface_Type_Declaration => 940,
+ Iir_Kind_Interface_Package_Declaration => 952,
+ Iir_Kind_Interface_Function_Declaration => 969,
+ Iir_Kind_Interface_Procedure_Declaration => 982,
+ Iir_Kind_Signal_Attribute_Declaration => 985,
+ Iir_Kind_Identity_Operator => 989,
+ Iir_Kind_Negation_Operator => 993,
+ Iir_Kind_Absolute_Operator => 997,
+ Iir_Kind_Not_Operator => 1001,
+ Iir_Kind_Condition_Operator => 1005,
+ Iir_Kind_Reduction_And_Operator => 1009,
+ Iir_Kind_Reduction_Or_Operator => 1013,
+ Iir_Kind_Reduction_Nand_Operator => 1017,
+ Iir_Kind_Reduction_Nor_Operator => 1021,
+ Iir_Kind_Reduction_Xor_Operator => 1025,
+ Iir_Kind_Reduction_Xnor_Operator => 1029,
+ Iir_Kind_And_Operator => 1034,
+ Iir_Kind_Or_Operator => 1039,
+ Iir_Kind_Nand_Operator => 1044,
+ Iir_Kind_Nor_Operator => 1049,
+ Iir_Kind_Xor_Operator => 1054,
+ Iir_Kind_Xnor_Operator => 1059,
+ Iir_Kind_Equality_Operator => 1064,
+ Iir_Kind_Inequality_Operator => 1069,
+ Iir_Kind_Less_Than_Operator => 1074,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1079,
+ Iir_Kind_Greater_Than_Operator => 1084,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1089,
+ Iir_Kind_Match_Equality_Operator => 1094,
+ Iir_Kind_Match_Inequality_Operator => 1099,
+ Iir_Kind_Match_Less_Than_Operator => 1104,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1109,
+ Iir_Kind_Match_Greater_Than_Operator => 1114,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1119,
+ Iir_Kind_Sll_Operator => 1124,
+ Iir_Kind_Sla_Operator => 1129,
+ Iir_Kind_Srl_Operator => 1134,
+ Iir_Kind_Sra_Operator => 1139,
+ Iir_Kind_Rol_Operator => 1144,
+ Iir_Kind_Ror_Operator => 1149,
+ Iir_Kind_Addition_Operator => 1154,
+ Iir_Kind_Substraction_Operator => 1159,
+ Iir_Kind_Concatenation_Operator => 1164,
+ Iir_Kind_Multiplication_Operator => 1169,
+ Iir_Kind_Division_Operator => 1174,
+ Iir_Kind_Modulus_Operator => 1179,
+ Iir_Kind_Remainder_Operator => 1184,
+ Iir_Kind_Exponentiation_Operator => 1189,
+ Iir_Kind_Function_Call => 1197,
+ Iir_Kind_Aggregate => 1204,
+ Iir_Kind_Parenthesis_Expression => 1207,
+ Iir_Kind_Qualified_Expression => 1211,
+ Iir_Kind_Type_Conversion => 1216,
+ Iir_Kind_Allocator_By_Expression => 1220,
+ Iir_Kind_Allocator_By_Subtype => 1225,
+ Iir_Kind_Selected_Element => 1232,
+ Iir_Kind_Dereference => 1237,
+ Iir_Kind_Implicit_Dereference => 1242,
+ Iir_Kind_Slice_Name => 1249,
+ Iir_Kind_Indexed_Name => 1255,
+ Iir_Kind_Psl_Expression => 1257,
+ Iir_Kind_Sensitized_Process_Statement => 1278,
+ Iir_Kind_Process_Statement => 1298,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1310,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1322,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1335,
+ Iir_Kind_Concurrent_Assertion_Statement => 1343,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1350,
+ Iir_Kind_Psl_Assert_Statement => 1363,
+ Iir_Kind_Psl_Cover_Statement => 1376,
+ Iir_Kind_Block_Statement => 1389,
+ Iir_Kind_If_Generate_Statement => 1400,
+ Iir_Kind_Case_Generate_Statement => 1409,
+ Iir_Kind_For_Generate_Statement => 1418,
+ Iir_Kind_Component_Instantiation_Statement => 1429,
+ Iir_Kind_Psl_Default_Clock => 1433,
+ Iir_Kind_Simple_Simultaneous_Statement => 1440,
+ Iir_Kind_Generate_Statement_Body => 1451,
+ Iir_Kind_If_Generate_Else_Clause => 1457,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1467,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1477,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1488,
+ Iir_Kind_Null_Statement => 1492,
+ Iir_Kind_Assertion_Statement => 1499,
+ Iir_Kind_Report_Statement => 1505,
+ Iir_Kind_Wait_Statement => 1513,
+ Iir_Kind_Variable_Assignment_Statement => 1520,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1527,
+ Iir_Kind_Return_Statement => 1533,
+ Iir_Kind_For_Loop_Statement => 1542,
+ Iir_Kind_While_Loop_Statement => 1551,
+ Iir_Kind_Next_Statement => 1558,
+ Iir_Kind_Exit_Statement => 1565,
+ Iir_Kind_Case_Statement => 1573,
+ Iir_Kind_Procedure_Call_Statement => 1579,
+ Iir_Kind_If_Statement => 1589,
+ Iir_Kind_Elsif => 1595,
+ Iir_Kind_Character_Literal => 1603,
+ Iir_Kind_Simple_Name => 1611,
+ Iir_Kind_Selected_Name => 1620,
+ Iir_Kind_Operator_Symbol => 1626,
+ Iir_Kind_Reference_Name => 1629,
+ Iir_Kind_Selected_By_All_Name => 1635,
+ Iir_Kind_Parenthesis_Name => 1640,
+ Iir_Kind_External_Constant_Name => 1648,
+ Iir_Kind_External_Signal_Name => 1656,
+ Iir_Kind_External_Variable_Name => 1664,
+ Iir_Kind_Package_Pathname => 1668,
+ Iir_Kind_Absolute_Pathname => 1669,
+ Iir_Kind_Relative_Pathname => 1670,
+ Iir_Kind_Pathname_Element => 1675,
+ Iir_Kind_Base_Attribute => 1677,
+ Iir_Kind_Subtype_Attribute => 1682,
+ Iir_Kind_Element_Attribute => 1687,
+ Iir_Kind_Left_Type_Attribute => 1692,
+ Iir_Kind_Right_Type_Attribute => 1697,
+ Iir_Kind_High_Type_Attribute => 1702,
+ Iir_Kind_Low_Type_Attribute => 1707,
+ Iir_Kind_Ascending_Type_Attribute => 1712,
+ Iir_Kind_Image_Attribute => 1718,
+ Iir_Kind_Value_Attribute => 1724,
+ Iir_Kind_Pos_Attribute => 1730,
+ Iir_Kind_Val_Attribute => 1736,
+ Iir_Kind_Succ_Attribute => 1742,
+ Iir_Kind_Pred_Attribute => 1748,
+ Iir_Kind_Leftof_Attribute => 1754,
+ Iir_Kind_Rightof_Attribute => 1760,
+ Iir_Kind_Delayed_Attribute => 1769,
+ Iir_Kind_Stable_Attribute => 1778,
+ Iir_Kind_Quiet_Attribute => 1787,
+ Iir_Kind_Transaction_Attribute => 1796,
+ Iir_Kind_Event_Attribute => 1800,
+ Iir_Kind_Active_Attribute => 1804,
+ Iir_Kind_Last_Event_Attribute => 1808,
+ Iir_Kind_Last_Active_Attribute => 1812,
+ Iir_Kind_Last_Value_Attribute => 1816,
+ Iir_Kind_Driving_Attribute => 1820,
+ Iir_Kind_Driving_Value_Attribute => 1824,
+ Iir_Kind_Behavior_Attribute => 1824,
+ Iir_Kind_Structure_Attribute => 1824,
+ Iir_Kind_Simple_Name_Attribute => 1831,
+ Iir_Kind_Instance_Name_Attribute => 1836,
+ Iir_Kind_Path_Name_Attribute => 1841,
+ Iir_Kind_Left_Array_Attribute => 1848,
+ Iir_Kind_Right_Array_Attribute => 1855,
+ Iir_Kind_High_Array_Attribute => 1862,
+ Iir_Kind_Low_Array_Attribute => 1869,
+ Iir_Kind_Length_Array_Attribute => 1876,
+ Iir_Kind_Ascending_Array_Attribute => 1883,
+ Iir_Kind_Range_Array_Attribute => 1890,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1897,
+ Iir_Kind_Attribute_Name => 1906
);
function Get_Fields_First (K : Iir_Kind) return Fields_Index is
@@ -6448,6 +6455,30 @@ package body Nodes_Meta is
end case;
end Set_PSL_Node;
+ function Get_Source_File_Entry
+ (N : Iir; F : Fields_Enum) return Source_File_Entry is
+ begin
+ pragma Assert (Fields_Type (F) = Type_Source_File_Entry);
+ case F is
+ when Field_Instance_Source_File =>
+ return Get_Instance_Source_File (N);
+ when others =>
+ raise Internal_Error;
+ end case;
+ end Get_Source_File_Entry;
+
+ procedure Set_Source_File_Entry
+ (N : Iir; F : Fields_Enum; V: Source_File_Entry) is
+ begin
+ pragma Assert (Fields_Type (F) = Type_Source_File_Entry);
+ case F is
+ when Field_Instance_Source_File =>
+ Set_Instance_Source_File (N, V);
+ when others =>
+ raise Internal_Error;
+ end case;
+ end Set_Source_File_Entry;
+
function Get_Source_Ptr
(N : Iir; F : Fields_Enum) return Source_Ptr is
begin
@@ -9080,6 +9111,17 @@ package body Nodes_Meta is
end case;
end Has_Uninstantiated_Package_Decl;
+ function Has_Instance_Source_File (K : Iir_Kind) return Boolean is
+ begin
+ case K is
+ when Iir_Kind_Package_Instantiation_Declaration
+ | Iir_Kind_Interface_Package_Declaration =>
+ return True;
+ when others =>
+ return False;
+ end case;
+ end Has_Instance_Source_File;
+
function Has_Generate_Block_Configuration (K : Iir_Kind) return Boolean is
begin
return K = Iir_Kind_Generate_Statement_Body;
diff --git a/src/vhdl/nodes_meta.ads b/src/vhdl/nodes_meta.ads
index e8d302936..2ae476761 100644
--- a/src/vhdl/nodes_meta.ads
+++ b/src/vhdl/nodes_meta.ads
@@ -49,6 +49,7 @@ package Nodes_Meta is
Type_Number_Base_Type,
Type_PSL_NFA,
Type_PSL_Node,
+ Type_Source_File_Entry,
Type_Source_Ptr,
Type_String8_Id,
Type_Time_Stamp_Id,
@@ -278,6 +279,7 @@ package Nodes_Meta is
Field_Block_Header,
Field_Uninstantiated_Package_Name,
Field_Uninstantiated_Package_Decl,
+ Field_Instance_Source_File,
Field_Generate_Block_Configuration,
Field_Generate_Statement_Body,
Field_Alternative_Label,
@@ -554,6 +556,11 @@ package Nodes_Meta is
procedure Set_PSL_Node
(N : Iir; F : Fields_Enum; V: PSL_Node);
+ function Get_Source_File_Entry
+ (N : Iir; F : Fields_Enum) return Source_File_Entry;
+ procedure Set_Source_File_Entry
+ (N : Iir; F : Fields_Enum; V: Source_File_Entry);
+
function Get_Source_Ptr
(N : Iir; F : Fields_Enum) return Source_Ptr;
procedure Set_Source_Ptr
@@ -803,6 +810,7 @@ package Nodes_Meta is
function Has_Block_Header (K : Iir_Kind) return Boolean;
function Has_Uninstantiated_Package_Name (K : Iir_Kind) return Boolean;
function Has_Uninstantiated_Package_Decl (K : Iir_Kind) return Boolean;
+ function Has_Instance_Source_File (K : Iir_Kind) return Boolean;
function Has_Generate_Block_Configuration (K : Iir_Kind) return Boolean;
function Has_Generate_Statement_Body (K : Iir_Kind) return Boolean;
function Has_Alternative_Label (K : Iir_Kind) return Boolean;
diff --git a/src/vhdl/sem_inst.adb b/src/vhdl/sem_inst.adb
index 441d4cd58..029ec235d 100644
--- a/src/vhdl/sem_inst.adb
+++ b/src/vhdl/sem_inst.adb
@@ -160,6 +160,17 @@ package body Sem_Inst is
end if;
end Relocate;
+ procedure Create_Relocation (Inst : Iir; Orig : Iir)
+ is
+ use Files_Map;
+ Orig_File : Source_File_Entry;
+ Pos : Source_Ptr;
+ begin
+ Location_To_File_Pos (Get_Location (Orig), Orig_File, Pos);
+ Instance_File := Create_Instance_Source_File
+ (Orig_File, Get_Location (Inst), Inst);
+ end Create_Relocation;
+
function Instantiate_Iir (N : Iir; Is_Ref : Boolean) return Iir;
-- Instantiate a list. Simply create a new list and instantiate nodes of
@@ -322,6 +333,8 @@ package body Sem_Inst is
Set_String8_Id (Res, F, Get_String8_Id (N, F));
when Type_Source_Ptr =>
Set_Source_Ptr (Res, F, Get_Source_Ptr (N, F));
+ when Type_Source_File_Entry =>
+ Set_Source_File_Entry (Res, F, Get_Source_File_Entry (N, F));
when Type_Date_Type
| Type_Date_State_Type
| Type_Time_Stamp_Id
@@ -562,6 +575,29 @@ package body Sem_Inst is
-- TODO
null;
+ when Field_Instance_Source_File =>
+ Set_Instance_Source_File
+ (Res, Files_Map.Create_Instance_Source_File
+ (Get_Instance_Source_File (N),
+ Get_Location (Res), Res));
+
+ when Field_Generic_Chain
+ | Field_Declaration_Chain =>
+ if Kind = Iir_Kind_Package_Instantiation_Declaration then
+ declare
+ Prev_Instance_File : constant Source_File_Entry :=
+ Instance_File;
+ begin
+ -- Also relocate the instantiated declarations.
+ Instance_File := Get_Instance_Source_File (Res);
+ pragma Assert (Instance_File /= No_Source_File_Entry);
+ Instantiate_Iir_Field (Res, N, F);
+ Instance_File := Prev_Instance_File;
+ end;
+ else
+ Instantiate_Iir_Field (Res, N, F);
+ end if;
+
when others =>
-- Common case.
Instantiate_Iir_Field (Res, N, F);
@@ -924,17 +960,6 @@ package body Sem_Inst is
return Res;
end Copy_Tree;
- procedure Create_Relocation (Inst : Iir; Orig : Iir)
- is
- use Files_Map;
- Orig_File : Source_File_Entry;
- Pos : Source_Ptr;
- begin
- Location_To_File_Pos (Get_Location (Orig), Orig_File, Pos);
- Instance_File := Create_Instance_Source_File
- (Orig_File, Get_Location (Inst), Inst);
- end Create_Relocation;
-
procedure Instantiate_Package_Declaration (Inst : Iir; Pkg : Iir)
is
Header : constant Iir := Get_Package_Header (Pkg);
@@ -942,6 +967,7 @@ package body Sem_Inst is
Mark : constant Instance_Index_Type := Prev_Instance_Table.Last;
begin
Create_Relocation (Inst, Pkg);
+ Set_Instance_Source_File (Inst, Instance_File);
-- Be sure Get_Origin_Priv can be called on existing nodes.
Expand_Origin_Table;
diff --git a/src/vhdl/translate/trans-chap2.adb b/src/vhdl/translate/trans-chap2.adb
index 4afe598c9..4260c6d1d 100644
--- a/src/vhdl/translate/trans-chap2.adb
+++ b/src/vhdl/translate/trans-chap2.adb
@@ -1464,6 +1464,7 @@ package body Trans.Chap2 is
raise Internal_Error;
when Type_String8_Id
| Type_Source_Ptr
+ | Type_Source_File_Entry
| Type_Number_Base_Type
| Type_Iir_Constraint
| Type_Iir_Mode
diff --git a/src/vhdl/translate/trans-chap9.adb b/src/vhdl/translate/trans-chap9.adb
index 3948bbe0b..4c6904fea 100644
--- a/src/vhdl/translate/trans-chap9.adb
+++ b/src/vhdl/translate/trans-chap9.adb
@@ -1241,6 +1241,7 @@ package body Trans.Chap9 is
| Type_File_Checksum_Id
| Type_String8_Id
| Type_Source_Ptr
+ | Type_Source_File_Entry
| Type_Number_Base_Type
| Type_Iir_Constraint
| Type_Iir_Mode