diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ghdldrv/ghdlxml.adb | 6 | ||||
-rw-r--r-- | src/vhdl/disp_tree.adb | 6 | ||||
-rw-r--r-- | src/vhdl/iirs.ads | 10 | ||||
-rw-r--r-- | src/vhdl/nodes_gc.adb | 6 | ||||
-rw-r--r-- | src/vhdl/nodes_meta.adb | 504 | ||||
-rw-r--r-- | src/vhdl/nodes_meta.ads | 1 | ||||
-rw-r--r-- | src/vhdl/sem_inst.adb | 14 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap2.adb | 4 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap9.adb | 4 |
9 files changed, 305 insertions, 250 deletions
diff --git a/src/ghdldrv/ghdlxml.adb b/src/ghdldrv/ghdlxml.adb index 995706351..49a997670 100644 --- a/src/ghdldrv/ghdlxml.adb +++ b/src/ghdldrv/ghdlxml.adb @@ -439,6 +439,12 @@ package body Ghdlxml is end if; when Attr_Chain => Disp_Iir_Chain (Img, V); + when Attr_Maybe_Ref_Chain => + if Get_Is_Ref (N) then + Disp_Iir_Ref (Img, V); + else + Disp_Iir_Chain (Img, V); + end if; when Attr_Chain_Next => null; when Attr_Of_Ref | Attr_Of_Maybe_Ref => diff --git a/src/vhdl/disp_tree.adb b/src/vhdl/disp_tree.adb index 718cf6707..040512c3c 100644 --- a/src/vhdl/disp_tree.adb +++ b/src/vhdl/disp_tree.adb @@ -462,6 +462,12 @@ package body Disp_Tree is Ndepth := Depth - 1; end if; Disp_Iir (Get_Iir (N, F), Sub_Indent, Ndepth); + when Attr_Maybe_Ref_Chain => + if Get_Is_Ref (N) then + Disp_Iir (Get_Iir (N, F), Sub_Indent, 0); + else + Disp_Chain (Get_Iir (N, F), Sub_Indent, Depth - 1); + end if; when Attr_Chain => Disp_Chain (Get_Iir (N, F), Sub_Indent, Depth - 1); when Attr_Chain_Next => diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads index 912d4a006..b2cfeb5fa 100644 --- a/src/vhdl/iirs.ads +++ b/src/vhdl/iirs.ads @@ -572,6 +572,8 @@ package Iirs is -- Only for Iir_Kind_Choice_By_Range: -- Only for Iir_Kind_Choice_By_Expression: -- Get/Set_Choice_Staticness (State1) + -- + -- Get/Set_Is_Ref (Flag12) -- Iir_Kind_Entity_Aspect_Entity (Short) -- @@ -6140,17 +6142,19 @@ package Iirs is procedure Set_Choice_Position (Choice : Iir; Pos : Int32); -- Node associated with a choice. - -- Field: Field3 + -- Field: Field3 Maybe_Ref function Get_Associated_Expr (Target : Iir) return Iir; procedure Set_Associated_Expr (Target : Iir; Associated : Iir); -- Node associated with a choice. - -- Field: Field3 + -- Field: Field3 Maybe_Ref function Get_Associated_Block (Target : Iir) return Iir; procedure Set_Associated_Block (Target : Iir; Associated : Iir); -- Chain associated with a choice. - -- Field: Field4 Chain + -- A Maybe_Ref_Chain is a reference to a chain if Get_Is_Ref is True, + -- otherwise this is a normal chain. + -- Field: Field4 Maybe_Ref_Chain function Get_Associated_Chain (Target : Iir) return Iir; procedure Set_Associated_Chain (Target : Iir; Associated : Iir); diff --git a/src/vhdl/nodes_gc.adb b/src/vhdl/nodes_gc.adb index b4c11149f..f3c9299b9 100644 --- a/src/vhdl/nodes_gc.adb +++ b/src/vhdl/nodes_gc.adb @@ -253,6 +253,12 @@ package body Nodes_GC is end if; when Attr_Chain => Mark_Chain (Get_Iir (N, F)); + when Attr_Maybe_Ref_Chain => + if Get_Is_Ref (N) then + Mark_Iir_Ref_Field (N, F); + else + Mark_Chain (Get_Iir (N, F)); + end if; when Attr_Of_Ref | Attr_Of_Maybe_Ref => raise Internal_Error; end case; diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb index 69e1a4ef6..d2b199dde 100644 --- a/src/vhdl/nodes_meta.adb +++ b/src/vhdl/nodes_meta.adb @@ -1675,11 +1675,11 @@ package body Nodes_Meta is when Field_Choice_Position => return Attr_None; when Field_Associated_Expr => - return Attr_None; + return Attr_Maybe_Ref; when Field_Associated_Block => - return Attr_None; + return Attr_Maybe_Ref; when Field_Associated_Chain => - return Attr_Chain; + return Attr_Maybe_Ref_Chain; when Field_Choice_Name => return Attr_None; when Field_Choice_Expression => @@ -2389,6 +2389,7 @@ package body Nodes_Meta is -- Iir_Kind_Choice_By_Range Field_Choice_Position, Field_Same_Alternative_Flag, + Field_Is_Ref, Field_Element_Type_Flag, Field_Choice_Staticness, Field_Parent, @@ -2399,6 +2400,7 @@ package body Nodes_Meta is -- Iir_Kind_Choice_By_Expression Field_Choice_Position, Field_Same_Alternative_Flag, + Field_Is_Ref, Field_Element_Type_Flag, Field_Choice_Staticness, Field_Parent, @@ -2409,6 +2411,7 @@ package body Nodes_Meta is -- Iir_Kind_Choice_By_Others Field_Choice_Position, Field_Same_Alternative_Flag, + Field_Is_Ref, Field_Element_Type_Flag, Field_Parent, Field_Chain, @@ -2417,6 +2420,7 @@ package body Nodes_Meta is -- Iir_Kind_Choice_By_None Field_Choice_Position, Field_Same_Alternative_Flag, + Field_Is_Ref, Field_Element_Type_Flag, Field_Parent, Field_Chain, @@ -2425,6 +2429,7 @@ package body Nodes_Meta is -- Iir_Kind_Choice_By_Name Field_Choice_Position, Field_Same_Alternative_Flag, + Field_Is_Ref, Field_Element_Type_Flag, Field_Parent, Field_Chain, @@ -4442,250 +4447,250 @@ package body Nodes_Meta is Iir_Kind_Association_Element_Package => 127, Iir_Kind_Association_Element_Type => 135, Iir_Kind_Association_Element_Subprogram => 141, - Iir_Kind_Choice_By_Range => 150, - Iir_Kind_Choice_By_Expression => 159, - Iir_Kind_Choice_By_Others => 166, - Iir_Kind_Choice_By_None => 173, - Iir_Kind_Choice_By_Name => 181, - Iir_Kind_Entity_Aspect_Entity => 183, - Iir_Kind_Entity_Aspect_Configuration => 184, - Iir_Kind_Entity_Aspect_Open => 184, - Iir_Kind_Block_Configuration => 190, - Iir_Kind_Block_Header => 194, - Iir_Kind_Component_Configuration => 201, - Iir_Kind_Binding_Indication => 205, - Iir_Kind_Entity_Class => 207, - Iir_Kind_Attribute_Value => 215, - Iir_Kind_Signature => 218, - Iir_Kind_Aggregate_Info => 225, - Iir_Kind_Procedure_Call => 229, - Iir_Kind_Record_Element_Constraint => 236, - Iir_Kind_Array_Element_Resolution => 238, - Iir_Kind_Record_Resolution => 239, - Iir_Kind_Record_Element_Resolution => 242, - Iir_Kind_Attribute_Specification => 250, - Iir_Kind_Disconnection_Specification => 256, - Iir_Kind_Configuration_Specification => 262, - Iir_Kind_Access_Type_Definition => 270, - Iir_Kind_Incomplete_Type_Definition => 278, - Iir_Kind_Interface_Type_Definition => 285, - Iir_Kind_File_Type_Definition => 292, - Iir_Kind_Protected_Type_Declaration => 301, - Iir_Kind_Record_Type_Definition => 311, - Iir_Kind_Array_Type_Definition => 323, - Iir_Kind_Array_Subtype_Definition => 338, - Iir_Kind_Record_Subtype_Definition => 349, - Iir_Kind_Access_Subtype_Definition => 357, - Iir_Kind_Physical_Subtype_Definition => 367, - Iir_Kind_Floating_Subtype_Definition => 378, - Iir_Kind_Integer_Subtype_Definition => 388, - Iir_Kind_Enumeration_Subtype_Definition => 398, - Iir_Kind_Enumeration_Type_Definition => 409, - Iir_Kind_Integer_Type_Definition => 417, - Iir_Kind_Floating_Type_Definition => 425, - Iir_Kind_Physical_Type_Definition => 436, - Iir_Kind_Range_Expression => 444, - Iir_Kind_Protected_Type_Body => 451, - Iir_Kind_Wildcard_Type_Definition => 456, - Iir_Kind_Subtype_Definition => 461, - Iir_Kind_Scalar_Nature_Definition => 465, - Iir_Kind_Overload_List => 466, - Iir_Kind_Type_Declaration => 473, - Iir_Kind_Anonymous_Type_Declaration => 479, - Iir_Kind_Subtype_Declaration => 486, - Iir_Kind_Nature_Declaration => 492, - Iir_Kind_Subnature_Declaration => 498, - Iir_Kind_Entity_Declaration => 510, - Iir_Kind_Configuration_Declaration => 519, - Iir_Kind_Context_Declaration => 525, - Iir_Kind_Package_Declaration => 539, - Iir_Kind_Package_Instantiation_Declaration => 553, - Iir_Kind_Package_Body => 561, - Iir_Kind_Architecture_Body => 573, - Iir_Kind_Package_Header => 575, - Iir_Kind_Unit_Declaration => 584, - Iir_Kind_Library_Declaration => 591, - Iir_Kind_Component_Declaration => 601, - Iir_Kind_Attribute_Declaration => 608, - Iir_Kind_Group_Template_Declaration => 614, - Iir_Kind_Group_Declaration => 621, - Iir_Kind_Element_Declaration => 629, - Iir_Kind_Non_Object_Alias_Declaration => 637, - Iir_Kind_Psl_Declaration => 645, - Iir_Kind_Psl_Endpoint_Declaration => 659, - Iir_Kind_Terminal_Declaration => 665, - Iir_Kind_Free_Quantity_Declaration => 674, - Iir_Kind_Across_Quantity_Declaration => 686, - Iir_Kind_Through_Quantity_Declaration => 698, - Iir_Kind_Enumeration_Literal => 709, - Iir_Kind_Function_Declaration => 734, - Iir_Kind_Procedure_Declaration => 758, - Iir_Kind_Function_Body => 768, - Iir_Kind_Procedure_Body => 779, - Iir_Kind_Object_Alias_Declaration => 790, - Iir_Kind_File_Declaration => 804, - Iir_Kind_Guard_Signal_Declaration => 817, - Iir_Kind_Signal_Declaration => 834, - Iir_Kind_Variable_Declaration => 847, - Iir_Kind_Constant_Declaration => 861, - Iir_Kind_Iterator_Declaration => 872, - Iir_Kind_Interface_Constant_Declaration => 888, - Iir_Kind_Interface_Variable_Declaration => 904, - Iir_Kind_Interface_Signal_Declaration => 925, - Iir_Kind_Interface_File_Declaration => 941, - Iir_Kind_Interface_Type_Declaration => 951, - Iir_Kind_Interface_Package_Declaration => 963, - Iir_Kind_Interface_Function_Declaration => 980, - Iir_Kind_Interface_Procedure_Declaration => 993, - Iir_Kind_Signal_Attribute_Declaration => 996, - Iir_Kind_Identity_Operator => 1000, - Iir_Kind_Negation_Operator => 1004, - Iir_Kind_Absolute_Operator => 1008, - Iir_Kind_Not_Operator => 1012, - Iir_Kind_Implicit_Condition_Operator => 1016, - Iir_Kind_Condition_Operator => 1020, - Iir_Kind_Reduction_And_Operator => 1024, - Iir_Kind_Reduction_Or_Operator => 1028, - Iir_Kind_Reduction_Nand_Operator => 1032, - Iir_Kind_Reduction_Nor_Operator => 1036, - Iir_Kind_Reduction_Xor_Operator => 1040, - Iir_Kind_Reduction_Xnor_Operator => 1044, - Iir_Kind_And_Operator => 1049, - Iir_Kind_Or_Operator => 1054, - Iir_Kind_Nand_Operator => 1059, - Iir_Kind_Nor_Operator => 1064, - Iir_Kind_Xor_Operator => 1069, - Iir_Kind_Xnor_Operator => 1074, - Iir_Kind_Equality_Operator => 1079, - Iir_Kind_Inequality_Operator => 1084, - Iir_Kind_Less_Than_Operator => 1089, - Iir_Kind_Less_Than_Or_Equal_Operator => 1094, - Iir_Kind_Greater_Than_Operator => 1099, - Iir_Kind_Greater_Than_Or_Equal_Operator => 1104, - Iir_Kind_Match_Equality_Operator => 1109, - Iir_Kind_Match_Inequality_Operator => 1114, - Iir_Kind_Match_Less_Than_Operator => 1119, - Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1124, - Iir_Kind_Match_Greater_Than_Operator => 1129, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1134, - Iir_Kind_Sll_Operator => 1139, - Iir_Kind_Sla_Operator => 1144, - Iir_Kind_Srl_Operator => 1149, - Iir_Kind_Sra_Operator => 1154, - Iir_Kind_Rol_Operator => 1159, - Iir_Kind_Ror_Operator => 1164, - Iir_Kind_Addition_Operator => 1169, - Iir_Kind_Substraction_Operator => 1174, - Iir_Kind_Concatenation_Operator => 1179, - Iir_Kind_Multiplication_Operator => 1184, - Iir_Kind_Division_Operator => 1189, - Iir_Kind_Modulus_Operator => 1194, - Iir_Kind_Remainder_Operator => 1199, - Iir_Kind_Exponentiation_Operator => 1204, - Iir_Kind_Function_Call => 1212, - Iir_Kind_Aggregate => 1219, - Iir_Kind_Parenthesis_Expression => 1222, - Iir_Kind_Qualified_Expression => 1226, - Iir_Kind_Type_Conversion => 1231, - Iir_Kind_Allocator_By_Expression => 1235, - Iir_Kind_Allocator_By_Subtype => 1240, - Iir_Kind_Selected_Element => 1247, - Iir_Kind_Dereference => 1252, - Iir_Kind_Implicit_Dereference => 1257, - Iir_Kind_Slice_Name => 1264, - Iir_Kind_Indexed_Name => 1270, - Iir_Kind_Psl_Expression => 1272, - Iir_Kind_Sensitized_Process_Statement => 1293, - Iir_Kind_Process_Statement => 1313, - Iir_Kind_Concurrent_Simple_Signal_Assignment => 1325, - Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1337, - Iir_Kind_Concurrent_Selected_Signal_Assignment => 1350, - Iir_Kind_Concurrent_Assertion_Statement => 1358, - Iir_Kind_Concurrent_Procedure_Call_Statement => 1365, - Iir_Kind_Psl_Assert_Statement => 1378, - Iir_Kind_Psl_Cover_Statement => 1391, - Iir_Kind_Block_Statement => 1404, - Iir_Kind_If_Generate_Statement => 1415, - Iir_Kind_Case_Generate_Statement => 1424, - Iir_Kind_For_Generate_Statement => 1433, - Iir_Kind_Component_Instantiation_Statement => 1444, - Iir_Kind_Psl_Default_Clock => 1448, - Iir_Kind_Simple_Simultaneous_Statement => 1455, - Iir_Kind_Generate_Statement_Body => 1466, - Iir_Kind_If_Generate_Else_Clause => 1472, - Iir_Kind_Simple_Signal_Assignment_Statement => 1482, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1492, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1503, - Iir_Kind_Null_Statement => 1507, - Iir_Kind_Assertion_Statement => 1514, - Iir_Kind_Report_Statement => 1520, - Iir_Kind_Wait_Statement => 1528, - Iir_Kind_Variable_Assignment_Statement => 1535, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1542, - Iir_Kind_Return_Statement => 1548, - Iir_Kind_For_Loop_Statement => 1557, - Iir_Kind_While_Loop_Statement => 1566, - Iir_Kind_Next_Statement => 1573, - Iir_Kind_Exit_Statement => 1580, - Iir_Kind_Case_Statement => 1588, - Iir_Kind_Procedure_Call_Statement => 1594, - Iir_Kind_If_Statement => 1604, - Iir_Kind_Elsif => 1610, - Iir_Kind_Character_Literal => 1618, - Iir_Kind_Simple_Name => 1626, - Iir_Kind_Selected_Name => 1635, - Iir_Kind_Operator_Symbol => 1641, - Iir_Kind_Reference_Name => 1644, - Iir_Kind_External_Constant_Name => 1653, - Iir_Kind_External_Signal_Name => 1662, - Iir_Kind_External_Variable_Name => 1671, - Iir_Kind_Selected_By_All_Name => 1677, - Iir_Kind_Parenthesis_Name => 1682, - Iir_Kind_Package_Pathname => 1686, - Iir_Kind_Absolute_Pathname => 1687, - Iir_Kind_Relative_Pathname => 1688, - Iir_Kind_Pathname_Element => 1693, - Iir_Kind_Base_Attribute => 1695, - Iir_Kind_Subtype_Attribute => 1700, - Iir_Kind_Element_Attribute => 1705, - Iir_Kind_Left_Type_Attribute => 1710, - Iir_Kind_Right_Type_Attribute => 1715, - Iir_Kind_High_Type_Attribute => 1720, - Iir_Kind_Low_Type_Attribute => 1725, - Iir_Kind_Ascending_Type_Attribute => 1730, - Iir_Kind_Image_Attribute => 1736, - Iir_Kind_Value_Attribute => 1742, - Iir_Kind_Pos_Attribute => 1748, - Iir_Kind_Val_Attribute => 1754, - Iir_Kind_Succ_Attribute => 1760, - Iir_Kind_Pred_Attribute => 1766, - Iir_Kind_Leftof_Attribute => 1772, - Iir_Kind_Rightof_Attribute => 1778, - Iir_Kind_Delayed_Attribute => 1787, - Iir_Kind_Stable_Attribute => 1796, - Iir_Kind_Quiet_Attribute => 1805, - Iir_Kind_Transaction_Attribute => 1814, - Iir_Kind_Event_Attribute => 1818, - Iir_Kind_Active_Attribute => 1822, - Iir_Kind_Last_Event_Attribute => 1826, - Iir_Kind_Last_Active_Attribute => 1830, - Iir_Kind_Last_Value_Attribute => 1834, - Iir_Kind_Driving_Attribute => 1838, - Iir_Kind_Driving_Value_Attribute => 1842, - Iir_Kind_Behavior_Attribute => 1842, - Iir_Kind_Structure_Attribute => 1842, - Iir_Kind_Simple_Name_Attribute => 1849, - Iir_Kind_Instance_Name_Attribute => 1854, - Iir_Kind_Path_Name_Attribute => 1859, - Iir_Kind_Left_Array_Attribute => 1866, - Iir_Kind_Right_Array_Attribute => 1873, - Iir_Kind_High_Array_Attribute => 1880, - Iir_Kind_Low_Array_Attribute => 1887, - Iir_Kind_Length_Array_Attribute => 1894, - Iir_Kind_Ascending_Array_Attribute => 1901, - Iir_Kind_Range_Array_Attribute => 1908, - Iir_Kind_Reverse_Range_Array_Attribute => 1915, - Iir_Kind_Attribute_Name => 1924 + Iir_Kind_Choice_By_Range => 151, + Iir_Kind_Choice_By_Expression => 161, + Iir_Kind_Choice_By_Others => 169, + Iir_Kind_Choice_By_None => 177, + Iir_Kind_Choice_By_Name => 186, + Iir_Kind_Entity_Aspect_Entity => 188, + Iir_Kind_Entity_Aspect_Configuration => 189, + Iir_Kind_Entity_Aspect_Open => 189, + Iir_Kind_Block_Configuration => 195, + Iir_Kind_Block_Header => 199, + Iir_Kind_Component_Configuration => 206, + Iir_Kind_Binding_Indication => 210, + Iir_Kind_Entity_Class => 212, + Iir_Kind_Attribute_Value => 220, + Iir_Kind_Signature => 223, + Iir_Kind_Aggregate_Info => 230, + Iir_Kind_Procedure_Call => 234, + Iir_Kind_Record_Element_Constraint => 241, + Iir_Kind_Array_Element_Resolution => 243, + Iir_Kind_Record_Resolution => 244, + Iir_Kind_Record_Element_Resolution => 247, + Iir_Kind_Attribute_Specification => 255, + Iir_Kind_Disconnection_Specification => 261, + Iir_Kind_Configuration_Specification => 267, + Iir_Kind_Access_Type_Definition => 275, + Iir_Kind_Incomplete_Type_Definition => 283, + Iir_Kind_Interface_Type_Definition => 290, + Iir_Kind_File_Type_Definition => 297, + Iir_Kind_Protected_Type_Declaration => 306, + Iir_Kind_Record_Type_Definition => 316, + Iir_Kind_Array_Type_Definition => 328, + Iir_Kind_Array_Subtype_Definition => 343, + Iir_Kind_Record_Subtype_Definition => 354, + Iir_Kind_Access_Subtype_Definition => 362, + Iir_Kind_Physical_Subtype_Definition => 372, + Iir_Kind_Floating_Subtype_Definition => 383, + Iir_Kind_Integer_Subtype_Definition => 393, + Iir_Kind_Enumeration_Subtype_Definition => 403, + Iir_Kind_Enumeration_Type_Definition => 414, + Iir_Kind_Integer_Type_Definition => 422, + Iir_Kind_Floating_Type_Definition => 430, + Iir_Kind_Physical_Type_Definition => 441, + Iir_Kind_Range_Expression => 449, + Iir_Kind_Protected_Type_Body => 456, + Iir_Kind_Wildcard_Type_Definition => 461, + Iir_Kind_Subtype_Definition => 466, + Iir_Kind_Scalar_Nature_Definition => 470, + Iir_Kind_Overload_List => 471, + Iir_Kind_Type_Declaration => 478, + Iir_Kind_Anonymous_Type_Declaration => 484, + Iir_Kind_Subtype_Declaration => 491, + Iir_Kind_Nature_Declaration => 497, + Iir_Kind_Subnature_Declaration => 503, + Iir_Kind_Entity_Declaration => 515, + Iir_Kind_Configuration_Declaration => 524, + Iir_Kind_Context_Declaration => 530, + Iir_Kind_Package_Declaration => 544, + Iir_Kind_Package_Instantiation_Declaration => 558, + Iir_Kind_Package_Body => 566, + Iir_Kind_Architecture_Body => 578, + Iir_Kind_Package_Header => 580, + Iir_Kind_Unit_Declaration => 589, + Iir_Kind_Library_Declaration => 596, + Iir_Kind_Component_Declaration => 606, + Iir_Kind_Attribute_Declaration => 613, + Iir_Kind_Group_Template_Declaration => 619, + Iir_Kind_Group_Declaration => 626, + Iir_Kind_Element_Declaration => 634, + Iir_Kind_Non_Object_Alias_Declaration => 642, + Iir_Kind_Psl_Declaration => 650, + Iir_Kind_Psl_Endpoint_Declaration => 664, + Iir_Kind_Terminal_Declaration => 670, + Iir_Kind_Free_Quantity_Declaration => 679, + Iir_Kind_Across_Quantity_Declaration => 691, + Iir_Kind_Through_Quantity_Declaration => 703, + Iir_Kind_Enumeration_Literal => 714, + Iir_Kind_Function_Declaration => 739, + Iir_Kind_Procedure_Declaration => 763, + Iir_Kind_Function_Body => 773, + Iir_Kind_Procedure_Body => 784, + Iir_Kind_Object_Alias_Declaration => 795, + Iir_Kind_File_Declaration => 809, + Iir_Kind_Guard_Signal_Declaration => 822, + Iir_Kind_Signal_Declaration => 839, + Iir_Kind_Variable_Declaration => 852, + Iir_Kind_Constant_Declaration => 866, + Iir_Kind_Iterator_Declaration => 877, + Iir_Kind_Interface_Constant_Declaration => 893, + Iir_Kind_Interface_Variable_Declaration => 909, + Iir_Kind_Interface_Signal_Declaration => 930, + Iir_Kind_Interface_File_Declaration => 946, + Iir_Kind_Interface_Type_Declaration => 956, + Iir_Kind_Interface_Package_Declaration => 968, + Iir_Kind_Interface_Function_Declaration => 985, + Iir_Kind_Interface_Procedure_Declaration => 998, + Iir_Kind_Signal_Attribute_Declaration => 1001, + Iir_Kind_Identity_Operator => 1005, + Iir_Kind_Negation_Operator => 1009, + Iir_Kind_Absolute_Operator => 1013, + Iir_Kind_Not_Operator => 1017, + Iir_Kind_Implicit_Condition_Operator => 1021, + Iir_Kind_Condition_Operator => 1025, + Iir_Kind_Reduction_And_Operator => 1029, + Iir_Kind_Reduction_Or_Operator => 1033, + Iir_Kind_Reduction_Nand_Operator => 1037, + Iir_Kind_Reduction_Nor_Operator => 1041, + Iir_Kind_Reduction_Xor_Operator => 1045, + Iir_Kind_Reduction_Xnor_Operator => 1049, + Iir_Kind_And_Operator => 1054, + Iir_Kind_Or_Operator => 1059, + Iir_Kind_Nand_Operator => 1064, + Iir_Kind_Nor_Operator => 1069, + Iir_Kind_Xor_Operator => 1074, + Iir_Kind_Xnor_Operator => 1079, + Iir_Kind_Equality_Operator => 1084, + Iir_Kind_Inequality_Operator => 1089, + Iir_Kind_Less_Than_Operator => 1094, + Iir_Kind_Less_Than_Or_Equal_Operator => 1099, + Iir_Kind_Greater_Than_Operator => 1104, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1109, + Iir_Kind_Match_Equality_Operator => 1114, + Iir_Kind_Match_Inequality_Operator => 1119, + Iir_Kind_Match_Less_Than_Operator => 1124, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1129, + Iir_Kind_Match_Greater_Than_Operator => 1134, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1139, + Iir_Kind_Sll_Operator => 1144, + Iir_Kind_Sla_Operator => 1149, + Iir_Kind_Srl_Operator => 1154, + Iir_Kind_Sra_Operator => 1159, + Iir_Kind_Rol_Operator => 1164, + Iir_Kind_Ror_Operator => 1169, + Iir_Kind_Addition_Operator => 1174, + Iir_Kind_Substraction_Operator => 1179, + Iir_Kind_Concatenation_Operator => 1184, + Iir_Kind_Multiplication_Operator => 1189, + Iir_Kind_Division_Operator => 1194, + Iir_Kind_Modulus_Operator => 1199, + Iir_Kind_Remainder_Operator => 1204, + Iir_Kind_Exponentiation_Operator => 1209, + Iir_Kind_Function_Call => 1217, + Iir_Kind_Aggregate => 1224, + Iir_Kind_Parenthesis_Expression => 1227, + Iir_Kind_Qualified_Expression => 1231, + Iir_Kind_Type_Conversion => 1236, + Iir_Kind_Allocator_By_Expression => 1240, + Iir_Kind_Allocator_By_Subtype => 1245, + Iir_Kind_Selected_Element => 1252, + Iir_Kind_Dereference => 1257, + Iir_Kind_Implicit_Dereference => 1262, + Iir_Kind_Slice_Name => 1269, + Iir_Kind_Indexed_Name => 1275, + Iir_Kind_Psl_Expression => 1277, + Iir_Kind_Sensitized_Process_Statement => 1298, + Iir_Kind_Process_Statement => 1318, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1330, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1342, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1355, + Iir_Kind_Concurrent_Assertion_Statement => 1363, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1370, + Iir_Kind_Psl_Assert_Statement => 1383, + Iir_Kind_Psl_Cover_Statement => 1396, + Iir_Kind_Block_Statement => 1409, + Iir_Kind_If_Generate_Statement => 1420, + Iir_Kind_Case_Generate_Statement => 1429, + Iir_Kind_For_Generate_Statement => 1438, + Iir_Kind_Component_Instantiation_Statement => 1449, + Iir_Kind_Psl_Default_Clock => 1453, + Iir_Kind_Simple_Simultaneous_Statement => 1460, + Iir_Kind_Generate_Statement_Body => 1471, + Iir_Kind_If_Generate_Else_Clause => 1477, + Iir_Kind_Simple_Signal_Assignment_Statement => 1487, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1497, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1508, + Iir_Kind_Null_Statement => 1512, + Iir_Kind_Assertion_Statement => 1519, + Iir_Kind_Report_Statement => 1525, + Iir_Kind_Wait_Statement => 1533, + Iir_Kind_Variable_Assignment_Statement => 1540, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1547, + Iir_Kind_Return_Statement => 1553, + Iir_Kind_For_Loop_Statement => 1562, + Iir_Kind_While_Loop_Statement => 1571, + Iir_Kind_Next_Statement => 1578, + Iir_Kind_Exit_Statement => 1585, + Iir_Kind_Case_Statement => 1593, + Iir_Kind_Procedure_Call_Statement => 1599, + Iir_Kind_If_Statement => 1609, + Iir_Kind_Elsif => 1615, + Iir_Kind_Character_Literal => 1623, + Iir_Kind_Simple_Name => 1631, + Iir_Kind_Selected_Name => 1640, + Iir_Kind_Operator_Symbol => 1646, + Iir_Kind_Reference_Name => 1649, + Iir_Kind_External_Constant_Name => 1658, + Iir_Kind_External_Signal_Name => 1667, + Iir_Kind_External_Variable_Name => 1676, + Iir_Kind_Selected_By_All_Name => 1682, + Iir_Kind_Parenthesis_Name => 1687, + Iir_Kind_Package_Pathname => 1691, + Iir_Kind_Absolute_Pathname => 1692, + Iir_Kind_Relative_Pathname => 1693, + Iir_Kind_Pathname_Element => 1698, + Iir_Kind_Base_Attribute => 1700, + Iir_Kind_Subtype_Attribute => 1705, + Iir_Kind_Element_Attribute => 1710, + Iir_Kind_Left_Type_Attribute => 1715, + Iir_Kind_Right_Type_Attribute => 1720, + Iir_Kind_High_Type_Attribute => 1725, + Iir_Kind_Low_Type_Attribute => 1730, + Iir_Kind_Ascending_Type_Attribute => 1735, + Iir_Kind_Image_Attribute => 1741, + Iir_Kind_Value_Attribute => 1747, + Iir_Kind_Pos_Attribute => 1753, + Iir_Kind_Val_Attribute => 1759, + Iir_Kind_Succ_Attribute => 1765, + Iir_Kind_Pred_Attribute => 1771, + Iir_Kind_Leftof_Attribute => 1777, + Iir_Kind_Rightof_Attribute => 1783, + Iir_Kind_Delayed_Attribute => 1792, + Iir_Kind_Stable_Attribute => 1801, + Iir_Kind_Quiet_Attribute => 1810, + Iir_Kind_Transaction_Attribute => 1819, + Iir_Kind_Event_Attribute => 1823, + Iir_Kind_Active_Attribute => 1827, + Iir_Kind_Last_Event_Attribute => 1831, + Iir_Kind_Last_Active_Attribute => 1835, + Iir_Kind_Last_Value_Attribute => 1839, + Iir_Kind_Driving_Attribute => 1843, + Iir_Kind_Driving_Value_Attribute => 1847, + Iir_Kind_Behavior_Attribute => 1847, + Iir_Kind_Structure_Attribute => 1847, + Iir_Kind_Simple_Name_Attribute => 1854, + Iir_Kind_Instance_Name_Attribute => 1859, + Iir_Kind_Path_Name_Attribute => 1864, + Iir_Kind_Left_Array_Attribute => 1871, + Iir_Kind_Right_Array_Attribute => 1878, + Iir_Kind_High_Array_Attribute => 1885, + Iir_Kind_Low_Array_Attribute => 1892, + Iir_Kind_Length_Array_Attribute => 1899, + Iir_Kind_Ascending_Array_Attribute => 1906, + Iir_Kind_Range_Array_Attribute => 1913, + Iir_Kind_Reverse_Range_Array_Attribute => 1920, + Iir_Kind_Attribute_Name => 1929 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -10628,6 +10633,11 @@ package body Nodes_Meta is case K is when Iir_Kind_Conditional_Waveform | Iir_Kind_Conditional_Expression + | Iir_Kind_Choice_By_Range + | Iir_Kind_Choice_By_Expression + | Iir_Kind_Choice_By_Others + | Iir_Kind_Choice_By_None + | Iir_Kind_Choice_By_Name | Iir_Kind_Component_Configuration | Iir_Kind_Disconnection_Specification | Iir_Kind_Configuration_Specification diff --git a/src/vhdl/nodes_meta.ads b/src/vhdl/nodes_meta.ads index 4181b1661..25faea793 100644 --- a/src/vhdl/nodes_meta.ads +++ b/src/vhdl/nodes_meta.ads @@ -408,6 +408,7 @@ package Nodes_Meta is Attr_Forward_Ref, Attr_Maybe_Forward_Ref, Attr_Maybe_Ref, + Attr_Maybe_Ref_Chain, Attr_Of_Maybe_Ref, Attr_Of_Ref, Attr_Ref diff --git a/src/vhdl/sem_inst.adb b/src/vhdl/sem_inst.adb index 029ec235d..e22f8e1d4 100644 --- a/src/vhdl/sem_inst.adb +++ b/src/vhdl/sem_inst.adb @@ -275,6 +275,12 @@ package body Sem_Inst is end if; when Attr_Chain => R := Instantiate_Iir_Chain (S); + when Attr_Maybe_Ref_Chain => + if Get_Is_Ref (N) then + R := Instantiate_Iir (S, True); + else + R := Instantiate_Iir_Chain (S); + end if; when Attr_Chain_Next => R := Null_Iir; when Attr_Of_Ref | Attr_Of_Maybe_Ref => @@ -733,6 +739,10 @@ package body Sem_Inst is end if; when Attr_Chain => Set_Instance_On_Chain (S, S_Inst); + when Attr_Maybe_Ref_Chain => + if not Get_Is_Ref (N) then + Set_Instance_On_Chain (S, S_Inst); + end if; when Attr_Chain_Next => null; when Attr_Of_Ref | Attr_Of_Maybe_Ref => @@ -1120,6 +1130,10 @@ package body Sem_Inst is end if; when Attr_Chain => Substitute_On_Chain (S, E, Rep); + when Attr_Maybe_Ref_Chain => + if not Get_Is_Ref (N) then + Substitute_On_Chain (S, E, Rep); + end if; when Attr_Chain_Next => null; when Attr_Of_Ref | Attr_Of_Maybe_Ref => diff --git a/src/vhdl/translate/trans-chap2.adb b/src/vhdl/translate/trans-chap2.adb index 81f4fa7a3..60040ea2e 100644 --- a/src/vhdl/translate/trans-chap2.adb +++ b/src/vhdl/translate/trans-chap2.adb @@ -1433,6 +1433,10 @@ package body Trans.Chap2 is end if; when Attr_Chain => Instantiate_Iir_Chain_Info (Get_Iir (N, F)); + when Attr_Maybe_Ref_Chain => + if not Get_Is_Ref (N) then + Instantiate_Iir_Chain_Info (Get_Iir (N, F)); + end if; when Attr_Chain_Next => null; when Attr_Of_Ref | Attr_Of_Maybe_Ref => diff --git a/src/vhdl/translate/trans-chap9.adb b/src/vhdl/translate/trans-chap9.adb index b1001a4ed..10bd3233f 100644 --- a/src/vhdl/translate/trans-chap9.adb +++ b/src/vhdl/translate/trans-chap9.adb @@ -1213,6 +1213,10 @@ package body Trans.Chap9 is end if; when Attr_Chain => Destroy_Types_In_Chain (Get_Iir (N, F)); + when Attr_Maybe_Ref_Chain => + if not Get_Is_Ref (N) then + Destroy_Types_In_Chain (Get_Iir (N, F)); + end if; when Attr_Chain_Next => null; when Attr_Of_Ref | Attr_Of_Maybe_Ref => |