From c7f7cdffe62bf0f9939c8f4b86ccb0d4ba870599 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Wed, 4 Jan 2023 15:40:33 +0100 Subject: vhdl-sem_inst: handle suspend_state --- src/vhdl/vhdl-canon.adb | 11 +- src/vhdl/vhdl-nodes.adb | 32 ++++ src/vhdl/vhdl-nodes.ads | 17 ++ src/vhdl/vhdl-nodes_meta.adb | 392 +++++++++++++++++++++++-------------------- src/vhdl/vhdl-nodes_meta.ads | 6 +- src/vhdl/vhdl-sem_inst.adb | 21 +++ 6 files changed, 293 insertions(+), 186 deletions(-) (limited to 'src') diff --git a/src/vhdl/vhdl-canon.adb b/src/vhdl/vhdl-canon.adb index cad575929..c8e71807e 100644 --- a/src/vhdl/vhdl-canon.adb +++ b/src/vhdl/vhdl-canon.adb @@ -1357,7 +1357,7 @@ package body Vhdl.Canon is end Canon_Sequential_Stmts; function Canon_Insert_Suspend_State_Statement (Stmt : Iir; Var : Iir) - return Iir + return Iir is Last : Iir; Num : Int32; @@ -1367,17 +1367,20 @@ package body Vhdl.Canon is Location_Copy (Res, Stmt); Set_Parent (Res, Get_Parent (Stmt)); Set_Chain (Res, Stmt); + Set_Suspend_State_Decl (Res, Var); + + Last := Get_Suspend_State_Last (Var); + Set_Suspend_State_Last (Var, Res); - Last := Get_Suspend_State_Chain (Var); if Last = Null_Iir then Num := 0; + Set_Suspend_State_Chain (Var, Res); else Num := Get_Suspend_State_Index (Last); + Set_Suspend_State_Chain (Last, Res); end if; Set_Suspend_State_Index (Res, Num + 1); - Set_Suspend_State_Chain (Res, Last); - Set_Suspend_State_Chain (Var, Res); return Res; end Canon_Insert_Suspend_State_Statement; diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb index afeb675cc..7e938d6e0 100644 --- a/src/vhdl/vhdl-nodes.adb +++ b/src/vhdl/vhdl-nodes.adb @@ -7604,4 +7604,36 @@ package body Vhdl.Nodes is Set_Field4 (N, Chain); end Set_Suspend_State_Chain; + function Get_Suspend_State_Last (N : Iir) return Iir is + begin + pragma Assert (N /= Null_Iir); + pragma Assert (Has_Suspend_State_Last (Get_Kind (N)), + "no field Suspend_State_Last"); + return Get_Field5 (N); + end Get_Suspend_State_Last; + + procedure Set_Suspend_State_Last (N : Iir; Chain : Iir) is + begin + pragma Assert (N /= Null_Iir); + pragma Assert (Has_Suspend_State_Last (Get_Kind (N)), + "no field Suspend_State_Last"); + Set_Field5 (N, Chain); + end Set_Suspend_State_Last; + + function Get_Suspend_State_Decl (N : Iir) return Iir is + begin + pragma Assert (N /= Null_Iir); + pragma Assert (Has_Suspend_State_Decl (Get_Kind (N)), + "no field Suspend_State_Decl"); + return Get_Field5 (N); + end Get_Suspend_State_Decl; + + procedure Set_Suspend_State_Decl (N : Iir; Chain : Iir) is + begin + pragma Assert (N /= Null_Iir); + pragma Assert (Has_Suspend_State_Decl (Get_Kind (N)), + "no field Suspend_State_Decl"); + Set_Field5 (N, Chain); + end Set_Suspend_State_Decl; + end Vhdl.Nodes; diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index f16d7302b..6c7e8f8c8 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -1909,7 +1909,11 @@ package Vhdl.Nodes is -- -- Get/Set_Chain (Field2) -- + -- First suspend statement. -- Get/Set_Suspend_State_Chain (Field4) + -- + -- Last suspend statement (to help instantiation). + -- Get/Set_Suspend_State_Last (Field5) -- Iir_Kind_Constant_Declaration (Medium) -- Iir_Kind_Iterator_Declaration (Short) @@ -4226,6 +4230,9 @@ package Vhdl.Nodes is -- -- Get/Set_Suspend_State_Index (Field3) -- + -- Corresponding suspend state declaration. + -- Get/Set_Suspend_State_Decl (Field5) + -- -- Get/Set_Suspend_State_Chain (Field4) ---------------- @@ -9642,11 +9649,21 @@ package Vhdl.Nodes is function Get_Foreign_Node (N : Iir) return Int32; procedure Set_Foreign_Node (N : Iir; En : Int32); + -- State index for the statement. -- Field: Field3 (uc) function Get_Suspend_State_Index (N : Iir) return Int32; procedure Set_Suspend_State_Index (N : Iir; Num : Int32); + -- Chain of suspend state statement. -- Field: Field4 Forward_Ref function Get_Suspend_State_Chain (N : Iir) return Iir; procedure Set_Suspend_State_Chain (N : Iir; Chain : Iir); + + -- Field: Field5 Forward_Ref + function Get_Suspend_State_Last (N : Iir) return Iir; + procedure Set_Suspend_State_Last (N : Iir; Chain : Iir); + + -- Field: Field5 Ref + function Get_Suspend_State_Decl (N : Iir) return Iir; + procedure Set_Suspend_State_Decl (N : Iir; Chain : Iir); end Vhdl.Nodes; diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index cec4bdd7f..5c6d5efdf 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -401,7 +401,9 @@ package body Vhdl.Nodes_Meta is Field_Default_Clock => Type_Iir, Field_Foreign_Node => Type_Int32, Field_Suspend_State_Index => Type_Int32, - Field_Suspend_State_Chain => Type_Iir + Field_Suspend_State_Chain => Type_Iir, + Field_Suspend_State_Last => Type_Iir, + Field_Suspend_State_Decl => Type_Iir ); function Get_Field_Type (F : Fields_Enum) return Types_Enum is @@ -1182,6 +1184,10 @@ package body Vhdl.Nodes_Meta is return "suspend_state_index"; when Field_Suspend_State_Chain => return "suspend_state_chain"; + when Field_Suspend_State_Last => + return "suspend_state_last"; + when Field_Suspend_State_Decl => + return "suspend_state_decl"; end case; end Get_Field_Image; @@ -2612,6 +2618,10 @@ package body Vhdl.Nodes_Meta is return Attr_None; when Field_Suspend_State_Chain => return Attr_Forward_Ref; + when Field_Suspend_State_Last => + return Attr_Forward_Ref; + when Field_Suspend_State_Decl => + return Attr_Ref; end case; end Get_Field_Attribute; @@ -4023,6 +4033,7 @@ package body Vhdl.Nodes_Meta is Field_Parent, Field_Chain, Field_Suspend_State_Chain, + Field_Suspend_State_Last, -- Iir_Kind_Identity_Operator Field_Expr_Staticness, Field_Type, @@ -4885,6 +4896,7 @@ package body Vhdl.Nodes_Meta is Field_Suspend_State_Index, Field_Parent, Field_Chain, + Field_Suspend_State_Decl, Field_Suspend_State_Chain, -- Iir_Kind_Elsif Field_Is_Ref, @@ -5517,186 +5529,186 @@ package body Vhdl.Nodes_Meta is Iir_Kind_Interface_Function_Declaration => 1238, Iir_Kind_Interface_Procedure_Declaration => 1254, Iir_Kind_Attribute_Implicit_Declaration => 1257, - Iir_Kind_Suspend_State_Declaration => 1260, - Iir_Kind_Identity_Operator => 1264, - Iir_Kind_Negation_Operator => 1268, - Iir_Kind_Absolute_Operator => 1272, - Iir_Kind_Not_Operator => 1276, - Iir_Kind_Implicit_Condition_Operator => 1280, - Iir_Kind_Condition_Operator => 1284, - Iir_Kind_Reduction_And_Operator => 1288, - Iir_Kind_Reduction_Or_Operator => 1292, - Iir_Kind_Reduction_Nand_Operator => 1296, - Iir_Kind_Reduction_Nor_Operator => 1300, - Iir_Kind_Reduction_Xor_Operator => 1304, - Iir_Kind_Reduction_Xnor_Operator => 1308, - Iir_Kind_And_Operator => 1313, - Iir_Kind_Or_Operator => 1318, - Iir_Kind_Nand_Operator => 1323, - Iir_Kind_Nor_Operator => 1328, - Iir_Kind_Xor_Operator => 1333, - Iir_Kind_Xnor_Operator => 1338, - Iir_Kind_Equality_Operator => 1343, - Iir_Kind_Inequality_Operator => 1348, - Iir_Kind_Less_Than_Operator => 1353, - Iir_Kind_Less_Than_Or_Equal_Operator => 1358, - Iir_Kind_Greater_Than_Operator => 1363, - Iir_Kind_Greater_Than_Or_Equal_Operator => 1368, - Iir_Kind_Match_Equality_Operator => 1373, - Iir_Kind_Match_Inequality_Operator => 1378, - Iir_Kind_Match_Less_Than_Operator => 1383, - Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1388, - Iir_Kind_Match_Greater_Than_Operator => 1393, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1398, - Iir_Kind_Sll_Operator => 1403, - Iir_Kind_Sla_Operator => 1408, - Iir_Kind_Srl_Operator => 1413, - Iir_Kind_Sra_Operator => 1418, - Iir_Kind_Rol_Operator => 1423, - Iir_Kind_Ror_Operator => 1428, - Iir_Kind_Addition_Operator => 1433, - Iir_Kind_Substraction_Operator => 1438, - Iir_Kind_Concatenation_Operator => 1443, - Iir_Kind_Multiplication_Operator => 1448, - Iir_Kind_Division_Operator => 1453, - Iir_Kind_Modulus_Operator => 1458, - Iir_Kind_Remainder_Operator => 1463, - Iir_Kind_Exponentiation_Operator => 1468, - Iir_Kind_Function_Call => 1476, - Iir_Kind_Aggregate => 1484, - Iir_Kind_Parenthesis_Expression => 1487, - Iir_Kind_Qualified_Expression => 1491, - Iir_Kind_Type_Conversion => 1496, - Iir_Kind_Allocator_By_Expression => 1501, - Iir_Kind_Allocator_By_Subtype => 1507, - Iir_Kind_Selected_Element => 1515, - Iir_Kind_Dereference => 1520, - Iir_Kind_Implicit_Dereference => 1525, - Iir_Kind_Slice_Name => 1532, - Iir_Kind_Indexed_Name => 1538, - Iir_Kind_Psl_Prev => 1544, - Iir_Kind_Psl_Stable => 1549, - Iir_Kind_Psl_Rose => 1554, - Iir_Kind_Psl_Fell => 1559, - Iir_Kind_Psl_Onehot => 1562, - Iir_Kind_Psl_Onehot0 => 1565, - Iir_Kind_Psl_Expression => 1567, - Iir_Kind_Sensitized_Process_Statement => 1589, - Iir_Kind_Process_Statement => 1610, - Iir_Kind_Concurrent_Simple_Signal_Assignment => 1623, - Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1636, - Iir_Kind_Concurrent_Selected_Signal_Assignment => 1650, - Iir_Kind_Concurrent_Assertion_Statement => 1658, - Iir_Kind_Concurrent_Procedure_Call_Statement => 1665, - Iir_Kind_Concurrent_Break_Statement => 1673, - Iir_Kind_Psl_Assert_Directive => 1687, - Iir_Kind_Psl_Assume_Directive => 1699, - Iir_Kind_Psl_Cover_Directive => 1711, - Iir_Kind_Psl_Restrict_Directive => 1722, - Iir_Kind_Block_Statement => 1736, - Iir_Kind_If_Generate_Statement => 1747, - Iir_Kind_Case_Generate_Statement => 1756, - Iir_Kind_For_Generate_Statement => 1765, - Iir_Kind_Component_Instantiation_Statement => 1777, - Iir_Kind_Psl_Default_Clock => 1780, - Iir_Kind_Generate_Statement_Body => 1791, - Iir_Kind_If_Generate_Else_Clause => 1797, - Iir_Kind_Simple_Simultaneous_Statement => 1804, - Iir_Kind_Simultaneous_Null_Statement => 1808, - Iir_Kind_Simultaneous_Procedural_Statement => 1819, - Iir_Kind_Simultaneous_Case_Statement => 1828, - Iir_Kind_Simultaneous_If_Statement => 1837, - Iir_Kind_Simultaneous_Elsif => 1843, - Iir_Kind_Simple_Signal_Assignment_Statement => 1854, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1865, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1877, - Iir_Kind_Signal_Force_Assignment_Statement => 1887, - Iir_Kind_Signal_Release_Assignment_Statement => 1896, - Iir_Kind_Null_Statement => 1900, - Iir_Kind_Assertion_Statement => 1907, - Iir_Kind_Report_Statement => 1913, - Iir_Kind_Wait_Statement => 1921, - Iir_Kind_Variable_Assignment_Statement => 1928, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1935, - Iir_Kind_Return_Statement => 1941, - Iir_Kind_For_Loop_Statement => 1952, - Iir_Kind_While_Loop_Statement => 1963, - Iir_Kind_Next_Statement => 1970, - Iir_Kind_Exit_Statement => 1977, - Iir_Kind_Case_Statement => 1986, - Iir_Kind_Procedure_Call_Statement => 1992, - Iir_Kind_Break_Statement => 1999, - Iir_Kind_If_Statement => 2009, - Iir_Kind_Suspend_State_Statement => 2013, - Iir_Kind_Elsif => 2019, - Iir_Kind_Character_Literal => 2026, - Iir_Kind_Simple_Name => 2033, - Iir_Kind_Selected_Name => 2041, - Iir_Kind_Operator_Symbol => 2046, - Iir_Kind_Reference_Name => 2051, - Iir_Kind_External_Constant_Name => 2060, - Iir_Kind_External_Signal_Name => 2070, - Iir_Kind_External_Variable_Name => 2080, - Iir_Kind_Selected_By_All_Name => 2086, - Iir_Kind_Parenthesis_Name => 2091, - Iir_Kind_Package_Pathname => 2095, - Iir_Kind_Absolute_Pathname => 2096, - Iir_Kind_Relative_Pathname => 2097, - Iir_Kind_Pathname_Element => 2102, - Iir_Kind_Base_Attribute => 2104, - Iir_Kind_Subtype_Attribute => 2109, - Iir_Kind_Element_Attribute => 2114, - Iir_Kind_Across_Attribute => 2119, - Iir_Kind_Through_Attribute => 2124, - Iir_Kind_Nature_Reference_Attribute => 2128, - Iir_Kind_Left_Type_Attribute => 2133, - Iir_Kind_Right_Type_Attribute => 2138, - Iir_Kind_High_Type_Attribute => 2143, - Iir_Kind_Low_Type_Attribute => 2148, - Iir_Kind_Ascending_Type_Attribute => 2153, - Iir_Kind_Image_Attribute => 2159, - Iir_Kind_Value_Attribute => 2165, - Iir_Kind_Pos_Attribute => 2171, - Iir_Kind_Val_Attribute => 2177, - Iir_Kind_Succ_Attribute => 2183, - Iir_Kind_Pred_Attribute => 2189, - Iir_Kind_Leftof_Attribute => 2195, - Iir_Kind_Rightof_Attribute => 2201, - Iir_Kind_Signal_Slew_Attribute => 2209, - Iir_Kind_Quantity_Slew_Attribute => 2217, - Iir_Kind_Ramp_Attribute => 2225, - Iir_Kind_Zoh_Attribute => 2233, - Iir_Kind_Ltf_Attribute => 2241, - Iir_Kind_Ztf_Attribute => 2251, - Iir_Kind_Dot_Attribute => 2258, - Iir_Kind_Integ_Attribute => 2265, - Iir_Kind_Quantity_Delayed_Attribute => 2273, - Iir_Kind_Above_Attribute => 2281, - Iir_Kind_Delayed_Attribute => 2290, - Iir_Kind_Stable_Attribute => 2299, - Iir_Kind_Quiet_Attribute => 2308, - Iir_Kind_Transaction_Attribute => 2317, - Iir_Kind_Event_Attribute => 2321, - Iir_Kind_Active_Attribute => 2325, - Iir_Kind_Last_Event_Attribute => 2329, - Iir_Kind_Last_Active_Attribute => 2333, - Iir_Kind_Last_Value_Attribute => 2337, - Iir_Kind_Driving_Attribute => 2341, - Iir_Kind_Driving_Value_Attribute => 2345, - Iir_Kind_Behavior_Attribute => 2345, - Iir_Kind_Structure_Attribute => 2345, - Iir_Kind_Simple_Name_Attribute => 2352, - Iir_Kind_Instance_Name_Attribute => 2357, - Iir_Kind_Path_Name_Attribute => 2362, - Iir_Kind_Left_Array_Attribute => 2369, - Iir_Kind_Right_Array_Attribute => 2376, - Iir_Kind_High_Array_Attribute => 2383, - Iir_Kind_Low_Array_Attribute => 2390, - Iir_Kind_Length_Array_Attribute => 2397, - Iir_Kind_Ascending_Array_Attribute => 2404, - Iir_Kind_Range_Array_Attribute => 2411, - Iir_Kind_Reverse_Range_Array_Attribute => 2418, - Iir_Kind_Attribute_Name => 2427 + Iir_Kind_Suspend_State_Declaration => 1261, + Iir_Kind_Identity_Operator => 1265, + Iir_Kind_Negation_Operator => 1269, + Iir_Kind_Absolute_Operator => 1273, + Iir_Kind_Not_Operator => 1277, + Iir_Kind_Implicit_Condition_Operator => 1281, + Iir_Kind_Condition_Operator => 1285, + Iir_Kind_Reduction_And_Operator => 1289, + Iir_Kind_Reduction_Or_Operator => 1293, + Iir_Kind_Reduction_Nand_Operator => 1297, + Iir_Kind_Reduction_Nor_Operator => 1301, + Iir_Kind_Reduction_Xor_Operator => 1305, + Iir_Kind_Reduction_Xnor_Operator => 1309, + Iir_Kind_And_Operator => 1314, + Iir_Kind_Or_Operator => 1319, + Iir_Kind_Nand_Operator => 1324, + Iir_Kind_Nor_Operator => 1329, + Iir_Kind_Xor_Operator => 1334, + Iir_Kind_Xnor_Operator => 1339, + Iir_Kind_Equality_Operator => 1344, + Iir_Kind_Inequality_Operator => 1349, + Iir_Kind_Less_Than_Operator => 1354, + Iir_Kind_Less_Than_Or_Equal_Operator => 1359, + Iir_Kind_Greater_Than_Operator => 1364, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1369, + Iir_Kind_Match_Equality_Operator => 1374, + Iir_Kind_Match_Inequality_Operator => 1379, + Iir_Kind_Match_Less_Than_Operator => 1384, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1389, + Iir_Kind_Match_Greater_Than_Operator => 1394, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1399, + Iir_Kind_Sll_Operator => 1404, + Iir_Kind_Sla_Operator => 1409, + Iir_Kind_Srl_Operator => 1414, + Iir_Kind_Sra_Operator => 1419, + Iir_Kind_Rol_Operator => 1424, + Iir_Kind_Ror_Operator => 1429, + Iir_Kind_Addition_Operator => 1434, + Iir_Kind_Substraction_Operator => 1439, + Iir_Kind_Concatenation_Operator => 1444, + Iir_Kind_Multiplication_Operator => 1449, + Iir_Kind_Division_Operator => 1454, + Iir_Kind_Modulus_Operator => 1459, + Iir_Kind_Remainder_Operator => 1464, + Iir_Kind_Exponentiation_Operator => 1469, + Iir_Kind_Function_Call => 1477, + Iir_Kind_Aggregate => 1485, + Iir_Kind_Parenthesis_Expression => 1488, + Iir_Kind_Qualified_Expression => 1492, + Iir_Kind_Type_Conversion => 1497, + Iir_Kind_Allocator_By_Expression => 1502, + Iir_Kind_Allocator_By_Subtype => 1508, + Iir_Kind_Selected_Element => 1516, + Iir_Kind_Dereference => 1521, + Iir_Kind_Implicit_Dereference => 1526, + Iir_Kind_Slice_Name => 1533, + Iir_Kind_Indexed_Name => 1539, + Iir_Kind_Psl_Prev => 1545, + Iir_Kind_Psl_Stable => 1550, + Iir_Kind_Psl_Rose => 1555, + Iir_Kind_Psl_Fell => 1560, + Iir_Kind_Psl_Onehot => 1563, + Iir_Kind_Psl_Onehot0 => 1566, + Iir_Kind_Psl_Expression => 1568, + Iir_Kind_Sensitized_Process_Statement => 1590, + Iir_Kind_Process_Statement => 1611, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1624, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1637, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1651, + Iir_Kind_Concurrent_Assertion_Statement => 1659, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1666, + Iir_Kind_Concurrent_Break_Statement => 1674, + Iir_Kind_Psl_Assert_Directive => 1688, + Iir_Kind_Psl_Assume_Directive => 1700, + Iir_Kind_Psl_Cover_Directive => 1712, + Iir_Kind_Psl_Restrict_Directive => 1723, + Iir_Kind_Block_Statement => 1737, + Iir_Kind_If_Generate_Statement => 1748, + Iir_Kind_Case_Generate_Statement => 1757, + Iir_Kind_For_Generate_Statement => 1766, + Iir_Kind_Component_Instantiation_Statement => 1778, + Iir_Kind_Psl_Default_Clock => 1781, + Iir_Kind_Generate_Statement_Body => 1792, + Iir_Kind_If_Generate_Else_Clause => 1798, + Iir_Kind_Simple_Simultaneous_Statement => 1805, + Iir_Kind_Simultaneous_Null_Statement => 1809, + Iir_Kind_Simultaneous_Procedural_Statement => 1820, + Iir_Kind_Simultaneous_Case_Statement => 1829, + Iir_Kind_Simultaneous_If_Statement => 1838, + Iir_Kind_Simultaneous_Elsif => 1844, + Iir_Kind_Simple_Signal_Assignment_Statement => 1855, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1866, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1878, + Iir_Kind_Signal_Force_Assignment_Statement => 1888, + Iir_Kind_Signal_Release_Assignment_Statement => 1897, + Iir_Kind_Null_Statement => 1901, + Iir_Kind_Assertion_Statement => 1908, + Iir_Kind_Report_Statement => 1914, + Iir_Kind_Wait_Statement => 1922, + Iir_Kind_Variable_Assignment_Statement => 1929, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1936, + Iir_Kind_Return_Statement => 1942, + Iir_Kind_For_Loop_Statement => 1953, + Iir_Kind_While_Loop_Statement => 1964, + Iir_Kind_Next_Statement => 1971, + Iir_Kind_Exit_Statement => 1978, + Iir_Kind_Case_Statement => 1987, + Iir_Kind_Procedure_Call_Statement => 1993, + Iir_Kind_Break_Statement => 2000, + Iir_Kind_If_Statement => 2010, + Iir_Kind_Suspend_State_Statement => 2015, + Iir_Kind_Elsif => 2021, + Iir_Kind_Character_Literal => 2028, + Iir_Kind_Simple_Name => 2035, + Iir_Kind_Selected_Name => 2043, + Iir_Kind_Operator_Symbol => 2048, + Iir_Kind_Reference_Name => 2053, + Iir_Kind_External_Constant_Name => 2062, + Iir_Kind_External_Signal_Name => 2072, + Iir_Kind_External_Variable_Name => 2082, + Iir_Kind_Selected_By_All_Name => 2088, + Iir_Kind_Parenthesis_Name => 2093, + Iir_Kind_Package_Pathname => 2097, + Iir_Kind_Absolute_Pathname => 2098, + Iir_Kind_Relative_Pathname => 2099, + Iir_Kind_Pathname_Element => 2104, + Iir_Kind_Base_Attribute => 2106, + Iir_Kind_Subtype_Attribute => 2111, + Iir_Kind_Element_Attribute => 2116, + Iir_Kind_Across_Attribute => 2121, + Iir_Kind_Through_Attribute => 2126, + Iir_Kind_Nature_Reference_Attribute => 2130, + Iir_Kind_Left_Type_Attribute => 2135, + Iir_Kind_Right_Type_Attribute => 2140, + Iir_Kind_High_Type_Attribute => 2145, + Iir_Kind_Low_Type_Attribute => 2150, + Iir_Kind_Ascending_Type_Attribute => 2155, + Iir_Kind_Image_Attribute => 2161, + Iir_Kind_Value_Attribute => 2167, + Iir_Kind_Pos_Attribute => 2173, + Iir_Kind_Val_Attribute => 2179, + Iir_Kind_Succ_Attribute => 2185, + Iir_Kind_Pred_Attribute => 2191, + Iir_Kind_Leftof_Attribute => 2197, + Iir_Kind_Rightof_Attribute => 2203, + Iir_Kind_Signal_Slew_Attribute => 2211, + Iir_Kind_Quantity_Slew_Attribute => 2219, + Iir_Kind_Ramp_Attribute => 2227, + Iir_Kind_Zoh_Attribute => 2235, + Iir_Kind_Ltf_Attribute => 2243, + Iir_Kind_Ztf_Attribute => 2253, + Iir_Kind_Dot_Attribute => 2260, + Iir_Kind_Integ_Attribute => 2267, + Iir_Kind_Quantity_Delayed_Attribute => 2275, + Iir_Kind_Above_Attribute => 2283, + Iir_Kind_Delayed_Attribute => 2292, + Iir_Kind_Stable_Attribute => 2301, + Iir_Kind_Quiet_Attribute => 2310, + Iir_Kind_Transaction_Attribute => 2319, + Iir_Kind_Event_Attribute => 2323, + Iir_Kind_Active_Attribute => 2327, + Iir_Kind_Last_Event_Attribute => 2331, + Iir_Kind_Last_Active_Attribute => 2335, + Iir_Kind_Last_Value_Attribute => 2339, + Iir_Kind_Driving_Attribute => 2343, + Iir_Kind_Driving_Value_Attribute => 2347, + Iir_Kind_Behavior_Attribute => 2347, + Iir_Kind_Structure_Attribute => 2347, + Iir_Kind_Simple_Name_Attribute => 2354, + Iir_Kind_Instance_Name_Attribute => 2359, + Iir_Kind_Path_Name_Attribute => 2364, + Iir_Kind_Left_Array_Attribute => 2371, + Iir_Kind_Right_Array_Attribute => 2378, + Iir_Kind_High_Array_Attribute => 2385, + Iir_Kind_Low_Array_Attribute => 2392, + Iir_Kind_Length_Array_Attribute => 2399, + Iir_Kind_Ascending_Array_Attribute => 2406, + Iir_Kind_Range_Array_Attribute => 2413, + Iir_Kind_Reverse_Range_Array_Attribute => 2420, + Iir_Kind_Attribute_Name => 2429 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -6637,6 +6649,10 @@ package body Vhdl.Nodes_Meta is return Get_Default_Clock (N); when Field_Suspend_State_Chain => return Get_Suspend_State_Chain (N); + when Field_Suspend_State_Last => + return Get_Suspend_State_Last (N); + when Field_Suspend_State_Decl => + return Get_Suspend_State_Decl (N); when others => raise Internal_Error; end case; @@ -7109,6 +7125,10 @@ package body Vhdl.Nodes_Meta is Set_Default_Clock (N, V); when Field_Suspend_State_Chain => Set_Suspend_State_Chain (N, V); + when Field_Suspend_State_Last => + Set_Suspend_State_Last (N, V); + when Field_Suspend_State_Decl => + Set_Suspend_State_Decl (N, V); when others => raise Internal_Error; end case; @@ -13032,4 +13052,14 @@ package body Vhdl.Nodes_Meta is end case; end Has_Suspend_State_Chain; + function Has_Suspend_State_Last (K : Iir_Kind) return Boolean is + begin + return K = Iir_Kind_Suspend_State_Declaration; + end Has_Suspend_State_Last; + + function Has_Suspend_State_Decl (K : Iir_Kind) return Boolean is + begin + return K = Iir_Kind_Suspend_State_Statement; + end Has_Suspend_State_Decl; + end Vhdl.Nodes_Meta; diff --git a/src/vhdl/vhdl-nodes_meta.ads b/src/vhdl/vhdl-nodes_meta.ads index 27d897a1b..7bf9c4684 100644 --- a/src/vhdl/vhdl-nodes_meta.ads +++ b/src/vhdl/vhdl-nodes_meta.ads @@ -445,7 +445,9 @@ package Vhdl.Nodes_Meta is Field_Default_Clock, Field_Foreign_Node, Field_Suspend_State_Index, - Field_Suspend_State_Chain + Field_Suspend_State_Chain, + Field_Suspend_State_Last, + Field_Suspend_State_Decl ); pragma Discard_Names (Fields_Enum); @@ -1051,4 +1053,6 @@ package Vhdl.Nodes_Meta is function Has_Foreign_Node (K : Iir_Kind) return Boolean; function Has_Suspend_State_Index (K : Iir_Kind) return Boolean; function Has_Suspend_State_Chain (K : Iir_Kind) return Boolean; + function Has_Suspend_State_Last (K : Iir_Kind) return Boolean; + function Has_Suspend_State_Decl (K : Iir_Kind) return Boolean; end Vhdl.Nodes_Meta; diff --git a/src/vhdl/vhdl-sem_inst.adb b/src/vhdl/vhdl-sem_inst.adb index 6b9061a58..54b31cc30 100644 --- a/src/vhdl/vhdl-sem_inst.adb +++ b/src/vhdl/vhdl-sem_inst.adb @@ -662,6 +662,27 @@ package body Vhdl.Sem_Inst is -- forward_ref links can be fixed. Instantiate_Attribute_Value_Chain (Res); + when Field_Suspend_State_Chain => + if Kind = Iir_Kind_Suspend_State_Declaration then + Set_Suspend_State_Chain (Res, Null_Node); + Set_Suspend_State_Last (Res, Null_Node); + else + declare + Decl : constant Node := Get_Suspend_State_Decl (Res); + Last : constant Node := Get_Suspend_State_Last (Decl); + begin + Set_Suspend_State_Chain (Res, Last); + Set_Suspend_State_Last (Decl, Res); + if Decl = Null_Node then + Set_Suspend_State_Chain (Decl, Res); + end if; + end; + end if; + + when Field_Suspend_State_Last => + -- Already handled by Field_Suspend_State_Chain. + null; + when others => -- Common case. Instantiate_Iir_Field (Res, N, F); -- cgit v1.2.3