diff options
author | Tristan Gingold <tgingold@free.fr> | 2018-09-10 20:06:59 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2018-09-10 20:06:59 +0200 |
commit | 89fa7076795f3462a9dff541559b0f39124e5e86 (patch) | |
tree | 873cf4cabfb1b5075bc3a4596fbba4b04ad54f3d | |
parent | 4e220a1bc67acc7924830a01af80ba18bad1810a (diff) | |
download | ghdl-89fa7076795f3462a9dff541559b0f39124e5e86.tar.gz ghdl-89fa7076795f3462a9dff541559b0f39124e5e86.tar.bz2 ghdl-89fa7076795f3462a9dff541559b0f39124e5e86.zip |
Add Element_Type_Flag for associations.
-rw-r--r-- | src/vhdl/iirs.adb | 16 | ||||
-rw-r--r-- | src/vhdl/iirs.ads | 8 | ||||
-rw-r--r-- | src/vhdl/nodes_meta.adb | 516 | ||||
-rw-r--r-- | src/vhdl/nodes_meta.ads | 2 | ||||
-rw-r--r-- | src/vhdl/sem_expr.adb | 2 |
5 files changed, 300 insertions, 244 deletions
diff --git a/src/vhdl/iirs.adb b/src/vhdl/iirs.adb index e47af2432..6d78e9714 100644 --- a/src/vhdl/iirs.adb +++ b/src/vhdl/iirs.adb @@ -1602,6 +1602,22 @@ package body Iirs is Set_Flag1 (Target, Val); end Set_Same_Alternative_Flag; + function Get_Element_Type_Flag (Target : Iir) return Boolean is + begin + pragma Assert (Target /= Null_Iir); + pragma Assert (Has_Element_Type_Flag (Get_Kind (Target)), + "no field Element_Type_Flag"); + return Get_Flag2 (Target); + end Get_Element_Type_Flag; + + procedure Set_Element_Type_Flag (Target : Iir; Val : Boolean) is + begin + pragma Assert (Target /= Null_Iir); + pragma Assert (Has_Element_Type_Flag (Get_Kind (Target)), + "no field Element_Type_Flag"); + Set_Flag2 (Target, Val); + end Set_Element_Type_Flag; + function Get_Architecture (Target : Iir_Entity_Aspect_Entity) return Iir is begin pragma Assert (Target /= Null_Iir); diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads index 33ac760f0..babb410f1 100644 --- a/src/vhdl/iirs.ads +++ b/src/vhdl/iirs.ads @@ -561,6 +561,8 @@ package Iirs is -- -- Get/Set_Same_Alternative_Flag (Flag1) -- + -- Get/Set_Element_Type_Flag (Flag2) + -- -- Only for Iir_Kind_Choice_By_Range: -- Only for Iir_Kind_Choice_By_Expression: -- Get/Set_Choice_Staticness (State1) @@ -6159,6 +6161,12 @@ package Iirs is function Get_Same_Alternative_Flag (Target : Iir) return Boolean; procedure Set_Same_Alternative_Flag (Target : Iir; Val : Boolean); + -- For one-dimensional aggregates: the value associated of the type of the + -- element (vs of the type of the aggregate). Always true before vhdl-08. + -- Field: Flag2 + function Get_Element_Type_Flag (Target : Iir) return Boolean; + procedure Set_Element_Type_Flag (Target : Iir; Val : Boolean); + -- Field: Field3 function Get_Architecture (Target : Iir_Entity_Aspect_Entity) return Iir; procedure Set_Architecture (Target : Iir_Entity_Aspect_Entity; Arch : Iir); diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb index b14c47b93..e0ba87aac 100644 --- a/src/vhdl/nodes_meta.adb +++ b/src/vhdl/nodes_meta.adb @@ -82,6 +82,7 @@ package body Nodes_Meta is Field_Choice_Expression => Type_Iir, Field_Choice_Range => Type_Iir, Field_Same_Alternative_Flag => Type_Boolean, + Field_Element_Type_Flag => Type_Boolean, Field_Architecture => Type_Iir, Field_Block_Specification => Type_Iir, Field_Prev_Block_Configuration => Type_Iir, @@ -480,6 +481,8 @@ package body Nodes_Meta is return "choice_range"; when Field_Same_Alternative_Flag => return "same_alternative_flag"; + when Field_Element_Type_Flag => + return "element_type_flag"; when Field_Architecture => return "architecture"; when Field_Block_Specification => @@ -1680,6 +1683,8 @@ package body Nodes_Meta is return Attr_None; when Field_Same_Alternative_Flag => return Attr_None; + when Field_Element_Type_Flag => + return Attr_None; when Field_Architecture => return Attr_None; when Field_Block_Specification => @@ -2378,6 +2383,7 @@ package body Nodes_Meta is Field_Actual, -- Iir_Kind_Choice_By_Range Field_Same_Alternative_Flag, + Field_Element_Type_Flag, Field_Choice_Staticness, Field_Parent, Field_Chain, @@ -2386,6 +2392,7 @@ package body Nodes_Meta is Field_Choice_Range, -- Iir_Kind_Choice_By_Expression Field_Same_Alternative_Flag, + Field_Element_Type_Flag, Field_Choice_Staticness, Field_Parent, Field_Chain, @@ -2394,18 +2401,21 @@ package body Nodes_Meta is Field_Choice_Expression, -- Iir_Kind_Choice_By_Others Field_Same_Alternative_Flag, + Field_Element_Type_Flag, Field_Parent, Field_Chain, Field_Associated_Expr, Field_Associated_Chain, -- Iir_Kind_Choice_By_None Field_Same_Alternative_Flag, + Field_Element_Type_Flag, Field_Parent, Field_Chain, Field_Associated_Expr, Field_Associated_Chain, -- Iir_Kind_Choice_By_Name Field_Same_Alternative_Flag, + Field_Element_Type_Flag, Field_Parent, Field_Chain, Field_Associated_Expr, @@ -4422,250 +4432,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 => 148, - Iir_Kind_Choice_By_Expression => 155, - Iir_Kind_Choice_By_Others => 160, - Iir_Kind_Choice_By_None => 165, - Iir_Kind_Choice_By_Name => 171, - Iir_Kind_Entity_Aspect_Entity => 173, - Iir_Kind_Entity_Aspect_Configuration => 174, - Iir_Kind_Entity_Aspect_Open => 174, - Iir_Kind_Block_Configuration => 180, - Iir_Kind_Block_Header => 184, - Iir_Kind_Component_Configuration => 191, - Iir_Kind_Binding_Indication => 195, - Iir_Kind_Entity_Class => 197, - Iir_Kind_Attribute_Value => 205, - Iir_Kind_Signature => 208, - Iir_Kind_Aggregate_Info => 215, - Iir_Kind_Procedure_Call => 219, - Iir_Kind_Record_Element_Constraint => 226, - Iir_Kind_Array_Element_Resolution => 228, - Iir_Kind_Record_Resolution => 229, - Iir_Kind_Record_Element_Resolution => 232, - Iir_Kind_Attribute_Specification => 240, - Iir_Kind_Disconnection_Specification => 246, - Iir_Kind_Configuration_Specification => 252, - Iir_Kind_Access_Type_Definition => 260, - Iir_Kind_Incomplete_Type_Definition => 268, - Iir_Kind_Interface_Type_Definition => 275, - Iir_Kind_File_Type_Definition => 282, - Iir_Kind_Protected_Type_Declaration => 291, - Iir_Kind_Record_Type_Definition => 301, - Iir_Kind_Array_Type_Definition => 313, - Iir_Kind_Array_Subtype_Definition => 328, - Iir_Kind_Record_Subtype_Definition => 339, - Iir_Kind_Access_Subtype_Definition => 347, - Iir_Kind_Physical_Subtype_Definition => 357, - Iir_Kind_Floating_Subtype_Definition => 368, - Iir_Kind_Integer_Subtype_Definition => 378, - Iir_Kind_Enumeration_Subtype_Definition => 388, - Iir_Kind_Enumeration_Type_Definition => 399, - Iir_Kind_Integer_Type_Definition => 407, - Iir_Kind_Floating_Type_Definition => 415, - Iir_Kind_Physical_Type_Definition => 426, - Iir_Kind_Range_Expression => 434, - Iir_Kind_Protected_Type_Body => 441, - Iir_Kind_Wildcard_Type_Definition => 446, - Iir_Kind_Subtype_Definition => 451, - Iir_Kind_Scalar_Nature_Definition => 455, - Iir_Kind_Overload_List => 456, - Iir_Kind_Type_Declaration => 463, - Iir_Kind_Anonymous_Type_Declaration => 469, - Iir_Kind_Subtype_Declaration => 476, - Iir_Kind_Nature_Declaration => 482, - Iir_Kind_Subnature_Declaration => 488, - Iir_Kind_Entity_Declaration => 500, - Iir_Kind_Configuration_Declaration => 509, - Iir_Kind_Context_Declaration => 515, - Iir_Kind_Package_Declaration => 529, - 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 => 574, - Iir_Kind_Library_Declaration => 581, - Iir_Kind_Component_Declaration => 591, - Iir_Kind_Attribute_Declaration => 598, - Iir_Kind_Group_Template_Declaration => 604, - Iir_Kind_Group_Declaration => 611, - Iir_Kind_Element_Declaration => 619, - Iir_Kind_Non_Object_Alias_Declaration => 627, - Iir_Kind_Psl_Declaration => 635, - Iir_Kind_Psl_Endpoint_Declaration => 649, - Iir_Kind_Terminal_Declaration => 655, - Iir_Kind_Free_Quantity_Declaration => 664, - Iir_Kind_Across_Quantity_Declaration => 676, - Iir_Kind_Through_Quantity_Declaration => 688, - Iir_Kind_Enumeration_Literal => 699, - Iir_Kind_Function_Declaration => 724, - Iir_Kind_Procedure_Declaration => 748, - Iir_Kind_Function_Body => 758, - Iir_Kind_Procedure_Body => 769, - Iir_Kind_Object_Alias_Declaration => 780, - Iir_Kind_File_Declaration => 794, - Iir_Kind_Guard_Signal_Declaration => 807, - Iir_Kind_Signal_Declaration => 824, - Iir_Kind_Variable_Declaration => 837, - Iir_Kind_Constant_Declaration => 851, - Iir_Kind_Iterator_Declaration => 862, - Iir_Kind_Interface_Constant_Declaration => 878, - Iir_Kind_Interface_Variable_Declaration => 894, - Iir_Kind_Interface_Signal_Declaration => 915, - Iir_Kind_Interface_File_Declaration => 931, - Iir_Kind_Interface_Type_Declaration => 941, - Iir_Kind_Interface_Package_Declaration => 953, - Iir_Kind_Interface_Function_Declaration => 970, - Iir_Kind_Interface_Procedure_Declaration => 983, - Iir_Kind_Signal_Attribute_Declaration => 986, - Iir_Kind_Identity_Operator => 990, - Iir_Kind_Negation_Operator => 994, - Iir_Kind_Absolute_Operator => 998, - Iir_Kind_Not_Operator => 1002, - Iir_Kind_Implicit_Condition_Operator => 1006, - Iir_Kind_Condition_Operator => 1010, - Iir_Kind_Reduction_And_Operator => 1014, - Iir_Kind_Reduction_Or_Operator => 1018, - Iir_Kind_Reduction_Nand_Operator => 1022, - Iir_Kind_Reduction_Nor_Operator => 1026, - Iir_Kind_Reduction_Xor_Operator => 1030, - Iir_Kind_Reduction_Xnor_Operator => 1034, - Iir_Kind_And_Operator => 1039, - Iir_Kind_Or_Operator => 1044, - Iir_Kind_Nand_Operator => 1049, - Iir_Kind_Nor_Operator => 1054, - Iir_Kind_Xor_Operator => 1059, - Iir_Kind_Xnor_Operator => 1064, - Iir_Kind_Equality_Operator => 1069, - Iir_Kind_Inequality_Operator => 1074, - Iir_Kind_Less_Than_Operator => 1079, - Iir_Kind_Less_Than_Or_Equal_Operator => 1084, - Iir_Kind_Greater_Than_Operator => 1089, - Iir_Kind_Greater_Than_Or_Equal_Operator => 1094, - Iir_Kind_Match_Equality_Operator => 1099, - Iir_Kind_Match_Inequality_Operator => 1104, - Iir_Kind_Match_Less_Than_Operator => 1109, - Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1114, - Iir_Kind_Match_Greater_Than_Operator => 1119, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1124, - Iir_Kind_Sll_Operator => 1129, - Iir_Kind_Sla_Operator => 1134, - Iir_Kind_Srl_Operator => 1139, - Iir_Kind_Sra_Operator => 1144, - Iir_Kind_Rol_Operator => 1149, - Iir_Kind_Ror_Operator => 1154, - Iir_Kind_Addition_Operator => 1159, - Iir_Kind_Substraction_Operator => 1164, - Iir_Kind_Concatenation_Operator => 1169, - Iir_Kind_Multiplication_Operator => 1174, - Iir_Kind_Division_Operator => 1179, - Iir_Kind_Modulus_Operator => 1184, - Iir_Kind_Remainder_Operator => 1189, - Iir_Kind_Exponentiation_Operator => 1194, - Iir_Kind_Function_Call => 1202, - Iir_Kind_Aggregate => 1209, - Iir_Kind_Parenthesis_Expression => 1212, - Iir_Kind_Qualified_Expression => 1216, - Iir_Kind_Type_Conversion => 1221, - Iir_Kind_Allocator_By_Expression => 1225, - Iir_Kind_Allocator_By_Subtype => 1230, - Iir_Kind_Selected_Element => 1237, - Iir_Kind_Dereference => 1242, - Iir_Kind_Implicit_Dereference => 1247, - Iir_Kind_Slice_Name => 1254, - Iir_Kind_Indexed_Name => 1260, - Iir_Kind_Psl_Expression => 1262, - Iir_Kind_Sensitized_Process_Statement => 1283, - Iir_Kind_Process_Statement => 1303, - Iir_Kind_Concurrent_Simple_Signal_Assignment => 1315, - Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1327, - Iir_Kind_Concurrent_Selected_Signal_Assignment => 1340, - Iir_Kind_Concurrent_Assertion_Statement => 1348, - Iir_Kind_Concurrent_Procedure_Call_Statement => 1355, - Iir_Kind_Psl_Assert_Statement => 1368, - Iir_Kind_Psl_Cover_Statement => 1381, - Iir_Kind_Block_Statement => 1394, - Iir_Kind_If_Generate_Statement => 1405, - Iir_Kind_Case_Generate_Statement => 1414, - Iir_Kind_For_Generate_Statement => 1423, - Iir_Kind_Component_Instantiation_Statement => 1434, - Iir_Kind_Psl_Default_Clock => 1438, - Iir_Kind_Simple_Simultaneous_Statement => 1445, - Iir_Kind_Generate_Statement_Body => 1456, - Iir_Kind_If_Generate_Else_Clause => 1462, - Iir_Kind_Simple_Signal_Assignment_Statement => 1472, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1482, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1493, - Iir_Kind_Null_Statement => 1497, - Iir_Kind_Assertion_Statement => 1504, - Iir_Kind_Report_Statement => 1510, - Iir_Kind_Wait_Statement => 1518, - Iir_Kind_Variable_Assignment_Statement => 1525, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1532, - Iir_Kind_Return_Statement => 1538, - Iir_Kind_For_Loop_Statement => 1547, - Iir_Kind_While_Loop_Statement => 1556, - Iir_Kind_Next_Statement => 1563, - Iir_Kind_Exit_Statement => 1570, - Iir_Kind_Case_Statement => 1578, - Iir_Kind_Procedure_Call_Statement => 1584, - Iir_Kind_If_Statement => 1594, - Iir_Kind_Elsif => 1600, - Iir_Kind_Character_Literal => 1608, - Iir_Kind_Simple_Name => 1616, - Iir_Kind_Selected_Name => 1625, - Iir_Kind_Operator_Symbol => 1631, - Iir_Kind_Reference_Name => 1634, - Iir_Kind_External_Constant_Name => 1643, - Iir_Kind_External_Signal_Name => 1652, - Iir_Kind_External_Variable_Name => 1661, - Iir_Kind_Selected_By_All_Name => 1667, - Iir_Kind_Parenthesis_Name => 1672, - Iir_Kind_Package_Pathname => 1676, - Iir_Kind_Absolute_Pathname => 1677, - Iir_Kind_Relative_Pathname => 1678, - Iir_Kind_Pathname_Element => 1683, - Iir_Kind_Base_Attribute => 1685, - Iir_Kind_Subtype_Attribute => 1690, - Iir_Kind_Element_Attribute => 1695, - Iir_Kind_Left_Type_Attribute => 1700, - Iir_Kind_Right_Type_Attribute => 1705, - Iir_Kind_High_Type_Attribute => 1710, - Iir_Kind_Low_Type_Attribute => 1715, - Iir_Kind_Ascending_Type_Attribute => 1720, - Iir_Kind_Image_Attribute => 1726, - Iir_Kind_Value_Attribute => 1732, - Iir_Kind_Pos_Attribute => 1738, - Iir_Kind_Val_Attribute => 1744, - Iir_Kind_Succ_Attribute => 1750, - Iir_Kind_Pred_Attribute => 1756, - Iir_Kind_Leftof_Attribute => 1762, - Iir_Kind_Rightof_Attribute => 1768, - Iir_Kind_Delayed_Attribute => 1777, - Iir_Kind_Stable_Attribute => 1786, - Iir_Kind_Quiet_Attribute => 1795, - Iir_Kind_Transaction_Attribute => 1804, - Iir_Kind_Event_Attribute => 1808, - Iir_Kind_Active_Attribute => 1812, - Iir_Kind_Last_Event_Attribute => 1816, - Iir_Kind_Last_Active_Attribute => 1820, - Iir_Kind_Last_Value_Attribute => 1824, - Iir_Kind_Driving_Attribute => 1828, - Iir_Kind_Driving_Value_Attribute => 1832, - Iir_Kind_Behavior_Attribute => 1832, - Iir_Kind_Structure_Attribute => 1832, - Iir_Kind_Simple_Name_Attribute => 1839, - Iir_Kind_Instance_Name_Attribute => 1844, - Iir_Kind_Path_Name_Attribute => 1849, - Iir_Kind_Left_Array_Attribute => 1856, - Iir_Kind_Right_Array_Attribute => 1863, - Iir_Kind_High_Array_Attribute => 1870, - Iir_Kind_Low_Array_Attribute => 1877, - Iir_Kind_Length_Array_Attribute => 1884, - Iir_Kind_Ascending_Array_Attribute => 1891, - Iir_Kind_Range_Array_Attribute => 1898, - Iir_Kind_Reverse_Range_Array_Attribute => 1905, - Iir_Kind_Attribute_Name => 1914 + Iir_Kind_Choice_By_Range => 149, + Iir_Kind_Choice_By_Expression => 157, + Iir_Kind_Choice_By_Others => 163, + Iir_Kind_Choice_By_None => 169, + Iir_Kind_Choice_By_Name => 176, + Iir_Kind_Entity_Aspect_Entity => 178, + Iir_Kind_Entity_Aspect_Configuration => 179, + Iir_Kind_Entity_Aspect_Open => 179, + Iir_Kind_Block_Configuration => 185, + Iir_Kind_Block_Header => 189, + Iir_Kind_Component_Configuration => 196, + Iir_Kind_Binding_Indication => 200, + Iir_Kind_Entity_Class => 202, + Iir_Kind_Attribute_Value => 210, + Iir_Kind_Signature => 213, + Iir_Kind_Aggregate_Info => 220, + Iir_Kind_Procedure_Call => 224, + Iir_Kind_Record_Element_Constraint => 231, + Iir_Kind_Array_Element_Resolution => 233, + Iir_Kind_Record_Resolution => 234, + Iir_Kind_Record_Element_Resolution => 237, + Iir_Kind_Attribute_Specification => 245, + Iir_Kind_Disconnection_Specification => 251, + Iir_Kind_Configuration_Specification => 257, + Iir_Kind_Access_Type_Definition => 265, + Iir_Kind_Incomplete_Type_Definition => 273, + Iir_Kind_Interface_Type_Definition => 280, + Iir_Kind_File_Type_Definition => 287, + Iir_Kind_Protected_Type_Declaration => 296, + Iir_Kind_Record_Type_Definition => 306, + Iir_Kind_Array_Type_Definition => 318, + Iir_Kind_Array_Subtype_Definition => 333, + Iir_Kind_Record_Subtype_Definition => 344, + Iir_Kind_Access_Subtype_Definition => 352, + Iir_Kind_Physical_Subtype_Definition => 362, + Iir_Kind_Floating_Subtype_Definition => 373, + Iir_Kind_Integer_Subtype_Definition => 383, + Iir_Kind_Enumeration_Subtype_Definition => 393, + Iir_Kind_Enumeration_Type_Definition => 404, + Iir_Kind_Integer_Type_Definition => 412, + Iir_Kind_Floating_Type_Definition => 420, + Iir_Kind_Physical_Type_Definition => 431, + Iir_Kind_Range_Expression => 439, + Iir_Kind_Protected_Type_Body => 446, + Iir_Kind_Wildcard_Type_Definition => 451, + Iir_Kind_Subtype_Definition => 456, + Iir_Kind_Scalar_Nature_Definition => 460, + Iir_Kind_Overload_List => 461, + Iir_Kind_Type_Declaration => 468, + Iir_Kind_Anonymous_Type_Declaration => 474, + Iir_Kind_Subtype_Declaration => 481, + Iir_Kind_Nature_Declaration => 487, + Iir_Kind_Subnature_Declaration => 493, + Iir_Kind_Entity_Declaration => 505, + Iir_Kind_Configuration_Declaration => 514, + Iir_Kind_Context_Declaration => 520, + Iir_Kind_Package_Declaration => 534, + Iir_Kind_Package_Instantiation_Declaration => 548, + Iir_Kind_Package_Body => 556, + Iir_Kind_Architecture_Body => 568, + Iir_Kind_Package_Header => 570, + Iir_Kind_Unit_Declaration => 579, + Iir_Kind_Library_Declaration => 586, + Iir_Kind_Component_Declaration => 596, + Iir_Kind_Attribute_Declaration => 603, + Iir_Kind_Group_Template_Declaration => 609, + Iir_Kind_Group_Declaration => 616, + Iir_Kind_Element_Declaration => 624, + Iir_Kind_Non_Object_Alias_Declaration => 632, + Iir_Kind_Psl_Declaration => 640, + Iir_Kind_Psl_Endpoint_Declaration => 654, + Iir_Kind_Terminal_Declaration => 660, + Iir_Kind_Free_Quantity_Declaration => 669, + Iir_Kind_Across_Quantity_Declaration => 681, + Iir_Kind_Through_Quantity_Declaration => 693, + Iir_Kind_Enumeration_Literal => 704, + Iir_Kind_Function_Declaration => 729, + Iir_Kind_Procedure_Declaration => 753, + Iir_Kind_Function_Body => 763, + Iir_Kind_Procedure_Body => 774, + Iir_Kind_Object_Alias_Declaration => 785, + Iir_Kind_File_Declaration => 799, + Iir_Kind_Guard_Signal_Declaration => 812, + Iir_Kind_Signal_Declaration => 829, + Iir_Kind_Variable_Declaration => 842, + Iir_Kind_Constant_Declaration => 856, + Iir_Kind_Iterator_Declaration => 867, + Iir_Kind_Interface_Constant_Declaration => 883, + Iir_Kind_Interface_Variable_Declaration => 899, + Iir_Kind_Interface_Signal_Declaration => 920, + Iir_Kind_Interface_File_Declaration => 936, + Iir_Kind_Interface_Type_Declaration => 946, + Iir_Kind_Interface_Package_Declaration => 958, + Iir_Kind_Interface_Function_Declaration => 975, + Iir_Kind_Interface_Procedure_Declaration => 988, + Iir_Kind_Signal_Attribute_Declaration => 991, + Iir_Kind_Identity_Operator => 995, + Iir_Kind_Negation_Operator => 999, + Iir_Kind_Absolute_Operator => 1003, + Iir_Kind_Not_Operator => 1007, + Iir_Kind_Implicit_Condition_Operator => 1011, + Iir_Kind_Condition_Operator => 1015, + Iir_Kind_Reduction_And_Operator => 1019, + Iir_Kind_Reduction_Or_Operator => 1023, + Iir_Kind_Reduction_Nand_Operator => 1027, + Iir_Kind_Reduction_Nor_Operator => 1031, + Iir_Kind_Reduction_Xor_Operator => 1035, + Iir_Kind_Reduction_Xnor_Operator => 1039, + Iir_Kind_And_Operator => 1044, + Iir_Kind_Or_Operator => 1049, + Iir_Kind_Nand_Operator => 1054, + Iir_Kind_Nor_Operator => 1059, + Iir_Kind_Xor_Operator => 1064, + Iir_Kind_Xnor_Operator => 1069, + Iir_Kind_Equality_Operator => 1074, + Iir_Kind_Inequality_Operator => 1079, + Iir_Kind_Less_Than_Operator => 1084, + Iir_Kind_Less_Than_Or_Equal_Operator => 1089, + Iir_Kind_Greater_Than_Operator => 1094, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1099, + Iir_Kind_Match_Equality_Operator => 1104, + Iir_Kind_Match_Inequality_Operator => 1109, + Iir_Kind_Match_Less_Than_Operator => 1114, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1119, + Iir_Kind_Match_Greater_Than_Operator => 1124, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1129, + Iir_Kind_Sll_Operator => 1134, + Iir_Kind_Sla_Operator => 1139, + Iir_Kind_Srl_Operator => 1144, + Iir_Kind_Sra_Operator => 1149, + Iir_Kind_Rol_Operator => 1154, + Iir_Kind_Ror_Operator => 1159, + Iir_Kind_Addition_Operator => 1164, + Iir_Kind_Substraction_Operator => 1169, + Iir_Kind_Concatenation_Operator => 1174, + Iir_Kind_Multiplication_Operator => 1179, + Iir_Kind_Division_Operator => 1184, + Iir_Kind_Modulus_Operator => 1189, + Iir_Kind_Remainder_Operator => 1194, + Iir_Kind_Exponentiation_Operator => 1199, + Iir_Kind_Function_Call => 1207, + Iir_Kind_Aggregate => 1214, + Iir_Kind_Parenthesis_Expression => 1217, + Iir_Kind_Qualified_Expression => 1221, + Iir_Kind_Type_Conversion => 1226, + Iir_Kind_Allocator_By_Expression => 1230, + Iir_Kind_Allocator_By_Subtype => 1235, + Iir_Kind_Selected_Element => 1242, + Iir_Kind_Dereference => 1247, + Iir_Kind_Implicit_Dereference => 1252, + Iir_Kind_Slice_Name => 1259, + Iir_Kind_Indexed_Name => 1265, + Iir_Kind_Psl_Expression => 1267, + Iir_Kind_Sensitized_Process_Statement => 1288, + Iir_Kind_Process_Statement => 1308, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1320, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1332, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1345, + Iir_Kind_Concurrent_Assertion_Statement => 1353, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1360, + Iir_Kind_Psl_Assert_Statement => 1373, + Iir_Kind_Psl_Cover_Statement => 1386, + Iir_Kind_Block_Statement => 1399, + Iir_Kind_If_Generate_Statement => 1410, + Iir_Kind_Case_Generate_Statement => 1419, + Iir_Kind_For_Generate_Statement => 1428, + Iir_Kind_Component_Instantiation_Statement => 1439, + Iir_Kind_Psl_Default_Clock => 1443, + Iir_Kind_Simple_Simultaneous_Statement => 1450, + Iir_Kind_Generate_Statement_Body => 1461, + Iir_Kind_If_Generate_Else_Clause => 1467, + Iir_Kind_Simple_Signal_Assignment_Statement => 1477, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1487, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1498, + Iir_Kind_Null_Statement => 1502, + Iir_Kind_Assertion_Statement => 1509, + Iir_Kind_Report_Statement => 1515, + Iir_Kind_Wait_Statement => 1523, + Iir_Kind_Variable_Assignment_Statement => 1530, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1537, + Iir_Kind_Return_Statement => 1543, + Iir_Kind_For_Loop_Statement => 1552, + Iir_Kind_While_Loop_Statement => 1561, + Iir_Kind_Next_Statement => 1568, + Iir_Kind_Exit_Statement => 1575, + Iir_Kind_Case_Statement => 1583, + Iir_Kind_Procedure_Call_Statement => 1589, + Iir_Kind_If_Statement => 1599, + Iir_Kind_Elsif => 1605, + Iir_Kind_Character_Literal => 1613, + Iir_Kind_Simple_Name => 1621, + Iir_Kind_Selected_Name => 1630, + Iir_Kind_Operator_Symbol => 1636, + Iir_Kind_Reference_Name => 1639, + Iir_Kind_External_Constant_Name => 1648, + Iir_Kind_External_Signal_Name => 1657, + Iir_Kind_External_Variable_Name => 1666, + Iir_Kind_Selected_By_All_Name => 1672, + Iir_Kind_Parenthesis_Name => 1677, + Iir_Kind_Package_Pathname => 1681, + Iir_Kind_Absolute_Pathname => 1682, + Iir_Kind_Relative_Pathname => 1683, + Iir_Kind_Pathname_Element => 1688, + Iir_Kind_Base_Attribute => 1690, + Iir_Kind_Subtype_Attribute => 1695, + Iir_Kind_Element_Attribute => 1700, + Iir_Kind_Left_Type_Attribute => 1705, + Iir_Kind_Right_Type_Attribute => 1710, + Iir_Kind_High_Type_Attribute => 1715, + Iir_Kind_Low_Type_Attribute => 1720, + Iir_Kind_Ascending_Type_Attribute => 1725, + Iir_Kind_Image_Attribute => 1731, + Iir_Kind_Value_Attribute => 1737, + Iir_Kind_Pos_Attribute => 1743, + Iir_Kind_Val_Attribute => 1749, + Iir_Kind_Succ_Attribute => 1755, + Iir_Kind_Pred_Attribute => 1761, + Iir_Kind_Leftof_Attribute => 1767, + Iir_Kind_Rightof_Attribute => 1773, + Iir_Kind_Delayed_Attribute => 1782, + Iir_Kind_Stable_Attribute => 1791, + Iir_Kind_Quiet_Attribute => 1800, + Iir_Kind_Transaction_Attribute => 1809, + Iir_Kind_Event_Attribute => 1813, + Iir_Kind_Active_Attribute => 1817, + Iir_Kind_Last_Event_Attribute => 1821, + Iir_Kind_Last_Active_Attribute => 1825, + Iir_Kind_Last_Value_Attribute => 1829, + Iir_Kind_Driving_Attribute => 1833, + Iir_Kind_Driving_Value_Attribute => 1837, + Iir_Kind_Behavior_Attribute => 1837, + Iir_Kind_Structure_Attribute => 1837, + Iir_Kind_Simple_Name_Attribute => 1844, + Iir_Kind_Instance_Name_Attribute => 1849, + Iir_Kind_Path_Name_Attribute => 1854, + Iir_Kind_Left_Array_Attribute => 1861, + Iir_Kind_Right_Array_Attribute => 1868, + Iir_Kind_High_Array_Attribute => 1875, + Iir_Kind_Low_Array_Attribute => 1882, + Iir_Kind_Length_Array_Attribute => 1889, + Iir_Kind_Ascending_Array_Attribute => 1896, + Iir_Kind_Range_Array_Attribute => 1903, + Iir_Kind_Reverse_Range_Array_Attribute => 1910, + Iir_Kind_Attribute_Name => 1919 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -4718,6 +4728,8 @@ package body Nodes_Meta is return Get_After_Drivers_Flag (N); when Field_Same_Alternative_Flag => return Get_Same_Alternative_Flag (N); + when Field_Element_Type_Flag => + return Get_Element_Type_Flag (N); when Field_Need_Body => return Get_Need_Body (N); when Field_Macro_Expanded_Flag => @@ -4850,6 +4862,8 @@ package body Nodes_Meta is Set_After_Drivers_Flag (N, V); when Field_Same_Alternative_Flag => Set_Same_Alternative_Flag (N, V); + when Field_Element_Type_Flag => + Set_Element_Type_Flag (N, V); when Field_Need_Body => Set_Need_Body (N, V); when Field_Macro_Expanded_Flag => @@ -7075,6 +7089,20 @@ package body Nodes_Meta is end case; end Has_Same_Alternative_Flag; + function Has_Element_Type_Flag (K : Iir_Kind) return Boolean is + begin + case K is + when 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 => + return True; + when others => + return False; + end case; + end Has_Element_Type_Flag; + function Has_Architecture (K : Iir_Kind) return Boolean is begin return K = Iir_Kind_Entity_Aspect_Entity; diff --git a/src/vhdl/nodes_meta.ads b/src/vhdl/nodes_meta.ads index 2ae476761..29bedbf54 100644 --- a/src/vhdl/nodes_meta.ads +++ b/src/vhdl/nodes_meta.ads @@ -123,6 +123,7 @@ package Nodes_Meta is Field_Choice_Expression, Field_Choice_Range, Field_Same_Alternative_Flag, + Field_Element_Type_Flag, Field_Architecture, Field_Block_Specification, Field_Prev_Block_Configuration, @@ -650,6 +651,7 @@ package Nodes_Meta is function Has_Choice_Expression (K : Iir_Kind) return Boolean; function Has_Choice_Range (K : Iir_Kind) return Boolean; function Has_Same_Alternative_Flag (K : Iir_Kind) return Boolean; + function Has_Element_Type_Flag (K : Iir_Kind) return Boolean; function Has_Architecture (K : Iir_Kind) return Boolean; function Has_Block_Specification (K : Iir_Kind) return Boolean; function Has_Prev_Block_Configuration (K : Iir_Kind) return Boolean; diff --git a/src/vhdl/sem_expr.adb b/src/vhdl/sem_expr.adb index 99ae627d2..be236cc05 100644 --- a/src/vhdl/sem_expr.adb +++ b/src/vhdl/sem_expr.adb @@ -3158,6 +3158,8 @@ package body Sem_Expr is end if; end if; + Set_Element_Type_Flag (El, not Is_Array); + if Expr /= Null_Iir then El_Staticness := Get_Expr_Staticness (Expr); Expr := Eval_Expr_If_Static (Expr); |