aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2018-09-20 06:38:53 +0200
committerTristan Gingold <tgingold@free.fr>2018-09-20 06:38:53 +0200
commit0594a0c145e8c23500be3be298f70d6059cdb0d6 (patch)
tree823b398b0195455aef20fce0f3b520cc7ef9a27c
parent1f4e4525f08588cab5e1ecc6357dfe2ebc333ae2 (diff)
downloadghdl-0594a0c145e8c23500be3be298f70d6059cdb0d6.tar.gz
ghdl-0594a0c145e8c23500be3be298f70d6059cdb0d6.tar.bz2
ghdl-0594a0c145e8c23500be3be298f70d6059cdb0d6.zip
Add Maybe_Ref_Chain (WIP).
-rw-r--r--src/ghdldrv/ghdlxml.adb6
-rw-r--r--src/vhdl/disp_tree.adb6
-rw-r--r--src/vhdl/iirs.ads10
-rw-r--r--src/vhdl/nodes_gc.adb6
-rw-r--r--src/vhdl/nodes_meta.adb504
-rw-r--r--src/vhdl/nodes_meta.ads1
-rw-r--r--src/vhdl/sem_inst.adb14
-rw-r--r--src/vhdl/translate/trans-chap2.adb4
-rw-r--r--src/vhdl/translate/trans-chap9.adb4
9 files changed, 305 insertions, 250 deletions
diff --git a/src/ghdldrv/ghdlxml.adb b/src/ghdldrv/ghdlxml.adb
index 995706351..49a997670 100644
--- a/src/ghdldrv/ghdlxml.adb
+++ b/src/ghdldrv/ghdlxml.adb
@@ -439,6 +439,12 @@ package body Ghdlxml is
end if;
when Attr_Chain =>
Disp_Iir_Chain (Img, V);
+ when Attr_Maybe_Ref_Chain =>
+ if Get_Is_Ref (N) then
+ Disp_Iir_Ref (Img, V);
+ else
+ Disp_Iir_Chain (Img, V);
+ end if;
when Attr_Chain_Next =>
null;
when Attr_Of_Ref | Attr_Of_Maybe_Ref =>
diff --git a/src/vhdl/disp_tree.adb b/src/vhdl/disp_tree.adb
index 718cf6707..040512c3c 100644
--- a/src/vhdl/disp_tree.adb
+++ b/src/vhdl/disp_tree.adb
@@ -462,6 +462,12 @@ package body Disp_Tree is
Ndepth := Depth - 1;
end if;
Disp_Iir (Get_Iir (N, F), Sub_Indent, Ndepth);
+ when Attr_Maybe_Ref_Chain =>
+ if Get_Is_Ref (N) then
+ Disp_Iir (Get_Iir (N, F), Sub_Indent, 0);
+ else
+ Disp_Chain (Get_Iir (N, F), Sub_Indent, Depth - 1);
+ end if;
when Attr_Chain =>
Disp_Chain (Get_Iir (N, F), Sub_Indent, Depth - 1);
when Attr_Chain_Next =>
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index 912d4a006..b2cfeb5fa 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -572,6 +572,8 @@ package Iirs is
-- Only for Iir_Kind_Choice_By_Range:
-- Only for Iir_Kind_Choice_By_Expression:
-- Get/Set_Choice_Staticness (State1)
+ --
+ -- Get/Set_Is_Ref (Flag12)
-- Iir_Kind_Entity_Aspect_Entity (Short)
--
@@ -6140,17 +6142,19 @@ package Iirs is
procedure Set_Choice_Position (Choice : Iir; Pos : Int32);
-- Node associated with a choice.
- -- Field: Field3
+ -- Field: Field3 Maybe_Ref
function Get_Associated_Expr (Target : Iir) return Iir;
procedure Set_Associated_Expr (Target : Iir; Associated : Iir);
-- Node associated with a choice.
- -- Field: Field3
+ -- Field: Field3 Maybe_Ref
function Get_Associated_Block (Target : Iir) return Iir;
procedure Set_Associated_Block (Target : Iir; Associated : Iir);
-- Chain associated with a choice.
- -- Field: Field4 Chain
+ -- A Maybe_Ref_Chain is a reference to a chain if Get_Is_Ref is True,
+ -- otherwise this is a normal chain.
+ -- Field: Field4 Maybe_Ref_Chain
function Get_Associated_Chain (Target : Iir) return Iir;
procedure Set_Associated_Chain (Target : Iir; Associated : Iir);
diff --git a/src/vhdl/nodes_gc.adb b/src/vhdl/nodes_gc.adb
index b4c11149f..f3c9299b9 100644
--- a/src/vhdl/nodes_gc.adb
+++ b/src/vhdl/nodes_gc.adb
@@ -253,6 +253,12 @@ package body Nodes_GC is
end if;
when Attr_Chain =>
Mark_Chain (Get_Iir (N, F));
+ when Attr_Maybe_Ref_Chain =>
+ if Get_Is_Ref (N) then
+ Mark_Iir_Ref_Field (N, F);
+ else
+ Mark_Chain (Get_Iir (N, F));
+ end if;
when Attr_Of_Ref | Attr_Of_Maybe_Ref =>
raise Internal_Error;
end case;
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb
index 69e1a4ef6..d2b199dde 100644
--- a/src/vhdl/nodes_meta.adb
+++ b/src/vhdl/nodes_meta.adb
@@ -1675,11 +1675,11 @@ package body Nodes_Meta is
when Field_Choice_Position =>
return Attr_None;
when Field_Associated_Expr =>
- return Attr_None;
+ return Attr_Maybe_Ref;
when Field_Associated_Block =>
- return Attr_None;
+ return Attr_Maybe_Ref;
when Field_Associated_Chain =>
- return Attr_Chain;
+ return Attr_Maybe_Ref_Chain;
when Field_Choice_Name =>
return Attr_None;
when Field_Choice_Expression =>
@@ -2389,6 +2389,7 @@ package body Nodes_Meta is
-- Iir_Kind_Choice_By_Range
Field_Choice_Position,
Field_Same_Alternative_Flag,
+ Field_Is_Ref,
Field_Element_Type_Flag,
Field_Choice_Staticness,
Field_Parent,
@@ -2399,6 +2400,7 @@ package body Nodes_Meta is
-- Iir_Kind_Choice_By_Expression
Field_Choice_Position,
Field_Same_Alternative_Flag,
+ Field_Is_Ref,
Field_Element_Type_Flag,
Field_Choice_Staticness,
Field_Parent,
@@ -2409,6 +2411,7 @@ package body Nodes_Meta is
-- Iir_Kind_Choice_By_Others
Field_Choice_Position,
Field_Same_Alternative_Flag,
+ Field_Is_Ref,
Field_Element_Type_Flag,
Field_Parent,
Field_Chain,
@@ -2417,6 +2420,7 @@ package body Nodes_Meta is
-- Iir_Kind_Choice_By_None
Field_Choice_Position,
Field_Same_Alternative_Flag,
+ Field_Is_Ref,
Field_Element_Type_Flag,
Field_Parent,
Field_Chain,
@@ -2425,6 +2429,7 @@ package body Nodes_Meta is
-- Iir_Kind_Choice_By_Name
Field_Choice_Position,
Field_Same_Alternative_Flag,
+ Field_Is_Ref,
Field_Element_Type_Flag,
Field_Parent,
Field_Chain,
@@ -4442,250 +4447,250 @@ package body Nodes_Meta is
Iir_Kind_Association_Element_Package => 127,
Iir_Kind_Association_Element_Type => 135,
Iir_Kind_Association_Element_Subprogram => 141,
- Iir_Kind_Choice_By_Range => 150,
- Iir_Kind_Choice_By_Expression => 159,
- Iir_Kind_Choice_By_Others => 166,
- Iir_Kind_Choice_By_None => 173,
- Iir_Kind_Choice_By_Name => 181,
- Iir_Kind_Entity_Aspect_Entity => 183,
- Iir_Kind_Entity_Aspect_Configuration => 184,
- Iir_Kind_Entity_Aspect_Open => 184,
- Iir_Kind_Block_Configuration => 190,
- Iir_Kind_Block_Header => 194,
- Iir_Kind_Component_Configuration => 201,
- Iir_Kind_Binding_Indication => 205,
- Iir_Kind_Entity_Class => 207,
- Iir_Kind_Attribute_Value => 215,
- Iir_Kind_Signature => 218,
- Iir_Kind_Aggregate_Info => 225,
- Iir_Kind_Procedure_Call => 229,
- Iir_Kind_Record_Element_Constraint => 236,
- Iir_Kind_Array_Element_Resolution => 238,
- Iir_Kind_Record_Resolution => 239,
- Iir_Kind_Record_Element_Resolution => 242,
- Iir_Kind_Attribute_Specification => 250,
- Iir_Kind_Disconnection_Specification => 256,
- Iir_Kind_Configuration_Specification => 262,
- Iir_Kind_Access_Type_Definition => 270,
- Iir_Kind_Incomplete_Type_Definition => 278,
- Iir_Kind_Interface_Type_Definition => 285,
- Iir_Kind_File_Type_Definition => 292,
- Iir_Kind_Protected_Type_Declaration => 301,
- Iir_Kind_Record_Type_Definition => 311,
- Iir_Kind_Array_Type_Definition => 323,
- Iir_Kind_Array_Subtype_Definition => 338,
- Iir_Kind_Record_Subtype_Definition => 349,
- Iir_Kind_Access_Subtype_Definition => 357,
- Iir_Kind_Physical_Subtype_Definition => 367,
- Iir_Kind_Floating_Subtype_Definition => 378,
- Iir_Kind_Integer_Subtype_Definition => 388,
- Iir_Kind_Enumeration_Subtype_Definition => 398,
- Iir_Kind_Enumeration_Type_Definition => 409,
- Iir_Kind_Integer_Type_Definition => 417,
- Iir_Kind_Floating_Type_Definition => 425,
- Iir_Kind_Physical_Type_Definition => 436,
- Iir_Kind_Range_Expression => 444,
- Iir_Kind_Protected_Type_Body => 451,
- Iir_Kind_Wildcard_Type_Definition => 456,
- Iir_Kind_Subtype_Definition => 461,
- Iir_Kind_Scalar_Nature_Definition => 465,
- Iir_Kind_Overload_List => 466,
- Iir_Kind_Type_Declaration => 473,
- Iir_Kind_Anonymous_Type_Declaration => 479,
- Iir_Kind_Subtype_Declaration => 486,
- Iir_Kind_Nature_Declaration => 492,
- Iir_Kind_Subnature_Declaration => 498,
- Iir_Kind_Entity_Declaration => 510,
- Iir_Kind_Configuration_Declaration => 519,
- Iir_Kind_Context_Declaration => 525,
- Iir_Kind_Package_Declaration => 539,
- Iir_Kind_Package_Instantiation_Declaration => 553,
- Iir_Kind_Package_Body => 561,
- Iir_Kind_Architecture_Body => 573,
- Iir_Kind_Package_Header => 575,
- Iir_Kind_Unit_Declaration => 584,
- Iir_Kind_Library_Declaration => 591,
- Iir_Kind_Component_Declaration => 601,
- Iir_Kind_Attribute_Declaration => 608,
- Iir_Kind_Group_Template_Declaration => 614,
- Iir_Kind_Group_Declaration => 621,
- Iir_Kind_Element_Declaration => 629,
- Iir_Kind_Non_Object_Alias_Declaration => 637,
- Iir_Kind_Psl_Declaration => 645,
- Iir_Kind_Psl_Endpoint_Declaration => 659,
- Iir_Kind_Terminal_Declaration => 665,
- Iir_Kind_Free_Quantity_Declaration => 674,
- Iir_Kind_Across_Quantity_Declaration => 686,
- Iir_Kind_Through_Quantity_Declaration => 698,
- Iir_Kind_Enumeration_Literal => 709,
- Iir_Kind_Function_Declaration => 734,
- Iir_Kind_Procedure_Declaration => 758,
- Iir_Kind_Function_Body => 768,
- Iir_Kind_Procedure_Body => 779,
- Iir_Kind_Object_Alias_Declaration => 790,
- Iir_Kind_File_Declaration => 804,
- Iir_Kind_Guard_Signal_Declaration => 817,
- Iir_Kind_Signal_Declaration => 834,
- Iir_Kind_Variable_Declaration => 847,
- Iir_Kind_Constant_Declaration => 861,
- Iir_Kind_Iterator_Declaration => 872,
- Iir_Kind_Interface_Constant_Declaration => 888,
- Iir_Kind_Interface_Variable_Declaration => 904,
- Iir_Kind_Interface_Signal_Declaration => 925,
- Iir_Kind_Interface_File_Declaration => 941,
- Iir_Kind_Interface_Type_Declaration => 951,
- Iir_Kind_Interface_Package_Declaration => 963,
- Iir_Kind_Interface_Function_Declaration => 980,
- Iir_Kind_Interface_Procedure_Declaration => 993,
- Iir_Kind_Signal_Attribute_Declaration => 996,
- Iir_Kind_Identity_Operator => 1000,
- Iir_Kind_Negation_Operator => 1004,
- Iir_Kind_Absolute_Operator => 1008,
- Iir_Kind_Not_Operator => 1012,
- Iir_Kind_Implicit_Condition_Operator => 1016,
- Iir_Kind_Condition_Operator => 1020,
- Iir_Kind_Reduction_And_Operator => 1024,
- Iir_Kind_Reduction_Or_Operator => 1028,
- Iir_Kind_Reduction_Nand_Operator => 1032,
- Iir_Kind_Reduction_Nor_Operator => 1036,
- Iir_Kind_Reduction_Xor_Operator => 1040,
- Iir_Kind_Reduction_Xnor_Operator => 1044,
- Iir_Kind_And_Operator => 1049,
- Iir_Kind_Or_Operator => 1054,
- Iir_Kind_Nand_Operator => 1059,
- Iir_Kind_Nor_Operator => 1064,
- Iir_Kind_Xor_Operator => 1069,
- Iir_Kind_Xnor_Operator => 1074,
- Iir_Kind_Equality_Operator => 1079,
- Iir_Kind_Inequality_Operator => 1084,
- Iir_Kind_Less_Than_Operator => 1089,
- Iir_Kind_Less_Than_Or_Equal_Operator => 1094,
- Iir_Kind_Greater_Than_Operator => 1099,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1104,
- Iir_Kind_Match_Equality_Operator => 1109,
- Iir_Kind_Match_Inequality_Operator => 1114,
- Iir_Kind_Match_Less_Than_Operator => 1119,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1124,
- Iir_Kind_Match_Greater_Than_Operator => 1129,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1134,
- Iir_Kind_Sll_Operator => 1139,
- Iir_Kind_Sla_Operator => 1144,
- Iir_Kind_Srl_Operator => 1149,
- Iir_Kind_Sra_Operator => 1154,
- Iir_Kind_Rol_Operator => 1159,
- Iir_Kind_Ror_Operator => 1164,
- Iir_Kind_Addition_Operator => 1169,
- Iir_Kind_Substraction_Operator => 1174,
- Iir_Kind_Concatenation_Operator => 1179,
- Iir_Kind_Multiplication_Operator => 1184,
- Iir_Kind_Division_Operator => 1189,
- Iir_Kind_Modulus_Operator => 1194,
- Iir_Kind_Remainder_Operator => 1199,
- Iir_Kind_Exponentiation_Operator => 1204,
- Iir_Kind_Function_Call => 1212,
- Iir_Kind_Aggregate => 1219,
- Iir_Kind_Parenthesis_Expression => 1222,
- Iir_Kind_Qualified_Expression => 1226,
- Iir_Kind_Type_Conversion => 1231,
- Iir_Kind_Allocator_By_Expression => 1235,
- Iir_Kind_Allocator_By_Subtype => 1240,
- Iir_Kind_Selected_Element => 1247,
- Iir_Kind_Dereference => 1252,
- Iir_Kind_Implicit_Dereference => 1257,
- Iir_Kind_Slice_Name => 1264,
- Iir_Kind_Indexed_Name => 1270,
- Iir_Kind_Psl_Expression => 1272,
- Iir_Kind_Sensitized_Process_Statement => 1293,
- Iir_Kind_Process_Statement => 1313,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1325,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1337,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1350,
- Iir_Kind_Concurrent_Assertion_Statement => 1358,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1365,
- Iir_Kind_Psl_Assert_Statement => 1378,
- Iir_Kind_Psl_Cover_Statement => 1391,
- Iir_Kind_Block_Statement => 1404,
- Iir_Kind_If_Generate_Statement => 1415,
- Iir_Kind_Case_Generate_Statement => 1424,
- Iir_Kind_For_Generate_Statement => 1433,
- Iir_Kind_Component_Instantiation_Statement => 1444,
- Iir_Kind_Psl_Default_Clock => 1448,
- Iir_Kind_Simple_Simultaneous_Statement => 1455,
- Iir_Kind_Generate_Statement_Body => 1466,
- Iir_Kind_If_Generate_Else_Clause => 1472,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1482,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1492,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1503,
- Iir_Kind_Null_Statement => 1507,
- Iir_Kind_Assertion_Statement => 1514,
- Iir_Kind_Report_Statement => 1520,
- Iir_Kind_Wait_Statement => 1528,
- Iir_Kind_Variable_Assignment_Statement => 1535,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1542,
- Iir_Kind_Return_Statement => 1548,
- Iir_Kind_For_Loop_Statement => 1557,
- Iir_Kind_While_Loop_Statement => 1566,
- Iir_Kind_Next_Statement => 1573,
- Iir_Kind_Exit_Statement => 1580,
- Iir_Kind_Case_Statement => 1588,
- Iir_Kind_Procedure_Call_Statement => 1594,
- Iir_Kind_If_Statement => 1604,
- Iir_Kind_Elsif => 1610,
- Iir_Kind_Character_Literal => 1618,
- Iir_Kind_Simple_Name => 1626,
- Iir_Kind_Selected_Name => 1635,
- Iir_Kind_Operator_Symbol => 1641,
- Iir_Kind_Reference_Name => 1644,
- Iir_Kind_External_Constant_Name => 1653,
- Iir_Kind_External_Signal_Name => 1662,
- Iir_Kind_External_Variable_Name => 1671,
- Iir_Kind_Selected_By_All_Name => 1677,
- Iir_Kind_Parenthesis_Name => 1682,
- Iir_Kind_Package_Pathname => 1686,
- Iir_Kind_Absolute_Pathname => 1687,
- Iir_Kind_Relative_Pathname => 1688,
- Iir_Kind_Pathname_Element => 1693,
- Iir_Kind_Base_Attribute => 1695,
- Iir_Kind_Subtype_Attribute => 1700,
- Iir_Kind_Element_Attribute => 1705,
- Iir_Kind_Left_Type_Attribute => 1710,
- Iir_Kind_Right_Type_Attribute => 1715,
- Iir_Kind_High_Type_Attribute => 1720,
- Iir_Kind_Low_Type_Attribute => 1725,
- Iir_Kind_Ascending_Type_Attribute => 1730,
- Iir_Kind_Image_Attribute => 1736,
- Iir_Kind_Value_Attribute => 1742,
- Iir_Kind_Pos_Attribute => 1748,
- Iir_Kind_Val_Attribute => 1754,
- Iir_Kind_Succ_Attribute => 1760,
- Iir_Kind_Pred_Attribute => 1766,
- Iir_Kind_Leftof_Attribute => 1772,
- Iir_Kind_Rightof_Attribute => 1778,
- Iir_Kind_Delayed_Attribute => 1787,
- Iir_Kind_Stable_Attribute => 1796,
- Iir_Kind_Quiet_Attribute => 1805,
- Iir_Kind_Transaction_Attribute => 1814,
- Iir_Kind_Event_Attribute => 1818,
- Iir_Kind_Active_Attribute => 1822,
- Iir_Kind_Last_Event_Attribute => 1826,
- Iir_Kind_Last_Active_Attribute => 1830,
- Iir_Kind_Last_Value_Attribute => 1834,
- Iir_Kind_Driving_Attribute => 1838,
- Iir_Kind_Driving_Value_Attribute => 1842,
- Iir_Kind_Behavior_Attribute => 1842,
- Iir_Kind_Structure_Attribute => 1842,
- Iir_Kind_Simple_Name_Attribute => 1849,
- Iir_Kind_Instance_Name_Attribute => 1854,
- Iir_Kind_Path_Name_Attribute => 1859,
- Iir_Kind_Left_Array_Attribute => 1866,
- Iir_Kind_Right_Array_Attribute => 1873,
- Iir_Kind_High_Array_Attribute => 1880,
- Iir_Kind_Low_Array_Attribute => 1887,
- Iir_Kind_Length_Array_Attribute => 1894,
- Iir_Kind_Ascending_Array_Attribute => 1901,
- Iir_Kind_Range_Array_Attribute => 1908,
- Iir_Kind_Reverse_Range_Array_Attribute => 1915,
- Iir_Kind_Attribute_Name => 1924
+ Iir_Kind_Choice_By_Range => 151,
+ Iir_Kind_Choice_By_Expression => 161,
+ Iir_Kind_Choice_By_Others => 169,
+ Iir_Kind_Choice_By_None => 177,
+ Iir_Kind_Choice_By_Name => 186,
+ Iir_Kind_Entity_Aspect_Entity => 188,
+ Iir_Kind_Entity_Aspect_Configuration => 189,
+ Iir_Kind_Entity_Aspect_Open => 189,
+ Iir_Kind_Block_Configuration => 195,
+ Iir_Kind_Block_Header => 199,
+ Iir_Kind_Component_Configuration => 206,
+ Iir_Kind_Binding_Indication => 210,
+ Iir_Kind_Entity_Class => 212,
+ Iir_Kind_Attribute_Value => 220,
+ Iir_Kind_Signature => 223,
+ Iir_Kind_Aggregate_Info => 230,
+ Iir_Kind_Procedure_Call => 234,
+ Iir_Kind_Record_Element_Constraint => 241,
+ Iir_Kind_Array_Element_Resolution => 243,
+ Iir_Kind_Record_Resolution => 244,
+ Iir_Kind_Record_Element_Resolution => 247,
+ Iir_Kind_Attribute_Specification => 255,
+ Iir_Kind_Disconnection_Specification => 261,
+ Iir_Kind_Configuration_Specification => 267,
+ Iir_Kind_Access_Type_Definition => 275,
+ Iir_Kind_Incomplete_Type_Definition => 283,
+ Iir_Kind_Interface_Type_Definition => 290,
+ Iir_Kind_File_Type_Definition => 297,
+ Iir_Kind_Protected_Type_Declaration => 306,
+ Iir_Kind_Record_Type_Definition => 316,
+ Iir_Kind_Array_Type_Definition => 328,
+ Iir_Kind_Array_Subtype_Definition => 343,
+ Iir_Kind_Record_Subtype_Definition => 354,
+ Iir_Kind_Access_Subtype_Definition => 362,
+ Iir_Kind_Physical_Subtype_Definition => 372,
+ Iir_Kind_Floating_Subtype_Definition => 383,
+ Iir_Kind_Integer_Subtype_Definition => 393,
+ Iir_Kind_Enumeration_Subtype_Definition => 403,
+ Iir_Kind_Enumeration_Type_Definition => 414,
+ Iir_Kind_Integer_Type_Definition => 422,
+ Iir_Kind_Floating_Type_Definition => 430,
+ Iir_Kind_Physical_Type_Definition => 441,
+ Iir_Kind_Range_Expression => 449,
+ Iir_Kind_Protected_Type_Body => 456,
+ Iir_Kind_Wildcard_Type_Definition => 461,
+ Iir_Kind_Subtype_Definition => 466,
+ Iir_Kind_Scalar_Nature_Definition => 470,
+ Iir_Kind_Overload_List => 471,
+ Iir_Kind_Type_Declaration => 478,
+ Iir_Kind_Anonymous_Type_Declaration => 484,
+ Iir_Kind_Subtype_Declaration => 491,
+ Iir_Kind_Nature_Declaration => 497,
+ Iir_Kind_Subnature_Declaration => 503,
+ Iir_Kind_Entity_Declaration => 515,
+ Iir_Kind_Configuration_Declaration => 524,
+ Iir_Kind_Context_Declaration => 530,
+ Iir_Kind_Package_Declaration => 544,
+ Iir_Kind_Package_Instantiation_Declaration => 558,
+ Iir_Kind_Package_Body => 566,
+ Iir_Kind_Architecture_Body => 578,
+ Iir_Kind_Package_Header => 580,
+ Iir_Kind_Unit_Declaration => 589,
+ Iir_Kind_Library_Declaration => 596,
+ Iir_Kind_Component_Declaration => 606,
+ Iir_Kind_Attribute_Declaration => 613,
+ Iir_Kind_Group_Template_Declaration => 619,
+ Iir_Kind_Group_Declaration => 626,
+ Iir_Kind_Element_Declaration => 634,
+ Iir_Kind_Non_Object_Alias_Declaration => 642,
+ Iir_Kind_Psl_Declaration => 650,
+ Iir_Kind_Psl_Endpoint_Declaration => 664,
+ Iir_Kind_Terminal_Declaration => 670,
+ Iir_Kind_Free_Quantity_Declaration => 679,
+ Iir_Kind_Across_Quantity_Declaration => 691,
+ Iir_Kind_Through_Quantity_Declaration => 703,
+ Iir_Kind_Enumeration_Literal => 714,
+ Iir_Kind_Function_Declaration => 739,
+ Iir_Kind_Procedure_Declaration => 763,
+ Iir_Kind_Function_Body => 773,
+ Iir_Kind_Procedure_Body => 784,
+ Iir_Kind_Object_Alias_Declaration => 795,
+ Iir_Kind_File_Declaration => 809,
+ Iir_Kind_Guard_Signal_Declaration => 822,
+ Iir_Kind_Signal_Declaration => 839,
+ Iir_Kind_Variable_Declaration => 852,
+ Iir_Kind_Constant_Declaration => 866,
+ Iir_Kind_Iterator_Declaration => 877,
+ Iir_Kind_Interface_Constant_Declaration => 893,
+ Iir_Kind_Interface_Variable_Declaration => 909,
+ Iir_Kind_Interface_Signal_Declaration => 930,
+ Iir_Kind_Interface_File_Declaration => 946,
+ Iir_Kind_Interface_Type_Declaration => 956,
+ Iir_Kind_Interface_Package_Declaration => 968,
+ Iir_Kind_Interface_Function_Declaration => 985,
+ Iir_Kind_Interface_Procedure_Declaration => 998,
+ Iir_Kind_Signal_Attribute_Declaration => 1001,
+ Iir_Kind_Identity_Operator => 1005,
+ Iir_Kind_Negation_Operator => 1009,
+ Iir_Kind_Absolute_Operator => 1013,
+ Iir_Kind_Not_Operator => 1017,
+ Iir_Kind_Implicit_Condition_Operator => 1021,
+ Iir_Kind_Condition_Operator => 1025,
+ Iir_Kind_Reduction_And_Operator => 1029,
+ Iir_Kind_Reduction_Or_Operator => 1033,
+ Iir_Kind_Reduction_Nand_Operator => 1037,
+ Iir_Kind_Reduction_Nor_Operator => 1041,
+ Iir_Kind_Reduction_Xor_Operator => 1045,
+ Iir_Kind_Reduction_Xnor_Operator => 1049,
+ Iir_Kind_And_Operator => 1054,
+ Iir_Kind_Or_Operator => 1059,
+ Iir_Kind_Nand_Operator => 1064,
+ Iir_Kind_Nor_Operator => 1069,
+ Iir_Kind_Xor_Operator => 1074,
+ Iir_Kind_Xnor_Operator => 1079,
+ Iir_Kind_Equality_Operator => 1084,
+ Iir_Kind_Inequality_Operator => 1089,
+ Iir_Kind_Less_Than_Operator => 1094,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1099,
+ Iir_Kind_Greater_Than_Operator => 1104,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1109,
+ Iir_Kind_Match_Equality_Operator => 1114,
+ Iir_Kind_Match_Inequality_Operator => 1119,
+ Iir_Kind_Match_Less_Than_Operator => 1124,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1129,
+ Iir_Kind_Match_Greater_Than_Operator => 1134,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1139,
+ Iir_Kind_Sll_Operator => 1144,
+ Iir_Kind_Sla_Operator => 1149,
+ Iir_Kind_Srl_Operator => 1154,
+ Iir_Kind_Sra_Operator => 1159,
+ Iir_Kind_Rol_Operator => 1164,
+ Iir_Kind_Ror_Operator => 1169,
+ Iir_Kind_Addition_Operator => 1174,
+ Iir_Kind_Substraction_Operator => 1179,
+ Iir_Kind_Concatenation_Operator => 1184,
+ Iir_Kind_Multiplication_Operator => 1189,
+ Iir_Kind_Division_Operator => 1194,
+ Iir_Kind_Modulus_Operator => 1199,
+ Iir_Kind_Remainder_Operator => 1204,
+ Iir_Kind_Exponentiation_Operator => 1209,
+ Iir_Kind_Function_Call => 1217,
+ Iir_Kind_Aggregate => 1224,
+ Iir_Kind_Parenthesis_Expression => 1227,
+ Iir_Kind_Qualified_Expression => 1231,
+ Iir_Kind_Type_Conversion => 1236,
+ Iir_Kind_Allocator_By_Expression => 1240,
+ Iir_Kind_Allocator_By_Subtype => 1245,
+ Iir_Kind_Selected_Element => 1252,
+ Iir_Kind_Dereference => 1257,
+ Iir_Kind_Implicit_Dereference => 1262,
+ Iir_Kind_Slice_Name => 1269,
+ Iir_Kind_Indexed_Name => 1275,
+ Iir_Kind_Psl_Expression => 1277,
+ Iir_Kind_Sensitized_Process_Statement => 1298,
+ Iir_Kind_Process_Statement => 1318,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1330,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1342,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1355,
+ Iir_Kind_Concurrent_Assertion_Statement => 1363,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1370,
+ Iir_Kind_Psl_Assert_Statement => 1383,
+ Iir_Kind_Psl_Cover_Statement => 1396,
+ Iir_Kind_Block_Statement => 1409,
+ Iir_Kind_If_Generate_Statement => 1420,
+ Iir_Kind_Case_Generate_Statement => 1429,
+ Iir_Kind_For_Generate_Statement => 1438,
+ Iir_Kind_Component_Instantiation_Statement => 1449,
+ Iir_Kind_Psl_Default_Clock => 1453,
+ Iir_Kind_Simple_Simultaneous_Statement => 1460,
+ Iir_Kind_Generate_Statement_Body => 1471,
+ Iir_Kind_If_Generate_Else_Clause => 1477,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1487,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1497,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1508,
+ Iir_Kind_Null_Statement => 1512,
+ Iir_Kind_Assertion_Statement => 1519,
+ Iir_Kind_Report_Statement => 1525,
+ Iir_Kind_Wait_Statement => 1533,
+ Iir_Kind_Variable_Assignment_Statement => 1540,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1547,
+ Iir_Kind_Return_Statement => 1553,
+ Iir_Kind_For_Loop_Statement => 1562,
+ Iir_Kind_While_Loop_Statement => 1571,
+ Iir_Kind_Next_Statement => 1578,
+ Iir_Kind_Exit_Statement => 1585,
+ Iir_Kind_Case_Statement => 1593,
+ Iir_Kind_Procedure_Call_Statement => 1599,
+ Iir_Kind_If_Statement => 1609,
+ Iir_Kind_Elsif => 1615,
+ Iir_Kind_Character_Literal => 1623,
+ Iir_Kind_Simple_Name => 1631,
+ Iir_Kind_Selected_Name => 1640,
+ Iir_Kind_Operator_Symbol => 1646,
+ Iir_Kind_Reference_Name => 1649,
+ Iir_Kind_External_Constant_Name => 1658,
+ Iir_Kind_External_Signal_Name => 1667,
+ Iir_Kind_External_Variable_Name => 1676,
+ Iir_Kind_Selected_By_All_Name => 1682,
+ Iir_Kind_Parenthesis_Name => 1687,
+ Iir_Kind_Package_Pathname => 1691,
+ Iir_Kind_Absolute_Pathname => 1692,
+ Iir_Kind_Relative_Pathname => 1693,
+ Iir_Kind_Pathname_Element => 1698,
+ Iir_Kind_Base_Attribute => 1700,
+ Iir_Kind_Subtype_Attribute => 1705,
+ Iir_Kind_Element_Attribute => 1710,
+ Iir_Kind_Left_Type_Attribute => 1715,
+ Iir_Kind_Right_Type_Attribute => 1720,
+ Iir_Kind_High_Type_Attribute => 1725,
+ Iir_Kind_Low_Type_Attribute => 1730,
+ Iir_Kind_Ascending_Type_Attribute => 1735,
+ Iir_Kind_Image_Attribute => 1741,
+ Iir_Kind_Value_Attribute => 1747,
+ Iir_Kind_Pos_Attribute => 1753,
+ Iir_Kind_Val_Attribute => 1759,
+ Iir_Kind_Succ_Attribute => 1765,
+ Iir_Kind_Pred_Attribute => 1771,
+ Iir_Kind_Leftof_Attribute => 1777,
+ Iir_Kind_Rightof_Attribute => 1783,
+ Iir_Kind_Delayed_Attribute => 1792,
+ Iir_Kind_Stable_Attribute => 1801,
+ Iir_Kind_Quiet_Attribute => 1810,
+ Iir_Kind_Transaction_Attribute => 1819,
+ Iir_Kind_Event_Attribute => 1823,
+ Iir_Kind_Active_Attribute => 1827,
+ Iir_Kind_Last_Event_Attribute => 1831,
+ Iir_Kind_Last_Active_Attribute => 1835,
+ Iir_Kind_Last_Value_Attribute => 1839,
+ Iir_Kind_Driving_Attribute => 1843,
+ Iir_Kind_Driving_Value_Attribute => 1847,
+ Iir_Kind_Behavior_Attribute => 1847,
+ Iir_Kind_Structure_Attribute => 1847,
+ Iir_Kind_Simple_Name_Attribute => 1854,
+ Iir_Kind_Instance_Name_Attribute => 1859,
+ Iir_Kind_Path_Name_Attribute => 1864,
+ Iir_Kind_Left_Array_Attribute => 1871,
+ Iir_Kind_Right_Array_Attribute => 1878,
+ Iir_Kind_High_Array_Attribute => 1885,
+ Iir_Kind_Low_Array_Attribute => 1892,
+ Iir_Kind_Length_Array_Attribute => 1899,
+ Iir_Kind_Ascending_Array_Attribute => 1906,
+ Iir_Kind_Range_Array_Attribute => 1913,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1920,
+ Iir_Kind_Attribute_Name => 1929
);
function Get_Fields_First (K : Iir_Kind) return Fields_Index is
@@ -10628,6 +10633,11 @@ package body Nodes_Meta is
case K is
when Iir_Kind_Conditional_Waveform
| Iir_Kind_Conditional_Expression
+ | Iir_Kind_Choice_By_Range
+ | Iir_Kind_Choice_By_Expression
+ | Iir_Kind_Choice_By_Others
+ | Iir_Kind_Choice_By_None
+ | Iir_Kind_Choice_By_Name
| Iir_Kind_Component_Configuration
| Iir_Kind_Disconnection_Specification
| Iir_Kind_Configuration_Specification
diff --git a/src/vhdl/nodes_meta.ads b/src/vhdl/nodes_meta.ads
index 4181b1661..25faea793 100644
--- a/src/vhdl/nodes_meta.ads
+++ b/src/vhdl/nodes_meta.ads
@@ -408,6 +408,7 @@ package Nodes_Meta is
Attr_Forward_Ref,
Attr_Maybe_Forward_Ref,
Attr_Maybe_Ref,
+ Attr_Maybe_Ref_Chain,
Attr_Of_Maybe_Ref,
Attr_Of_Ref,
Attr_Ref
diff --git a/src/vhdl/sem_inst.adb b/src/vhdl/sem_inst.adb
index 029ec235d..e22f8e1d4 100644
--- a/src/vhdl/sem_inst.adb
+++ b/src/vhdl/sem_inst.adb
@@ -275,6 +275,12 @@ package body Sem_Inst is
end if;
when Attr_Chain =>
R := Instantiate_Iir_Chain (S);
+ when Attr_Maybe_Ref_Chain =>
+ if Get_Is_Ref (N) then
+ R := Instantiate_Iir (S, True);
+ else
+ R := Instantiate_Iir_Chain (S);
+ end if;
when Attr_Chain_Next =>
R := Null_Iir;
when Attr_Of_Ref | Attr_Of_Maybe_Ref =>
@@ -733,6 +739,10 @@ package body Sem_Inst is
end if;
when Attr_Chain =>
Set_Instance_On_Chain (S, S_Inst);
+ when Attr_Maybe_Ref_Chain =>
+ if not Get_Is_Ref (N) then
+ Set_Instance_On_Chain (S, S_Inst);
+ end if;
when Attr_Chain_Next =>
null;
when Attr_Of_Ref | Attr_Of_Maybe_Ref =>
@@ -1120,6 +1130,10 @@ package body Sem_Inst is
end if;
when Attr_Chain =>
Substitute_On_Chain (S, E, Rep);
+ when Attr_Maybe_Ref_Chain =>
+ if not Get_Is_Ref (N) then
+ Substitute_On_Chain (S, E, Rep);
+ end if;
when Attr_Chain_Next =>
null;
when Attr_Of_Ref | Attr_Of_Maybe_Ref =>
diff --git a/src/vhdl/translate/trans-chap2.adb b/src/vhdl/translate/trans-chap2.adb
index 81f4fa7a3..60040ea2e 100644
--- a/src/vhdl/translate/trans-chap2.adb
+++ b/src/vhdl/translate/trans-chap2.adb
@@ -1433,6 +1433,10 @@ package body Trans.Chap2 is
end if;
when Attr_Chain =>
Instantiate_Iir_Chain_Info (Get_Iir (N, F));
+ when Attr_Maybe_Ref_Chain =>
+ if not Get_Is_Ref (N) then
+ Instantiate_Iir_Chain_Info (Get_Iir (N, F));
+ end if;
when Attr_Chain_Next =>
null;
when Attr_Of_Ref | Attr_Of_Maybe_Ref =>
diff --git a/src/vhdl/translate/trans-chap9.adb b/src/vhdl/translate/trans-chap9.adb
index b1001a4ed..10bd3233f 100644
--- a/src/vhdl/translate/trans-chap9.adb
+++ b/src/vhdl/translate/trans-chap9.adb
@@ -1213,6 +1213,10 @@ package body Trans.Chap9 is
end if;
when Attr_Chain =>
Destroy_Types_In_Chain (Get_Iir (N, F));
+ when Attr_Maybe_Ref_Chain =>
+ if not Get_Is_Ref (N) then
+ Destroy_Types_In_Chain (Get_Iir (N, F));
+ end if;
when Attr_Chain_Next =>
null;
when Attr_Of_Ref | Attr_Of_Maybe_Ref =>