aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyGHDL/libghdl/vhdl/nodes.py26
-rw-r--r--pyGHDL/libghdl/vhdl/nodes_meta.py14
-rw-r--r--src/vhdl/vhdl-canon.adb11
-rw-r--r--src/vhdl/vhdl-nodes.adb32
-rw-r--r--src/vhdl/vhdl-nodes.ads17
-rw-r--r--src/vhdl/vhdl-nodes_meta.adb392
-rw-r--r--src/vhdl/vhdl-nodes_meta.ads6
-rw-r--r--src/vhdl/vhdl-sem_inst.adb21
8 files changed, 333 insertions, 186 deletions
diff --git a/pyGHDL/libghdl/vhdl/nodes.py b/pyGHDL/libghdl/vhdl/nodes.py
index d5a8d8e80..df1455c82 100644
--- a/pyGHDL/libghdl/vhdl/nodes.py
+++ b/pyGHDL/libghdl/vhdl/nodes.py
@@ -6992,3 +6992,29 @@ def Get_Suspend_State_Chain(obj: Iir) -> Iir:
@BindToLibGHDL("vhdl__nodes__set_suspend_state_chain")
def Set_Suspend_State_Chain(obj: Iir, value: Iir) -> None:
""""""
+
+
+@export
+@BindToLibGHDL("vhdl__nodes__get_suspend_state_last")
+def Get_Suspend_State_Last(obj: Iir) -> Iir:
+ """"""
+ return 0
+
+
+@export
+@BindToLibGHDL("vhdl__nodes__set_suspend_state_last")
+def Set_Suspend_State_Last(obj: Iir, value: Iir) -> None:
+ """"""
+
+
+@export
+@BindToLibGHDL("vhdl__nodes__get_suspend_state_decl")
+def Get_Suspend_State_Decl(obj: Iir) -> Iir:
+ """"""
+ return 0
+
+
+@export
+@BindToLibGHDL("vhdl__nodes__set_suspend_state_decl")
+def Set_Suspend_State_Decl(obj: Iir, value: Iir) -> None:
+ """"""
diff --git a/pyGHDL/libghdl/vhdl/nodes_meta.py b/pyGHDL/libghdl/vhdl/nodes_meta.py
index f2b4ec7e2..ef851f816 100644
--- a/pyGHDL/libghdl/vhdl/nodes_meta.py
+++ b/pyGHDL/libghdl/vhdl/nodes_meta.py
@@ -502,6 +502,8 @@ class fields(IntEnum):
Foreign_Node = 382
Suspend_State_Index = 383
Suspend_State_Chain = 384
+ Suspend_State_Last = 385
+ Suspend_State_Decl = 386
def Get_Boolean(node, field):
@@ -2944,3 +2946,15 @@ def Has_Suspend_State_Index(kind: IirKind) -> bool:
@BindToLibGHDL("vhdl__nodes_meta__has_suspend_state_chain")
def Has_Suspend_State_Chain(kind: IirKind) -> bool:
""""""
+
+
+@export
+@BindToLibGHDL("vhdl__nodes_meta__has_suspend_state_last")
+def Has_Suspend_State_Last(kind: IirKind) -> bool:
+ """"""
+
+
+@export
+@BindToLibGHDL("vhdl__nodes_meta__has_suspend_state_decl")
+def Has_Suspend_State_Decl(kind: IirKind) -> bool:
+ """"""
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);