diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/vhdl/vhdl-nodes.adb | 16 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes.ads | 7 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes_meta.adb | 385 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes_meta.ads | 2 | ||||
| -rw-r--r-- | src/vhdl/vhdl-sem_decls.adb | 3 | ||||
| -rw-r--r-- | src/vhdl/vhdl-sem_inst.adb | 7 | 
6 files changed, 233 insertions, 187 deletions
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb index 9b6329c74..f03e1ab92 100644 --- a/src/vhdl/vhdl-nodes.adb +++ b/src/vhdl/vhdl-nodes.adb @@ -2982,6 +2982,22 @@ package body Vhdl.Nodes is        Set_Field4 (Target, Subprg);     end Set_Interface_Type_Subprograms; +   function Get_Interface_Type_Definition (N : Iir) return Iir is +   begin +      pragma Assert (N /= Null_Iir); +      pragma Assert (Has_Interface_Type_Definition (Get_Kind (N)), +                     "no field Interface_Type_Definition"); +      return Get_Field5 (N); +   end Get_Interface_Type_Definition; + +   procedure Set_Interface_Type_Definition (N : Iir; Atype : Iir) is +   begin +      pragma Assert (N /= Null_Iir); +      pragma Assert (Has_Interface_Type_Definition (Get_Kind (N)), +                     "no field Interface_Type_Definition"); +      Set_Field5 (N, Atype); +   end Set_Interface_Type_Definition; +     function Get_Nature_Definition (Target : Iir) return Iir is     begin        pragma Assert (Target /= Null_Iir); diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index 376c99daa..16907b607 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -1503,6 +1503,8 @@ package Vhdl.Nodes is     --     --   Get/Set_Parent (Field0)     -- +   --   Get/Set_Interface_Type_Definition (Field5) +   --     --   Get/Set_Type (Field1)     --     --   Get/Set_Chain (Field2) @@ -8161,6 +8163,11 @@ package Vhdl.Nodes is     function Get_Interface_Type_Subprograms (Target : Iir) return Iir;     procedure Set_Interface_Type_Subprograms (Target : Iir; Subprg : Iir); +   --  Owner of the interface type definition. +   --  Field: Field5 +   function Get_Interface_Type_Definition (N : Iir) return Iir; +   procedure Set_Interface_Type_Definition (N : Iir; Atype : Iir); +     --  Field: Field1     function Get_Nature_Definition (Target : Iir) return Iir;     procedure Set_Nature_Definition (Target : Iir; Def : Iir); diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index 2d92d3bae..e6e3129d3 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -117,6 +117,7 @@ package body Vhdl.Nodes_Meta is        Field_Subtype_Definition => Type_Iir,        Field_Incomplete_Type_Declaration => Type_Iir,        Field_Interface_Type_Subprograms => Type_Iir, +      Field_Interface_Type_Definition => Type_Iir,        Field_Nature_Definition => Type_Iir,        Field_Nature => Type_Iir,        Field_Subnature_Indication => Type_Iir, @@ -607,6 +608,8 @@ package body Vhdl.Nodes_Meta is              return "incomplete_type_declaration";           when Field_Interface_Type_Subprograms =>              return "interface_type_subprograms"; +         when Field_Interface_Type_Definition => +            return "interface_type_definition";           when Field_Nature_Definition =>              return "nature_definition";           when Field_Nature => @@ -2023,6 +2026,8 @@ package body Vhdl.Nodes_Meta is              return Attr_Ref;           when Field_Interface_Type_Subprograms =>              return Attr_Chain; +         when Field_Interface_Type_Definition => +            return Attr_None;           when Field_Nature_Definition =>              return Attr_None;           when Field_Nature => @@ -3910,6 +3915,7 @@ package body Vhdl.Nodes_Meta is        Field_Open_Flag,        Field_Name_Staticness,        Field_Parent, +      Field_Interface_Type_Definition,        Field_Type,        Field_Chain,        Field_Interface_Type_Subprograms, @@ -5455,191 +5461,191 @@ package body Vhdl.Nodes_Meta is        Iir_Kind_Interface_File_Declaration => 1147,        Iir_Kind_Interface_Quantity_Declaration => 1163,        Iir_Kind_Interface_Terminal_Declaration => 1175, -      Iir_Kind_Interface_Type_Declaration => 1186, -      Iir_Kind_Interface_Package_Declaration => 1199, -      Iir_Kind_Interface_Function_Declaration => 1218, -      Iir_Kind_Interface_Procedure_Declaration => 1233, -      Iir_Kind_Attribute_Implicit_Declaration => 1236, -      Iir_Kind_Suspend_State_Declaration => 1239, -      Iir_Kind_Identity_Operator => 1243, -      Iir_Kind_Negation_Operator => 1247, -      Iir_Kind_Absolute_Operator => 1251, -      Iir_Kind_Not_Operator => 1255, -      Iir_Kind_Implicit_Condition_Operator => 1259, -      Iir_Kind_Condition_Operator => 1263, -      Iir_Kind_Reduction_And_Operator => 1267, -      Iir_Kind_Reduction_Or_Operator => 1271, -      Iir_Kind_Reduction_Nand_Operator => 1275, -      Iir_Kind_Reduction_Nor_Operator => 1279, -      Iir_Kind_Reduction_Xor_Operator => 1283, -      Iir_Kind_Reduction_Xnor_Operator => 1287, -      Iir_Kind_And_Operator => 1292, -      Iir_Kind_Or_Operator => 1297, -      Iir_Kind_Nand_Operator => 1302, -      Iir_Kind_Nor_Operator => 1307, -      Iir_Kind_Xor_Operator => 1312, -      Iir_Kind_Xnor_Operator => 1317, -      Iir_Kind_Equality_Operator => 1322, -      Iir_Kind_Inequality_Operator => 1327, -      Iir_Kind_Less_Than_Operator => 1332, -      Iir_Kind_Less_Than_Or_Equal_Operator => 1337, -      Iir_Kind_Greater_Than_Operator => 1342, -      Iir_Kind_Greater_Than_Or_Equal_Operator => 1347, -      Iir_Kind_Match_Equality_Operator => 1352, -      Iir_Kind_Match_Inequality_Operator => 1357, -      Iir_Kind_Match_Less_Than_Operator => 1362, -      Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1367, -      Iir_Kind_Match_Greater_Than_Operator => 1372, -      Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1377, -      Iir_Kind_Sll_Operator => 1382, -      Iir_Kind_Sla_Operator => 1387, -      Iir_Kind_Srl_Operator => 1392, -      Iir_Kind_Sra_Operator => 1397, -      Iir_Kind_Rol_Operator => 1402, -      Iir_Kind_Ror_Operator => 1407, -      Iir_Kind_Addition_Operator => 1412, -      Iir_Kind_Substraction_Operator => 1417, -      Iir_Kind_Concatenation_Operator => 1422, -      Iir_Kind_Multiplication_Operator => 1427, -      Iir_Kind_Division_Operator => 1432, -      Iir_Kind_Modulus_Operator => 1437, -      Iir_Kind_Remainder_Operator => 1442, -      Iir_Kind_Exponentiation_Operator => 1447, -      Iir_Kind_Function_Call => 1455, -      Iir_Kind_Aggregate => 1462, -      Iir_Kind_Parenthesis_Expression => 1465, -      Iir_Kind_Qualified_Expression => 1469, -      Iir_Kind_Type_Conversion => 1474, -      Iir_Kind_Allocator_By_Expression => 1479, -      Iir_Kind_Allocator_By_Subtype => 1485, -      Iir_Kind_Selected_Element => 1493, -      Iir_Kind_Dereference => 1498, -      Iir_Kind_Implicit_Dereference => 1503, -      Iir_Kind_Slice_Name => 1510, -      Iir_Kind_Indexed_Name => 1516, -      Iir_Kind_Psl_Prev => 1522, -      Iir_Kind_Psl_Stable => 1527, -      Iir_Kind_Psl_Rose => 1532, -      Iir_Kind_Psl_Fell => 1537, -      Iir_Kind_Psl_Onehot => 1540, -      Iir_Kind_Psl_Onehot0 => 1543, -      Iir_Kind_Psl_Expression => 1545, -      Iir_Kind_Sensitized_Process_Statement => 1567, -      Iir_Kind_Process_Statement => 1588, -      Iir_Kind_Concurrent_Simple_Signal_Assignment => 1601, -      Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1614, -      Iir_Kind_Concurrent_Selected_Signal_Assignment => 1628, -      Iir_Kind_Concurrent_Assertion_Statement => 1636, -      Iir_Kind_Concurrent_Procedure_Call_Statement => 1643, -      Iir_Kind_Concurrent_Break_Statement => 1651, -      Iir_Kind_Psl_Assert_Directive => 1665, -      Iir_Kind_Psl_Assume_Directive => 1677, -      Iir_Kind_Psl_Cover_Directive => 1689, -      Iir_Kind_Psl_Restrict_Directive => 1700, -      Iir_Kind_Block_Statement => 1714, -      Iir_Kind_If_Generate_Statement => 1725, -      Iir_Kind_Case_Generate_Statement => 1734, -      Iir_Kind_For_Generate_Statement => 1743, -      Iir_Kind_Component_Instantiation_Statement => 1754, -      Iir_Kind_Psl_Default_Clock => 1757, -      Iir_Kind_Generate_Statement_Body => 1768, -      Iir_Kind_If_Generate_Else_Clause => 1774, -      Iir_Kind_Simple_Simultaneous_Statement => 1781, -      Iir_Kind_Simultaneous_Null_Statement => 1785, -      Iir_Kind_Simultaneous_Procedural_Statement => 1796, -      Iir_Kind_Simultaneous_Case_Statement => 1805, -      Iir_Kind_Simultaneous_If_Statement => 1814, -      Iir_Kind_Simultaneous_Elsif => 1820, -      Iir_Kind_Simple_Signal_Assignment_Statement => 1831, -      Iir_Kind_Conditional_Signal_Assignment_Statement => 1842, -      Iir_Kind_Selected_Waveform_Assignment_Statement => 1854, -      Iir_Kind_Signal_Force_Assignment_Statement => 1864, -      Iir_Kind_Signal_Release_Assignment_Statement => 1873, -      Iir_Kind_Null_Statement => 1877, -      Iir_Kind_Assertion_Statement => 1884, -      Iir_Kind_Report_Statement => 1890, -      Iir_Kind_Wait_Statement => 1898, -      Iir_Kind_Variable_Assignment_Statement => 1905, -      Iir_Kind_Conditional_Variable_Assignment_Statement => 1912, -      Iir_Kind_Return_Statement => 1918, -      Iir_Kind_For_Loop_Statement => 1929, -      Iir_Kind_While_Loop_Statement => 1940, -      Iir_Kind_Next_Statement => 1947, -      Iir_Kind_Exit_Statement => 1954, -      Iir_Kind_Case_Statement => 1963, -      Iir_Kind_Procedure_Call_Statement => 1969, -      Iir_Kind_Break_Statement => 1976, -      Iir_Kind_If_Statement => 1986, -      Iir_Kind_Suspend_State_Statement => 1990, -      Iir_Kind_Elsif => 1996, -      Iir_Kind_Character_Literal => 2003, -      Iir_Kind_Simple_Name => 2010, -      Iir_Kind_Selected_Name => 2018, -      Iir_Kind_Operator_Symbol => 2023, -      Iir_Kind_Reference_Name => 2028, -      Iir_Kind_External_Constant_Name => 2037, -      Iir_Kind_External_Signal_Name => 2046, -      Iir_Kind_External_Variable_Name => 2056, -      Iir_Kind_Selected_By_All_Name => 2062, -      Iir_Kind_Parenthesis_Name => 2067, -      Iir_Kind_Package_Pathname => 2071, -      Iir_Kind_Absolute_Pathname => 2072, -      Iir_Kind_Relative_Pathname => 2073, -      Iir_Kind_Pathname_Element => 2078, -      Iir_Kind_Base_Attribute => 2080, -      Iir_Kind_Subtype_Attribute => 2085, -      Iir_Kind_Element_Attribute => 2090, -      Iir_Kind_Across_Attribute => 2095, -      Iir_Kind_Through_Attribute => 2100, -      Iir_Kind_Nature_Reference_Attribute => 2104, -      Iir_Kind_Left_Type_Attribute => 2109, -      Iir_Kind_Right_Type_Attribute => 2114, -      Iir_Kind_High_Type_Attribute => 2119, -      Iir_Kind_Low_Type_Attribute => 2124, -      Iir_Kind_Ascending_Type_Attribute => 2129, -      Iir_Kind_Image_Attribute => 2135, -      Iir_Kind_Value_Attribute => 2141, -      Iir_Kind_Pos_Attribute => 2147, -      Iir_Kind_Val_Attribute => 2153, -      Iir_Kind_Succ_Attribute => 2159, -      Iir_Kind_Pred_Attribute => 2165, -      Iir_Kind_Leftof_Attribute => 2171, -      Iir_Kind_Rightof_Attribute => 2177, -      Iir_Kind_Signal_Slew_Attribute => 2185, -      Iir_Kind_Quantity_Slew_Attribute => 2193, -      Iir_Kind_Ramp_Attribute => 2201, -      Iir_Kind_Zoh_Attribute => 2209, -      Iir_Kind_Ltf_Attribute => 2217, -      Iir_Kind_Ztf_Attribute => 2227, -      Iir_Kind_Dot_Attribute => 2234, -      Iir_Kind_Integ_Attribute => 2241, -      Iir_Kind_Quantity_Delayed_Attribute => 2249, -      Iir_Kind_Above_Attribute => 2257, -      Iir_Kind_Delayed_Attribute => 2266, -      Iir_Kind_Stable_Attribute => 2275, -      Iir_Kind_Quiet_Attribute => 2284, -      Iir_Kind_Transaction_Attribute => 2293, -      Iir_Kind_Event_Attribute => 2297, -      Iir_Kind_Active_Attribute => 2301, -      Iir_Kind_Last_Event_Attribute => 2305, -      Iir_Kind_Last_Active_Attribute => 2309, -      Iir_Kind_Last_Value_Attribute => 2313, -      Iir_Kind_Driving_Attribute => 2317, -      Iir_Kind_Driving_Value_Attribute => 2321, -      Iir_Kind_Behavior_Attribute => 2321, -      Iir_Kind_Structure_Attribute => 2321, -      Iir_Kind_Simple_Name_Attribute => 2328, -      Iir_Kind_Instance_Name_Attribute => 2333, -      Iir_Kind_Path_Name_Attribute => 2338, -      Iir_Kind_Left_Array_Attribute => 2345, -      Iir_Kind_Right_Array_Attribute => 2352, -      Iir_Kind_High_Array_Attribute => 2359, -      Iir_Kind_Low_Array_Attribute => 2366, -      Iir_Kind_Length_Array_Attribute => 2373, -      Iir_Kind_Ascending_Array_Attribute => 2380, -      Iir_Kind_Range_Array_Attribute => 2387, -      Iir_Kind_Reverse_Range_Array_Attribute => 2394, -      Iir_Kind_Attribute_Name => 2403 +      Iir_Kind_Interface_Type_Declaration => 1187, +      Iir_Kind_Interface_Package_Declaration => 1200, +      Iir_Kind_Interface_Function_Declaration => 1219, +      Iir_Kind_Interface_Procedure_Declaration => 1234, +      Iir_Kind_Attribute_Implicit_Declaration => 1237, +      Iir_Kind_Suspend_State_Declaration => 1240, +      Iir_Kind_Identity_Operator => 1244, +      Iir_Kind_Negation_Operator => 1248, +      Iir_Kind_Absolute_Operator => 1252, +      Iir_Kind_Not_Operator => 1256, +      Iir_Kind_Implicit_Condition_Operator => 1260, +      Iir_Kind_Condition_Operator => 1264, +      Iir_Kind_Reduction_And_Operator => 1268, +      Iir_Kind_Reduction_Or_Operator => 1272, +      Iir_Kind_Reduction_Nand_Operator => 1276, +      Iir_Kind_Reduction_Nor_Operator => 1280, +      Iir_Kind_Reduction_Xor_Operator => 1284, +      Iir_Kind_Reduction_Xnor_Operator => 1288, +      Iir_Kind_And_Operator => 1293, +      Iir_Kind_Or_Operator => 1298, +      Iir_Kind_Nand_Operator => 1303, +      Iir_Kind_Nor_Operator => 1308, +      Iir_Kind_Xor_Operator => 1313, +      Iir_Kind_Xnor_Operator => 1318, +      Iir_Kind_Equality_Operator => 1323, +      Iir_Kind_Inequality_Operator => 1328, +      Iir_Kind_Less_Than_Operator => 1333, +      Iir_Kind_Less_Than_Or_Equal_Operator => 1338, +      Iir_Kind_Greater_Than_Operator => 1343, +      Iir_Kind_Greater_Than_Or_Equal_Operator => 1348, +      Iir_Kind_Match_Equality_Operator => 1353, +      Iir_Kind_Match_Inequality_Operator => 1358, +      Iir_Kind_Match_Less_Than_Operator => 1363, +      Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1368, +      Iir_Kind_Match_Greater_Than_Operator => 1373, +      Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1378, +      Iir_Kind_Sll_Operator => 1383, +      Iir_Kind_Sla_Operator => 1388, +      Iir_Kind_Srl_Operator => 1393, +      Iir_Kind_Sra_Operator => 1398, +      Iir_Kind_Rol_Operator => 1403, +      Iir_Kind_Ror_Operator => 1408, +      Iir_Kind_Addition_Operator => 1413, +      Iir_Kind_Substraction_Operator => 1418, +      Iir_Kind_Concatenation_Operator => 1423, +      Iir_Kind_Multiplication_Operator => 1428, +      Iir_Kind_Division_Operator => 1433, +      Iir_Kind_Modulus_Operator => 1438, +      Iir_Kind_Remainder_Operator => 1443, +      Iir_Kind_Exponentiation_Operator => 1448, +      Iir_Kind_Function_Call => 1456, +      Iir_Kind_Aggregate => 1463, +      Iir_Kind_Parenthesis_Expression => 1466, +      Iir_Kind_Qualified_Expression => 1470, +      Iir_Kind_Type_Conversion => 1475, +      Iir_Kind_Allocator_By_Expression => 1480, +      Iir_Kind_Allocator_By_Subtype => 1486, +      Iir_Kind_Selected_Element => 1494, +      Iir_Kind_Dereference => 1499, +      Iir_Kind_Implicit_Dereference => 1504, +      Iir_Kind_Slice_Name => 1511, +      Iir_Kind_Indexed_Name => 1517, +      Iir_Kind_Psl_Prev => 1523, +      Iir_Kind_Psl_Stable => 1528, +      Iir_Kind_Psl_Rose => 1533, +      Iir_Kind_Psl_Fell => 1538, +      Iir_Kind_Psl_Onehot => 1541, +      Iir_Kind_Psl_Onehot0 => 1544, +      Iir_Kind_Psl_Expression => 1546, +      Iir_Kind_Sensitized_Process_Statement => 1568, +      Iir_Kind_Process_Statement => 1589, +      Iir_Kind_Concurrent_Simple_Signal_Assignment => 1602, +      Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1615, +      Iir_Kind_Concurrent_Selected_Signal_Assignment => 1629, +      Iir_Kind_Concurrent_Assertion_Statement => 1637, +      Iir_Kind_Concurrent_Procedure_Call_Statement => 1644, +      Iir_Kind_Concurrent_Break_Statement => 1652, +      Iir_Kind_Psl_Assert_Directive => 1666, +      Iir_Kind_Psl_Assume_Directive => 1678, +      Iir_Kind_Psl_Cover_Directive => 1690, +      Iir_Kind_Psl_Restrict_Directive => 1701, +      Iir_Kind_Block_Statement => 1715, +      Iir_Kind_If_Generate_Statement => 1726, +      Iir_Kind_Case_Generate_Statement => 1735, +      Iir_Kind_For_Generate_Statement => 1744, +      Iir_Kind_Component_Instantiation_Statement => 1755, +      Iir_Kind_Psl_Default_Clock => 1758, +      Iir_Kind_Generate_Statement_Body => 1769, +      Iir_Kind_If_Generate_Else_Clause => 1775, +      Iir_Kind_Simple_Simultaneous_Statement => 1782, +      Iir_Kind_Simultaneous_Null_Statement => 1786, +      Iir_Kind_Simultaneous_Procedural_Statement => 1797, +      Iir_Kind_Simultaneous_Case_Statement => 1806, +      Iir_Kind_Simultaneous_If_Statement => 1815, +      Iir_Kind_Simultaneous_Elsif => 1821, +      Iir_Kind_Simple_Signal_Assignment_Statement => 1832, +      Iir_Kind_Conditional_Signal_Assignment_Statement => 1843, +      Iir_Kind_Selected_Waveform_Assignment_Statement => 1855, +      Iir_Kind_Signal_Force_Assignment_Statement => 1865, +      Iir_Kind_Signal_Release_Assignment_Statement => 1874, +      Iir_Kind_Null_Statement => 1878, +      Iir_Kind_Assertion_Statement => 1885, +      Iir_Kind_Report_Statement => 1891, +      Iir_Kind_Wait_Statement => 1899, +      Iir_Kind_Variable_Assignment_Statement => 1906, +      Iir_Kind_Conditional_Variable_Assignment_Statement => 1913, +      Iir_Kind_Return_Statement => 1919, +      Iir_Kind_For_Loop_Statement => 1930, +      Iir_Kind_While_Loop_Statement => 1941, +      Iir_Kind_Next_Statement => 1948, +      Iir_Kind_Exit_Statement => 1955, +      Iir_Kind_Case_Statement => 1964, +      Iir_Kind_Procedure_Call_Statement => 1970, +      Iir_Kind_Break_Statement => 1977, +      Iir_Kind_If_Statement => 1987, +      Iir_Kind_Suspend_State_Statement => 1991, +      Iir_Kind_Elsif => 1997, +      Iir_Kind_Character_Literal => 2004, +      Iir_Kind_Simple_Name => 2011, +      Iir_Kind_Selected_Name => 2019, +      Iir_Kind_Operator_Symbol => 2024, +      Iir_Kind_Reference_Name => 2029, +      Iir_Kind_External_Constant_Name => 2038, +      Iir_Kind_External_Signal_Name => 2047, +      Iir_Kind_External_Variable_Name => 2057, +      Iir_Kind_Selected_By_All_Name => 2063, +      Iir_Kind_Parenthesis_Name => 2068, +      Iir_Kind_Package_Pathname => 2072, +      Iir_Kind_Absolute_Pathname => 2073, +      Iir_Kind_Relative_Pathname => 2074, +      Iir_Kind_Pathname_Element => 2079, +      Iir_Kind_Base_Attribute => 2081, +      Iir_Kind_Subtype_Attribute => 2086, +      Iir_Kind_Element_Attribute => 2091, +      Iir_Kind_Across_Attribute => 2096, +      Iir_Kind_Through_Attribute => 2101, +      Iir_Kind_Nature_Reference_Attribute => 2105, +      Iir_Kind_Left_Type_Attribute => 2110, +      Iir_Kind_Right_Type_Attribute => 2115, +      Iir_Kind_High_Type_Attribute => 2120, +      Iir_Kind_Low_Type_Attribute => 2125, +      Iir_Kind_Ascending_Type_Attribute => 2130, +      Iir_Kind_Image_Attribute => 2136, +      Iir_Kind_Value_Attribute => 2142, +      Iir_Kind_Pos_Attribute => 2148, +      Iir_Kind_Val_Attribute => 2154, +      Iir_Kind_Succ_Attribute => 2160, +      Iir_Kind_Pred_Attribute => 2166, +      Iir_Kind_Leftof_Attribute => 2172, +      Iir_Kind_Rightof_Attribute => 2178, +      Iir_Kind_Signal_Slew_Attribute => 2186, +      Iir_Kind_Quantity_Slew_Attribute => 2194, +      Iir_Kind_Ramp_Attribute => 2202, +      Iir_Kind_Zoh_Attribute => 2210, +      Iir_Kind_Ltf_Attribute => 2218, +      Iir_Kind_Ztf_Attribute => 2228, +      Iir_Kind_Dot_Attribute => 2235, +      Iir_Kind_Integ_Attribute => 2242, +      Iir_Kind_Quantity_Delayed_Attribute => 2250, +      Iir_Kind_Above_Attribute => 2258, +      Iir_Kind_Delayed_Attribute => 2267, +      Iir_Kind_Stable_Attribute => 2276, +      Iir_Kind_Quiet_Attribute => 2285, +      Iir_Kind_Transaction_Attribute => 2294, +      Iir_Kind_Event_Attribute => 2298, +      Iir_Kind_Active_Attribute => 2302, +      Iir_Kind_Last_Event_Attribute => 2306, +      Iir_Kind_Last_Active_Attribute => 2310, +      Iir_Kind_Last_Value_Attribute => 2314, +      Iir_Kind_Driving_Attribute => 2318, +      Iir_Kind_Driving_Value_Attribute => 2322, +      Iir_Kind_Behavior_Attribute => 2322, +      Iir_Kind_Structure_Attribute => 2322, +      Iir_Kind_Simple_Name_Attribute => 2329, +      Iir_Kind_Instance_Name_Attribute => 2334, +      Iir_Kind_Path_Name_Attribute => 2339, +      Iir_Kind_Left_Array_Attribute => 2346, +      Iir_Kind_Right_Array_Attribute => 2353, +      Iir_Kind_High_Array_Attribute => 2360, +      Iir_Kind_Low_Array_Attribute => 2367, +      Iir_Kind_Length_Array_Attribute => 2374, +      Iir_Kind_Ascending_Array_Attribute => 2381, +      Iir_Kind_Range_Array_Attribute => 2388, +      Iir_Kind_Reverse_Range_Array_Attribute => 2395, +      Iir_Kind_Attribute_Name => 2404       );     function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -6232,6 +6238,8 @@ package body Vhdl.Nodes_Meta is              return Get_Incomplete_Type_Declaration (N);           when Field_Interface_Type_Subprograms =>              return Get_Interface_Type_Subprograms (N); +         when Field_Interface_Type_Definition => +            return Get_Interface_Type_Definition (N);           when Field_Nature_Definition =>              return Get_Nature_Definition (N);           when Field_Nature => @@ -6696,6 +6704,8 @@ package body Vhdl.Nodes_Meta is              Set_Incomplete_Type_Declaration (N, V);           when Field_Interface_Type_Subprograms =>              Set_Interface_Type_Subprograms (N, V); +         when Field_Interface_Type_Definition => +            Set_Interface_Type_Definition (N, V);           when Field_Nature_Definition =>              Set_Nature_Definition (N, V);           when Field_Nature => @@ -8989,6 +8999,11 @@ package body Vhdl.Nodes_Meta is        return K = Iir_Kind_Interface_Type_Declaration;     end Has_Interface_Type_Subprograms; +   function Has_Interface_Type_Definition (K : Iir_Kind) return Boolean is +   begin +      return K = Iir_Kind_Interface_Type_Declaration; +   end Has_Interface_Type_Definition; +     function Has_Nature_Definition (K : Iir_Kind) return Boolean is     begin        return K = Iir_Kind_Nature_Declaration; diff --git a/src/vhdl/vhdl-nodes_meta.ads b/src/vhdl/vhdl-nodes_meta.ads index 214f2f067..940f6d8fb 100644 --- a/src/vhdl/vhdl-nodes_meta.ads +++ b/src/vhdl/vhdl-nodes_meta.ads @@ -161,6 +161,7 @@ package Vhdl.Nodes_Meta is        Field_Subtype_Definition,        Field_Incomplete_Type_Declaration,        Field_Interface_Type_Subprograms, +      Field_Interface_Type_Definition,        Field_Nature_Definition,        Field_Nature,        Field_Subnature_Indication, @@ -754,6 +755,7 @@ package Vhdl.Nodes_Meta is     function Has_Subtype_Definition (K : Iir_Kind) return Boolean;     function Has_Incomplete_Type_Declaration (K : Iir_Kind) return Boolean;     function Has_Interface_Type_Subprograms (K : Iir_Kind) return Boolean; +   function Has_Interface_Type_Definition (K : Iir_Kind) return Boolean;     function Has_Nature_Definition (K : Iir_Kind) return Boolean;     function Has_Nature (K : Iir_Kind) return Boolean;     function Has_Subnature_Indication (K : Iir_Kind) return Boolean; diff --git a/src/vhdl/vhdl-sem_decls.adb b/src/vhdl/vhdl-sem_decls.adb index 0d5a02bad..55cc4b793 100644 --- a/src/vhdl/vhdl-sem_decls.adb +++ b/src/vhdl/vhdl-sem_decls.adb @@ -550,11 +550,12 @@ package body Vhdl.Sem_Decls is        Finters : Iir;        Op_Eq, Op_Neq : Iir;     begin -      --  Create type definition. +      --  Create type definition.  The definition is owned by the declaration.        Def := Create_Iir (Iir_Kind_Interface_Type_Definition);        Set_Location (Def, Get_Location (Inter));        Set_Type_Declarator (Def, Inter);        Set_Type (Inter, Def); +      Set_Interface_Type_Definition (Inter, Def);        Set_Type_Staticness (Def, None);        Set_Resolved_Flag (Def, False);        Set_Signal_Type_Flag (Def, True); diff --git a/src/vhdl/vhdl-sem_inst.adb b/src/vhdl/vhdl-sem_inst.adb index d184aa0ea..d8f2728ab 100644 --- a/src/vhdl/vhdl-sem_inst.adb +++ b/src/vhdl/vhdl-sem_inst.adb @@ -1253,7 +1253,12 @@ package body Vhdl.Sem_Inst is                    declare                       S : constant Iir := Get_Iir (N, F);                    begin -                     if S = E then +                     if F = Field_Interface_Type_Definition then +                        --  Do not substitute this Interface_Type_Definition, +                        --  it is only to own the type definition in the +                        --  uninstantiated interface. +                        null; +                     elsif S = E then                          --  Substitute                          Set_Iir (N, F, Rep);                          pragma Assert (Get_Field_Attribute (F) = Attr_Ref);  | 
