aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2021-08-06 06:58:39 +0200
committerTristan Gingold <tgingold@free.fr>2021-08-06 09:16:19 +0200
commit3b80a2e5a9545422e9808f6f3b3f9c4a2421433b (patch)
tree22ea684d58cd77e94b780e8e5c9499c3c67fbac1 /src/vhdl
parentece6e78f537b4f16b020d2eb258038d00a794559 (diff)
downloadghdl-3b80a2e5a9545422e9808f6f3b3f9c4a2421433b.tar.gz
ghdl-3b80a2e5a9545422e9808f6f3b3f9c4a2421433b.tar.bz2
ghdl-3b80a2e5a9545422e9808f6f3b3f9c4a2421433b.zip
vhdl: introduce iir_kind_association_element_by_name
Diffstat (limited to 'src/vhdl')
-rw-r--r--src/vhdl/simulate/simul-elaboration.adb2
-rw-r--r--src/vhdl/translate/trans-chap4.adb3
-rw-r--r--src/vhdl/translate/trans-chap5.adb11
-rw-r--r--src/vhdl/translate/trans-chap8.adb3
-rw-r--r--src/vhdl/translate/trans-chap9.adb3
-rw-r--r--src/vhdl/vhdl-canon.adb10
-rw-r--r--src/vhdl/vhdl-elocations.adb1
-rw-r--r--src/vhdl/vhdl-elocations.ads1
-rw-r--r--src/vhdl/vhdl-elocations_meta.adb1
-rw-r--r--src/vhdl/vhdl-errors.adb1
-rw-r--r--src/vhdl/vhdl-evaluation.adb3
-rw-r--r--src/vhdl/vhdl-nodes.adb1
-rw-r--r--src/vhdl/vhdl-nodes.ads11
-rw-r--r--src/vhdl/vhdl-nodes_meta.adb628
-rw-r--r--src/vhdl/vhdl-prints.adb5
-rw-r--r--src/vhdl/vhdl-sem.adb183
16 files changed, 478 insertions, 389 deletions
diff --git a/src/vhdl/simulate/simul-elaboration.adb b/src/vhdl/simulate/simul-elaboration.adb
index 9533570a2..e93192cb6 100644
--- a/src/vhdl/simulate/simul-elaboration.adb
+++ b/src/vhdl/simulate/simul-elaboration.adb
@@ -1319,7 +1319,7 @@ package body Simul.Elaboration is
-- actual is not the reserved word OPEN.
Inter := Get_Association_Interface (Assoc, Port);
case Get_Kind (Assoc) is
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kinds_Association_Element_By_Actual =>
if Get_Actual_Conversion (Assoc) = Null_Iir
and then Get_Formal_Conversion (Assoc) = Null_Iir
then
diff --git a/src/vhdl/translate/trans-chap4.adb b/src/vhdl/translate/trans-chap4.adb
index 5a412dd08..72b88140c 100644
--- a/src/vhdl/translate/trans-chap4.adb
+++ b/src/vhdl/translate/trans-chap4.adb
@@ -3114,8 +3114,7 @@ package body Trans.Chap4 is
Inter := Get_Port_Chain (Entity);
end if;
while Assoc /= Null_Iir loop
- if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression
- then
+ if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Name then
Info := null;
if Get_Actual_Conversion (Assoc) /= Null_Iir then
Info := Add_Info (Assoc, Kind_Assoc);
diff --git a/src/vhdl/translate/trans-chap5.adb b/src/vhdl/translate/trans-chap5.adb
index b53896033..9b2eec152 100644
--- a/src/vhdl/translate/trans-chap5.adb
+++ b/src/vhdl/translate/trans-chap5.adb
@@ -386,7 +386,7 @@ package body Trans.Chap5 is
Mode : Connect_Mode;
begin
pragma Assert
- (Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression);
+ (Get_Kind (Assoc) in Iir_Kinds_Association_Element_By_Actual);
Open_Temp;
if Get_Actual_Conversion (Assoc) = Null_Iir
@@ -648,7 +648,8 @@ package body Trans.Chap5 is
begin
Open_Temp;
case Iir_Kinds_Association_Element_Parameters (Get_Kind (Assoc)) is
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
pragma Assert (Get_Whole_Association_Flag (Assoc));
Bounds := Get_Unconstrained_Port_Bounds (Assoc, Port);
when Iir_Kind_Association_Element_Open =>
@@ -727,7 +728,8 @@ package body Trans.Chap5 is
| Iir_Kind_Association_Element_Open =>
pragma Assert (Get_Whole_Association_Flag (Assoc));
Chap4.Elab_Signal_Declaration_Storage (Formal, False);
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
if Get_Whole_Association_Flag (Assoc) then
Chap4.Elab_Signal_Declaration_Storage
(Formal, Get_Collapse_Signal_Flag (Assoc));
@@ -738,7 +740,8 @@ package body Trans.Chap5 is
-- Create or copy signals.
Open_Temp;
case Iir_Kinds_Association_Element_Parameters (Get_Kind (Assoc)) is
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
if Get_Whole_Association_Flag (Assoc) then
if Get_Collapse_Signal_Flag (Assoc) then
Value := Get_Default_Value (Formal_Base);
diff --git a/src/vhdl/translate/trans-chap8.adb b/src/vhdl/translate/trans-chap8.adb
index 3ae6c2e56..3626460aa 100644
--- a/src/vhdl/translate/trans-chap8.adb
+++ b/src/vhdl/translate/trans-chap8.adb
@@ -2584,7 +2584,8 @@ package body Trans.Chap8 is
Has_Value_Field := True;
Actual := Null_Iir;
Act_Type := Get_Actual_Type (Assoc);
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
Actual := Get_Actual (Assoc);
Act_Type := Get_Type (Actual);
when Iir_Kind_Association_Element_Open =>
diff --git a/src/vhdl/translate/trans-chap9.adb b/src/vhdl/translate/trans-chap9.adb
index 4e64907d8..89bc687d5 100644
--- a/src/vhdl/translate/trans-chap9.adb
+++ b/src/vhdl/translate/trans-chap9.adb
@@ -200,8 +200,7 @@ package body Trans.Chap9 is
Assoc := Get_Port_Map_Aspect_Chain (Inst);
Inter := Get_Port_Chain (Ports);
while Assoc /= Null_Iir loop
- if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression
- then
+ if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Name then
declare
Act_Conv : constant Iir := Get_Actual_Conversion (Assoc);
Act_Type : constant Iir := Get_Type (Get_Actual (Assoc));
diff --git a/src/vhdl/vhdl-canon.adb b/src/vhdl/vhdl-canon.adb
index d5acdf171..f56c0674f 100644
--- a/src/vhdl/vhdl-canon.adb
+++ b/src/vhdl/vhdl-canon.adb
@@ -930,10 +930,11 @@ package body Vhdl.Canon is
Set_Chain (Assoc_El, Null_Iir);
Chain_Append (N_Chain, Last, Assoc_El);
- case Get_Kind (Assoc_El) is
+ case Iir_Kinds_Association_Element (Get_Kind (Assoc_El)) is
when Iir_Kind_Association_Element_Open =>
goto Done;
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
if Get_Whole_Association_Flag (Assoc_El) then
goto Done;
end if;
@@ -944,8 +945,6 @@ package body Vhdl.Canon is
| Iir_Kind_Association_Element_Subprogram
| Iir_Kind_Association_Element_Terminal =>
goto Done;
- when others =>
- Error_Kind ("canon_association_chain", Assoc_El);
end case;
elsif Found then
-- No more associations.
@@ -2530,7 +2529,8 @@ package body Vhdl.Canon is
case Get_Kind (Assoc) is
when Iir_Kind_Association_Element_Open =>
null;
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
Set_Actual (El, Sem_Inst.Copy_Tree (Get_Actual (Assoc)));
Set_Actual_Conversion
(El,
diff --git a/src/vhdl/vhdl-elocations.adb b/src/vhdl/vhdl-elocations.adb
index 059e02e8b..1b42f3640 100644
--- a/src/vhdl/vhdl-elocations.adb
+++ b/src/vhdl/vhdl-elocations.adb
@@ -456,6 +456,7 @@ package body Vhdl.Elocations is
return Format_None;
when Iir_Kind_Library_Clause
| Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
diff --git a/src/vhdl/vhdl-elocations.ads b/src/vhdl/vhdl-elocations.ads
index 51a9d7038..d5fa98b85 100644
--- a/src/vhdl/vhdl-elocations.ads
+++ b/src/vhdl/vhdl-elocations.ads
@@ -51,6 +51,7 @@ package Vhdl.Elocations is
-------------
-- Iir_Kind_Association_Element_By_Expression (L1)
+ -- Iir_Kind_Association_Element_By_Name (L1)
-- Iir_Kind_Association_Element_Open (L1)
-- Iir_Kind_Association_Element_By_Individual (L1)
-- Iir_Kind_Association_Element_Package (L1)
diff --git a/src/vhdl/vhdl-elocations_meta.adb b/src/vhdl/vhdl-elocations_meta.adb
index 751ae2cb5..b20c29bbd 100644
--- a/src/vhdl/vhdl-elocations_meta.adb
+++ b/src/vhdl/vhdl-elocations_meta.adb
@@ -390,6 +390,7 @@ package body Vhdl.Elocations_Meta is
begin
case K is
when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
diff --git a/src/vhdl/vhdl-errors.adb b/src/vhdl/vhdl-errors.adb
index 69e4a0860..27d6c9a7f 100644
--- a/src/vhdl/vhdl-errors.adb
+++ b/src/vhdl/vhdl-errors.adb
@@ -293,6 +293,7 @@ package body Vhdl.Errors is
when Iir_Kind_Association_Element_By_Individual =>
return "individual association element";
when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_Package
| Iir_Kind_Association_Element_Type
| Iir_Kind_Association_Element_Subprogram
diff --git a/src/vhdl/vhdl-evaluation.adb b/src/vhdl/vhdl-evaluation.adb
index e1f5ea32e..32b337e73 100644
--- a/src/vhdl/vhdl-evaluation.adb
+++ b/src/vhdl/vhdl-evaluation.adb
@@ -3422,7 +3422,8 @@ package body Vhdl.Evaluation is
case Iir_Kinds_Association_Element_Parameters
(Get_Kind (Assoc))
is
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
Assoc_Expr := Get_Actual (Assoc);
if not Can_Eval_Value (Assoc_Expr, False) then
return False;
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb
index ee975fd8f..2fae16c38 100644
--- a/src/vhdl/vhdl-nodes.adb
+++ b/src/vhdl/vhdl-nodes.adb
@@ -1001,6 +1001,7 @@ package body Vhdl.Nodes is
| Iir_Kind_Conditional_Waveform
| Iir_Kind_Conditional_Expression
| Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads
index 05f717c47..5e53da773 100644
--- a/src/vhdl/vhdl-nodes.ads
+++ b/src/vhdl/vhdl-nodes.ads
@@ -446,6 +446,7 @@ package Vhdl.Nodes is
-------------
-- Iir_Kind_Association_Element_By_Expression (Short)
+ -- Iir_Kind_Association_Element_By_Name (Short)
-- Iir_Kind_Association_Element_Open (Short)
-- Iir_Kind_Association_Element_By_Individual (Short)
-- Iir_Kind_Association_Element_Package (Short)
@@ -460,6 +461,7 @@ package Vhdl.Nodes is
-- Get/Set_Chain (Field2)
--
-- Only for Iir_Kind_Association_Element_By_Expression:
+ -- Only for Iir_Kind_Association_Element_By_Name:
-- Only for Iir_Kind_Association_Element_Package:
-- Only for Iir_Kind_Association_Element_Type:
-- Only for Iir_Kind_Association_Element_Subprogram:
@@ -472,6 +474,7 @@ package Vhdl.Nodes is
-- A function call or a type conversion for the actual.
-- FIXME: should be a name ?
-- Only for Iir_Kind_Association_Element_By_Expression:
+ -- Only for Iir_Kind_Association_Element_By_Name:
-- Get/Set_Actual_Conversion (Field4)
--
-- Only for Iir_Kind_Association_Element_Type:
@@ -479,6 +482,7 @@ package Vhdl.Nodes is
--
-- A function call or a type conversion for the formal.
-- Only for Iir_Kind_Association_Element_By_Expression:
+ -- Only for Iir_Kind_Association_Element_By_Name:
-- Get/Set_Formal_Conversion (Field5)
--
-- Owner of Actual_Type if needed.
@@ -4855,6 +4859,7 @@ package Vhdl.Nodes is
Iir_Kind_Conditional_Waveform,
Iir_Kind_Conditional_Expression,
Iir_Kind_Association_Element_By_Expression,
+ Iir_Kind_Association_Element_By_Name,
Iir_Kind_Association_Element_By_Individual,
Iir_Kind_Association_Element_Open,
Iir_Kind_Association_Element_Package,
@@ -6668,11 +6673,17 @@ package Vhdl.Nodes is
-- Association elements for parameters.
subtype Iir_Kinds_Association_Element_Parameters is Iir_Kind range
Iir_Kind_Association_Element_By_Expression ..
+ --Iir_Kind_Association_Element_By_Name
--Iir_Kind_Association_Element_By_Individual
Iir_Kind_Association_Element_Open;
+ subtype Iir_Kinds_Association_Element_By_Actual is Iir_Kind range
+ Iir_Kind_Association_Element_By_Expression ..
+ Iir_Kind_Association_Element_By_Name;
+
subtype Iir_Kinds_Association_Element is Iir_Kind range
Iir_Kind_Association_Element_By_Expression ..
+ --Iir_Kind_Association_Element_By_Name
--Iir_Kind_Association_Element_By_Individual
--Iir_Kind_Association_Element_Open
--Iir_Kind_Association_Element_Package
diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb
index 25f1dc86c..0b8092802 100644
--- a/src/vhdl/vhdl-nodes_meta.adb
+++ b/src/vhdl/vhdl-nodes_meta.adb
@@ -1185,6 +1185,8 @@ package body Vhdl.Nodes_Meta is
return "conditional_expression";
when Iir_Kind_Association_Element_By_Expression =>
return "association_element_by_expression";
+ when Iir_Kind_Association_Element_By_Name =>
+ return "association_element_by_name";
when Iir_Kind_Association_Element_By_Individual =>
return "association_element_by_individual";
when Iir_Kind_Association_Element_Open =>
@@ -2669,6 +2671,15 @@ package body Vhdl.Nodes_Meta is
Field_Actual,
Field_Actual_Conversion,
Field_Formal_Conversion,
+ -- Iir_Kind_Association_Element_By_Name
+ Field_Whole_Association_Flag,
+ Field_Collapse_Signal_Flag,
+ Field_In_Formal_Flag,
+ Field_Formal,
+ Field_Chain,
+ Field_Actual,
+ Field_Actual_Conversion,
+ Field_Formal_Conversion,
-- Iir_Kind_Association_Element_By_Individual
Field_Whole_Association_Flag,
Field_Collapse_Signal_Flag,
@@ -5255,303 +5266,304 @@ package body Vhdl.Nodes_Meta is
Iir_Kind_Conditional_Waveform => 105,
Iir_Kind_Conditional_Expression => 109,
Iir_Kind_Association_Element_By_Expression => 117,
- Iir_Kind_Association_Element_By_Individual => 126,
- Iir_Kind_Association_Element_Open => 132,
- Iir_Kind_Association_Element_Package => 138,
- Iir_Kind_Association_Element_Type => 146,
- Iir_Kind_Association_Element_Subprogram => 152,
- Iir_Kind_Association_Element_Terminal => 158,
- Iir_Kind_Choice_By_Range => 166,
- Iir_Kind_Choice_By_Expression => 174,
- Iir_Kind_Choice_By_Others => 180,
- Iir_Kind_Choice_By_None => 186,
- Iir_Kind_Choice_By_Name => 193,
- Iir_Kind_Entity_Aspect_Entity => 195,
- Iir_Kind_Entity_Aspect_Configuration => 196,
- Iir_Kind_Entity_Aspect_Open => 196,
- Iir_Kind_Psl_Hierarchical_Name => 198,
- Iir_Kind_Block_Configuration => 204,
- Iir_Kind_Block_Header => 208,
- Iir_Kind_Component_Configuration => 215,
- Iir_Kind_Binding_Indication => 219,
- Iir_Kind_Entity_Class => 221,
- Iir_Kind_Attribute_Value => 229,
- Iir_Kind_Signature => 232,
- Iir_Kind_Aggregate_Info => 239,
- Iir_Kind_Procedure_Call => 243,
- Iir_Kind_Record_Element_Constraint => 251,
- Iir_Kind_Array_Element_Resolution => 253,
- Iir_Kind_Record_Resolution => 254,
- Iir_Kind_Record_Element_Resolution => 257,
- Iir_Kind_Break_Element => 261,
- Iir_Kind_Attribute_Specification => 270,
- Iir_Kind_Disconnection_Specification => 276,
- Iir_Kind_Step_Limit_Specification => 282,
- Iir_Kind_Configuration_Specification => 288,
- Iir_Kind_Access_Type_Definition => 295,
- Iir_Kind_Incomplete_Type_Definition => 302,
- Iir_Kind_Interface_Type_Definition => 308,
- Iir_Kind_File_Type_Definition => 314,
- Iir_Kind_Protected_Type_Declaration => 323,
- Iir_Kind_Record_Type_Definition => 333,
- Iir_Kind_Array_Type_Definition => 344,
- Iir_Kind_Array_Subtype_Definition => 361,
- Iir_Kind_Record_Subtype_Definition => 374,
- Iir_Kind_Access_Subtype_Definition => 382,
- Iir_Kind_Physical_Subtype_Definition => 392,
- Iir_Kind_Floating_Subtype_Definition => 403,
- Iir_Kind_Integer_Subtype_Definition => 413,
- Iir_Kind_Enumeration_Subtype_Definition => 423,
- Iir_Kind_Enumeration_Type_Definition => 434,
- Iir_Kind_Integer_Type_Definition => 442,
- Iir_Kind_Floating_Type_Definition => 450,
- Iir_Kind_Physical_Type_Definition => 461,
- Iir_Kind_Range_Expression => 469,
- Iir_Kind_Protected_Type_Body => 477,
- Iir_Kind_Wildcard_Type_Definition => 481,
- Iir_Kind_Subtype_Definition => 488,
- Iir_Kind_Scalar_Nature_Definition => 496,
- Iir_Kind_Record_Nature_Definition => 509,
- Iir_Kind_Array_Nature_Definition => 523,
- Iir_Kind_Array_Subnature_Definition => 538,
- Iir_Kind_Overload_List => 539,
- Iir_Kind_Entity_Declaration => 552,
- Iir_Kind_Configuration_Declaration => 562,
- Iir_Kind_Context_Declaration => 568,
- Iir_Kind_Package_Declaration => 583,
- Iir_Kind_Package_Instantiation_Declaration => 597,
- Iir_Kind_Vmode_Declaration => 609,
- Iir_Kind_Vprop_Declaration => 621,
- Iir_Kind_Vunit_Declaration => 634,
- Iir_Kind_Package_Body => 642,
- Iir_Kind_Architecture_Body => 655,
- Iir_Kind_Type_Declaration => 662,
- Iir_Kind_Anonymous_Type_Declaration => 668,
- Iir_Kind_Subtype_Declaration => 676,
- Iir_Kind_Nature_Declaration => 682,
- Iir_Kind_Subnature_Declaration => 689,
- Iir_Kind_Package_Header => 691,
- Iir_Kind_Unit_Declaration => 700,
- Iir_Kind_Library_Declaration => 708,
- Iir_Kind_Component_Declaration => 718,
- Iir_Kind_Attribute_Declaration => 725,
- Iir_Kind_Group_Template_Declaration => 731,
- Iir_Kind_Group_Declaration => 738,
- Iir_Kind_Element_Declaration => 746,
- Iir_Kind_Nature_Element_Declaration => 753,
- Iir_Kind_Non_Object_Alias_Declaration => 761,
- Iir_Kind_Psl_Declaration => 769,
- Iir_Kind_Psl_Endpoint_Declaration => 783,
- Iir_Kind_Enumeration_Literal => 794,
- Iir_Kind_Function_Declaration => 819,
- Iir_Kind_Procedure_Declaration => 843,
- Iir_Kind_Function_Body => 853,
- Iir_Kind_Procedure_Body => 864,
- Iir_Kind_Function_Instantiation_Declaration => 875,
- Iir_Kind_Procedure_Instantiation_Declaration => 885,
- Iir_Kind_Terminal_Declaration => 894,
- Iir_Kind_Object_Alias_Declaration => 906,
- Iir_Kind_Free_Quantity_Declaration => 918,
- Iir_Kind_Spectrum_Quantity_Declaration => 931,
- Iir_Kind_Noise_Quantity_Declaration => 943,
- Iir_Kind_Across_Quantity_Declaration => 959,
- Iir_Kind_Through_Quantity_Declaration => 975,
- Iir_Kind_File_Declaration => 990,
- Iir_Kind_Guard_Signal_Declaration => 1004,
- Iir_Kind_Signal_Declaration => 1021,
- Iir_Kind_Variable_Declaration => 1034,
- Iir_Kind_Constant_Declaration => 1048,
- Iir_Kind_Iterator_Declaration => 1060,
- Iir_Kind_Interface_Constant_Declaration => 1077,
- Iir_Kind_Interface_Variable_Declaration => 1093,
- Iir_Kind_Interface_Signal_Declaration => 1114,
- Iir_Kind_Interface_File_Declaration => 1130,
- Iir_Kind_Interface_Quantity_Declaration => 1146,
- Iir_Kind_Interface_Terminal_Declaration => 1158,
- Iir_Kind_Interface_Type_Declaration => 1169,
- Iir_Kind_Interface_Package_Declaration => 1182,
- Iir_Kind_Interface_Function_Declaration => 1200,
- Iir_Kind_Interface_Procedure_Declaration => 1214,
- Iir_Kind_Anonymous_Signal_Declaration => 1223,
- Iir_Kind_Signal_Attribute_Declaration => 1226,
- Iir_Kind_Identity_Operator => 1230,
- Iir_Kind_Negation_Operator => 1234,
- Iir_Kind_Absolute_Operator => 1238,
- Iir_Kind_Not_Operator => 1242,
- Iir_Kind_Implicit_Condition_Operator => 1246,
- Iir_Kind_Condition_Operator => 1250,
- Iir_Kind_Reduction_And_Operator => 1254,
- Iir_Kind_Reduction_Or_Operator => 1258,
- Iir_Kind_Reduction_Nand_Operator => 1262,
- Iir_Kind_Reduction_Nor_Operator => 1266,
- Iir_Kind_Reduction_Xor_Operator => 1270,
- Iir_Kind_Reduction_Xnor_Operator => 1274,
- Iir_Kind_And_Operator => 1279,
- Iir_Kind_Or_Operator => 1284,
- Iir_Kind_Nand_Operator => 1289,
- Iir_Kind_Nor_Operator => 1294,
- Iir_Kind_Xor_Operator => 1299,
- Iir_Kind_Xnor_Operator => 1304,
- Iir_Kind_Equality_Operator => 1309,
- Iir_Kind_Inequality_Operator => 1314,
- Iir_Kind_Less_Than_Operator => 1319,
- Iir_Kind_Less_Than_Or_Equal_Operator => 1324,
- Iir_Kind_Greater_Than_Operator => 1329,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1334,
- Iir_Kind_Match_Equality_Operator => 1339,
- Iir_Kind_Match_Inequality_Operator => 1344,
- Iir_Kind_Match_Less_Than_Operator => 1349,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1354,
- Iir_Kind_Match_Greater_Than_Operator => 1359,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1364,
- Iir_Kind_Sll_Operator => 1369,
- Iir_Kind_Sla_Operator => 1374,
- Iir_Kind_Srl_Operator => 1379,
- Iir_Kind_Sra_Operator => 1384,
- Iir_Kind_Rol_Operator => 1389,
- Iir_Kind_Ror_Operator => 1394,
- Iir_Kind_Addition_Operator => 1399,
- Iir_Kind_Substraction_Operator => 1404,
- Iir_Kind_Concatenation_Operator => 1409,
- Iir_Kind_Multiplication_Operator => 1414,
- Iir_Kind_Division_Operator => 1419,
- Iir_Kind_Modulus_Operator => 1424,
- Iir_Kind_Remainder_Operator => 1429,
- Iir_Kind_Exponentiation_Operator => 1434,
- Iir_Kind_Function_Call => 1442,
- Iir_Kind_Aggregate => 1449,
- Iir_Kind_Parenthesis_Expression => 1452,
- Iir_Kind_Qualified_Expression => 1456,
- Iir_Kind_Type_Conversion => 1461,
- Iir_Kind_Allocator_By_Expression => 1466,
- Iir_Kind_Allocator_By_Subtype => 1472,
- Iir_Kind_Selected_Element => 1480,
- Iir_Kind_Dereference => 1485,
- Iir_Kind_Implicit_Dereference => 1490,
- Iir_Kind_Slice_Name => 1497,
- Iir_Kind_Indexed_Name => 1503,
- Iir_Kind_Psl_Prev => 1509,
- Iir_Kind_Psl_Stable => 1514,
- Iir_Kind_Psl_Rose => 1519,
- Iir_Kind_Psl_Fell => 1524,
- Iir_Kind_Psl_Onehot => 1527,
- Iir_Kind_Psl_Onehot0 => 1530,
- Iir_Kind_Psl_Expression => 1532,
- Iir_Kind_Sensitized_Process_Statement => 1553,
- Iir_Kind_Process_Statement => 1573,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1586,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1599,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1613,
- Iir_Kind_Concurrent_Assertion_Statement => 1621,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1628,
- Iir_Kind_Concurrent_Break_Statement => 1636,
- Iir_Kind_Psl_Assert_Directive => 1649,
- Iir_Kind_Psl_Assume_Directive => 1660,
- Iir_Kind_Psl_Cover_Directive => 1672,
- Iir_Kind_Psl_Restrict_Directive => 1683,
- Iir_Kind_Block_Statement => 1697,
- Iir_Kind_If_Generate_Statement => 1708,
- Iir_Kind_Case_Generate_Statement => 1717,
- Iir_Kind_For_Generate_Statement => 1726,
- Iir_Kind_Component_Instantiation_Statement => 1737,
- Iir_Kind_Psl_Default_Clock => 1740,
- Iir_Kind_Generate_Statement_Body => 1751,
- Iir_Kind_If_Generate_Else_Clause => 1757,
- Iir_Kind_Simple_Simultaneous_Statement => 1764,
- Iir_Kind_Simultaneous_Null_Statement => 1768,
- Iir_Kind_Simultaneous_Procedural_Statement => 1779,
- Iir_Kind_Simultaneous_Case_Statement => 1788,
- Iir_Kind_Simultaneous_If_Statement => 1797,
- Iir_Kind_Simultaneous_Elsif => 1803,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1814,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1825,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1837,
- Iir_Kind_Signal_Force_Assignment_Statement => 1847,
- Iir_Kind_Signal_Release_Assignment_Statement => 1856,
- Iir_Kind_Null_Statement => 1860,
- Iir_Kind_Assertion_Statement => 1867,
- Iir_Kind_Report_Statement => 1873,
- Iir_Kind_Wait_Statement => 1881,
- Iir_Kind_Variable_Assignment_Statement => 1888,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1895,
- Iir_Kind_Return_Statement => 1901,
- Iir_Kind_For_Loop_Statement => 1912,
- Iir_Kind_While_Loop_Statement => 1923,
- Iir_Kind_Next_Statement => 1930,
- Iir_Kind_Exit_Statement => 1937,
- Iir_Kind_Case_Statement => 1945,
- Iir_Kind_Procedure_Call_Statement => 1951,
- Iir_Kind_Break_Statement => 1958,
- Iir_Kind_If_Statement => 1968,
- Iir_Kind_Elsif => 1974,
- Iir_Kind_Character_Literal => 1981,
- Iir_Kind_Simple_Name => 1988,
- Iir_Kind_Selected_Name => 1996,
- Iir_Kind_Operator_Symbol => 2001,
- Iir_Kind_Reference_Name => 2006,
- Iir_Kind_External_Constant_Name => 2015,
- Iir_Kind_External_Signal_Name => 2024,
- Iir_Kind_External_Variable_Name => 2034,
- Iir_Kind_Selected_By_All_Name => 2040,
- Iir_Kind_Parenthesis_Name => 2045,
- Iir_Kind_Package_Pathname => 2049,
- Iir_Kind_Absolute_Pathname => 2050,
- Iir_Kind_Relative_Pathname => 2051,
- Iir_Kind_Pathname_Element => 2056,
- Iir_Kind_Base_Attribute => 2058,
- Iir_Kind_Subtype_Attribute => 2063,
- Iir_Kind_Element_Attribute => 2068,
- Iir_Kind_Across_Attribute => 2073,
- Iir_Kind_Through_Attribute => 2078,
- Iir_Kind_Nature_Reference_Attribute => 2082,
- Iir_Kind_Left_Type_Attribute => 2087,
- Iir_Kind_Right_Type_Attribute => 2092,
- Iir_Kind_High_Type_Attribute => 2097,
- Iir_Kind_Low_Type_Attribute => 2102,
- Iir_Kind_Ascending_Type_Attribute => 2107,
- Iir_Kind_Image_Attribute => 2113,
- Iir_Kind_Value_Attribute => 2119,
- Iir_Kind_Pos_Attribute => 2125,
- Iir_Kind_Val_Attribute => 2131,
- Iir_Kind_Succ_Attribute => 2137,
- Iir_Kind_Pred_Attribute => 2143,
- Iir_Kind_Leftof_Attribute => 2149,
- Iir_Kind_Rightof_Attribute => 2155,
- Iir_Kind_Signal_Slew_Attribute => 2163,
- Iir_Kind_Quantity_Slew_Attribute => 2171,
- Iir_Kind_Ramp_Attribute => 2179,
- Iir_Kind_Zoh_Attribute => 2187,
- Iir_Kind_Ltf_Attribute => 2195,
- Iir_Kind_Ztf_Attribute => 2205,
- Iir_Kind_Dot_Attribute => 2212,
- Iir_Kind_Integ_Attribute => 2219,
- Iir_Kind_Above_Attribute => 2227,
- Iir_Kind_Quantity_Delayed_Attribute => 2235,
- Iir_Kind_Delayed_Attribute => 2244,
- Iir_Kind_Stable_Attribute => 2253,
- Iir_Kind_Quiet_Attribute => 2262,
- Iir_Kind_Transaction_Attribute => 2271,
- Iir_Kind_Event_Attribute => 2275,
- Iir_Kind_Active_Attribute => 2279,
- Iir_Kind_Last_Event_Attribute => 2283,
- Iir_Kind_Last_Active_Attribute => 2287,
- Iir_Kind_Last_Value_Attribute => 2291,
- Iir_Kind_Driving_Attribute => 2295,
- Iir_Kind_Driving_Value_Attribute => 2299,
- Iir_Kind_Behavior_Attribute => 2299,
- Iir_Kind_Structure_Attribute => 2299,
- Iir_Kind_Simple_Name_Attribute => 2306,
- Iir_Kind_Instance_Name_Attribute => 2311,
- Iir_Kind_Path_Name_Attribute => 2316,
- Iir_Kind_Left_Array_Attribute => 2323,
- Iir_Kind_Right_Array_Attribute => 2330,
- Iir_Kind_High_Array_Attribute => 2337,
- Iir_Kind_Low_Array_Attribute => 2344,
- Iir_Kind_Length_Array_Attribute => 2351,
- Iir_Kind_Ascending_Array_Attribute => 2358,
- Iir_Kind_Range_Array_Attribute => 2365,
- Iir_Kind_Reverse_Range_Array_Attribute => 2372,
- Iir_Kind_Attribute_Name => 2381
+ Iir_Kind_Association_Element_By_Name => 125,
+ Iir_Kind_Association_Element_By_Individual => 134,
+ Iir_Kind_Association_Element_Open => 140,
+ Iir_Kind_Association_Element_Package => 146,
+ Iir_Kind_Association_Element_Type => 154,
+ Iir_Kind_Association_Element_Subprogram => 160,
+ Iir_Kind_Association_Element_Terminal => 166,
+ Iir_Kind_Choice_By_Range => 174,
+ Iir_Kind_Choice_By_Expression => 182,
+ Iir_Kind_Choice_By_Others => 188,
+ Iir_Kind_Choice_By_None => 194,
+ Iir_Kind_Choice_By_Name => 201,
+ Iir_Kind_Entity_Aspect_Entity => 203,
+ Iir_Kind_Entity_Aspect_Configuration => 204,
+ Iir_Kind_Entity_Aspect_Open => 204,
+ Iir_Kind_Psl_Hierarchical_Name => 206,
+ Iir_Kind_Block_Configuration => 212,
+ Iir_Kind_Block_Header => 216,
+ Iir_Kind_Component_Configuration => 223,
+ Iir_Kind_Binding_Indication => 227,
+ Iir_Kind_Entity_Class => 229,
+ Iir_Kind_Attribute_Value => 237,
+ Iir_Kind_Signature => 240,
+ Iir_Kind_Aggregate_Info => 247,
+ Iir_Kind_Procedure_Call => 251,
+ Iir_Kind_Record_Element_Constraint => 259,
+ Iir_Kind_Array_Element_Resolution => 261,
+ Iir_Kind_Record_Resolution => 262,
+ Iir_Kind_Record_Element_Resolution => 265,
+ Iir_Kind_Break_Element => 269,
+ Iir_Kind_Attribute_Specification => 278,
+ Iir_Kind_Disconnection_Specification => 284,
+ Iir_Kind_Step_Limit_Specification => 290,
+ Iir_Kind_Configuration_Specification => 296,
+ Iir_Kind_Access_Type_Definition => 303,
+ Iir_Kind_Incomplete_Type_Definition => 310,
+ Iir_Kind_Interface_Type_Definition => 316,
+ Iir_Kind_File_Type_Definition => 322,
+ Iir_Kind_Protected_Type_Declaration => 331,
+ Iir_Kind_Record_Type_Definition => 341,
+ Iir_Kind_Array_Type_Definition => 352,
+ Iir_Kind_Array_Subtype_Definition => 369,
+ Iir_Kind_Record_Subtype_Definition => 382,
+ Iir_Kind_Access_Subtype_Definition => 390,
+ Iir_Kind_Physical_Subtype_Definition => 400,
+ Iir_Kind_Floating_Subtype_Definition => 411,
+ Iir_Kind_Integer_Subtype_Definition => 421,
+ Iir_Kind_Enumeration_Subtype_Definition => 431,
+ Iir_Kind_Enumeration_Type_Definition => 442,
+ Iir_Kind_Integer_Type_Definition => 450,
+ Iir_Kind_Floating_Type_Definition => 458,
+ Iir_Kind_Physical_Type_Definition => 469,
+ Iir_Kind_Range_Expression => 477,
+ Iir_Kind_Protected_Type_Body => 485,
+ Iir_Kind_Wildcard_Type_Definition => 489,
+ Iir_Kind_Subtype_Definition => 496,
+ Iir_Kind_Scalar_Nature_Definition => 504,
+ Iir_Kind_Record_Nature_Definition => 517,
+ Iir_Kind_Array_Nature_Definition => 531,
+ Iir_Kind_Array_Subnature_Definition => 546,
+ Iir_Kind_Overload_List => 547,
+ Iir_Kind_Entity_Declaration => 560,
+ Iir_Kind_Configuration_Declaration => 570,
+ Iir_Kind_Context_Declaration => 576,
+ Iir_Kind_Package_Declaration => 591,
+ Iir_Kind_Package_Instantiation_Declaration => 605,
+ Iir_Kind_Vmode_Declaration => 617,
+ Iir_Kind_Vprop_Declaration => 629,
+ Iir_Kind_Vunit_Declaration => 642,
+ Iir_Kind_Package_Body => 650,
+ Iir_Kind_Architecture_Body => 663,
+ Iir_Kind_Type_Declaration => 670,
+ Iir_Kind_Anonymous_Type_Declaration => 676,
+ Iir_Kind_Subtype_Declaration => 684,
+ Iir_Kind_Nature_Declaration => 690,
+ Iir_Kind_Subnature_Declaration => 697,
+ Iir_Kind_Package_Header => 699,
+ Iir_Kind_Unit_Declaration => 708,
+ Iir_Kind_Library_Declaration => 716,
+ Iir_Kind_Component_Declaration => 726,
+ Iir_Kind_Attribute_Declaration => 733,
+ Iir_Kind_Group_Template_Declaration => 739,
+ Iir_Kind_Group_Declaration => 746,
+ Iir_Kind_Element_Declaration => 754,
+ Iir_Kind_Nature_Element_Declaration => 761,
+ Iir_Kind_Non_Object_Alias_Declaration => 769,
+ Iir_Kind_Psl_Declaration => 777,
+ Iir_Kind_Psl_Endpoint_Declaration => 791,
+ Iir_Kind_Enumeration_Literal => 802,
+ Iir_Kind_Function_Declaration => 827,
+ Iir_Kind_Procedure_Declaration => 851,
+ Iir_Kind_Function_Body => 861,
+ Iir_Kind_Procedure_Body => 872,
+ Iir_Kind_Function_Instantiation_Declaration => 883,
+ Iir_Kind_Procedure_Instantiation_Declaration => 893,
+ Iir_Kind_Terminal_Declaration => 902,
+ Iir_Kind_Object_Alias_Declaration => 914,
+ Iir_Kind_Free_Quantity_Declaration => 926,
+ Iir_Kind_Spectrum_Quantity_Declaration => 939,
+ Iir_Kind_Noise_Quantity_Declaration => 951,
+ Iir_Kind_Across_Quantity_Declaration => 967,
+ Iir_Kind_Through_Quantity_Declaration => 983,
+ Iir_Kind_File_Declaration => 998,
+ Iir_Kind_Guard_Signal_Declaration => 1012,
+ Iir_Kind_Signal_Declaration => 1029,
+ Iir_Kind_Variable_Declaration => 1042,
+ Iir_Kind_Constant_Declaration => 1056,
+ Iir_Kind_Iterator_Declaration => 1068,
+ Iir_Kind_Interface_Constant_Declaration => 1085,
+ Iir_Kind_Interface_Variable_Declaration => 1101,
+ Iir_Kind_Interface_Signal_Declaration => 1122,
+ Iir_Kind_Interface_File_Declaration => 1138,
+ Iir_Kind_Interface_Quantity_Declaration => 1154,
+ Iir_Kind_Interface_Terminal_Declaration => 1166,
+ Iir_Kind_Interface_Type_Declaration => 1177,
+ Iir_Kind_Interface_Package_Declaration => 1190,
+ Iir_Kind_Interface_Function_Declaration => 1208,
+ Iir_Kind_Interface_Procedure_Declaration => 1222,
+ Iir_Kind_Anonymous_Signal_Declaration => 1231,
+ Iir_Kind_Signal_Attribute_Declaration => 1234,
+ Iir_Kind_Identity_Operator => 1238,
+ Iir_Kind_Negation_Operator => 1242,
+ Iir_Kind_Absolute_Operator => 1246,
+ Iir_Kind_Not_Operator => 1250,
+ Iir_Kind_Implicit_Condition_Operator => 1254,
+ Iir_Kind_Condition_Operator => 1258,
+ Iir_Kind_Reduction_And_Operator => 1262,
+ Iir_Kind_Reduction_Or_Operator => 1266,
+ Iir_Kind_Reduction_Nand_Operator => 1270,
+ Iir_Kind_Reduction_Nor_Operator => 1274,
+ Iir_Kind_Reduction_Xor_Operator => 1278,
+ Iir_Kind_Reduction_Xnor_Operator => 1282,
+ Iir_Kind_And_Operator => 1287,
+ Iir_Kind_Or_Operator => 1292,
+ Iir_Kind_Nand_Operator => 1297,
+ Iir_Kind_Nor_Operator => 1302,
+ Iir_Kind_Xor_Operator => 1307,
+ Iir_Kind_Xnor_Operator => 1312,
+ Iir_Kind_Equality_Operator => 1317,
+ Iir_Kind_Inequality_Operator => 1322,
+ Iir_Kind_Less_Than_Operator => 1327,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1332,
+ Iir_Kind_Greater_Than_Operator => 1337,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1342,
+ Iir_Kind_Match_Equality_Operator => 1347,
+ Iir_Kind_Match_Inequality_Operator => 1352,
+ Iir_Kind_Match_Less_Than_Operator => 1357,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1362,
+ Iir_Kind_Match_Greater_Than_Operator => 1367,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1372,
+ Iir_Kind_Sll_Operator => 1377,
+ Iir_Kind_Sla_Operator => 1382,
+ Iir_Kind_Srl_Operator => 1387,
+ Iir_Kind_Sra_Operator => 1392,
+ Iir_Kind_Rol_Operator => 1397,
+ Iir_Kind_Ror_Operator => 1402,
+ Iir_Kind_Addition_Operator => 1407,
+ Iir_Kind_Substraction_Operator => 1412,
+ Iir_Kind_Concatenation_Operator => 1417,
+ Iir_Kind_Multiplication_Operator => 1422,
+ Iir_Kind_Division_Operator => 1427,
+ Iir_Kind_Modulus_Operator => 1432,
+ Iir_Kind_Remainder_Operator => 1437,
+ Iir_Kind_Exponentiation_Operator => 1442,
+ Iir_Kind_Function_Call => 1450,
+ Iir_Kind_Aggregate => 1457,
+ Iir_Kind_Parenthesis_Expression => 1460,
+ Iir_Kind_Qualified_Expression => 1464,
+ Iir_Kind_Type_Conversion => 1469,
+ Iir_Kind_Allocator_By_Expression => 1474,
+ Iir_Kind_Allocator_By_Subtype => 1480,
+ Iir_Kind_Selected_Element => 1488,
+ Iir_Kind_Dereference => 1493,
+ Iir_Kind_Implicit_Dereference => 1498,
+ Iir_Kind_Slice_Name => 1505,
+ Iir_Kind_Indexed_Name => 1511,
+ Iir_Kind_Psl_Prev => 1517,
+ Iir_Kind_Psl_Stable => 1522,
+ Iir_Kind_Psl_Rose => 1527,
+ Iir_Kind_Psl_Fell => 1532,
+ Iir_Kind_Psl_Onehot => 1535,
+ Iir_Kind_Psl_Onehot0 => 1538,
+ Iir_Kind_Psl_Expression => 1540,
+ Iir_Kind_Sensitized_Process_Statement => 1561,
+ Iir_Kind_Process_Statement => 1581,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1594,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1607,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1621,
+ Iir_Kind_Concurrent_Assertion_Statement => 1629,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1636,
+ Iir_Kind_Concurrent_Break_Statement => 1644,
+ Iir_Kind_Psl_Assert_Directive => 1657,
+ Iir_Kind_Psl_Assume_Directive => 1668,
+ Iir_Kind_Psl_Cover_Directive => 1680,
+ Iir_Kind_Psl_Restrict_Directive => 1691,
+ Iir_Kind_Block_Statement => 1705,
+ Iir_Kind_If_Generate_Statement => 1716,
+ Iir_Kind_Case_Generate_Statement => 1725,
+ Iir_Kind_For_Generate_Statement => 1734,
+ Iir_Kind_Component_Instantiation_Statement => 1745,
+ Iir_Kind_Psl_Default_Clock => 1748,
+ Iir_Kind_Generate_Statement_Body => 1759,
+ Iir_Kind_If_Generate_Else_Clause => 1765,
+ Iir_Kind_Simple_Simultaneous_Statement => 1772,
+ Iir_Kind_Simultaneous_Null_Statement => 1776,
+ Iir_Kind_Simultaneous_Procedural_Statement => 1787,
+ Iir_Kind_Simultaneous_Case_Statement => 1796,
+ Iir_Kind_Simultaneous_If_Statement => 1805,
+ Iir_Kind_Simultaneous_Elsif => 1811,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1822,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1833,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1845,
+ Iir_Kind_Signal_Force_Assignment_Statement => 1855,
+ Iir_Kind_Signal_Release_Assignment_Statement => 1864,
+ Iir_Kind_Null_Statement => 1868,
+ Iir_Kind_Assertion_Statement => 1875,
+ Iir_Kind_Report_Statement => 1881,
+ Iir_Kind_Wait_Statement => 1889,
+ Iir_Kind_Variable_Assignment_Statement => 1896,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1903,
+ Iir_Kind_Return_Statement => 1909,
+ Iir_Kind_For_Loop_Statement => 1920,
+ Iir_Kind_While_Loop_Statement => 1931,
+ Iir_Kind_Next_Statement => 1938,
+ Iir_Kind_Exit_Statement => 1945,
+ Iir_Kind_Case_Statement => 1953,
+ Iir_Kind_Procedure_Call_Statement => 1959,
+ Iir_Kind_Break_Statement => 1966,
+ Iir_Kind_If_Statement => 1976,
+ Iir_Kind_Elsif => 1982,
+ Iir_Kind_Character_Literal => 1989,
+ Iir_Kind_Simple_Name => 1996,
+ Iir_Kind_Selected_Name => 2004,
+ Iir_Kind_Operator_Symbol => 2009,
+ Iir_Kind_Reference_Name => 2014,
+ Iir_Kind_External_Constant_Name => 2023,
+ Iir_Kind_External_Signal_Name => 2032,
+ Iir_Kind_External_Variable_Name => 2042,
+ Iir_Kind_Selected_By_All_Name => 2048,
+ Iir_Kind_Parenthesis_Name => 2053,
+ Iir_Kind_Package_Pathname => 2057,
+ Iir_Kind_Absolute_Pathname => 2058,
+ Iir_Kind_Relative_Pathname => 2059,
+ Iir_Kind_Pathname_Element => 2064,
+ Iir_Kind_Base_Attribute => 2066,
+ Iir_Kind_Subtype_Attribute => 2071,
+ Iir_Kind_Element_Attribute => 2076,
+ Iir_Kind_Across_Attribute => 2081,
+ Iir_Kind_Through_Attribute => 2086,
+ Iir_Kind_Nature_Reference_Attribute => 2090,
+ Iir_Kind_Left_Type_Attribute => 2095,
+ Iir_Kind_Right_Type_Attribute => 2100,
+ Iir_Kind_High_Type_Attribute => 2105,
+ Iir_Kind_Low_Type_Attribute => 2110,
+ Iir_Kind_Ascending_Type_Attribute => 2115,
+ Iir_Kind_Image_Attribute => 2121,
+ Iir_Kind_Value_Attribute => 2127,
+ Iir_Kind_Pos_Attribute => 2133,
+ Iir_Kind_Val_Attribute => 2139,
+ Iir_Kind_Succ_Attribute => 2145,
+ Iir_Kind_Pred_Attribute => 2151,
+ Iir_Kind_Leftof_Attribute => 2157,
+ Iir_Kind_Rightof_Attribute => 2163,
+ Iir_Kind_Signal_Slew_Attribute => 2171,
+ Iir_Kind_Quantity_Slew_Attribute => 2179,
+ Iir_Kind_Ramp_Attribute => 2187,
+ Iir_Kind_Zoh_Attribute => 2195,
+ Iir_Kind_Ltf_Attribute => 2203,
+ Iir_Kind_Ztf_Attribute => 2213,
+ Iir_Kind_Dot_Attribute => 2220,
+ Iir_Kind_Integ_Attribute => 2227,
+ Iir_Kind_Above_Attribute => 2235,
+ Iir_Kind_Quantity_Delayed_Attribute => 2243,
+ Iir_Kind_Delayed_Attribute => 2252,
+ Iir_Kind_Stable_Attribute => 2261,
+ Iir_Kind_Quiet_Attribute => 2270,
+ Iir_Kind_Transaction_Attribute => 2279,
+ Iir_Kind_Event_Attribute => 2283,
+ Iir_Kind_Active_Attribute => 2287,
+ Iir_Kind_Last_Event_Attribute => 2291,
+ Iir_Kind_Last_Active_Attribute => 2295,
+ Iir_Kind_Last_Value_Attribute => 2299,
+ Iir_Kind_Driving_Attribute => 2303,
+ Iir_Kind_Driving_Value_Attribute => 2307,
+ Iir_Kind_Behavior_Attribute => 2307,
+ Iir_Kind_Structure_Attribute => 2307,
+ Iir_Kind_Simple_Name_Attribute => 2314,
+ Iir_Kind_Instance_Name_Attribute => 2319,
+ Iir_Kind_Path_Name_Attribute => 2324,
+ Iir_Kind_Left_Array_Attribute => 2331,
+ Iir_Kind_Right_Array_Attribute => 2338,
+ Iir_Kind_High_Array_Attribute => 2345,
+ Iir_Kind_Low_Array_Attribute => 2352,
+ Iir_Kind_Length_Array_Attribute => 2359,
+ Iir_Kind_Ascending_Array_Attribute => 2366,
+ Iir_Kind_Range_Array_Attribute => 2373,
+ Iir_Kind_Reverse_Range_Array_Attribute => 2380,
+ Iir_Kind_Attribute_Name => 2389
);
function Get_Fields_First (K : Iir_Kind) return Fields_Index is
@@ -8061,6 +8073,7 @@ package body Vhdl.Nodes_Meta is
begin
case K is
when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
@@ -8077,6 +8090,7 @@ package body Vhdl.Nodes_Meta is
begin
case K is
when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_Package
| Iir_Kind_Association_Element_Type
| Iir_Kind_Association_Element_Subprogram
@@ -8089,18 +8103,31 @@ package body Vhdl.Nodes_Meta is
function Has_Actual_Conversion (K : Iir_Kind) return Boolean is
begin
- return K = Iir_Kind_Association_Element_By_Expression;
+ case K is
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
+ return True;
+ when others =>
+ return False;
+ end case;
end Has_Actual_Conversion;
function Has_Formal_Conversion (K : Iir_Kind) return Boolean is
begin
- return K = Iir_Kind_Association_Element_By_Expression;
+ case K is
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
+ return True;
+ when others =>
+ return False;
+ end case;
end Has_Formal_Conversion;
function Has_Whole_Association_Flag (K : Iir_Kind) return Boolean is
begin
case K is
when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
@@ -8117,6 +8144,7 @@ package body Vhdl.Nodes_Meta is
begin
case K is
when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
@@ -8472,6 +8500,7 @@ package body Vhdl.Nodes_Meta is
| Iir_Kind_Conditional_Waveform
| Iir_Kind_Conditional_Expression
| Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
@@ -11636,6 +11665,7 @@ package body Vhdl.Nodes_Meta is
begin
case K is
when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
diff --git a/src/vhdl/vhdl-prints.adb b/src/vhdl/vhdl-prints.adb
index 35a6f4958..c0abf532e 100644
--- a/src/vhdl/vhdl-prints.adb
+++ b/src/vhdl/vhdl-prints.adb
@@ -3316,7 +3316,7 @@ package body Vhdl.Prints is
end if;
-- Formal part.
- if Get_Kind (El) = Iir_Kind_Association_Element_By_Expression then
+ if Get_Kind (El) in Iir_Kinds_Association_Element_By_Actual then
Conv := Get_Formal_Conversion (El);
if Conv /= Null_Iir then
Disp_Conversion (Ctxt, Conv);
@@ -3342,7 +3342,8 @@ package body Vhdl.Prints is
| Iir_Kind_Association_Element_Subprogram
| Iir_Kind_Association_Element_Terminal =>
Print (Ctxt, Get_Actual (El));
- when Iir_Kind_Association_Element_By_Expression =>
+ when Iir_Kind_Association_Element_By_Expression
+ | Iir_Kind_Association_Element_By_Name =>
Conv := Get_Actual_Conversion (El);
if Conv /= Null_Iir then
Disp_Conversion (Ctxt, Conv);
diff --git a/src/vhdl/vhdl-sem.adb b/src/vhdl/vhdl-sem.adb
index 06b6fbced..142a7706b 100644
--- a/src/vhdl/vhdl-sem.adb
+++ b/src/vhdl/vhdl-sem.adb
@@ -37,6 +37,7 @@ with Vhdl.Sem_Utils;
with Vhdl.Sem_Stmts; use Vhdl.Sem_Stmts;
with Vhdl.Nodes_Utils;
with Vhdl.Xrefs; use Vhdl.Xrefs;
+with Vhdl.Elocations;
package body Vhdl.Sem is
-- Forward declarations.
@@ -528,87 +529,108 @@ package body Vhdl.Sem is
return Res;
end Sem_Insert_Anonymous_Signal;
- procedure Sem_Signal_Port_Association
- (Assoc : Iir; Formal : Iir; Formal_Base : Iir)
+ function Sem_Signal_Port_Association
+ (Assoc : Iir; Formal : Iir; Formal_Base : Iir) return Iir
is
Actual : Iir;
+ N_Assoc : Iir;
Prefix : Iir;
Object : Iir;
begin
- if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression then
- Actual := Get_Actual (Assoc);
- -- There has been an error, exit from the loop.
- if Actual = Null_Iir then
- return;
+ Actual := Get_Actual (Assoc);
+ -- There has been an error, return now.
+ if Actual = Null_Iir then
+ return Assoc;
+ end if;
+ Object := Name_To_Object (Actual);
+
+ if Is_Valid (Object) and then Is_Signal_Object (Object) then
+ -- Port or signal.
+
+ -- Mutate to By_Name.
+ N_Assoc := Create_Iir (Iir_Kind_Association_Element_By_Name);
+ Location_Copy (N_Assoc, Assoc);
+ Set_Formal (N_Assoc, Get_Formal (Assoc));
+ Set_Chain (N_Assoc, Get_Chain (Assoc));
+ Set_Actual (N_Assoc, Actual);
+ Set_Actual_Conversion (N_Assoc, Get_Actual_Conversion (Assoc));
+ Set_Formal_Conversion (N_Assoc, Get_Formal_Conversion (Assoc));
+ Set_Whole_Association_Flag
+ (N_Assoc, Get_Whole_Association_Flag (Assoc));
+ pragma Assert (not Get_In_Formal_Flag (Assoc));
+ if Flag_Elocations then
+ declare
+ use Vhdl.Elocations;
+ begin
+ Create_Elocations (N_Assoc);
+ Set_Arrow_Location (N_Assoc, Get_Arrow_Location (Assoc));
+ end;
end if;
- Object := Name_To_Object (Actual);
- if Is_Valid (Object) and then Is_Signal_Object (Object) then
- -- Port or signal.
- Set_Collapse_Signal_Flag
- (Assoc, Can_Collapse_Signals (Assoc, Formal));
- if Get_Name_Staticness (Object) < Globally then
- Error_Msg_Sem (+Actual, "actual must be a static name");
- end if;
- Check_Port_Association_Bounds_Restrictions
- (Formal, Actual, Assoc);
- Prefix := Get_Object_Prefix (Object);
- case Get_Kind (Prefix) is
- when Iir_Kind_Interface_Signal_Declaration =>
- declare
- P : Boolean;
- pragma Unreferenced (P);
- begin
- P := Check_Port_Association_Mode_Restrictions
- (Formal_Base, Prefix, Assoc);
- end;
- when Iir_Kind_Signal_Declaration =>
- Set_Use_Flag (Prefix, True);
- when others =>
- -- FIXME: attributes ?
- null;
- end case;
- else
- -- Expression.
- Set_Collapse_Signal_Flag (Assoc, False);
-
- pragma Assert (Is_Null (Get_Actual_Conversion (Assoc)));
- if Flags.Vhdl_Std >= Vhdl_93 then
- -- LRM93 1.1.1.2 Ports
- -- Moreover, the ports of a block may be associated
- -- with an expression, in order to provide these ports
- -- with constant driving values; such ports must be
- -- of mode in.
- if Get_Mode (Formal_Base) /= Iir_In_Mode then
- Error_Msg_Sem
- (+Assoc, "only 'in' ports may be associated with "
- & "expression");
- end if;
+ Free_Iir (Assoc);
- -- Is it possible to have a globally static name that is
- -- not readable ?
- Check_Read (Actual);
-
- -- LRM93 1.1.1.2 Ports
- -- The actual, if an expression, must be a globally
- -- static expression.
- if Get_Expr_Staticness (Actual) < Globally then
- if Flags.Vhdl_Std >= Vhdl_08 then
- -- LRM08 6.5.6.3 Port clauses
- Actual := Sem_Insert_Anonymous_Signal (Formal, Actual);
- Set_Actual (Assoc, Actual);
- Set_Collapse_Signal_Flag (Assoc, True);
- else
- Error_Msg_Sem
- (+Actual,
- "actual expression must be globally static");
- end if;
- end if;
- else
+ Set_Collapse_Signal_Flag
+ (N_Assoc, Can_Collapse_Signals (N_Assoc, Formal));
+ if Get_Name_Staticness (Object) < Globally then
+ Error_Msg_Sem (+Actual, "actual must be a static name");
+ end if;
+ Check_Port_Association_Bounds_Restrictions
+ (Formal, Actual, N_Assoc);
+ Prefix := Get_Object_Prefix (Object);
+ case Get_Kind (Prefix) is
+ when Iir_Kind_Interface_Signal_Declaration =>
+ declare
+ P : Boolean;
+ pragma Unreferenced (P);
+ begin
+ P := Check_Port_Association_Mode_Restrictions
+ (Formal_Base, Prefix, N_Assoc);
+ end;
+ when Iir_Kind_Signal_Declaration =>
+ Set_Use_Flag (Prefix, True);
+ when others =>
+ -- FIXME: attributes ?
+ null;
+ end case;
+ return N_Assoc;
+ else
+ -- Expression.
+ Set_Collapse_Signal_Flag (Assoc, False);
+
+ pragma Assert (Is_Null (Get_Actual_Conversion (Assoc)));
+ if Flags.Vhdl_Std >= Vhdl_93 then
+ -- LRM93 1.1.1.2 Ports
+ -- Moreover, the ports of a block may be associated
+ -- with an expression, in order to provide these ports
+ -- with constant driving values; such ports must be
+ -- of mode in.
+ if Get_Mode (Formal_Base) /= Iir_In_Mode then
Error_Msg_Sem
- (+Assoc,
- "cannot associate ports with expression in vhdl87");
+ (+Assoc, "only 'in' ports may be associated with expression");
+ end if;
+
+ -- Is it possible to have a globally static name that is
+ -- not readable ?
+ Check_Read (Actual);
+
+ -- LRM93 1.1.1.2 Ports
+ -- The actual, if an expression, must be a globally
+ -- static expression.
+ if Get_Expr_Staticness (Actual) < Globally then
+ if Flags.Vhdl_Std >= Vhdl_08 then
+ -- LRM08 6.5.6.3 Port clauses
+ Actual := Sem_Insert_Anonymous_Signal (Formal, Actual);
+ Set_Actual (Assoc, Actual);
+ Set_Collapse_Signal_Flag (Assoc, True);
+ else
+ Error_Msg_Sem
+ (+Actual, "actual expression must be globally static");
+ end if;
end if;
+ else
+ Error_Msg_Sem
+ (+Assoc, "cannot associate ports with expression in vhdl87");
end if;
+ return Assoc;
end if;
end Sem_Signal_Port_Association;
@@ -618,6 +640,7 @@ package body Vhdl.Sem is
(Inter_Parent : Iir; Assoc_Parent : Iir)
is
Assoc : Iir;
+ Prev_Assoc, N_Assoc : Iir;
Match : Compatibility_Level;
Assoc_Chain : Iir;
Inter_Chain : Iir;
@@ -684,17 +707,33 @@ package body Vhdl.Sem is
-- The actual, if an expression, must be a globally static expression.
Assoc := Assoc_Chain;
Inter := Get_Port_Chain (Inter_Parent);
+ Prev_Assoc := Null_Iir;
while Assoc /= Null_Iir loop
Formal := Get_Association_Formal (Assoc, Inter);
Formal_Base := Get_Interface_Of_Formal (Formal);
case Get_Kind (Formal_Base) is
when Iir_Kind_Interface_Signal_Declaration =>
- Sem_Signal_Port_Association (Assoc, Formal, Formal_Base);
+ if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression
+ then
+ N_Assoc := Sem_Signal_Port_Association
+ (Assoc, Formal, Formal_Base);
+
+ -- Reinsert the new association (in case of mutation).
+ if N_Assoc /= Assoc then
+ if Prev_Assoc /= Null_Iir then
+ Set_Chain (Prev_Assoc, N_Assoc);
+ else
+ Set_Port_Map_Aspect_Chain (Assoc_Parent, N_Assoc);
+ end if;
+ Assoc := N_Assoc;
+ end if;
+ end if;
when others =>
null;
end case;
+ Prev_Assoc := Assoc;
Next_Association_Interface (Assoc, Inter);
end loop;
end Sem_Port_Association_Chain;