diff options
author | Tristan Gingold <tgingold@free.fr> | 2020-07-09 06:47:37 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2020-07-18 19:19:57 +0200 |
commit | 297b0581e0e629602234f0bb0cbcbd435d813192 (patch) | |
tree | 4328dc1099b18f78341bdb584a40ac3be8135ed7 /src/vhdl | |
parent | 00c0959b01803f6db71e6380a6ec760a98f7b5cd (diff) | |
download | ghdl-297b0581e0e629602234f0bb0cbcbd435d813192.tar.gz ghdl-297b0581e0e629602234f0bb0cbcbd435d813192.tar.bz2 ghdl-297b0581e0e629602234f0bb0cbcbd435d813192.zip |
vhdl: fix ownership for recors subtypes.
Diffstat (limited to 'src/vhdl')
-rw-r--r-- | src/vhdl/vhdl-nodes.ads | 10 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes_meta.adb | 542 | ||||
-rw-r--r-- | src/vhdl/vhdl-sem_assocs.adb | 3 | ||||
-rw-r--r-- | src/vhdl/vhdl-sem_types.adb | 6 |
4 files changed, 288 insertions, 273 deletions
diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index 5c2ed4886..629f4671e 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -2000,8 +2000,6 @@ package Vhdl.Nodes is -- Record subtype definition which defines this constraint. -- Get/Set_Parent (Field0) -- - -- Get/Set_Type (Field1) - -- -- For Owned_Elements_Chain, so that the node has an owner. -- Get/Set_Chain (Field2) -- @@ -2011,7 +2009,13 @@ package Vhdl.Nodes is -- the first record element, increasing by one for each successive element. -- Get/Set_Element_Position (Field4) -- + -- Get/Set_Subtype_Indication (Field5) + -- + -- Get/Set_Type (Field1) + -- -- Get/Set_Visible_Flag (Flag4) + -- + -- Get/Set_Is_Ref (Flag12) -- Iir_Kind_Attribute_Declaration (Short) -- @@ -2912,7 +2916,7 @@ package Vhdl.Nodes is -- -- Get/Set_Constraint_State (State2) -- - -- Always false for record type: elements are owned through + -- Always true for record subtype: elements are owned through -- Owned_Elements_Chain -- Get/Set_Is_Ref (Flag12) diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index 881859b1c..20f40cfe4 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -2772,10 +2772,12 @@ package body Vhdl.Nodes_Meta is -- Iir_Kind_Record_Element_Constraint Field_Identifier, Field_Element_Position, + Field_Is_Ref, Field_Visible_Flag, Field_Parent, - Field_Type, Field_Chain, + Field_Subtype_Indication, + Field_Type, -- Iir_Kind_Array_Element_Resolution Field_Resolution_Indication, Field_Element_Subtype_Indication, @@ -5186,273 +5188,273 @@ package body Vhdl.Nodes_Meta is Iir_Kind_Signature => 225, Iir_Kind_Aggregate_Info => 232, Iir_Kind_Procedure_Call => 236, - Iir_Kind_Record_Element_Constraint => 242, - Iir_Kind_Array_Element_Resolution => 244, - Iir_Kind_Record_Resolution => 245, - Iir_Kind_Record_Element_Resolution => 248, - Iir_Kind_Break_Element => 252, - Iir_Kind_Attribute_Specification => 260, - Iir_Kind_Disconnection_Specification => 266, - Iir_Kind_Step_Limit_Specification => 272, - Iir_Kind_Configuration_Specification => 278, - Iir_Kind_Access_Type_Definition => 286, - Iir_Kind_Incomplete_Type_Definition => 294, - Iir_Kind_Interface_Type_Definition => 301, - Iir_Kind_File_Type_Definition => 308, - Iir_Kind_Protected_Type_Declaration => 318, - Iir_Kind_Record_Type_Definition => 329, - Iir_Kind_Array_Type_Definition => 341, - Iir_Kind_Array_Subtype_Definition => 356, - Iir_Kind_Record_Subtype_Definition => 369, - Iir_Kind_Access_Subtype_Definition => 377, - Iir_Kind_Physical_Subtype_Definition => 387, - Iir_Kind_Floating_Subtype_Definition => 398, - Iir_Kind_Integer_Subtype_Definition => 408, - Iir_Kind_Enumeration_Subtype_Definition => 418, - Iir_Kind_Enumeration_Type_Definition => 430, - Iir_Kind_Integer_Type_Definition => 439, - Iir_Kind_Floating_Type_Definition => 448, - Iir_Kind_Physical_Type_Definition => 460, - Iir_Kind_Range_Expression => 468, - Iir_Kind_Protected_Type_Body => 476, - Iir_Kind_Wildcard_Type_Definition => 481, - Iir_Kind_Subtype_Definition => 488, - Iir_Kind_Scalar_Nature_Definition => 496, - Iir_Kind_Record_Nature_Definition => 509, - Iir_Kind_Array_Nature_Definition => 523, - Iir_Kind_Array_Subnature_Definition => 538, - Iir_Kind_Overload_List => 539, - Iir_Kind_Entity_Declaration => 552, - Iir_Kind_Configuration_Declaration => 561, - Iir_Kind_Context_Declaration => 567, - Iir_Kind_Package_Declaration => 582, - Iir_Kind_Package_Instantiation_Declaration => 596, - Iir_Kind_Vmode_Declaration => 608, - Iir_Kind_Vprop_Declaration => 620, - Iir_Kind_Vunit_Declaration => 633, - Iir_Kind_Package_Body => 641, - Iir_Kind_Architecture_Body => 654, - Iir_Kind_Type_Declaration => 661, - Iir_Kind_Anonymous_Type_Declaration => 667, - Iir_Kind_Subtype_Declaration => 675, - Iir_Kind_Nature_Declaration => 681, - Iir_Kind_Subnature_Declaration => 688, - Iir_Kind_Package_Header => 690, - Iir_Kind_Unit_Declaration => 699, - Iir_Kind_Library_Declaration => 707, - Iir_Kind_Component_Declaration => 717, - Iir_Kind_Attribute_Declaration => 724, - Iir_Kind_Group_Template_Declaration => 730, - Iir_Kind_Group_Declaration => 737, - Iir_Kind_Element_Declaration => 745, - Iir_Kind_Nature_Element_Declaration => 752, - Iir_Kind_Non_Object_Alias_Declaration => 760, - Iir_Kind_Psl_Declaration => 768, - Iir_Kind_Psl_Endpoint_Declaration => 782, - Iir_Kind_Enumeration_Literal => 793, - Iir_Kind_Function_Declaration => 818, - Iir_Kind_Procedure_Declaration => 842, - Iir_Kind_Function_Body => 852, - Iir_Kind_Procedure_Body => 863, - Iir_Kind_Terminal_Declaration => 872, - Iir_Kind_Object_Alias_Declaration => 884, - Iir_Kind_Free_Quantity_Declaration => 896, - Iir_Kind_Spectrum_Quantity_Declaration => 909, - Iir_Kind_Noise_Quantity_Declaration => 921, - Iir_Kind_Across_Quantity_Declaration => 937, - Iir_Kind_Through_Quantity_Declaration => 953, - Iir_Kind_File_Declaration => 968, - Iir_Kind_Guard_Signal_Declaration => 981, - Iir_Kind_Signal_Declaration => 998, - Iir_Kind_Variable_Declaration => 1011, - Iir_Kind_Constant_Declaration => 1025, - Iir_Kind_Iterator_Declaration => 1037, - Iir_Kind_Interface_Constant_Declaration => 1054, - Iir_Kind_Interface_Variable_Declaration => 1070, - Iir_Kind_Interface_Signal_Declaration => 1091, - Iir_Kind_Interface_File_Declaration => 1107, - Iir_Kind_Interface_Quantity_Declaration => 1123, - Iir_Kind_Interface_Terminal_Declaration => 1135, - Iir_Kind_Interface_Type_Declaration => 1146, - Iir_Kind_Interface_Package_Declaration => 1159, - Iir_Kind_Interface_Function_Declaration => 1177, - Iir_Kind_Interface_Procedure_Declaration => 1191, - Iir_Kind_Anonymous_Signal_Declaration => 1200, - Iir_Kind_Signal_Attribute_Declaration => 1203, - Iir_Kind_Identity_Operator => 1207, - Iir_Kind_Negation_Operator => 1211, - Iir_Kind_Absolute_Operator => 1215, - Iir_Kind_Not_Operator => 1219, - Iir_Kind_Implicit_Condition_Operator => 1223, - Iir_Kind_Condition_Operator => 1227, - Iir_Kind_Reduction_And_Operator => 1231, - Iir_Kind_Reduction_Or_Operator => 1235, - Iir_Kind_Reduction_Nand_Operator => 1239, - Iir_Kind_Reduction_Nor_Operator => 1243, - Iir_Kind_Reduction_Xor_Operator => 1247, - Iir_Kind_Reduction_Xnor_Operator => 1251, - Iir_Kind_And_Operator => 1256, - Iir_Kind_Or_Operator => 1261, - Iir_Kind_Nand_Operator => 1266, - Iir_Kind_Nor_Operator => 1271, - Iir_Kind_Xor_Operator => 1276, - Iir_Kind_Xnor_Operator => 1281, - Iir_Kind_Equality_Operator => 1286, - Iir_Kind_Inequality_Operator => 1291, - Iir_Kind_Less_Than_Operator => 1296, - Iir_Kind_Less_Than_Or_Equal_Operator => 1301, - Iir_Kind_Greater_Than_Operator => 1306, - Iir_Kind_Greater_Than_Or_Equal_Operator => 1311, - Iir_Kind_Match_Equality_Operator => 1316, - Iir_Kind_Match_Inequality_Operator => 1321, - Iir_Kind_Match_Less_Than_Operator => 1326, - Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1331, - Iir_Kind_Match_Greater_Than_Operator => 1336, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1341, - Iir_Kind_Sll_Operator => 1346, - Iir_Kind_Sla_Operator => 1351, - Iir_Kind_Srl_Operator => 1356, - Iir_Kind_Sra_Operator => 1361, - Iir_Kind_Rol_Operator => 1366, - Iir_Kind_Ror_Operator => 1371, - Iir_Kind_Addition_Operator => 1376, - Iir_Kind_Substraction_Operator => 1381, - Iir_Kind_Concatenation_Operator => 1386, - Iir_Kind_Multiplication_Operator => 1391, - Iir_Kind_Division_Operator => 1396, - Iir_Kind_Modulus_Operator => 1401, - Iir_Kind_Remainder_Operator => 1406, - Iir_Kind_Exponentiation_Operator => 1411, - Iir_Kind_Function_Call => 1419, - Iir_Kind_Aggregate => 1426, - Iir_Kind_Parenthesis_Expression => 1429, - Iir_Kind_Qualified_Expression => 1433, - Iir_Kind_Type_Conversion => 1438, - Iir_Kind_Allocator_By_Expression => 1443, - Iir_Kind_Allocator_By_Subtype => 1449, - Iir_Kind_Selected_Element => 1457, - Iir_Kind_Dereference => 1462, - Iir_Kind_Implicit_Dereference => 1467, - Iir_Kind_Slice_Name => 1474, - Iir_Kind_Indexed_Name => 1480, - Iir_Kind_Psl_Prev => 1486, - Iir_Kind_Psl_Stable => 1491, - Iir_Kind_Psl_Rose => 1496, - Iir_Kind_Psl_Fell => 1501, - Iir_Kind_Psl_Expression => 1503, - Iir_Kind_Sensitized_Process_Statement => 1524, - Iir_Kind_Process_Statement => 1544, - Iir_Kind_Concurrent_Simple_Signal_Assignment => 1557, - Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1570, - Iir_Kind_Concurrent_Selected_Signal_Assignment => 1584, - Iir_Kind_Concurrent_Assertion_Statement => 1592, - Iir_Kind_Concurrent_Procedure_Call_Statement => 1599, - Iir_Kind_Concurrent_Break_Statement => 1607, - Iir_Kind_Psl_Assert_Directive => 1620, - Iir_Kind_Psl_Assume_Directive => 1631, - Iir_Kind_Psl_Cover_Directive => 1643, - Iir_Kind_Psl_Restrict_Directive => 1654, - Iir_Kind_Block_Statement => 1668, - Iir_Kind_If_Generate_Statement => 1679, - Iir_Kind_Case_Generate_Statement => 1688, - Iir_Kind_For_Generate_Statement => 1697, - Iir_Kind_Component_Instantiation_Statement => 1708, - Iir_Kind_Psl_Default_Clock => 1712, - Iir_Kind_Generate_Statement_Body => 1723, - Iir_Kind_If_Generate_Else_Clause => 1729, - Iir_Kind_Simple_Simultaneous_Statement => 1736, - Iir_Kind_Simultaneous_Null_Statement => 1740, - Iir_Kind_Simultaneous_Procedural_Statement => 1751, - Iir_Kind_Simultaneous_Case_Statement => 1760, - Iir_Kind_Simultaneous_If_Statement => 1769, - Iir_Kind_Simultaneous_Elsif => 1775, - Iir_Kind_Simple_Signal_Assignment_Statement => 1786, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1797, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1809, - Iir_Kind_Null_Statement => 1813, - Iir_Kind_Assertion_Statement => 1820, - Iir_Kind_Report_Statement => 1826, - Iir_Kind_Wait_Statement => 1834, - Iir_Kind_Variable_Assignment_Statement => 1841, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1848, - Iir_Kind_Return_Statement => 1854, - Iir_Kind_For_Loop_Statement => 1865, - Iir_Kind_While_Loop_Statement => 1876, - Iir_Kind_Next_Statement => 1883, - Iir_Kind_Exit_Statement => 1890, - Iir_Kind_Case_Statement => 1898, - Iir_Kind_Procedure_Call_Statement => 1904, - Iir_Kind_Break_Statement => 1911, - Iir_Kind_If_Statement => 1921, - Iir_Kind_Elsif => 1927, - Iir_Kind_Character_Literal => 1935, - Iir_Kind_Simple_Name => 1943, - Iir_Kind_Selected_Name => 1952, - Iir_Kind_Operator_Symbol => 1958, - Iir_Kind_Reference_Name => 1963, - Iir_Kind_External_Constant_Name => 1972, - Iir_Kind_External_Signal_Name => 1981, - Iir_Kind_External_Variable_Name => 1991, - Iir_Kind_Selected_By_All_Name => 1997, - Iir_Kind_Parenthesis_Name => 2002, - Iir_Kind_Package_Pathname => 2006, - Iir_Kind_Absolute_Pathname => 2007, - Iir_Kind_Relative_Pathname => 2008, - Iir_Kind_Pathname_Element => 2013, - Iir_Kind_Base_Attribute => 2015, - Iir_Kind_Subtype_Attribute => 2020, - Iir_Kind_Element_Attribute => 2025, - Iir_Kind_Across_Attribute => 2030, - Iir_Kind_Through_Attribute => 2035, - Iir_Kind_Nature_Reference_Attribute => 2039, - Iir_Kind_Left_Type_Attribute => 2044, - Iir_Kind_Right_Type_Attribute => 2049, - Iir_Kind_High_Type_Attribute => 2054, - Iir_Kind_Low_Type_Attribute => 2059, - Iir_Kind_Ascending_Type_Attribute => 2064, - Iir_Kind_Image_Attribute => 2070, - Iir_Kind_Value_Attribute => 2076, - Iir_Kind_Pos_Attribute => 2082, - Iir_Kind_Val_Attribute => 2088, - Iir_Kind_Succ_Attribute => 2094, - Iir_Kind_Pred_Attribute => 2100, - Iir_Kind_Leftof_Attribute => 2106, - Iir_Kind_Rightof_Attribute => 2112, - Iir_Kind_Signal_Slew_Attribute => 2120, - Iir_Kind_Quantity_Slew_Attribute => 2128, - Iir_Kind_Ramp_Attribute => 2136, - Iir_Kind_Zoh_Attribute => 2144, - Iir_Kind_Ltf_Attribute => 2152, - Iir_Kind_Ztf_Attribute => 2162, - Iir_Kind_Dot_Attribute => 2169, - Iir_Kind_Integ_Attribute => 2176, - Iir_Kind_Above_Attribute => 2184, - Iir_Kind_Quantity_Delayed_Attribute => 2192, - Iir_Kind_Delayed_Attribute => 2201, - Iir_Kind_Stable_Attribute => 2210, - Iir_Kind_Quiet_Attribute => 2219, - Iir_Kind_Transaction_Attribute => 2228, - Iir_Kind_Event_Attribute => 2232, - Iir_Kind_Active_Attribute => 2236, - Iir_Kind_Last_Event_Attribute => 2240, - Iir_Kind_Last_Active_Attribute => 2244, - Iir_Kind_Last_Value_Attribute => 2248, - Iir_Kind_Driving_Attribute => 2252, - Iir_Kind_Driving_Value_Attribute => 2256, - Iir_Kind_Behavior_Attribute => 2256, - Iir_Kind_Structure_Attribute => 2256, - Iir_Kind_Simple_Name_Attribute => 2263, - Iir_Kind_Instance_Name_Attribute => 2268, - Iir_Kind_Path_Name_Attribute => 2273, - Iir_Kind_Left_Array_Attribute => 2280, - Iir_Kind_Right_Array_Attribute => 2287, - Iir_Kind_High_Array_Attribute => 2294, - Iir_Kind_Low_Array_Attribute => 2301, - Iir_Kind_Length_Array_Attribute => 2308, - Iir_Kind_Ascending_Array_Attribute => 2315, - Iir_Kind_Range_Array_Attribute => 2322, - Iir_Kind_Reverse_Range_Array_Attribute => 2329, - Iir_Kind_Attribute_Name => 2338 + Iir_Kind_Record_Element_Constraint => 244, + Iir_Kind_Array_Element_Resolution => 246, + Iir_Kind_Record_Resolution => 247, + Iir_Kind_Record_Element_Resolution => 250, + Iir_Kind_Break_Element => 254, + Iir_Kind_Attribute_Specification => 262, + Iir_Kind_Disconnection_Specification => 268, + Iir_Kind_Step_Limit_Specification => 274, + Iir_Kind_Configuration_Specification => 280, + Iir_Kind_Access_Type_Definition => 288, + Iir_Kind_Incomplete_Type_Definition => 296, + Iir_Kind_Interface_Type_Definition => 303, + Iir_Kind_File_Type_Definition => 310, + Iir_Kind_Protected_Type_Declaration => 320, + Iir_Kind_Record_Type_Definition => 331, + Iir_Kind_Array_Type_Definition => 343, + Iir_Kind_Array_Subtype_Definition => 358, + Iir_Kind_Record_Subtype_Definition => 371, + Iir_Kind_Access_Subtype_Definition => 379, + Iir_Kind_Physical_Subtype_Definition => 389, + Iir_Kind_Floating_Subtype_Definition => 400, + Iir_Kind_Integer_Subtype_Definition => 410, + Iir_Kind_Enumeration_Subtype_Definition => 420, + Iir_Kind_Enumeration_Type_Definition => 432, + Iir_Kind_Integer_Type_Definition => 441, + Iir_Kind_Floating_Type_Definition => 450, + Iir_Kind_Physical_Type_Definition => 462, + Iir_Kind_Range_Expression => 470, + Iir_Kind_Protected_Type_Body => 478, + Iir_Kind_Wildcard_Type_Definition => 483, + Iir_Kind_Subtype_Definition => 490, + Iir_Kind_Scalar_Nature_Definition => 498, + Iir_Kind_Record_Nature_Definition => 511, + Iir_Kind_Array_Nature_Definition => 525, + Iir_Kind_Array_Subnature_Definition => 540, + Iir_Kind_Overload_List => 541, + Iir_Kind_Entity_Declaration => 554, + Iir_Kind_Configuration_Declaration => 563, + Iir_Kind_Context_Declaration => 569, + Iir_Kind_Package_Declaration => 584, + Iir_Kind_Package_Instantiation_Declaration => 598, + Iir_Kind_Vmode_Declaration => 610, + Iir_Kind_Vprop_Declaration => 622, + Iir_Kind_Vunit_Declaration => 635, + Iir_Kind_Package_Body => 643, + Iir_Kind_Architecture_Body => 656, + Iir_Kind_Type_Declaration => 663, + Iir_Kind_Anonymous_Type_Declaration => 669, + Iir_Kind_Subtype_Declaration => 677, + Iir_Kind_Nature_Declaration => 683, + Iir_Kind_Subnature_Declaration => 690, + Iir_Kind_Package_Header => 692, + Iir_Kind_Unit_Declaration => 701, + Iir_Kind_Library_Declaration => 709, + Iir_Kind_Component_Declaration => 719, + Iir_Kind_Attribute_Declaration => 726, + Iir_Kind_Group_Template_Declaration => 732, + Iir_Kind_Group_Declaration => 739, + Iir_Kind_Element_Declaration => 747, + Iir_Kind_Nature_Element_Declaration => 754, + Iir_Kind_Non_Object_Alias_Declaration => 762, + Iir_Kind_Psl_Declaration => 770, + Iir_Kind_Psl_Endpoint_Declaration => 784, + Iir_Kind_Enumeration_Literal => 795, + Iir_Kind_Function_Declaration => 820, + Iir_Kind_Procedure_Declaration => 844, + Iir_Kind_Function_Body => 854, + Iir_Kind_Procedure_Body => 865, + Iir_Kind_Terminal_Declaration => 874, + Iir_Kind_Object_Alias_Declaration => 886, + Iir_Kind_Free_Quantity_Declaration => 898, + Iir_Kind_Spectrum_Quantity_Declaration => 911, + Iir_Kind_Noise_Quantity_Declaration => 923, + Iir_Kind_Across_Quantity_Declaration => 939, + Iir_Kind_Through_Quantity_Declaration => 955, + Iir_Kind_File_Declaration => 970, + Iir_Kind_Guard_Signal_Declaration => 983, + Iir_Kind_Signal_Declaration => 1000, + Iir_Kind_Variable_Declaration => 1013, + Iir_Kind_Constant_Declaration => 1027, + Iir_Kind_Iterator_Declaration => 1039, + Iir_Kind_Interface_Constant_Declaration => 1056, + Iir_Kind_Interface_Variable_Declaration => 1072, + Iir_Kind_Interface_Signal_Declaration => 1093, + Iir_Kind_Interface_File_Declaration => 1109, + Iir_Kind_Interface_Quantity_Declaration => 1125, + Iir_Kind_Interface_Terminal_Declaration => 1137, + Iir_Kind_Interface_Type_Declaration => 1148, + Iir_Kind_Interface_Package_Declaration => 1161, + Iir_Kind_Interface_Function_Declaration => 1179, + Iir_Kind_Interface_Procedure_Declaration => 1193, + Iir_Kind_Anonymous_Signal_Declaration => 1202, + Iir_Kind_Signal_Attribute_Declaration => 1205, + Iir_Kind_Identity_Operator => 1209, + Iir_Kind_Negation_Operator => 1213, + Iir_Kind_Absolute_Operator => 1217, + Iir_Kind_Not_Operator => 1221, + Iir_Kind_Implicit_Condition_Operator => 1225, + Iir_Kind_Condition_Operator => 1229, + Iir_Kind_Reduction_And_Operator => 1233, + Iir_Kind_Reduction_Or_Operator => 1237, + Iir_Kind_Reduction_Nand_Operator => 1241, + Iir_Kind_Reduction_Nor_Operator => 1245, + Iir_Kind_Reduction_Xor_Operator => 1249, + Iir_Kind_Reduction_Xnor_Operator => 1253, + Iir_Kind_And_Operator => 1258, + Iir_Kind_Or_Operator => 1263, + Iir_Kind_Nand_Operator => 1268, + Iir_Kind_Nor_Operator => 1273, + Iir_Kind_Xor_Operator => 1278, + Iir_Kind_Xnor_Operator => 1283, + Iir_Kind_Equality_Operator => 1288, + Iir_Kind_Inequality_Operator => 1293, + Iir_Kind_Less_Than_Operator => 1298, + Iir_Kind_Less_Than_Or_Equal_Operator => 1303, + Iir_Kind_Greater_Than_Operator => 1308, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1313, + Iir_Kind_Match_Equality_Operator => 1318, + Iir_Kind_Match_Inequality_Operator => 1323, + Iir_Kind_Match_Less_Than_Operator => 1328, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1333, + Iir_Kind_Match_Greater_Than_Operator => 1338, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1343, + Iir_Kind_Sll_Operator => 1348, + Iir_Kind_Sla_Operator => 1353, + Iir_Kind_Srl_Operator => 1358, + Iir_Kind_Sra_Operator => 1363, + Iir_Kind_Rol_Operator => 1368, + Iir_Kind_Ror_Operator => 1373, + Iir_Kind_Addition_Operator => 1378, + Iir_Kind_Substraction_Operator => 1383, + Iir_Kind_Concatenation_Operator => 1388, + Iir_Kind_Multiplication_Operator => 1393, + Iir_Kind_Division_Operator => 1398, + Iir_Kind_Modulus_Operator => 1403, + Iir_Kind_Remainder_Operator => 1408, + Iir_Kind_Exponentiation_Operator => 1413, + Iir_Kind_Function_Call => 1421, + Iir_Kind_Aggregate => 1428, + Iir_Kind_Parenthesis_Expression => 1431, + Iir_Kind_Qualified_Expression => 1435, + Iir_Kind_Type_Conversion => 1440, + Iir_Kind_Allocator_By_Expression => 1445, + Iir_Kind_Allocator_By_Subtype => 1451, + Iir_Kind_Selected_Element => 1459, + Iir_Kind_Dereference => 1464, + Iir_Kind_Implicit_Dereference => 1469, + Iir_Kind_Slice_Name => 1476, + Iir_Kind_Indexed_Name => 1482, + Iir_Kind_Psl_Prev => 1488, + Iir_Kind_Psl_Stable => 1493, + Iir_Kind_Psl_Rose => 1498, + Iir_Kind_Psl_Fell => 1503, + Iir_Kind_Psl_Expression => 1505, + Iir_Kind_Sensitized_Process_Statement => 1526, + Iir_Kind_Process_Statement => 1546, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1559, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1572, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1586, + Iir_Kind_Concurrent_Assertion_Statement => 1594, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1601, + Iir_Kind_Concurrent_Break_Statement => 1609, + Iir_Kind_Psl_Assert_Directive => 1622, + Iir_Kind_Psl_Assume_Directive => 1633, + Iir_Kind_Psl_Cover_Directive => 1645, + Iir_Kind_Psl_Restrict_Directive => 1656, + Iir_Kind_Block_Statement => 1670, + Iir_Kind_If_Generate_Statement => 1681, + Iir_Kind_Case_Generate_Statement => 1690, + Iir_Kind_For_Generate_Statement => 1699, + Iir_Kind_Component_Instantiation_Statement => 1710, + Iir_Kind_Psl_Default_Clock => 1714, + Iir_Kind_Generate_Statement_Body => 1725, + Iir_Kind_If_Generate_Else_Clause => 1731, + Iir_Kind_Simple_Simultaneous_Statement => 1738, + Iir_Kind_Simultaneous_Null_Statement => 1742, + Iir_Kind_Simultaneous_Procedural_Statement => 1753, + Iir_Kind_Simultaneous_Case_Statement => 1762, + Iir_Kind_Simultaneous_If_Statement => 1771, + Iir_Kind_Simultaneous_Elsif => 1777, + Iir_Kind_Simple_Signal_Assignment_Statement => 1788, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1799, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1811, + Iir_Kind_Null_Statement => 1815, + Iir_Kind_Assertion_Statement => 1822, + Iir_Kind_Report_Statement => 1828, + Iir_Kind_Wait_Statement => 1836, + Iir_Kind_Variable_Assignment_Statement => 1843, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1850, + Iir_Kind_Return_Statement => 1856, + Iir_Kind_For_Loop_Statement => 1867, + Iir_Kind_While_Loop_Statement => 1878, + Iir_Kind_Next_Statement => 1885, + Iir_Kind_Exit_Statement => 1892, + Iir_Kind_Case_Statement => 1900, + Iir_Kind_Procedure_Call_Statement => 1906, + Iir_Kind_Break_Statement => 1913, + Iir_Kind_If_Statement => 1923, + Iir_Kind_Elsif => 1929, + Iir_Kind_Character_Literal => 1937, + Iir_Kind_Simple_Name => 1945, + Iir_Kind_Selected_Name => 1954, + Iir_Kind_Operator_Symbol => 1960, + Iir_Kind_Reference_Name => 1965, + Iir_Kind_External_Constant_Name => 1974, + Iir_Kind_External_Signal_Name => 1983, + Iir_Kind_External_Variable_Name => 1993, + Iir_Kind_Selected_By_All_Name => 1999, + Iir_Kind_Parenthesis_Name => 2004, + Iir_Kind_Package_Pathname => 2008, + Iir_Kind_Absolute_Pathname => 2009, + Iir_Kind_Relative_Pathname => 2010, + Iir_Kind_Pathname_Element => 2015, + Iir_Kind_Base_Attribute => 2017, + Iir_Kind_Subtype_Attribute => 2022, + Iir_Kind_Element_Attribute => 2027, + Iir_Kind_Across_Attribute => 2032, + Iir_Kind_Through_Attribute => 2037, + Iir_Kind_Nature_Reference_Attribute => 2041, + Iir_Kind_Left_Type_Attribute => 2046, + Iir_Kind_Right_Type_Attribute => 2051, + Iir_Kind_High_Type_Attribute => 2056, + Iir_Kind_Low_Type_Attribute => 2061, + Iir_Kind_Ascending_Type_Attribute => 2066, + Iir_Kind_Image_Attribute => 2072, + Iir_Kind_Value_Attribute => 2078, + Iir_Kind_Pos_Attribute => 2084, + Iir_Kind_Val_Attribute => 2090, + Iir_Kind_Succ_Attribute => 2096, + Iir_Kind_Pred_Attribute => 2102, + Iir_Kind_Leftof_Attribute => 2108, + Iir_Kind_Rightof_Attribute => 2114, + Iir_Kind_Signal_Slew_Attribute => 2122, + Iir_Kind_Quantity_Slew_Attribute => 2130, + Iir_Kind_Ramp_Attribute => 2138, + Iir_Kind_Zoh_Attribute => 2146, + Iir_Kind_Ltf_Attribute => 2154, + Iir_Kind_Ztf_Attribute => 2164, + Iir_Kind_Dot_Attribute => 2171, + Iir_Kind_Integ_Attribute => 2178, + Iir_Kind_Above_Attribute => 2186, + Iir_Kind_Quantity_Delayed_Attribute => 2194, + Iir_Kind_Delayed_Attribute => 2203, + Iir_Kind_Stable_Attribute => 2212, + Iir_Kind_Quiet_Attribute => 2221, + Iir_Kind_Transaction_Attribute => 2230, + Iir_Kind_Event_Attribute => 2234, + Iir_Kind_Active_Attribute => 2238, + Iir_Kind_Last_Event_Attribute => 2242, + Iir_Kind_Last_Active_Attribute => 2246, + Iir_Kind_Last_Value_Attribute => 2250, + Iir_Kind_Driving_Attribute => 2254, + Iir_Kind_Driving_Value_Attribute => 2258, + Iir_Kind_Behavior_Attribute => 2258, + Iir_Kind_Structure_Attribute => 2258, + Iir_Kind_Simple_Name_Attribute => 2265, + Iir_Kind_Instance_Name_Attribute => 2270, + Iir_Kind_Path_Name_Attribute => 2275, + Iir_Kind_Left_Array_Attribute => 2282, + Iir_Kind_Right_Array_Attribute => 2289, + Iir_Kind_High_Array_Attribute => 2296, + Iir_Kind_Low_Array_Attribute => 2303, + Iir_Kind_Length_Array_Attribute => 2310, + Iir_Kind_Ascending_Array_Attribute => 2317, + Iir_Kind_Range_Array_Attribute => 2324, + Iir_Kind_Reverse_Range_Array_Attribute => 2331, + Iir_Kind_Attribute_Name => 2340 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -8623,7 +8625,8 @@ package body Vhdl.Nodes_Meta is function Has_Subtype_Indication (K : Iir_Kind) return Boolean is begin case K is - when Iir_Kind_Subtype_Declaration + when Iir_Kind_Record_Element_Constraint + | Iir_Kind_Subtype_Declaration | Iir_Kind_Element_Declaration | Iir_Kind_Object_Alias_Declaration | Iir_Kind_Free_Quantity_Declaration @@ -12222,6 +12225,7 @@ package body Vhdl.Nodes_Meta is when Iir_Kind_Conditional_Waveform | Iir_Kind_Conditional_Expression | Iir_Kind_Component_Configuration + | Iir_Kind_Record_Element_Constraint | Iir_Kind_Disconnection_Specification | Iir_Kind_Step_Limit_Specification | Iir_Kind_Configuration_Specification diff --git a/src/vhdl/vhdl-sem_assocs.adb b/src/vhdl/vhdl-sem_assocs.adb index 25287e076..927877458 100644 --- a/src/vhdl/vhdl-sem_assocs.adb +++ b/src/vhdl/vhdl-sem_assocs.adb @@ -1068,6 +1068,7 @@ package body Vhdl.Sem_Assocs is Assoc_Type : Iir; begin Ntype := Create_Iir (Iir_Kind_Record_Subtype_Definition); + Set_Is_Ref (Ntype, True); Location_Copy (Ntype, Assoc); Set_Base_Type (Ntype, Get_Base_Type (Atype)); if Get_Kind (Atype) = Iir_Kind_Record_Subtype_Definition then @@ -1108,6 +1109,7 @@ package body Vhdl.Sem_Assocs is = Iir_Kind_Association_Element_By_Individual) then Assoc_Type := Get_Actual_Type (Assoc_Expr); + Set_Subtype_Indication (Nrec_El, Assoc_Type); else Assoc_Type := Get_Type (Get_Actual (Assoc_Expr)); end if; @@ -1122,6 +1124,7 @@ package body Vhdl.Sem_Assocs is Set_Constraint_State (Ntype, Fully_Constrained); Set_Actual_Type (Assoc, Ntype); + Set_Actual_Type_Definition (Assoc, Ntype); end; else Set_Actual_Type (Assoc, Atype); diff --git a/src/vhdl/vhdl-sem_types.adb b/src/vhdl/vhdl-sem_types.adb index 7b2179201..7a59f53b1 100644 --- a/src/vhdl/vhdl-sem_types.adb +++ b/src/vhdl/vhdl-sem_types.adb @@ -1995,7 +1995,8 @@ package body Vhdl.Sem_Types is El_List := Null_Iir_Flist; when Iir_Kind_Array_Subtype_Definition => - -- Record constraints are parsed as array constraints. + -- Record constraints were parsed as array constraints. + -- Reparse. pragma Assert (Get_Kind (Def) = Iir_Kind_Array_Subtype_Definition); Index_List := Get_Index_Constraint_List (Def); El_List := Create_Iir_Flist (Get_Nbr_Elements (Index_List)); @@ -2068,6 +2069,7 @@ package body Vhdl.Sem_Types is else Els (Pos) := El; Set_Parent (El, Res); + Append_Owned_Element_Constraint (Res, El); end if; El_Type := Get_Type (El); Tm_El_Type := Get_Type (Tm_El); @@ -2088,6 +2090,7 @@ package body Vhdl.Sem_Types is (+El_Type, "only composite types may be constrained"); end case; + Set_Subtype_Indication (El, El_Type); end if; Set_Type (El, El_Type); end if; @@ -2152,6 +2155,7 @@ package body Vhdl.Sem_Types is Get_Type (Tm_El), Res_Els (I)); Set_Type (El, El_Type); + Set_Subtype_Indication (El, El_Type); Set_Element_Position (El, Get_Element_Position (Tm_El)); end if; Set_Nth_Element (El_List, I, El); |