diff options
| author | Tristan Gingold <tgingold@free.fr> | 2022-07-29 06:55:56 +0200 | 
|---|---|---|
| committer | Tristan Gingold <tgingold@free.fr> | 2022-07-29 06:55:56 +0200 | 
| commit | e704f40353cf3932c12180a2f9d67b6fef70db84 (patch) | |
| tree | 028a36e2ed0631982e4f1acb736ff5c53bb0f253 /src | |
| parent | 630c988efbcdc8e9679df29a7521ec3b376f17fe (diff) | |
| download | ghdl-e704f40353cf3932c12180a2f9d67b6fef70db84.tar.gz ghdl-e704f40353cf3932c12180a2f9d67b6fef70db84.tar.bz2 ghdl-e704f40353cf3932c12180a2f9d67b6fef70db84.zip  | |
vhdl-nodes: add Get/Set_Stop_Flag.  For #2150
Diffstat (limited to 'src')
| -rw-r--r-- | src/vhdl/vhdl-nodes.adb | 16 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes.ads | 8 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes_meta.adb | 254 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes_meta.ads | 2 | 
4 files changed, 164 insertions, 116 deletions
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb index c2d45fe32..71914dfd3 100644 --- a/src/vhdl/vhdl-nodes.adb +++ b/src/vhdl/vhdl-nodes.adb @@ -7170,6 +7170,22 @@ package body Vhdl.Nodes is        Set_Flag11 (Stmt, Flag);     end Set_Suspend_Flag; +   function Get_Stop_Flag (Stmt : Iir) return Boolean is +   begin +      pragma Assert (Stmt /= Null_Iir); +      pragma Assert (Has_Stop_Flag (Get_Kind (Stmt)), +                     "no field Stop_Flag"); +      return Get_Flag13 (Stmt); +   end Get_Stop_Flag; + +   procedure Set_Stop_Flag (Stmt : Iir; Flag : Boolean) is +   begin +      pragma Assert (Stmt /= Null_Iir); +      pragma Assert (Has_Stop_Flag (Get_Kind (Stmt)), +                     "no field Stop_Flag"); +      Set_Flag13 (Stmt, Flag); +   end Set_Stop_Flag; +     function Get_Is_Ref (N : Iir) return Boolean is     begin        pragma Assert (N /= Null_Iir); diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index e2882fb7c..0fc291be2 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -3334,6 +3334,10 @@ package Vhdl.Nodes is     -- Only for Iir_Kind_Process_Statement:     --   Get/Set_Suspend_Flag (Flag11)     -- +   --  Set when std.env.stop/finish is called.  Prevents the infinite loop +   --  warning. +   --   Get/Set_Stop_Flag (Flag13) +   --     -- Only for Iir_Kind_Sensitized_Process_Statement:     --   Get/Set_Is_Ref (Flag12) @@ -9462,6 +9466,10 @@ package Vhdl.Nodes is     function Get_Suspend_Flag (Stmt : Iir) return Boolean;     procedure Set_Suspend_Flag (Stmt : Iir; Flag : Boolean); +   --  Field: Flag13 +   function Get_Stop_Flag (Stmt : Iir) return Boolean; +   procedure Set_Stop_Flag (Stmt : Iir; Flag : Boolean); +     --  Set to True if Maybe_Ref fields are references.  This cannot be shared     --  with Has_Identifier_List as: Is_Ref is set to True on all items but     --  the first, while Has_Identifier_List is set to True on all items but diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index a4a640296..656cc2aef 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -375,6 +375,7 @@ package body Vhdl.Nodes_Meta is        Field_Has_Class => Type_Boolean,        Field_Has_Delay_Mechanism => Type_Boolean,        Field_Suspend_Flag => Type_Boolean, +      Field_Stop_Flag => Type_Boolean,        Field_Is_Ref => Type_Boolean,        Field_Is_Forward_Ref => Type_Boolean,        Field_Psl_Property => Type_PSL_Node, @@ -1120,6 +1121,8 @@ package body Vhdl.Nodes_Meta is              return "has_delay_mechanism";           when Field_Suspend_Flag =>              return "suspend_flag"; +         when Field_Stop_Flag => +            return "stop_flag";           when Field_Is_Ref =>              return "is_ref";           when Field_Is_Forward_Ref => @@ -2530,6 +2533,8 @@ package body Vhdl.Nodes_Meta is              return Attr_None;           when Field_Suspend_Flag =>              return Attr_None; +         when Field_Stop_Flag => +            return Attr_None;           when Field_Is_Ref =>              return Attr_None;           when Field_Is_Forward_Ref => @@ -4327,6 +4332,7 @@ package body Vhdl.Nodes_Meta is        Field_Seen_Flag,        Field_End_Has_Postponed,        Field_Is_Ref, +      Field_Stop_Flag,        Field_Passive_Flag,        Field_Postponed_Flag,        Field_Visible_Flag, @@ -4349,6 +4355,7 @@ package body Vhdl.Nodes_Meta is        Field_Seen_Flag,        Field_End_Has_Postponed,        Field_Suspend_Flag, +      Field_Stop_Flag,        Field_Passive_Flag,        Field_Postponed_Flag,        Field_Visible_Flag, @@ -5504,122 +5511,122 @@ package body Vhdl.Nodes_Meta is        Iir_Kind_Psl_Onehot => 1537,        Iir_Kind_Psl_Onehot0 => 1540,        Iir_Kind_Psl_Expression => 1542, -      Iir_Kind_Sensitized_Process_Statement => 1563, -      Iir_Kind_Process_Statement => 1583, -      Iir_Kind_Concurrent_Simple_Signal_Assignment => 1596, -      Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1609, -      Iir_Kind_Concurrent_Selected_Signal_Assignment => 1623, -      Iir_Kind_Concurrent_Assertion_Statement => 1631, -      Iir_Kind_Concurrent_Procedure_Call_Statement => 1638, -      Iir_Kind_Concurrent_Break_Statement => 1646, -      Iir_Kind_Psl_Assert_Directive => 1660, -      Iir_Kind_Psl_Assume_Directive => 1672, -      Iir_Kind_Psl_Cover_Directive => 1684, -      Iir_Kind_Psl_Restrict_Directive => 1695, -      Iir_Kind_Block_Statement => 1709, -      Iir_Kind_If_Generate_Statement => 1720, -      Iir_Kind_Case_Generate_Statement => 1729, -      Iir_Kind_For_Generate_Statement => 1738, -      Iir_Kind_Component_Instantiation_Statement => 1749, -      Iir_Kind_Psl_Default_Clock => 1752, -      Iir_Kind_Generate_Statement_Body => 1763, -      Iir_Kind_If_Generate_Else_Clause => 1769, -      Iir_Kind_Simple_Simultaneous_Statement => 1776, -      Iir_Kind_Simultaneous_Null_Statement => 1780, -      Iir_Kind_Simultaneous_Procedural_Statement => 1791, -      Iir_Kind_Simultaneous_Case_Statement => 1800, -      Iir_Kind_Simultaneous_If_Statement => 1809, -      Iir_Kind_Simultaneous_Elsif => 1815, -      Iir_Kind_Simple_Signal_Assignment_Statement => 1826, -      Iir_Kind_Conditional_Signal_Assignment_Statement => 1837, -      Iir_Kind_Selected_Waveform_Assignment_Statement => 1849, -      Iir_Kind_Signal_Force_Assignment_Statement => 1859, -      Iir_Kind_Signal_Release_Assignment_Statement => 1868, -      Iir_Kind_Null_Statement => 1872, -      Iir_Kind_Assertion_Statement => 1879, -      Iir_Kind_Report_Statement => 1885, -      Iir_Kind_Wait_Statement => 1893, -      Iir_Kind_Variable_Assignment_Statement => 1900, -      Iir_Kind_Conditional_Variable_Assignment_Statement => 1907, -      Iir_Kind_Return_Statement => 1913, -      Iir_Kind_For_Loop_Statement => 1924, -      Iir_Kind_While_Loop_Statement => 1935, -      Iir_Kind_Next_Statement => 1942, -      Iir_Kind_Exit_Statement => 1949, -      Iir_Kind_Case_Statement => 1958, -      Iir_Kind_Procedure_Call_Statement => 1964, -      Iir_Kind_Break_Statement => 1971, -      Iir_Kind_If_Statement => 1981, -      Iir_Kind_Suspend_State_Statement => 1985, -      Iir_Kind_Elsif => 1991, -      Iir_Kind_Character_Literal => 1998, -      Iir_Kind_Simple_Name => 2005, -      Iir_Kind_Selected_Name => 2013, -      Iir_Kind_Operator_Symbol => 2018, -      Iir_Kind_Reference_Name => 2023, -      Iir_Kind_External_Constant_Name => 2032, -      Iir_Kind_External_Signal_Name => 2041, -      Iir_Kind_External_Variable_Name => 2051, -      Iir_Kind_Selected_By_All_Name => 2057, -      Iir_Kind_Parenthesis_Name => 2062, -      Iir_Kind_Package_Pathname => 2066, -      Iir_Kind_Absolute_Pathname => 2067, -      Iir_Kind_Relative_Pathname => 2068, -      Iir_Kind_Pathname_Element => 2073, -      Iir_Kind_Base_Attribute => 2075, -      Iir_Kind_Subtype_Attribute => 2080, -      Iir_Kind_Element_Attribute => 2085, -      Iir_Kind_Across_Attribute => 2090, -      Iir_Kind_Through_Attribute => 2095, -      Iir_Kind_Nature_Reference_Attribute => 2099, -      Iir_Kind_Left_Type_Attribute => 2104, -      Iir_Kind_Right_Type_Attribute => 2109, -      Iir_Kind_High_Type_Attribute => 2114, -      Iir_Kind_Low_Type_Attribute => 2119, -      Iir_Kind_Ascending_Type_Attribute => 2124, -      Iir_Kind_Image_Attribute => 2130, -      Iir_Kind_Value_Attribute => 2136, -      Iir_Kind_Pos_Attribute => 2142, -      Iir_Kind_Val_Attribute => 2148, -      Iir_Kind_Succ_Attribute => 2154, -      Iir_Kind_Pred_Attribute => 2160, -      Iir_Kind_Leftof_Attribute => 2166, -      Iir_Kind_Rightof_Attribute => 2172, -      Iir_Kind_Signal_Slew_Attribute => 2180, -      Iir_Kind_Quantity_Slew_Attribute => 2188, -      Iir_Kind_Ramp_Attribute => 2196, -      Iir_Kind_Zoh_Attribute => 2204, -      Iir_Kind_Ltf_Attribute => 2212, -      Iir_Kind_Ztf_Attribute => 2222, -      Iir_Kind_Dot_Attribute => 2229, -      Iir_Kind_Integ_Attribute => 2236, -      Iir_Kind_Quantity_Delayed_Attribute => 2244, -      Iir_Kind_Above_Attribute => 2252, -      Iir_Kind_Delayed_Attribute => 2261, -      Iir_Kind_Stable_Attribute => 2270, -      Iir_Kind_Quiet_Attribute => 2279, -      Iir_Kind_Transaction_Attribute => 2288, -      Iir_Kind_Event_Attribute => 2292, -      Iir_Kind_Active_Attribute => 2296, -      Iir_Kind_Last_Event_Attribute => 2300, -      Iir_Kind_Last_Active_Attribute => 2304, -      Iir_Kind_Last_Value_Attribute => 2308, -      Iir_Kind_Driving_Attribute => 2312, -      Iir_Kind_Driving_Value_Attribute => 2316, -      Iir_Kind_Behavior_Attribute => 2316, -      Iir_Kind_Structure_Attribute => 2316, -      Iir_Kind_Simple_Name_Attribute => 2323, -      Iir_Kind_Instance_Name_Attribute => 2328, -      Iir_Kind_Path_Name_Attribute => 2333, -      Iir_Kind_Left_Array_Attribute => 2340, -      Iir_Kind_Right_Array_Attribute => 2347, -      Iir_Kind_High_Array_Attribute => 2354, -      Iir_Kind_Low_Array_Attribute => 2361, -      Iir_Kind_Length_Array_Attribute => 2368, -      Iir_Kind_Ascending_Array_Attribute => 2375, -      Iir_Kind_Range_Array_Attribute => 2382, -      Iir_Kind_Reverse_Range_Array_Attribute => 2389, -      Iir_Kind_Attribute_Name => 2398 +      Iir_Kind_Sensitized_Process_Statement => 1564, +      Iir_Kind_Process_Statement => 1585, +      Iir_Kind_Concurrent_Simple_Signal_Assignment => 1598, +      Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1611, +      Iir_Kind_Concurrent_Selected_Signal_Assignment => 1625, +      Iir_Kind_Concurrent_Assertion_Statement => 1633, +      Iir_Kind_Concurrent_Procedure_Call_Statement => 1640, +      Iir_Kind_Concurrent_Break_Statement => 1648, +      Iir_Kind_Psl_Assert_Directive => 1662, +      Iir_Kind_Psl_Assume_Directive => 1674, +      Iir_Kind_Psl_Cover_Directive => 1686, +      Iir_Kind_Psl_Restrict_Directive => 1697, +      Iir_Kind_Block_Statement => 1711, +      Iir_Kind_If_Generate_Statement => 1722, +      Iir_Kind_Case_Generate_Statement => 1731, +      Iir_Kind_For_Generate_Statement => 1740, +      Iir_Kind_Component_Instantiation_Statement => 1751, +      Iir_Kind_Psl_Default_Clock => 1754, +      Iir_Kind_Generate_Statement_Body => 1765, +      Iir_Kind_If_Generate_Else_Clause => 1771, +      Iir_Kind_Simple_Simultaneous_Statement => 1778, +      Iir_Kind_Simultaneous_Null_Statement => 1782, +      Iir_Kind_Simultaneous_Procedural_Statement => 1793, +      Iir_Kind_Simultaneous_Case_Statement => 1802, +      Iir_Kind_Simultaneous_If_Statement => 1811, +      Iir_Kind_Simultaneous_Elsif => 1817, +      Iir_Kind_Simple_Signal_Assignment_Statement => 1828, +      Iir_Kind_Conditional_Signal_Assignment_Statement => 1839, +      Iir_Kind_Selected_Waveform_Assignment_Statement => 1851, +      Iir_Kind_Signal_Force_Assignment_Statement => 1861, +      Iir_Kind_Signal_Release_Assignment_Statement => 1870, +      Iir_Kind_Null_Statement => 1874, +      Iir_Kind_Assertion_Statement => 1881, +      Iir_Kind_Report_Statement => 1887, +      Iir_Kind_Wait_Statement => 1895, +      Iir_Kind_Variable_Assignment_Statement => 1902, +      Iir_Kind_Conditional_Variable_Assignment_Statement => 1909, +      Iir_Kind_Return_Statement => 1915, +      Iir_Kind_For_Loop_Statement => 1926, +      Iir_Kind_While_Loop_Statement => 1937, +      Iir_Kind_Next_Statement => 1944, +      Iir_Kind_Exit_Statement => 1951, +      Iir_Kind_Case_Statement => 1960, +      Iir_Kind_Procedure_Call_Statement => 1966, +      Iir_Kind_Break_Statement => 1973, +      Iir_Kind_If_Statement => 1983, +      Iir_Kind_Suspend_State_Statement => 1987, +      Iir_Kind_Elsif => 1993, +      Iir_Kind_Character_Literal => 2000, +      Iir_Kind_Simple_Name => 2007, +      Iir_Kind_Selected_Name => 2015, +      Iir_Kind_Operator_Symbol => 2020, +      Iir_Kind_Reference_Name => 2025, +      Iir_Kind_External_Constant_Name => 2034, +      Iir_Kind_External_Signal_Name => 2043, +      Iir_Kind_External_Variable_Name => 2053, +      Iir_Kind_Selected_By_All_Name => 2059, +      Iir_Kind_Parenthesis_Name => 2064, +      Iir_Kind_Package_Pathname => 2068, +      Iir_Kind_Absolute_Pathname => 2069, +      Iir_Kind_Relative_Pathname => 2070, +      Iir_Kind_Pathname_Element => 2075, +      Iir_Kind_Base_Attribute => 2077, +      Iir_Kind_Subtype_Attribute => 2082, +      Iir_Kind_Element_Attribute => 2087, +      Iir_Kind_Across_Attribute => 2092, +      Iir_Kind_Through_Attribute => 2097, +      Iir_Kind_Nature_Reference_Attribute => 2101, +      Iir_Kind_Left_Type_Attribute => 2106, +      Iir_Kind_Right_Type_Attribute => 2111, +      Iir_Kind_High_Type_Attribute => 2116, +      Iir_Kind_Low_Type_Attribute => 2121, +      Iir_Kind_Ascending_Type_Attribute => 2126, +      Iir_Kind_Image_Attribute => 2132, +      Iir_Kind_Value_Attribute => 2138, +      Iir_Kind_Pos_Attribute => 2144, +      Iir_Kind_Val_Attribute => 2150, +      Iir_Kind_Succ_Attribute => 2156, +      Iir_Kind_Pred_Attribute => 2162, +      Iir_Kind_Leftof_Attribute => 2168, +      Iir_Kind_Rightof_Attribute => 2174, +      Iir_Kind_Signal_Slew_Attribute => 2182, +      Iir_Kind_Quantity_Slew_Attribute => 2190, +      Iir_Kind_Ramp_Attribute => 2198, +      Iir_Kind_Zoh_Attribute => 2206, +      Iir_Kind_Ltf_Attribute => 2214, +      Iir_Kind_Ztf_Attribute => 2224, +      Iir_Kind_Dot_Attribute => 2231, +      Iir_Kind_Integ_Attribute => 2238, +      Iir_Kind_Quantity_Delayed_Attribute => 2246, +      Iir_Kind_Above_Attribute => 2254, +      Iir_Kind_Delayed_Attribute => 2263, +      Iir_Kind_Stable_Attribute => 2272, +      Iir_Kind_Quiet_Attribute => 2281, +      Iir_Kind_Transaction_Attribute => 2290, +      Iir_Kind_Event_Attribute => 2294, +      Iir_Kind_Active_Attribute => 2298, +      Iir_Kind_Last_Event_Attribute => 2302, +      Iir_Kind_Last_Active_Attribute => 2306, +      Iir_Kind_Last_Value_Attribute => 2310, +      Iir_Kind_Driving_Attribute => 2314, +      Iir_Kind_Driving_Value_Attribute => 2318, +      Iir_Kind_Behavior_Attribute => 2318, +      Iir_Kind_Structure_Attribute => 2318, +      Iir_Kind_Simple_Name_Attribute => 2325, +      Iir_Kind_Instance_Name_Attribute => 2330, +      Iir_Kind_Path_Name_Attribute => 2335, +      Iir_Kind_Left_Array_Attribute => 2342, +      Iir_Kind_Right_Array_Attribute => 2349, +      Iir_Kind_High_Array_Attribute => 2356, +      Iir_Kind_Low_Array_Attribute => 2363, +      Iir_Kind_Length_Array_Attribute => 2370, +      Iir_Kind_Ascending_Array_Attribute => 2377, +      Iir_Kind_Range_Array_Attribute => 2384, +      Iir_Kind_Reverse_Range_Array_Attribute => 2391, +      Iir_Kind_Attribute_Name => 2400       );     function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -5794,6 +5801,8 @@ package body Vhdl.Nodes_Meta is              return Get_Has_Delay_Mechanism (N);           when Field_Suspend_Flag =>              return Get_Suspend_Flag (N); +         when Field_Stop_Flag => +            return Get_Stop_Flag (N);           when Field_Is_Ref =>              return Get_Is_Ref (N);           when Field_Is_Forward_Ref => @@ -5952,6 +5961,8 @@ package body Vhdl.Nodes_Meta is              Set_Has_Delay_Mechanism (N, V);           when Field_Suspend_Flag =>              Set_Suspend_Flag (N, V); +         when Field_Stop_Flag => +            Set_Stop_Flag (N, V);           when Field_Is_Ref =>              Set_Is_Ref (N, V);           when Field_Is_Forward_Ref => @@ -12561,6 +12572,17 @@ package body Vhdl.Nodes_Meta is        end case;     end Has_Suspend_Flag; +   function Has_Stop_Flag (K : Iir_Kind) return Boolean is +   begin +      case K is +         when Iir_Kind_Sensitized_Process_Statement +           | Iir_Kind_Process_Statement => +            return True; +         when others => +            return False; +      end case; +   end Has_Stop_Flag; +     function Has_Is_Ref (K : Iir_Kind) return Boolean is     begin        case K is diff --git a/src/vhdl/vhdl-nodes_meta.ads b/src/vhdl/vhdl-nodes_meta.ads index 9ec914f54..538c40910 100644 --- a/src/vhdl/vhdl-nodes_meta.ads +++ b/src/vhdl/vhdl-nodes_meta.ads @@ -419,6 +419,7 @@ package Vhdl.Nodes_Meta is        Field_Has_Class,        Field_Has_Delay_Mechanism,        Field_Suspend_Flag, +      Field_Stop_Flag,        Field_Is_Ref,        Field_Is_Forward_Ref,        Field_Psl_Property, @@ -1016,6 +1017,7 @@ package Vhdl.Nodes_Meta is     function Has_Has_Class (K : Iir_Kind) return Boolean;     function Has_Has_Delay_Mechanism (K : Iir_Kind) return Boolean;     function Has_Suspend_Flag (K : Iir_Kind) return Boolean; +   function Has_Stop_Flag (K : Iir_Kind) return Boolean;     function Has_Is_Ref (K : Iir_Kind) return Boolean;     function Has_Is_Forward_Ref (K : Iir_Kind) return Boolean;     function Has_Psl_Property (K : Iir_Kind) return Boolean;  | 
