aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-12-26 07:14:25 +0100
committerTristan Gingold <tgingold@free.fr>2019-12-26 07:14:25 +0100
commit8a5fe99b279b1ce1ea7fe4313a24d0f3a399149d (patch)
treecf14414d9b18d8bb8ec59ac6b89ef8ebc3e28933
parenta24642ace5f43509c40b5a94927a1cff865f2ece (diff)
downloadghdl-8a5fe99b279b1ce1ea7fe4313a24d0f3a399149d.tar.gz
ghdl-8a5fe99b279b1ce1ea7fe4313a24d0f3a399149d.tar.bz2
ghdl-8a5fe99b279b1ce1ea7fe4313a24d0f3a399149d.zip
vhdl: add Has_Delay_Machanism for optional 'inertial' printing.
-rw-r--r--python/libghdl/thin/vhdl/nodes.py4
-rw-r--r--python/libghdl/thin/vhdl/nodes_meta.py30
-rw-r--r--src/vhdl/vhdl-nodes.adb16
-rw-r--r--src/vhdl/vhdl-nodes.ads11
-rw-r--r--src/vhdl/vhdl-nodes_meta.adb212
-rw-r--r--src/vhdl/vhdl-nodes_meta.ads2
-rw-r--r--src/vhdl/vhdl-parse.adb15
-rw-r--r--src/vhdl/vhdl-prints.adb2
8 files changed, 186 insertions, 106 deletions
diff --git a/python/libghdl/thin/vhdl/nodes.py b/python/libghdl/thin/vhdl/nodes.py
index e5c1a431b..a1a159b6f 100644
--- a/python/libghdl/thin/vhdl/nodes.py
+++ b/python/libghdl/thin/vhdl/nodes.py
@@ -2507,6 +2507,10 @@ Get_Has_Class = libghdl.vhdl__nodes__get_has_class
Set_Has_Class = libghdl.vhdl__nodes__set_has_class
+Get_Has_Delay_Mechanism = libghdl.vhdl__nodes__get_has_delay_mechanism
+
+Set_Has_Delay_Mechanism = libghdl.vhdl__nodes__set_has_delay_mechanism
+
Get_Suspend_Flag = libghdl.vhdl__nodes__get_suspend_flag
Set_Suspend_Flag = libghdl.vhdl__nodes__set_suspend_flag
diff --git a/python/libghdl/thin/vhdl/nodes_meta.py b/python/libghdl/thin/vhdl/nodes_meta.py
index e11dc5b78..355af9309 100644
--- a/python/libghdl/thin/vhdl/nodes_meta.py
+++ b/python/libghdl/thin/vhdl/nodes_meta.py
@@ -380,19 +380,20 @@ class fields:
Has_Identifier_List = 316
Has_Mode = 317
Has_Class = 318
- Suspend_Flag = 319
- Is_Ref = 320
- Is_Forward_Ref = 321
- Psl_Property = 322
- Psl_Sequence = 323
- Psl_Declaration = 324
- Psl_Expression = 325
- Psl_Boolean = 326
- PSL_Clock = 327
- PSL_NFA = 328
- PSL_Nbr_States = 329
- PSL_Clock_Sensitivity = 330
- PSL_EOS_Flag = 331
+ Has_Delay_Mechanism = 319
+ Suspend_Flag = 320
+ Is_Ref = 321
+ Is_Forward_Ref = 322
+ Psl_Property = 323
+ Psl_Sequence = 324
+ Psl_Declaration = 325
+ Psl_Expression = 326
+ Psl_Boolean = 327
+ PSL_Clock = 328
+ PSL_NFA = 329
+ PSL_Nbr_States = 330
+ PSL_Clock_Sensitivity = 331
+ PSL_EOS_Flag = 332
Get_Boolean = libghdl.vhdl__nodes_meta__get_boolean
@@ -1415,6 +1416,9 @@ Has_Has_Mode =\
Has_Has_Class =\
libghdl.vhdl__nodes_meta__has_has_class
+Has_Has_Delay_Mechanism =\
+ libghdl.vhdl__nodes_meta__has_has_delay_mechanism
+
Has_Suspend_Flag =\
libghdl.vhdl__nodes_meta__has_suspend_flag
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb
index ffde6a5ab..b71de7906 100644
--- a/src/vhdl/vhdl-nodes.adb
+++ b/src/vhdl/vhdl-nodes.adb
@@ -6468,6 +6468,22 @@ package body Vhdl.Nodes is
Set_Flag11 (Decl, Flag);
end Set_Has_Class;
+ function Get_Has_Delay_Mechanism (Stmt : Iir) return Boolean is
+ begin
+ pragma Assert (Stmt /= Null_Iir);
+ pragma Assert (Has_Has_Delay_Mechanism (Get_Kind (Stmt)),
+ "no field Has_Delay_Mechanism");
+ return Get_Flag2 (Stmt);
+ end Get_Has_Delay_Mechanism;
+
+ procedure Set_Has_Delay_Mechanism (Stmt : Iir; Flag : Boolean) is
+ begin
+ pragma Assert (Stmt /= Null_Iir);
+ pragma Assert (Has_Has_Delay_Mechanism (Get_Kind (Stmt)),
+ "no field Has_Delay_Mechanism");
+ Set_Flag2 (Stmt, Flag);
+ end Set_Has_Delay_Mechanism;
+
function Get_Suspend_Flag (Stmt : Iir) return Boolean is
begin
pragma Assert (Stmt /= Null_Iir);
diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads
index 688c30555..3c3ef8241 100644
--- a/src/vhdl/vhdl-nodes.ads
+++ b/src/vhdl/vhdl-nodes.ads
@@ -2848,6 +2848,8 @@ package Vhdl.Nodes is
--
-- Get/Set_Delay_Mechanism (Flag1)
--
+ -- Get/Set_Has_Delay_Mechanism (Flag2)
+ --
-- Get/Set_Postponed_Flag (Flag3)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -3388,6 +3390,8 @@ package Vhdl.Nodes is
--
-- Get/Set_Delay_Mechanism (Flag1)
--
+ -- Get/Set_Has_Delay_Mechanism (Flag2)
+ --
-- Get/Set_Visible_Flag (Flag4)
--
-- True if the target of the assignment is guarded
@@ -7870,6 +7874,13 @@ package Vhdl.Nodes is
function Get_Has_Class (Decl : Iir) return Boolean;
procedure Set_Has_Class (Decl : Iir; Flag : Boolean);
+ -- Layout flag for signal assignment. If True, the delay mechanism is
+ -- present. This is obviously true for transport or inertial with reject,
+ -- but the simple 'inertial' is optional.
+ -- Field: Flag2
+ function Get_Has_Delay_Mechanism (Stmt : Iir) return Boolean;
+ procedure Set_Has_Delay_Mechanism (Stmt : Iir; Flag : Boolean);
+
-- Set on wait, procedure call and composite statements when there is a
-- sub-statement that can suspend a procedure or a process. Also set
-- on procedure declaration. Note that the flag is conservative: it must
diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb
index 98f77cebb..b27ac9249 100644
--- a/src/vhdl/vhdl-nodes_meta.adb
+++ b/src/vhdl/vhdl-nodes_meta.adb
@@ -338,6 +338,7 @@ package body Vhdl.Nodes_Meta is
Field_Has_Identifier_List => Type_Boolean,
Field_Has_Mode => Type_Boolean,
Field_Has_Class => Type_Boolean,
+ Field_Has_Delay_Mechanism => Type_Boolean,
Field_Suspend_Flag => Type_Boolean,
Field_Is_Ref => Type_Boolean,
Field_Is_Forward_Ref => Type_Boolean,
@@ -999,6 +1000,8 @@ package body Vhdl.Nodes_Meta is
return "has_mode";
when Field_Has_Class =>
return "has_class";
+ when Field_Has_Delay_Mechanism =>
+ return "has_delay_mechanism";
when Field_Suspend_Flag =>
return "suspend_flag";
when Field_Is_Ref =>
@@ -2227,6 +2230,8 @@ package body Vhdl.Nodes_Meta is
return Attr_None;
when Field_Has_Class =>
return Attr_None;
+ when Field_Has_Delay_Mechanism =>
+ return Attr_None;
when Field_Suspend_Flag =>
return Attr_None;
when Field_Is_Ref =>
@@ -3815,6 +3820,7 @@ package body Vhdl.Nodes_Meta is
Field_Label,
Field_Delay_Mechanism,
Field_Is_Ref,
+ Field_Has_Delay_Mechanism,
Field_Postponed_Flag,
Field_Visible_Flag,
Field_Guarded_Target_State,
@@ -3828,6 +3834,7 @@ package body Vhdl.Nodes_Meta is
Field_Label,
Field_Delay_Mechanism,
Field_Is_Ref,
+ Field_Has_Delay_Mechanism,
Field_Postponed_Flag,
Field_Visible_Flag,
Field_Guarded_Target_State,
@@ -3841,6 +3848,7 @@ package body Vhdl.Nodes_Meta is
Field_Label,
Field_Delay_Mechanism,
Field_Is_Ref,
+ Field_Has_Delay_Mechanism,
Field_Postponed_Flag,
Field_Visible_Flag,
Field_Guarded_Target_State,
@@ -4014,6 +4022,7 @@ package body Vhdl.Nodes_Meta is
Field_Label,
Field_Delay_Mechanism,
Field_Is_Ref,
+ Field_Has_Delay_Mechanism,
Field_Visible_Flag,
Field_Guarded_Target_State,
Field_Parent,
@@ -4025,6 +4034,7 @@ package body Vhdl.Nodes_Meta is
Field_Label,
Field_Delay_Mechanism,
Field_Is_Ref,
+ Field_Has_Delay_Mechanism,
Field_Visible_Flag,
Field_Guarded_Target_State,
Field_Parent,
@@ -4036,6 +4046,7 @@ package body Vhdl.Nodes_Meta is
Field_Label,
Field_Delay_Mechanism,
Field_Is_Ref,
+ Field_Has_Delay_Mechanism,
Field_Visible_Flag,
Field_Guarded_Target_State,
Field_Parent,
@@ -4728,97 +4739,97 @@ package body Vhdl.Nodes_Meta is
Iir_Kind_Psl_Expression => 1326,
Iir_Kind_Sensitized_Process_Statement => 1347,
Iir_Kind_Process_Statement => 1367,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1379,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1391,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1404,
- Iir_Kind_Concurrent_Assertion_Statement => 1412,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1419,
- Iir_Kind_Psl_Assert_Directive => 1432,
- Iir_Kind_Psl_Assume_Directive => 1443,
- Iir_Kind_Psl_Cover_Directive => 1455,
- Iir_Kind_Psl_Restrict_Directive => 1466,
- Iir_Kind_Block_Statement => 1480,
- Iir_Kind_If_Generate_Statement => 1491,
- Iir_Kind_Case_Generate_Statement => 1500,
- Iir_Kind_For_Generate_Statement => 1509,
- Iir_Kind_Component_Instantiation_Statement => 1520,
- Iir_Kind_Psl_Default_Clock => 1524,
- Iir_Kind_Simple_Simultaneous_Statement => 1531,
- Iir_Kind_Generate_Statement_Body => 1542,
- Iir_Kind_If_Generate_Else_Clause => 1548,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1558,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1568,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1579,
- Iir_Kind_Null_Statement => 1583,
- Iir_Kind_Assertion_Statement => 1590,
- Iir_Kind_Report_Statement => 1596,
- Iir_Kind_Wait_Statement => 1604,
- Iir_Kind_Variable_Assignment_Statement => 1611,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1618,
- Iir_Kind_Return_Statement => 1624,
- Iir_Kind_For_Loop_Statement => 1635,
- Iir_Kind_While_Loop_Statement => 1646,
- Iir_Kind_Next_Statement => 1653,
- Iir_Kind_Exit_Statement => 1660,
- Iir_Kind_Case_Statement => 1668,
- Iir_Kind_Procedure_Call_Statement => 1674,
- Iir_Kind_If_Statement => 1684,
- Iir_Kind_Elsif => 1690,
- Iir_Kind_Character_Literal => 1698,
- Iir_Kind_Simple_Name => 1706,
- Iir_Kind_Selected_Name => 1715,
- Iir_Kind_Operator_Symbol => 1721,
- Iir_Kind_Reference_Name => 1726,
- Iir_Kind_External_Constant_Name => 1734,
- Iir_Kind_External_Signal_Name => 1742,
- Iir_Kind_External_Variable_Name => 1751,
- Iir_Kind_Selected_By_All_Name => 1757,
- Iir_Kind_Parenthesis_Name => 1762,
- Iir_Kind_Package_Pathname => 1766,
- Iir_Kind_Absolute_Pathname => 1767,
- Iir_Kind_Relative_Pathname => 1768,
- Iir_Kind_Pathname_Element => 1773,
- Iir_Kind_Base_Attribute => 1775,
- Iir_Kind_Subtype_Attribute => 1780,
- Iir_Kind_Element_Attribute => 1785,
- Iir_Kind_Left_Type_Attribute => 1790,
- Iir_Kind_Right_Type_Attribute => 1795,
- Iir_Kind_High_Type_Attribute => 1800,
- Iir_Kind_Low_Type_Attribute => 1805,
- Iir_Kind_Ascending_Type_Attribute => 1810,
- Iir_Kind_Image_Attribute => 1816,
- Iir_Kind_Value_Attribute => 1822,
- Iir_Kind_Pos_Attribute => 1828,
- Iir_Kind_Val_Attribute => 1834,
- Iir_Kind_Succ_Attribute => 1840,
- Iir_Kind_Pred_Attribute => 1846,
- Iir_Kind_Leftof_Attribute => 1852,
- Iir_Kind_Rightof_Attribute => 1858,
- Iir_Kind_Delayed_Attribute => 1867,
- Iir_Kind_Stable_Attribute => 1876,
- Iir_Kind_Quiet_Attribute => 1885,
- Iir_Kind_Transaction_Attribute => 1894,
- Iir_Kind_Event_Attribute => 1898,
- Iir_Kind_Active_Attribute => 1902,
- Iir_Kind_Last_Event_Attribute => 1906,
- Iir_Kind_Last_Active_Attribute => 1910,
- Iir_Kind_Last_Value_Attribute => 1914,
- Iir_Kind_Driving_Attribute => 1918,
- Iir_Kind_Driving_Value_Attribute => 1922,
- Iir_Kind_Behavior_Attribute => 1922,
- Iir_Kind_Structure_Attribute => 1922,
- Iir_Kind_Simple_Name_Attribute => 1929,
- Iir_Kind_Instance_Name_Attribute => 1934,
- Iir_Kind_Path_Name_Attribute => 1939,
- Iir_Kind_Left_Array_Attribute => 1946,
- Iir_Kind_Right_Array_Attribute => 1953,
- Iir_Kind_High_Array_Attribute => 1960,
- Iir_Kind_Low_Array_Attribute => 1967,
- Iir_Kind_Length_Array_Attribute => 1974,
- Iir_Kind_Ascending_Array_Attribute => 1981,
- Iir_Kind_Range_Array_Attribute => 1988,
- Iir_Kind_Reverse_Range_Array_Attribute => 1995,
- Iir_Kind_Attribute_Name => 2004
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1380,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1393,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1407,
+ Iir_Kind_Concurrent_Assertion_Statement => 1415,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1422,
+ Iir_Kind_Psl_Assert_Directive => 1435,
+ Iir_Kind_Psl_Assume_Directive => 1446,
+ Iir_Kind_Psl_Cover_Directive => 1458,
+ Iir_Kind_Psl_Restrict_Directive => 1469,
+ Iir_Kind_Block_Statement => 1483,
+ Iir_Kind_If_Generate_Statement => 1494,
+ Iir_Kind_Case_Generate_Statement => 1503,
+ Iir_Kind_For_Generate_Statement => 1512,
+ Iir_Kind_Component_Instantiation_Statement => 1523,
+ Iir_Kind_Psl_Default_Clock => 1527,
+ Iir_Kind_Simple_Simultaneous_Statement => 1534,
+ Iir_Kind_Generate_Statement_Body => 1545,
+ Iir_Kind_If_Generate_Else_Clause => 1551,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1562,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1573,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1585,
+ Iir_Kind_Null_Statement => 1589,
+ Iir_Kind_Assertion_Statement => 1596,
+ Iir_Kind_Report_Statement => 1602,
+ Iir_Kind_Wait_Statement => 1610,
+ Iir_Kind_Variable_Assignment_Statement => 1617,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1624,
+ Iir_Kind_Return_Statement => 1630,
+ Iir_Kind_For_Loop_Statement => 1641,
+ Iir_Kind_While_Loop_Statement => 1652,
+ Iir_Kind_Next_Statement => 1659,
+ Iir_Kind_Exit_Statement => 1666,
+ Iir_Kind_Case_Statement => 1674,
+ Iir_Kind_Procedure_Call_Statement => 1680,
+ Iir_Kind_If_Statement => 1690,
+ Iir_Kind_Elsif => 1696,
+ Iir_Kind_Character_Literal => 1704,
+ Iir_Kind_Simple_Name => 1712,
+ Iir_Kind_Selected_Name => 1721,
+ Iir_Kind_Operator_Symbol => 1727,
+ Iir_Kind_Reference_Name => 1732,
+ Iir_Kind_External_Constant_Name => 1740,
+ Iir_Kind_External_Signal_Name => 1748,
+ Iir_Kind_External_Variable_Name => 1757,
+ Iir_Kind_Selected_By_All_Name => 1763,
+ Iir_Kind_Parenthesis_Name => 1768,
+ Iir_Kind_Package_Pathname => 1772,
+ Iir_Kind_Absolute_Pathname => 1773,
+ Iir_Kind_Relative_Pathname => 1774,
+ Iir_Kind_Pathname_Element => 1779,
+ Iir_Kind_Base_Attribute => 1781,
+ Iir_Kind_Subtype_Attribute => 1786,
+ Iir_Kind_Element_Attribute => 1791,
+ Iir_Kind_Left_Type_Attribute => 1796,
+ Iir_Kind_Right_Type_Attribute => 1801,
+ Iir_Kind_High_Type_Attribute => 1806,
+ Iir_Kind_Low_Type_Attribute => 1811,
+ Iir_Kind_Ascending_Type_Attribute => 1816,
+ Iir_Kind_Image_Attribute => 1822,
+ Iir_Kind_Value_Attribute => 1828,
+ Iir_Kind_Pos_Attribute => 1834,
+ Iir_Kind_Val_Attribute => 1840,
+ Iir_Kind_Succ_Attribute => 1846,
+ Iir_Kind_Pred_Attribute => 1852,
+ Iir_Kind_Leftof_Attribute => 1858,
+ Iir_Kind_Rightof_Attribute => 1864,
+ Iir_Kind_Delayed_Attribute => 1873,
+ Iir_Kind_Stable_Attribute => 1882,
+ Iir_Kind_Quiet_Attribute => 1891,
+ Iir_Kind_Transaction_Attribute => 1900,
+ Iir_Kind_Event_Attribute => 1904,
+ Iir_Kind_Active_Attribute => 1908,
+ Iir_Kind_Last_Event_Attribute => 1912,
+ Iir_Kind_Last_Active_Attribute => 1916,
+ Iir_Kind_Last_Value_Attribute => 1920,
+ Iir_Kind_Driving_Attribute => 1924,
+ Iir_Kind_Driving_Value_Attribute => 1928,
+ Iir_Kind_Behavior_Attribute => 1928,
+ Iir_Kind_Structure_Attribute => 1928,
+ Iir_Kind_Simple_Name_Attribute => 1935,
+ Iir_Kind_Instance_Name_Attribute => 1940,
+ Iir_Kind_Path_Name_Attribute => 1945,
+ Iir_Kind_Left_Array_Attribute => 1952,
+ Iir_Kind_Right_Array_Attribute => 1959,
+ Iir_Kind_High_Array_Attribute => 1966,
+ Iir_Kind_Low_Array_Attribute => 1973,
+ Iir_Kind_Length_Array_Attribute => 1980,
+ Iir_Kind_Ascending_Array_Attribute => 1987,
+ Iir_Kind_Range_Array_Attribute => 1994,
+ Iir_Kind_Reverse_Range_Array_Attribute => 2001,
+ Iir_Kind_Attribute_Name => 2010
);
function Get_Fields_First (K : Iir_Kind) return Fields_Index is
@@ -4973,6 +4984,8 @@ package body Vhdl.Nodes_Meta is
return Get_Has_Mode (N);
when Field_Has_Class =>
return Get_Has_Class (N);
+ when Field_Has_Delay_Mechanism =>
+ return Get_Has_Delay_Mechanism (N);
when Field_Suspend_Flag =>
return Get_Suspend_Flag (N);
when Field_Is_Ref =>
@@ -5111,6 +5124,8 @@ package body Vhdl.Nodes_Meta is
Set_Has_Mode (N, V);
when Field_Has_Class =>
Set_Has_Class (N, V);
+ when Field_Has_Delay_Mechanism =>
+ Set_Has_Delay_Mechanism (N, V);
when Field_Suspend_Flag =>
Set_Suspend_Flag (N, V);
when Field_Is_Ref =>
@@ -10878,6 +10893,21 @@ package body Vhdl.Nodes_Meta is
end case;
end Has_Has_Class;
+ function Has_Has_Delay_Mechanism (K : Iir_Kind) return Boolean is
+ begin
+ case K is
+ when Iir_Kind_Concurrent_Simple_Signal_Assignment
+ | Iir_Kind_Concurrent_Conditional_Signal_Assignment
+ | Iir_Kind_Concurrent_Selected_Signal_Assignment
+ | Iir_Kind_Simple_Signal_Assignment_Statement
+ | Iir_Kind_Conditional_Signal_Assignment_Statement
+ | Iir_Kind_Selected_Waveform_Assignment_Statement =>
+ return True;
+ when others =>
+ return False;
+ end case;
+ end Has_Has_Delay_Mechanism;
+
function Has_Suspend_Flag (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 7ff8f8e9e..7b674ddbe 100644
--- a/src/vhdl/vhdl-nodes_meta.ads
+++ b/src/vhdl/vhdl-nodes_meta.ads
@@ -380,6 +380,7 @@ package Vhdl.Nodes_Meta is
Field_Has_Identifier_List,
Field_Has_Mode,
Field_Has_Class,
+ Field_Has_Delay_Mechanism,
Field_Suspend_Flag,
Field_Is_Ref,
Field_Is_Forward_Ref,
@@ -919,6 +920,7 @@ package Vhdl.Nodes_Meta is
function Has_Has_Identifier_List (K : Iir_Kind) return Boolean;
function Has_Has_Mode (K : Iir_Kind) return Boolean;
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_Is_Ref (K : Iir_Kind) return Boolean;
function Has_Is_Forward_Ref (K : Iir_Kind) return Boolean;
diff --git a/src/vhdl/vhdl-parse.adb b/src/vhdl/vhdl-parse.adb
index f46535623..a628acf54 100644
--- a/src/vhdl/vhdl-parse.adb
+++ b/src/vhdl/vhdl-parse.adb
@@ -6104,6 +6104,9 @@ package body Vhdl.Parse is
begin
if Current_Token = Tok_Transport then
Set_Delay_Mechanism (Assign, Iir_Transport_Delay);
+ Set_Has_Delay_Mechanism (Assign, True);
+
+ -- Skip 'transport'.
Scan;
else
Set_Delay_Mechanism (Assign, Iir_Inertial_Delay);
@@ -6112,15 +6115,23 @@ package body Vhdl.Parse is
Error_Msg_Parse
("'reject' delay mechanism not allowed in vhdl 87");
end if;
+ Set_Has_Delay_Mechanism (Assign, True);
+
+ -- Skip 'reject'.
Scan;
+
Set_Reject_Time_Expression (Assign, Parse_Expression);
- Expect (Tok_Inertial);
- Scan;
+
+ -- Skip 'inertial'.
+ Expect_Scan (Tok_Inertial);
elsif Current_Token = Tok_Inertial then
if Flags.Vhdl_Std = Vhdl_87 then
Error_Msg_Parse
("'inertial' keyword not allowed in vhdl 87");
end if;
+ Set_Has_Delay_Mechanism (Assign, True);
+
+ -- Skip 'inertial'.
Scan;
end if;
end if;
diff --git a/src/vhdl/vhdl-prints.adb b/src/vhdl/vhdl-prints.adb
index d64ea2b96..aa36cd4e0 100644
--- a/src/vhdl/vhdl-prints.adb
+++ b/src/vhdl/vhdl-prints.adb
@@ -2297,6 +2297,8 @@ package body Vhdl.Prints is
Disp_Token (Ctxt, Tok_Reject);
Print (Ctxt, Expr);
Disp_Token (Ctxt, Tok_Inertial);
+ elsif Get_Has_Delay_Mechanism (Stmt) then
+ Disp_Token (Ctxt, Tok_Inertial);
end if;
end case;
end Disp_Delay_Mechanism;