aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/synth/synth-vhdl_oper.adb1
-rw-r--r--src/synth/synth-vhdl_stmts.adb2
-rw-r--r--src/vhdl/vhdl-canon.adb97
-rw-r--r--src/vhdl/vhdl-canon.ads21
-rw-r--r--src/vhdl/vhdl-elocations.adb2
-rw-r--r--src/vhdl/vhdl-elocations.ads3
-rw-r--r--src/vhdl/vhdl-errors.adb6
-rw-r--r--src/vhdl/vhdl-nodes.adb2
-rw-r--r--src/vhdl/vhdl-nodes.ads21
-rw-r--r--src/vhdl/vhdl-nodes_meta.adb221
-rw-r--r--src/vhdl/vhdl-utils.adb74
11 files changed, 276 insertions, 174 deletions
diff --git a/src/synth/synth-vhdl_oper.adb b/src/synth/synth-vhdl_oper.adb
index 640a65b77..813a5513d 100644
--- a/src/synth/synth-vhdl_oper.adb
+++ b/src/synth/synth-vhdl_oper.adb
@@ -1937,6 +1937,7 @@ package body Synth.Vhdl_Oper is
when Iir_Predefined_Ieee_1164_To_Bitvector
| Iir_Predefined_Ieee_1164_To_Stdlogicvector_Suv
| Iir_Predefined_Ieee_1164_To_Stdlogicvector_Bv
+ | Iir_Predefined_Ieee_1164_To_Stdulogicvector_Slv
| Iir_Predefined_Ieee_1164_To_Stdulogicvector_Bv
| Iir_Predefined_Ieee_Numeric_Std_To_01_Uns
| Iir_Predefined_Ieee_Numeric_Std_To_01_Sgn
diff --git a/src/synth/synth-vhdl_stmts.adb b/src/synth/synth-vhdl_stmts.adb
index 6fa2e9227..53e7a2ee4 100644
--- a/src/synth/synth-vhdl_stmts.adb
+++ b/src/synth/synth-vhdl_stmts.adb
@@ -3082,6 +3082,8 @@ package body Synth.Vhdl_Stmts is
when Iir_Kind_Procedure_Call_Statement =>
Synth_Procedure_Call (C.Inst, Stmt);
when Iir_Kind_Report_Statement =>
+ -- TODO: handle report statements from ieee library (at least
+ -- fixed pkg). They are known to be OK (tbc) and useful.
if not Is_Dyn then
Synth_Static_Report_Statement (C, Stmt);
end if;
diff --git a/src/vhdl/vhdl-canon.adb b/src/vhdl/vhdl-canon.adb
index d37f26493..70e5ea945 100644
--- a/src/vhdl/vhdl-canon.adb
+++ b/src/vhdl/vhdl-canon.adb
@@ -334,7 +334,7 @@ package body Vhdl.Canon is
end Canon_Extract_Sensitivity_If_Not_Null;
procedure Canon_Extract_Sensitivity_Procedure_Call
- (Sensitivity_List : Iir_List; Call : Iir)
+ (Call : Iir; Sensitivity_List : Iir_List)
is
Assoc : Iir;
Inter : Iir;
@@ -365,6 +365,65 @@ package body Vhdl.Canon is
end loop;
end Canon_Extract_Sensitivity_Waveform;
+ procedure Canon_Extract_Sensitivity_Signal_Assignment_Common
+ (Stmt : Iir; List : Iir_List) is
+ begin
+ Canon_Extract_Sensitivity_Expression (Get_Target (Stmt), List, True);
+ Canon_Extract_Sensitivity_If_Not_Null
+ (Get_Reject_Time_Expression (Stmt), List);
+ end Canon_Extract_Sensitivity_Signal_Assignment_Common;
+
+ procedure Canon_Extract_Sensitivity_Conditional_Signal_Assignment
+ (Stmt : Iir; List : Iir_List)
+ is
+ Cwe : Iir;
+ begin
+ Canon_Extract_Sensitivity_Signal_Assignment_Common (Stmt, List);
+ Cwe := Get_Conditional_Waveform_Chain (Stmt);
+ while Cwe /= Null_Iir loop
+ Canon_Extract_Sensitivity_If_Not_Null (Get_Condition (Cwe), List);
+ Canon_Extract_Sensitivity_Waveform (Get_Waveform_Chain (Cwe), List);
+ Cwe := Get_Chain (Cwe);
+ end loop;
+ end Canon_Extract_Sensitivity_Conditional_Signal_Assignment;
+
+ procedure Canon_Extract_Sensitivity_Simple_Signal_Assignment
+ (Stmt : Iir; List : Iir_List) is
+ begin
+ Canon_Extract_Sensitivity_Signal_Assignment_Common (Stmt, List);
+ Canon_Extract_Sensitivity_Waveform (Get_Waveform_Chain (Stmt), List);
+ end Canon_Extract_Sensitivity_Simple_Signal_Assignment;
+
+ procedure Canon_Extract_Sensitivity_Selected_Signal_Assignment
+ (Stmt : Iir; List : Iir_List)
+ is
+ Swf : Node;
+ Wf : Node;
+ begin
+ Canon_Extract_Sensitivity_Signal_Assignment_Common (Stmt, List);
+ Canon_Extract_Sensitivity_Expression (Get_Expression (Stmt), List);
+
+ Swf := Get_Selected_Waveform_Chain (Stmt);
+ while Swf /= Null_Node loop
+ Wf := Get_Associated_Chain (Swf);
+ if Wf /= Null_Iir then
+ Canon_Extract_Sensitivity_Waveform (Wf, List);
+ end if;
+ Swf := Get_Chain (Swf);
+ end loop;
+ end Canon_Extract_Sensitivity_Selected_Signal_Assignment;
+
+ procedure Canon_Extract_Sensitivity_Assertion_Statement
+ (Stmt : Iir; List : Iir_List) is
+ begin
+ Canon_Extract_Sensitivity_Expression
+ (Get_Assertion_Condition (Stmt), List);
+ Canon_Extract_Sensitivity_If_Not_Null
+ (Get_Severity_Expression (Stmt), List);
+ Canon_Extract_Sensitivity_If_Not_Null
+ (Get_Report_Expression (Stmt), List);
+ end Canon_Extract_Sensitivity_Assertion_Statement;
+
procedure Canon_Extract_Sensitivity_Statement
(Stmt : Iir; List : Iir_List) is
begin
@@ -375,12 +434,7 @@ package body Vhdl.Canon is
-- statement, apply the rule of 10.2 to each expression
-- in the statement, and construct the union of the
-- resulting sets.
- Canon_Extract_Sensitivity_Expression
- (Get_Assertion_Condition (Stmt), List);
- Canon_Extract_Sensitivity_If_Not_Null
- (Get_Severity_Expression (Stmt), List);
- Canon_Extract_Sensitivity_If_Not_Null
- (Get_Report_Expression (Stmt), List);
+ Canon_Extract_Sensitivity_Assertion_Statement (Stmt, List);
when Iir_Kind_Report_Statement =>
-- LRM08 11.3
-- See assertion_statement case.
@@ -412,29 +466,10 @@ package body Vhdl.Canon is
when Iir_Kind_Simple_Signal_Assignment_Statement =>
-- LRM08 11.3
-- See variable assignment statement case.
- Canon_Extract_Sensitivity_Expression
- (Get_Target (Stmt), List, True);
- Canon_Extract_Sensitivity_If_Not_Null
- (Get_Reject_Time_Expression (Stmt), List);
- Canon_Extract_Sensitivity_Waveform
- (Get_Waveform_Chain (Stmt), List);
+ Canon_Extract_Sensitivity_Simple_Signal_Assignment (Stmt, List);
when Iir_Kind_Conditional_Signal_Assignment_Statement =>
- Canon_Extract_Sensitivity_Expression
- (Get_Target (Stmt), List, True);
- Canon_Extract_Sensitivity_If_Not_Null
- (Get_Reject_Time_Expression (Stmt), List);
- declare
- Cwe : Iir;
- begin
- Cwe := Get_Conditional_Waveform_Chain (Stmt);
- while Cwe /= Null_Iir loop
- Canon_Extract_Sensitivity_If_Not_Null
- (Get_Condition (Cwe), List);
- Canon_Extract_Sensitivity_Waveform
- (Get_Waveform_Chain (Cwe), List);
- Cwe := Get_Chain (Cwe);
- end loop;
- end;
+ Canon_Extract_Sensitivity_Conditional_Signal_Assignment
+ (Stmt, List);
when Iir_Kind_If_Statement =>
-- LRM08 11.3
-- * For each if statement, apply the rule of 10.2 to the
@@ -509,7 +544,7 @@ package body Vhdl.Canon is
-- with each formal parameter of mode IN or INOUT, and
-- construct the union of the resulting sets.
Canon_Extract_Sensitivity_Procedure_Call
- (List, Get_Procedure_Call (Stmt));
+ (Get_Procedure_Call (Stmt), List);
when others =>
Error_Kind ("canon_extract_sensitivity_statement", Stmt);
end case;
@@ -1428,7 +1463,7 @@ package body Vhdl.Canon is
-- the union of the sets constructed by applying th rule of Section 8.1
-- to each actual part associated with a formal parameter.
Sensitivity_List := Create_Iir_List;
- Canon_Extract_Sensitivity_Procedure_Call (Sensitivity_List, Call);
+ Canon_Extract_Sensitivity_Procedure_Call (Call, Sensitivity_List);
if Is_Sensitized then
Set_Sensitivity_List (Proc, Sensitivity_List);
Set_Is_Ref (Proc, True);
diff --git a/src/vhdl/vhdl-canon.ads b/src/vhdl/vhdl-canon.ads
index 2c9178257..3c47a3cae 100644
--- a/src/vhdl/vhdl-canon.ads
+++ b/src/vhdl/vhdl-canon.ads
@@ -95,4 +95,25 @@ package Vhdl.Canon is
-- Used for vhdl 08.
function Canon_Extract_Sensitivity_Process
(Proc : Iir_Sensitized_Process_Statement) return Iir_List;
+
+ -- For a concurrent or sequential conditional signal assignment.
+ procedure Canon_Extract_Sensitivity_Conditional_Signal_Assignment
+ (Stmt : Iir; List : Iir_List);
+
+ -- For a concurrent or sequential simple signal assignment.
+ procedure Canon_Extract_Sensitivity_Simple_Signal_Assignment
+ (Stmt : Iir; List : Iir_List);
+
+ -- For a concurrent selected signal statement.
+ procedure Canon_Extract_Sensitivity_Selected_Signal_Assignment
+ (Stmt : Iir; List : Iir_List);
+
+ -- For a concurrent or sequential simple assertion statement.
+ procedure Canon_Extract_Sensitivity_Assertion_Statement
+ (Stmt : Iir; List : Iir_List);
+
+ -- For a procedure call.
+ procedure Canon_Extract_Sensitivity_Procedure_Call
+ (Call : Iir; Sensitivity_List : Iir_List);
+
end Vhdl.Canon;
diff --git a/src/vhdl/vhdl-elocations.adb b/src/vhdl/vhdl-elocations.adb
index dbd610d3c..b428c4fab 100644
--- a/src/vhdl/vhdl-elocations.adb
+++ b/src/vhdl/vhdl-elocations.adb
@@ -297,6 +297,7 @@ package body Vhdl.Elocations is
| Iir_Kind_Interface_Function_Declaration
| Iir_Kind_Interface_Procedure_Declaration
| Iir_Kind_Signal_Attribute_Declaration
+ | Iir_Kind_Suspend_State_Declaration
| Iir_Kind_Identity_Operator
| Iir_Kind_Negation_Operator
| Iir_Kind_Absolute_Operator
@@ -386,6 +387,7 @@ package body Vhdl.Elocations is
| Iir_Kind_Exit_Statement
| Iir_Kind_Procedure_Call_Statement
| Iir_Kind_Break_Statement
+ | Iir_Kind_Suspend_State_Statement
| Iir_Kind_Character_Literal
| Iir_Kind_Simple_Name
| Iir_Kind_Selected_Name
diff --git a/src/vhdl/vhdl-elocations.ads b/src/vhdl/vhdl-elocations.ads
index eaa1f78a1..810507a9f 100644
--- a/src/vhdl/vhdl-elocations.ads
+++ b/src/vhdl/vhdl-elocations.ads
@@ -280,6 +280,7 @@ package Vhdl.Elocations is
-- Iir_Kind_Guard_Signal_Declaration (None)
-- Iir_Kind_Signal_Attribute_Declaration (None)
+ -- Iir_Kind_Suspend_State_Declaration (None)
-- Iir_Kind_Constant_Declaration (L1)
-- Iir_Kind_Iterator_Declaration (L1)
@@ -566,6 +567,8 @@ package Vhdl.Elocations is
-- Iir_Kind_Break_Element (None)
+ -- Iir_Kind_Suspend_State_Statement (None)
+
----------------
-- operators --
----------------
diff --git a/src/vhdl/vhdl-errors.adb b/src/vhdl/vhdl-errors.adb
index ddb2a9868..3388fcde8 100644
--- a/src/vhdl/vhdl-errors.adb
+++ b/src/vhdl/vhdl-errors.adb
@@ -495,6 +495,9 @@ package body Vhdl.Errors is
when Iir_Kind_Signal_Attribute_Declaration =>
-- Should not appear.
return "signal attribute";
+ when Iir_Kind_Suspend_State_Declaration =>
+ -- Should not appear.
+ return "suspend state variable";
when Iir_Kind_Group_Template_Declaration =>
return Disp_Identifier (Node, "group template");
when Iir_Kind_Group_Declaration =>
@@ -841,6 +844,9 @@ package body Vhdl.Errors is
return Disp_Label (Node, "report statement");
when Iir_Kind_Break_Statement =>
return Disp_Label (Node, "break statement");
+ when Iir_Kind_Suspend_State_Statement =>
+ -- Should not appear.
+ return "suspend state statement";
when Iir_Kind_Block_Configuration =>
return "block configuration";
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb
index 947cd771d..360fdbec5 100644
--- a/src/vhdl/vhdl-nodes.adb
+++ b/src/vhdl/vhdl-nodes.adb
@@ -1083,6 +1083,7 @@ package body Vhdl.Nodes is
| Iir_Kind_Interface_Terminal_Declaration
| Iir_Kind_Interface_Type_Declaration
| Iir_Kind_Signal_Attribute_Declaration
+ | Iir_Kind_Suspend_State_Declaration
| Iir_Kind_Identity_Operator
| Iir_Kind_Negation_Operator
| Iir_Kind_Absolute_Operator
@@ -1178,6 +1179,7 @@ package body Vhdl.Nodes is
| Iir_Kind_Break_Statement
| Iir_Kind_If_Statement
| Iir_Kind_Elsif
+ | Iir_Kind_Suspend_State_Statement
| Iir_Kind_Character_Literal
| Iir_Kind_Simple_Name
| Iir_Kind_Selected_Name
diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads
index 1e97286d0..0dd339ef1 100644
--- a/src/vhdl/vhdl-nodes.ads
+++ b/src/vhdl/vhdl-nodes.ads
@@ -1602,12 +1602,14 @@ package Vhdl.Nodes is
--
-- Get/Set_Implicit_Definition (Field7)
--
+ -- Only for Iir_Kind_Function_Declaration:
-- Get/Set_Return_Type_Mark (Field8)
--
-- Get/Set_Subprogram_Body (Field9)
--
-- Get/Set_Subprogram_Depth (Field10)
--
+ -- Only for Iir_Kind_Function_Declaration:
-- Get/Set_Return_Identifier (Field11)
--
-- Get/Set_Overload_Number (Field12)
@@ -1872,6 +1874,15 @@ package Vhdl.Nodes is
-- Chain of signals
-- Get/Set_Signal_Attribute_Chain (Field3)
+ -- Iir_Kind_Suspend_State_Declaration (Short)
+ --
+ -- Implicit state variable to handle suspension. Added after semantic
+ -- analysis.
+ --
+ -- Get/Set_Parent (Field0)
+ --
+ -- Get/Set_Chain (Field2)
+
-- Iir_Kind_Constant_Declaration (Medium)
-- Iir_Kind_Iterator_Declaration (Short)
--
@@ -4122,6 +4133,14 @@ package Vhdl.Nodes is
--
-- Get/Set_Expression (Field5)
+ -- Iir_Kind_Suspend_State_Statement (Short)
+ --
+ -- Implicit statement added to mark a suspend point.
+ --
+ -- Get/Set_Parent (Field0)
+ --
+ -- Get/Set_Chain (Field2)
+
----------------
-- operators --
----------------
@@ -4998,6 +5017,7 @@ package Vhdl.Nodes is
Iir_Kind_Interface_Procedure_Declaration, -- interface
Iir_Kind_Signal_Attribute_Declaration,
+ Iir_Kind_Suspend_State_Declaration,
-- Expressions.
Iir_Kind_Identity_Operator,
@@ -5118,6 +5138,7 @@ package Vhdl.Nodes is
Iir_Kind_Break_Statement,
Iir_Kind_If_Statement,
Iir_Kind_Elsif,
+ Iir_Kind_Suspend_State_Statement,
-- Names
Iir_Kind_Character_Literal, -- denoting_name
diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb
index 9fd729275..410e4b9eb 100644
--- a/src/vhdl/vhdl-nodes_meta.adb
+++ b/src/vhdl/vhdl-nodes_meta.adb
@@ -1436,6 +1436,8 @@ package body Vhdl.Nodes_Meta is
return "interface_procedure_declaration";
when Iir_Kind_Signal_Attribute_Declaration =>
return "signal_attribute_declaration";
+ when Iir_Kind_Suspend_State_Declaration =>
+ return "suspend_state_declaration";
when Iir_Kind_Identity_Operator =>
return "identity_operator";
when Iir_Kind_Negation_Operator =>
@@ -1656,6 +1658,8 @@ package body Vhdl.Nodes_Meta is
return "if_statement";
when Iir_Kind_Elsif =>
return "elsif";
+ when Iir_Kind_Suspend_State_Statement =>
+ return "suspend_state_statement";
when Iir_Kind_Character_Literal =>
return "character_literal";
when Iir_Kind_Simple_Name =>
@@ -3517,9 +3521,7 @@ package body Vhdl.Nodes_Meta is
Field_Chain,
Field_Interface_Declaration_Chain,
Field_Generic_Chain,
- Field_Return_Type_Mark,
Field_Subprogram_Body,
- Field_Return_Identifier,
-- Iir_Kind_Function_Body
Field_Impure_Depth,
Field_End_Has_Reserved_Id,
@@ -3922,6 +3924,9 @@ package body Vhdl.Nodes_Meta is
Field_Parent,
Field_Chain,
Field_Signal_Attribute_Chain,
+ -- Iir_Kind_Suspend_State_Declaration
+ Field_Parent,
+ Field_Chain,
-- Iir_Kind_Identity_Operator
Field_Expr_Staticness,
Field_Type,
@@ -4783,6 +4788,9 @@ package body Vhdl.Nodes_Meta is
Field_Condition,
Field_Sequential_Statement_Chain,
Field_Else_Clause,
+ -- Iir_Kind_Suspend_State_Statement
+ Field_Parent,
+ Field_Chain,
-- Iir_Kind_Character_Literal
Field_Identifier,
Field_Is_Forward_Ref,
@@ -5375,35 +5383,36 @@ package body Vhdl.Nodes_Meta is
Iir_Kind_Psl_Endpoint_Declaration => 793,
Iir_Kind_Enumeration_Literal => 805,
Iir_Kind_Function_Declaration => 831,
- Iir_Kind_Procedure_Declaration => 856,
- Iir_Kind_Function_Body => 866,
- Iir_Kind_Procedure_Body => 877,
- Iir_Kind_Function_Instantiation_Declaration => 888,
- Iir_Kind_Procedure_Instantiation_Declaration => 898,
- Iir_Kind_Terminal_Declaration => 907,
- Iir_Kind_Object_Alias_Declaration => 919,
- Iir_Kind_Free_Quantity_Declaration => 931,
- Iir_Kind_Spectrum_Quantity_Declaration => 944,
- Iir_Kind_Noise_Quantity_Declaration => 956,
- Iir_Kind_Across_Quantity_Declaration => 972,
- Iir_Kind_Through_Quantity_Declaration => 988,
- Iir_Kind_File_Declaration => 1003,
- Iir_Kind_Guard_Signal_Declaration => 1017,
- Iir_Kind_Signal_Declaration => 1034,
- Iir_Kind_Variable_Declaration => 1047,
- Iir_Kind_Constant_Declaration => 1061,
- Iir_Kind_Iterator_Declaration => 1073,
- Iir_Kind_Interface_Constant_Declaration => 1090,
- Iir_Kind_Interface_Variable_Declaration => 1106,
- Iir_Kind_Interface_Signal_Declaration => 1127,
- Iir_Kind_Interface_File_Declaration => 1143,
- Iir_Kind_Interface_Quantity_Declaration => 1159,
- Iir_Kind_Interface_Terminal_Declaration => 1171,
- Iir_Kind_Interface_Type_Declaration => 1182,
- Iir_Kind_Interface_Package_Declaration => 1195,
- Iir_Kind_Interface_Function_Declaration => 1213,
- Iir_Kind_Interface_Procedure_Declaration => 1227,
- Iir_Kind_Signal_Attribute_Declaration => 1230,
+ Iir_Kind_Procedure_Declaration => 854,
+ Iir_Kind_Function_Body => 864,
+ Iir_Kind_Procedure_Body => 875,
+ Iir_Kind_Function_Instantiation_Declaration => 886,
+ Iir_Kind_Procedure_Instantiation_Declaration => 896,
+ Iir_Kind_Terminal_Declaration => 905,
+ Iir_Kind_Object_Alias_Declaration => 917,
+ Iir_Kind_Free_Quantity_Declaration => 929,
+ Iir_Kind_Spectrum_Quantity_Declaration => 942,
+ Iir_Kind_Noise_Quantity_Declaration => 954,
+ Iir_Kind_Across_Quantity_Declaration => 970,
+ Iir_Kind_Through_Quantity_Declaration => 986,
+ Iir_Kind_File_Declaration => 1001,
+ Iir_Kind_Guard_Signal_Declaration => 1015,
+ Iir_Kind_Signal_Declaration => 1032,
+ Iir_Kind_Variable_Declaration => 1045,
+ Iir_Kind_Constant_Declaration => 1059,
+ Iir_Kind_Iterator_Declaration => 1071,
+ Iir_Kind_Interface_Constant_Declaration => 1088,
+ Iir_Kind_Interface_Variable_Declaration => 1104,
+ Iir_Kind_Interface_Signal_Declaration => 1125,
+ Iir_Kind_Interface_File_Declaration => 1141,
+ Iir_Kind_Interface_Quantity_Declaration => 1157,
+ Iir_Kind_Interface_Terminal_Declaration => 1169,
+ Iir_Kind_Interface_Type_Declaration => 1180,
+ Iir_Kind_Interface_Package_Declaration => 1193,
+ Iir_Kind_Interface_Function_Declaration => 1211,
+ Iir_Kind_Interface_Procedure_Declaration => 1225,
+ Iir_Kind_Signal_Attribute_Declaration => 1228,
+ Iir_Kind_Suspend_State_Declaration => 1230,
Iir_Kind_Identity_Operator => 1234,
Iir_Kind_Negation_Operator => 1238,
Iir_Kind_Absolute_Operator => 1242,
@@ -5514,74 +5523,75 @@ package body Vhdl.Nodes_Meta is
Iir_Kind_Break_Statement => 1965,
Iir_Kind_If_Statement => 1975,
Iir_Kind_Elsif => 1981,
- Iir_Kind_Character_Literal => 1988,
- Iir_Kind_Simple_Name => 1995,
- Iir_Kind_Selected_Name => 2003,
- Iir_Kind_Operator_Symbol => 2008,
- Iir_Kind_Reference_Name => 2013,
- Iir_Kind_External_Constant_Name => 2022,
- Iir_Kind_External_Signal_Name => 2031,
- Iir_Kind_External_Variable_Name => 2041,
- Iir_Kind_Selected_By_All_Name => 2047,
- Iir_Kind_Parenthesis_Name => 2052,
- Iir_Kind_Package_Pathname => 2056,
- Iir_Kind_Absolute_Pathname => 2057,
- Iir_Kind_Relative_Pathname => 2058,
- Iir_Kind_Pathname_Element => 2063,
- Iir_Kind_Base_Attribute => 2065,
- Iir_Kind_Subtype_Attribute => 2070,
- Iir_Kind_Element_Attribute => 2075,
- Iir_Kind_Across_Attribute => 2080,
- Iir_Kind_Through_Attribute => 2085,
- Iir_Kind_Nature_Reference_Attribute => 2089,
- Iir_Kind_Left_Type_Attribute => 2094,
- Iir_Kind_Right_Type_Attribute => 2099,
- Iir_Kind_High_Type_Attribute => 2104,
- Iir_Kind_Low_Type_Attribute => 2109,
- Iir_Kind_Ascending_Type_Attribute => 2114,
- Iir_Kind_Image_Attribute => 2120,
- Iir_Kind_Value_Attribute => 2126,
- Iir_Kind_Pos_Attribute => 2132,
- Iir_Kind_Val_Attribute => 2138,
- Iir_Kind_Succ_Attribute => 2144,
- Iir_Kind_Pred_Attribute => 2150,
- Iir_Kind_Leftof_Attribute => 2156,
- Iir_Kind_Rightof_Attribute => 2162,
- Iir_Kind_Signal_Slew_Attribute => 2170,
- Iir_Kind_Quantity_Slew_Attribute => 2178,
- Iir_Kind_Ramp_Attribute => 2186,
- Iir_Kind_Zoh_Attribute => 2194,
- Iir_Kind_Ltf_Attribute => 2202,
- Iir_Kind_Ztf_Attribute => 2212,
- Iir_Kind_Dot_Attribute => 2219,
- Iir_Kind_Integ_Attribute => 2226,
- Iir_Kind_Above_Attribute => 2234,
- Iir_Kind_Quantity_Delayed_Attribute => 2242,
- Iir_Kind_Delayed_Attribute => 2251,
- Iir_Kind_Stable_Attribute => 2260,
- Iir_Kind_Quiet_Attribute => 2269,
- Iir_Kind_Transaction_Attribute => 2278,
- Iir_Kind_Event_Attribute => 2282,
- Iir_Kind_Active_Attribute => 2286,
- Iir_Kind_Last_Event_Attribute => 2290,
- Iir_Kind_Last_Active_Attribute => 2294,
- Iir_Kind_Last_Value_Attribute => 2298,
- Iir_Kind_Driving_Attribute => 2302,
- Iir_Kind_Driving_Value_Attribute => 2306,
- Iir_Kind_Behavior_Attribute => 2306,
- Iir_Kind_Structure_Attribute => 2306,
- Iir_Kind_Simple_Name_Attribute => 2313,
- Iir_Kind_Instance_Name_Attribute => 2318,
- Iir_Kind_Path_Name_Attribute => 2323,
- Iir_Kind_Left_Array_Attribute => 2330,
- Iir_Kind_Right_Array_Attribute => 2337,
- Iir_Kind_High_Array_Attribute => 2344,
- Iir_Kind_Low_Array_Attribute => 2351,
- Iir_Kind_Length_Array_Attribute => 2358,
- Iir_Kind_Ascending_Array_Attribute => 2365,
- Iir_Kind_Range_Array_Attribute => 2372,
- Iir_Kind_Reverse_Range_Array_Attribute => 2379,
- Iir_Kind_Attribute_Name => 2388
+ Iir_Kind_Suspend_State_Statement => 1983,
+ Iir_Kind_Character_Literal => 1990,
+ Iir_Kind_Simple_Name => 1997,
+ Iir_Kind_Selected_Name => 2005,
+ Iir_Kind_Operator_Symbol => 2010,
+ Iir_Kind_Reference_Name => 2015,
+ Iir_Kind_External_Constant_Name => 2024,
+ Iir_Kind_External_Signal_Name => 2033,
+ Iir_Kind_External_Variable_Name => 2043,
+ Iir_Kind_Selected_By_All_Name => 2049,
+ Iir_Kind_Parenthesis_Name => 2054,
+ Iir_Kind_Package_Pathname => 2058,
+ Iir_Kind_Absolute_Pathname => 2059,
+ Iir_Kind_Relative_Pathname => 2060,
+ Iir_Kind_Pathname_Element => 2065,
+ Iir_Kind_Base_Attribute => 2067,
+ Iir_Kind_Subtype_Attribute => 2072,
+ Iir_Kind_Element_Attribute => 2077,
+ Iir_Kind_Across_Attribute => 2082,
+ Iir_Kind_Through_Attribute => 2087,
+ Iir_Kind_Nature_Reference_Attribute => 2091,
+ Iir_Kind_Left_Type_Attribute => 2096,
+ Iir_Kind_Right_Type_Attribute => 2101,
+ Iir_Kind_High_Type_Attribute => 2106,
+ Iir_Kind_Low_Type_Attribute => 2111,
+ Iir_Kind_Ascending_Type_Attribute => 2116,
+ Iir_Kind_Image_Attribute => 2122,
+ Iir_Kind_Value_Attribute => 2128,
+ Iir_Kind_Pos_Attribute => 2134,
+ Iir_Kind_Val_Attribute => 2140,
+ Iir_Kind_Succ_Attribute => 2146,
+ Iir_Kind_Pred_Attribute => 2152,
+ Iir_Kind_Leftof_Attribute => 2158,
+ Iir_Kind_Rightof_Attribute => 2164,
+ Iir_Kind_Signal_Slew_Attribute => 2172,
+ Iir_Kind_Quantity_Slew_Attribute => 2180,
+ Iir_Kind_Ramp_Attribute => 2188,
+ Iir_Kind_Zoh_Attribute => 2196,
+ Iir_Kind_Ltf_Attribute => 2204,
+ Iir_Kind_Ztf_Attribute => 2214,
+ Iir_Kind_Dot_Attribute => 2221,
+ Iir_Kind_Integ_Attribute => 2228,
+ Iir_Kind_Above_Attribute => 2236,
+ Iir_Kind_Quantity_Delayed_Attribute => 2244,
+ Iir_Kind_Delayed_Attribute => 2253,
+ Iir_Kind_Stable_Attribute => 2262,
+ Iir_Kind_Quiet_Attribute => 2271,
+ Iir_Kind_Transaction_Attribute => 2280,
+ Iir_Kind_Event_Attribute => 2284,
+ Iir_Kind_Active_Attribute => 2288,
+ Iir_Kind_Last_Event_Attribute => 2292,
+ Iir_Kind_Last_Active_Attribute => 2296,
+ Iir_Kind_Last_Value_Attribute => 2300,
+ Iir_Kind_Driving_Attribute => 2304,
+ Iir_Kind_Driving_Value_Attribute => 2308,
+ Iir_Kind_Behavior_Attribute => 2308,
+ Iir_Kind_Structure_Attribute => 2308,
+ Iir_Kind_Simple_Name_Attribute => 2315,
+ Iir_Kind_Instance_Name_Attribute => 2320,
+ Iir_Kind_Path_Name_Attribute => 2325,
+ Iir_Kind_Left_Array_Attribute => 2332,
+ Iir_Kind_Right_Array_Attribute => 2339,
+ Iir_Kind_High_Array_Attribute => 2346,
+ Iir_Kind_Low_Array_Attribute => 2353,
+ Iir_Kind_Length_Array_Attribute => 2360,
+ Iir_Kind_Ascending_Array_Attribute => 2367,
+ Iir_Kind_Range_Array_Attribute => 2374,
+ Iir_Kind_Reverse_Range_Array_Attribute => 2381,
+ Iir_Kind_Attribute_Name => 2390
);
function Get_Fields_First (K : Iir_Kind) return Fields_Index is
@@ -8570,6 +8580,7 @@ package body Vhdl.Nodes_Meta is
| Iir_Kind_Interface_Function_Declaration
| Iir_Kind_Interface_Procedure_Declaration
| Iir_Kind_Signal_Attribute_Declaration
+ | Iir_Kind_Suspend_State_Declaration
| Iir_Kind_Sensitized_Process_Statement
| Iir_Kind_Process_Statement
| Iir_Kind_Concurrent_Simple_Signal_Assignment
@@ -8613,6 +8624,7 @@ package body Vhdl.Nodes_Meta is
| Iir_Kind_Procedure_Call_Statement
| Iir_Kind_Break_Statement
| Iir_Kind_If_Statement
+ | Iir_Kind_Suspend_State_Statement
| Iir_Kind_External_Constant_Name
| Iir_Kind_External_Signal_Name
| Iir_Kind_External_Variable_Name =>
@@ -9583,13 +9595,7 @@ package body Vhdl.Nodes_Meta is
function Has_Return_Identifier (K : Iir_Kind) return Boolean is
begin
- case K is
- when Iir_Kind_Function_Declaration
- | Iir_Kind_Procedure_Declaration =>
- return True;
- when others =>
- return False;
- end case;
+ return K = Iir_Kind_Function_Declaration;
end Has_Return_Identifier;
function Has_Visible_Flag (K : Iir_Kind) return Boolean is
@@ -10997,6 +11003,7 @@ package body Vhdl.Nodes_Meta is
| Iir_Kind_Interface_Function_Declaration
| Iir_Kind_Interface_Procedure_Declaration
| Iir_Kind_Signal_Attribute_Declaration
+ | Iir_Kind_Suspend_State_Declaration
| Iir_Kind_Sensitized_Process_Statement
| Iir_Kind_Process_Statement
| Iir_Kind_Concurrent_Simple_Signal_Assignment
@@ -11044,6 +11051,7 @@ package body Vhdl.Nodes_Meta is
| Iir_Kind_Break_Statement
| Iir_Kind_If_Statement
| Iir_Kind_Elsif
+ | Iir_Kind_Suspend_State_Statement
| Iir_Kind_External_Constant_Name
| Iir_Kind_External_Signal_Name
| Iir_Kind_External_Variable_Name =>
@@ -12072,7 +12080,6 @@ package body Vhdl.Nodes_Meta is
case K is
when Iir_Kind_Signature
| Iir_Kind_Function_Declaration
- | Iir_Kind_Procedure_Declaration
| Iir_Kind_Interface_Function_Declaration
| Iir_Kind_Interface_Procedure_Declaration =>
return True;
diff --git a/src/vhdl/vhdl-utils.adb b/src/vhdl/vhdl-utils.adb
index 8e9d5af90..fecb0602c 100644
--- a/src/vhdl/vhdl-utils.adb
+++ b/src/vhdl/vhdl-utils.adb
@@ -240,17 +240,17 @@ package body Vhdl.Utils is
loop
case Get_Kind (Adecl) is
when Iir_Kinds_Non_Alias_Object_Declaration
- | Iir_Kinds_Quantity_Declaration
- | Iir_Kind_Terminal_Declaration
- | Iir_Kind_Interface_Quantity_Declaration
- | Iir_Kind_Interface_Terminal_Declaration
- | Iir_Kind_Interface_Type_Declaration
- | Iir_Kind_Interface_Package_Declaration
- | Iir_Kind_Interface_Function_Declaration
- | Iir_Kind_Interface_Procedure_Declaration
- | Iir_Kind_External_Signal_Name
- | Iir_Kind_External_Constant_Name
- | Iir_Kind_External_Variable_Name =>
+ | Iir_Kinds_Quantity_Declaration
+ | Iir_Kind_Terminal_Declaration
+ | Iir_Kind_Interface_Quantity_Declaration
+ | Iir_Kind_Interface_Terminal_Declaration
+ | Iir_Kind_Interface_Type_Declaration
+ | Iir_Kind_Interface_Package_Declaration
+ | Iir_Kind_Interface_Function_Declaration
+ | Iir_Kind_Interface_Procedure_Declaration
+ | Iir_Kind_External_Signal_Name
+ | Iir_Kind_External_Constant_Name
+ | Iir_Kind_External_Variable_Name =>
return Adecl;
when Iir_Kind_Object_Alias_Declaration =>
if With_Alias then
@@ -259,35 +259,36 @@ package body Vhdl.Utils is
return Adecl;
end if;
when Iir_Kind_Indexed_Name
- | Iir_Kind_Slice_Name
- | Iir_Kind_Selected_Element
- | Iir_Kind_Selected_By_All_Name =>
+ | Iir_Kind_Slice_Name
+ | Iir_Kind_Selected_Element
+ | Iir_Kind_Selected_By_All_Name =>
Adecl := Get_Base_Name (Adecl);
when Iir_Kinds_Literal
- | Iir_Kind_Overflow_Literal
- | Iir_Kind_Enumeration_Literal
- | Iir_Kinds_Monadic_Operator
- | Iir_Kinds_Dyadic_Operator
- | Iir_Kind_Function_Call
- | Iir_Kind_Qualified_Expression
- | Iir_Kind_Type_Conversion
- | Iir_Kind_Allocator_By_Expression
- | Iir_Kind_Allocator_By_Subtype
- | Iir_Kind_Parenthesis_Expression
- | Iir_Kinds_Attribute
- | Iir_Kind_Attribute_Value
- | Iir_Kind_Aggregate
- | Iir_Kind_Simple_Aggregate
- | Iir_Kind_Dereference
- | Iir_Kind_Implicit_Dereference
- | Iir_Kind_Unit_Declaration
- | Iir_Kind_Psl_Expression
- | Iir_Kinds_Concurrent_Statement
- | Iir_Kinds_Sequential_Statement
- | Iir_Kinds_Simultaneous_Statement =>
+ | Iir_Kind_Overflow_Literal
+ | Iir_Kind_Enumeration_Literal
+ | Iir_Kinds_Monadic_Operator
+ | Iir_Kinds_Dyadic_Operator
+ | Iir_Kind_Function_Call
+ | Iir_Kind_Qualified_Expression
+ | Iir_Kind_Type_Conversion
+ | Iir_Kind_Allocator_By_Expression
+ | Iir_Kind_Allocator_By_Subtype
+ | Iir_Kind_Parenthesis_Expression
+ | Iir_Kinds_Attribute
+ | Iir_Kind_Attribute_Value
+ | Iir_Kind_Aggregate
+ | Iir_Kind_Simple_Aggregate
+ | Iir_Kind_Dereference
+ | Iir_Kind_Implicit_Dereference
+ | Iir_Kind_Unit_Declaration
+ | Iir_Kind_Psl_Expression
+ | Iir_Kinds_Concurrent_Statement
+ | Iir_Kinds_Sequential_Statement
+ | Iir_Kinds_Simultaneous_Statement
+ | Iir_Kind_Suspend_State_Statement =>
return Adecl;
when Iir_Kind_Simple_Name
- | Iir_Kind_Selected_Name =>
+ | Iir_Kind_Selected_Name =>
Adecl := Get_Named_Entity (Adecl);
when Iir_Kind_Attribute_Name =>
return Get_Named_Entity (Adecl);
@@ -323,6 +324,7 @@ package body Vhdl.Utils is
| Iir_Kind_Group_Template_Declaration
| Iir_Kind_Group_Declaration
| Iir_Kind_Signal_Attribute_Declaration
+ | Iir_Kind_Suspend_State_Declaration
| Iir_Kind_Unaffected_Waveform
| Iir_Kind_Waveform_Element
| Iir_Kind_Conditional_Waveform