aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/iirs.ads
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-01-16 09:36:39 +0100
committerTristan Gingold <tgingold@free.fr>2016-01-16 09:36:39 +0100
commit929fc2f9cfd2df23876ee289fe2faba20489d715 (patch)
tree1b07b94f5cb3b207f4866dbff1a064a7d154e2de /src/vhdl/iirs.ads
parentf7824d45cfd650f67496fab24bd6df7ef67b6184 (diff)
downloadghdl-929fc2f9cfd2df23876ee289fe2faba20489d715.tar.gz
ghdl-929fc2f9cfd2df23876ee289fe2faba20489d715.tar.bz2
ghdl-929fc2f9cfd2df23876ee289fe2faba20489d715.zip
Add support for conditional assignments.
Diffstat (limited to 'src/vhdl/iirs.ads')
-rw-r--r--src/vhdl/iirs.ads91
1 files changed, 85 insertions, 6 deletions
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index d3522af9b..cc7eb83f0 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -443,6 +443,19 @@ package Iirs is
--
-- Get/Set_Chain (Field2)
+ -- Iir_Kind_Conditional_Expression (Short)
+ -- LRM08 10.5.3
+ -- conditional_expressions ::=
+ -- expression WHEN condition
+ -- { ELSE expression WHEN condition }
+ -- [ ELSE expression ]
+ --
+ -- Get/Set_Condition (Field1)
+ --
+ -- Get/Set_Expression (Field5)
+ --
+ -- Get/Set_Chain (Field2)
+
-- Iir_Kind_Choice_By_Others (Short)
-- Iir_Kind_Choice_By_None (Short)
-- Iir_Kind_Choice_By_Range (Short)
@@ -2076,6 +2089,25 @@ package Iirs is
--
-- Get/Set_End_Has_Identifier (Flag9)
+ -- Iir_Kind_Wildcard_Type_Definition (Short)
+ -- A wildcard type doesn't correspond to a type defined by VHDL. It
+ -- is used only during analysis to temporary set the type of an entity
+ -- when the type is not precisely known but restricted to some class of
+ -- types. Eg: the type of an aggregate is not known before being
+ -- determined by the context, but can only be an array or a record.
+ -- Wildcard types are statically created by std_package and the set of
+ -- restrictions depends on the node. See std_package.ads
+ --
+ -- Get/Set_Type_Declarator (Field3)
+ --
+ -- Get/Set_Base_Type (Field4)
+ --
+ -- Get/Set_Resolved_Flag (Flag1)
+ --
+ -- Get/Set_Signal_Type_Flag (Flag2)
+ --
+ -- Get/Set_Type_Staticness (State1)
+
--------------------------
-- subtype definitions --
--------------------------
@@ -2349,6 +2381,7 @@ package Iirs is
-- Iir_Kind_Concurrent_Conditional_Signal_Assignment (Medium)
-- Iir_Kind_Concurrent_Selected_Signal_Assignment (Medium)
+ -- Iir_Kind_Concurrent_Simple_Signal_Assignment (Medium)
--
-- Get/Set_Parent (Field0)
--
@@ -2361,11 +2394,14 @@ package Iirs is
--
-- Get/Set_Reject_Time_Expression (Field4)
--
+ -- Only for Iir_Kind_Concurrent_Simple_Signal_Assignment:
+ -- Get/Set_Waveform_Chain (Field5)
+ --
-- Only for Iir_Kind_Concurrent_Selected_Signal_Assignment:
-- Get/Set_Expression (Field5)
--
-- Only for Iir_Kind_Concurrent_Conditional_Signal_Assignment:
- -- Get/Set_Conditional_Waveform_Chain (Field7)
+ -- Get/Set_Conditional_Waveform_Chain (Field5)
--
-- Only for Iir_Kind_Concurrent_Selected_Signal_Assignment:
-- Get/Set_Selected_Waveform_Chain (Field7)
@@ -2791,7 +2827,8 @@ package Iirs is
--
-- Get/Set_Visible_Flag (Flag4)
- -- Iir_Kind_Signal_Assignment_Statement (Short)
+ -- Iir_Kind_Simple_Signal_Assignment_Statement (Short)
+ -- Iir_Kind_Conditional_Signal_Assignment_Statement (Short)
--
-- Get/Set_Parent (Field0)
--
@@ -2804,12 +2841,16 @@ package Iirs is
--
-- Get/Set_Reject_Time_Expression (Field4)
--
+ -- Only for Iir_Kind_Simple_Signal_Assignment_Statement:
-- The waveform.
-- If the waveform_chain is null_iir, then the signal assignment is a
-- disconnection statement, ie TARGET <= null_iir after disconection_time,
-- where disconnection_time is specified by a disconnection specification.
-- Get/Set_Waveform_Chain (Field5)
--
+ -- Only for Iir_Kind_Conditional_Signal_Assignment_Statement:
+ -- Get/Set_Conditional_Waveform_Chain (Field5)
+ --
-- Get/Set_Delay_Mechanism (Flag1)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -2832,6 +2873,21 @@ package Iirs is
--
-- Get/Set_Visible_Flag (Flag4)
+ -- Iir_Kind_Conditional_Variable_Assignment_Statement (Short)
+ --
+ -- Get/Set_Parent (Field0)
+ --
+ -- Get/Set_Target (Field1)
+ --
+ -- Get/Set_Chain (Field2)
+ --
+ -- Get/Set_Label (Field3)
+ -- Get/Set_Identifier (Alias Field3)
+ --
+ -- Get/Set_Conditional_Expression (Field5)
+ --
+ -- Get/Set_Visible_Flag (Flag4)
+
-- Iir_Kind_Assertion_Statement (Short)
--
-- Get/Set_Parent (Field0)
@@ -3551,6 +3607,7 @@ package Iirs is
-- Tuple,
Iir_Kind_Waveform_Element,
Iir_Kind_Conditional_Waveform,
+ Iir_Kind_Conditional_Expression,
Iir_Kind_Association_Element_By_Expression,
Iir_Kind_Association_Element_By_Individual,
Iir_Kind_Association_Element_Open,
@@ -3603,6 +3660,7 @@ package Iirs is
Iir_Kind_Physical_Type_Definition, -- scalar
Iir_Kind_Range_Expression,
Iir_Kind_Protected_Type_Body,
+ Iir_Kind_Wildcard_Type_Definition,
Iir_Kind_Subtype_Definition, -- temporary (must not appear after sem).
-- Nature definition
@@ -3720,6 +3778,7 @@ package Iirs is
-- Concurrent statements.
Iir_Kind_Sensitized_Process_Statement,
Iir_Kind_Process_Statement,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment,
Iir_Kind_Concurrent_Conditional_Signal_Assignment,
Iir_Kind_Concurrent_Selected_Signal_Assignment,
Iir_Kind_Concurrent_Assertion_Statement,
@@ -3738,12 +3797,14 @@ package Iirs is
Iir_Kind_If_Generate_Else_Clause,
-- Iir_Kind_Sequential_Statement
- Iir_Kind_Signal_Assignment_Statement,
+ Iir_Kind_Simple_Signal_Assignment_Statement,
+ Iir_Kind_Conditional_Signal_Assignment_Statement,
Iir_Kind_Null_Statement,
Iir_Kind_Assertion_Statement,
Iir_Kind_Report_Statement,
Iir_Kind_Wait_Statement,
Iir_Kind_Variable_Assignment_Statement,
+ Iir_Kind_Conditional_Variable_Assignment_Statement,
Iir_Kind_Return_Statement,
Iir_Kind_For_Loop_Statement,
Iir_Kind_While_Loop_Statement,
@@ -3815,6 +3876,10 @@ package Iirs is
Iir_Kind_Attribute_Name
);
+ -- Return TRUE iif K is K1 or K is K2.
+ function Kind_In (K : Iir_Kind; K1, K2 : Iir_Kind) return Boolean;
+ pragma Inline (Kind_In);
+
type Iir_Signal_Kind is
(
Iir_Register_Kind,
@@ -4605,6 +4670,7 @@ package Iirs is
subtype Iir_Kinds_Concurrent_Statement is Iir_Kind range
Iir_Kind_Sensitized_Process_Statement ..
--Iir_Kind_Process_Statement
+ --Iir_Kind_Concurrent_Simple_Signal_Assignment
--Iir_Kind_Concurrent_Conditional_Signal_Assignment
--Iir_Kind_Concurrent_Selected_Signal_Assignment
--Iir_Kind_Concurrent_Assertion_Statement
@@ -4618,16 +4684,19 @@ package Iirs is
Iir_Kind_Component_Instantiation_Statement;
subtype Iir_Kinds_Concurrent_Signal_Assignment is Iir_Kind range
- Iir_Kind_Concurrent_Conditional_Signal_Assignment ..
+ Iir_Kind_Concurrent_Simple_Signal_Assignment ..
+ --Iir_Kind_Concurrent_Conditional_Signal_Assignment
Iir_Kind_Concurrent_Selected_Signal_Assignment;
subtype Iir_Kinds_Sequential_Statement is Iir_Kind range
- Iir_Kind_Signal_Assignment_Statement ..
+ Iir_Kind_Simple_Signal_Assignment_Statement ..
+ --Iir_Kind_Conditional_Signal_Assignment_Statement
--Iir_Kind_Null_Statement
--Iir_Kind_Assertion_Statement
--Iir_Kind_Report_Statement
--Iir_Kind_Wait_Statement
--Iir_Kind_Variable_Assignment_Statement
+ --Iir_Kind_Conditional_Variable_Assignment_Statement
--Iir_Kind_Return_Statement
--Iir_Kind_For_Loop_Statement
--Iir_Kind_While_Loop_Statement
@@ -4637,6 +4706,10 @@ package Iirs is
--Iir_Kind_Procedure_Call_Statement
Iir_Kind_If_Statement;
+ subtype Iir_Kinds_Variable_Assignment_Statement is Iir_Kind range
+ Iir_Kind_Variable_Assignment_Statement ..
+ Iir_Kind_Conditional_Variable_Assignment_Statement;
+
subtype Iir_Kinds_Allocator is Iir_Kind range
Iir_Kind_Allocator_By_Expression ..
Iir_Kind_Allocator_By_Subtype;
@@ -6041,6 +6114,12 @@ package Iirs is
function Get_Expression (Target : Iir) return Iir;
procedure Set_Expression (Target : Iir; Expr : Iir);
+ -- A conditional expression.
+ -- Node kind is a Iir_Kind_Conditional_Expression.
+ -- Field: Field5
+ function Get_Conditional_Expression (Target : Iir) return Iir;
+ procedure Set_Conditional_Expression (Target : Iir; Expr : Iir);
+
-- Set to the designated type (either the type of the expression or the
-- subtype) when the expression is analyzed.
-- Field: Field2 Ref
@@ -6051,7 +6130,7 @@ package Iirs is
function Get_Selected_Waveform_Chain (Target : Iir) return Iir;
procedure Set_Selected_Waveform_Chain (Target : Iir; Chain : Iir);
- -- Field: Field7 Chain
+ -- Field: Field5 Chain
function Get_Conditional_Waveform_Chain (Target : Iir) return Iir;
procedure Set_Conditional_Waveform_Chain (Target : Iir; Chain : Iir);