aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-12-05 03:06:37 +0100
committerTristan Gingold <tgingold@free.fr>2016-12-05 03:25:21 +0100
commit0a7fc14d1cb3fe7bb465102e5c27f1efbd54d511 (patch)
tree6b78616eaf7b5bd0ec83a9b54e99473503557851
parent01ae3f0d2d25b8174ee3b281430180a913e5e9a0 (diff)
downloadghdl-0a7fc14d1cb3fe7bb465102e5c27f1efbd54d511.tar.gz
ghdl-0a7fc14d1cb3fe7bb465102e5c27f1efbd54d511.tar.bz2
ghdl-0a7fc14d1cb3fe7bb465102e5c27f1efbd54d511.zip
sem_assocs: handle overloaded operators for interface_function
For #199
-rw-r--r--src/vhdl/iirs.adb8
-rw-r--r--src/vhdl/iirs.ads17
-rw-r--r--src/vhdl/nodes_meta.adb495
-rw-r--r--src/vhdl/sem_assocs.adb67
-rw-r--r--src/vhdl/sem_inst.adb2
5 files changed, 320 insertions, 269 deletions
diff --git a/src/vhdl/iirs.adb b/src/vhdl/iirs.adb
index a5a12a742..7eb291959 100644
--- a/src/vhdl/iirs.adb
+++ b/src/vhdl/iirs.adb
@@ -4741,7 +4741,7 @@ package body Iirs is
pragma Assert (Target /= Null_Iir);
pragma Assert (Has_Actual_Type (Get_Kind (Target)),
"no field Actual_Type");
- return Get_Field3 (Target);
+ return Get_Field5 (Target);
end Get_Actual_Type;
procedure Set_Actual_Type (Target : Iir; Atype : Iir) is
@@ -4749,7 +4749,7 @@ package body Iirs is
pragma Assert (Target /= Null_Iir);
pragma Assert (Has_Actual_Type (Get_Kind (Target)),
"no field Actual_Type");
- Set_Field3 (Target, Atype);
+ Set_Field5 (Target, Atype);
end Set_Actual_Type;
function Get_Actual_Type_Definition (Target : Iir) return Iir is
@@ -4757,7 +4757,7 @@ package body Iirs is
pragma Assert (Target /= Null_Iir);
pragma Assert (Has_Actual_Type_Definition (Get_Kind (Target)),
"no field Actual_Type_Definition");
- return Get_Field5 (Target);
+ return Get_Field3 (Target);
end Get_Actual_Type_Definition;
procedure Set_Actual_Type_Definition (Target : Iir; Atype : Iir) is
@@ -4765,7 +4765,7 @@ package body Iirs is
pragma Assert (Target /= Null_Iir);
pragma Assert (Has_Actual_Type_Definition (Get_Kind (Target)),
"no field Actual_Type_Definition");
- Set_Field5 (Target, Atype);
+ Set_Field3 (Target, Atype);
end Set_Actual_Type_Definition;
function Get_Association_Chain (Target : Iir) return Iir is
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index b306be1b2..6a97c16bb 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -452,10 +452,11 @@ package Iirs is
--
-- Owner of Actual_Type if needed.
-- Only for Iir_Kind_Association_Element_By_Individual:
- -- Get/Set_Actual_Type_Definition (Field5)
+ -- Get/Set_Actual_Type_Definition (Field3)
--
-- Only for Iir_Kind_Association_Element_By_Individual:
- -- Get/Set_Actual_Type (Field3)
+ -- Only for Iir_Kind_Association_Element_Type:
+ -- Get/Set_Actual_Type (Field5)
--
-- Get/Set the whole association flag (true if the formal is associated in
-- whole and not individually, see LRM93 4.3.2.2)
@@ -896,10 +897,10 @@ package Iirs is
-- type.
-- Get/Set_Macro_Expanded_Flag (Flag2)
--
- -- True if the package declaration has the package has at least one
- -- package instantiation declaration whose uninstantiated declaration
- -- needs both a body and macro-expansion. In that case, the instantiation
- -- needs macro-expansion of their body.
+ -- True if the package declaration at least one package instantiation
+ -- declaration whose uninstantiated declaration needs both a body and
+ -- macro-expansion. In that case, the instantiation needs macro-expansion
+ -- of their body.
-- Get/Set_Need_Instance_Bodies (Flag3)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -6934,11 +6935,11 @@ package Iirs is
-- Unless the formal is an unconstrained array type, this is the same as
-- the formal type.
-- Subtype indiciation for a type association.
- -- Field: Field3 Ref
+ -- Field: Field5 Ref
function Get_Actual_Type (Target : Iir) return Iir;
procedure Set_Actual_Type (Target : Iir; Atype : Iir);
- -- Field: Field5
+ -- Field: Field3
function Get_Actual_Type_Definition (Target : Iir) return Iir;
procedure Set_Actual_Type_Definition (Target : Iir; Atype : Iir);
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb
index 67a25689b..d3a5fe871 100644
--- a/src/vhdl/nodes_meta.adb
+++ b/src/vhdl/nodes_meta.adb
@@ -2345,6 +2345,7 @@ package body Nodes_Meta is
Field_Chain,
Field_Actual,
Field_Subprogram_Association_Chain,
+ Field_Actual_Type,
-- Iir_Kind_Association_Element_Subprogram
Field_Whole_Association_Flag,
Field_Collapse_Signal_Flag,
@@ -4352,249 +4353,249 @@ package body Nodes_Meta is
Iir_Kind_Association_Element_By_Individual => 111,
Iir_Kind_Association_Element_Open => 116,
Iir_Kind_Association_Element_Package => 121,
- Iir_Kind_Association_Element_Type => 127,
- Iir_Kind_Association_Element_Subprogram => 132,
- Iir_Kind_Choice_By_Others => 137,
- Iir_Kind_Choice_By_Expression => 144,
- Iir_Kind_Choice_By_Range => 151,
- Iir_Kind_Choice_By_None => 156,
- Iir_Kind_Choice_By_Name => 162,
- Iir_Kind_Entity_Aspect_Entity => 164,
- Iir_Kind_Entity_Aspect_Configuration => 165,
- Iir_Kind_Entity_Aspect_Open => 165,
- Iir_Kind_Block_Configuration => 171,
- Iir_Kind_Block_Header => 175,
- Iir_Kind_Component_Configuration => 182,
- Iir_Kind_Binding_Indication => 186,
- Iir_Kind_Entity_Class => 188,
- Iir_Kind_Attribute_Value => 196,
- Iir_Kind_Signature => 199,
- Iir_Kind_Aggregate_Info => 206,
- Iir_Kind_Procedure_Call => 210,
- Iir_Kind_Record_Element_Constraint => 216,
- Iir_Kind_Array_Element_Resolution => 218,
- Iir_Kind_Record_Resolution => 219,
- Iir_Kind_Record_Element_Resolution => 222,
- Iir_Kind_Attribute_Specification => 230,
- Iir_Kind_Disconnection_Specification => 236,
- Iir_Kind_Configuration_Specification => 242,
- Iir_Kind_Access_Type_Definition => 250,
- Iir_Kind_Incomplete_Type_Definition => 258,
- Iir_Kind_Interface_Type_Definition => 265,
- Iir_Kind_File_Type_Definition => 272,
- Iir_Kind_Protected_Type_Declaration => 281,
- Iir_Kind_Record_Type_Definition => 291,
- Iir_Kind_Array_Type_Definition => 303,
- Iir_Kind_Array_Subtype_Definition => 318,
- Iir_Kind_Record_Subtype_Definition => 329,
- Iir_Kind_Access_Subtype_Definition => 337,
- Iir_Kind_Physical_Subtype_Definition => 347,
- Iir_Kind_Floating_Subtype_Definition => 358,
- Iir_Kind_Integer_Subtype_Definition => 368,
- Iir_Kind_Enumeration_Subtype_Definition => 378,
- Iir_Kind_Enumeration_Type_Definition => 388,
- Iir_Kind_Integer_Type_Definition => 396,
- Iir_Kind_Floating_Type_Definition => 404,
- Iir_Kind_Physical_Type_Definition => 415,
- Iir_Kind_Range_Expression => 423,
- Iir_Kind_Protected_Type_Body => 430,
- Iir_Kind_Wildcard_Type_Definition => 435,
- Iir_Kind_Subtype_Definition => 440,
- Iir_Kind_Scalar_Nature_Definition => 444,
- Iir_Kind_Overload_List => 445,
- Iir_Kind_Type_Declaration => 452,
- Iir_Kind_Anonymous_Type_Declaration => 458,
- Iir_Kind_Subtype_Declaration => 465,
- Iir_Kind_Nature_Declaration => 471,
- Iir_Kind_Subnature_Declaration => 477,
- Iir_Kind_Package_Declaration => 492,
- Iir_Kind_Package_Instantiation_Declaration => 505,
- Iir_Kind_Package_Body => 513,
- Iir_Kind_Configuration_Declaration => 522,
- Iir_Kind_Entity_Declaration => 534,
- Iir_Kind_Architecture_Body => 546,
- Iir_Kind_Context_Declaration => 552,
- Iir_Kind_Package_Header => 554,
- Iir_Kind_Unit_Declaration => 562,
- Iir_Kind_Library_Declaration => 569,
- Iir_Kind_Component_Declaration => 579,
- Iir_Kind_Attribute_Declaration => 586,
- Iir_Kind_Group_Template_Declaration => 592,
- Iir_Kind_Group_Declaration => 599,
- Iir_Kind_Element_Declaration => 606,
- Iir_Kind_Non_Object_Alias_Declaration => 614,
- Iir_Kind_Psl_Declaration => 622,
- Iir_Kind_Psl_Endpoint_Declaration => 636,
- Iir_Kind_Terminal_Declaration => 642,
- Iir_Kind_Free_Quantity_Declaration => 651,
- Iir_Kind_Across_Quantity_Declaration => 663,
- Iir_Kind_Through_Quantity_Declaration => 675,
- Iir_Kind_Enumeration_Literal => 686,
- Iir_Kind_Function_Declaration => 711,
- Iir_Kind_Procedure_Declaration => 735,
- Iir_Kind_Function_Body => 745,
- Iir_Kind_Procedure_Body => 756,
- Iir_Kind_Object_Alias_Declaration => 767,
- Iir_Kind_File_Declaration => 781,
- Iir_Kind_Guard_Signal_Declaration => 794,
- Iir_Kind_Signal_Declaration => 811,
- Iir_Kind_Variable_Declaration => 824,
- Iir_Kind_Constant_Declaration => 838,
- Iir_Kind_Iterator_Declaration => 849,
- Iir_Kind_Interface_Constant_Declaration => 865,
- Iir_Kind_Interface_Variable_Declaration => 881,
- Iir_Kind_Interface_Signal_Declaration => 902,
- Iir_Kind_Interface_File_Declaration => 918,
- Iir_Kind_Interface_Type_Declaration => 928,
- Iir_Kind_Interface_Package_Declaration => 939,
- Iir_Kind_Interface_Function_Declaration => 956,
- Iir_Kind_Interface_Procedure_Declaration => 969,
- Iir_Kind_Signal_Attribute_Declaration => 972,
- Iir_Kind_Identity_Operator => 976,
- Iir_Kind_Negation_Operator => 980,
- Iir_Kind_Absolute_Operator => 984,
- Iir_Kind_Not_Operator => 988,
- Iir_Kind_Condition_Operator => 992,
- Iir_Kind_Reduction_And_Operator => 996,
- Iir_Kind_Reduction_Or_Operator => 1000,
- Iir_Kind_Reduction_Nand_Operator => 1004,
- Iir_Kind_Reduction_Nor_Operator => 1008,
- Iir_Kind_Reduction_Xor_Operator => 1012,
- Iir_Kind_Reduction_Xnor_Operator => 1016,
- Iir_Kind_And_Operator => 1021,
- Iir_Kind_Or_Operator => 1026,
- Iir_Kind_Nand_Operator => 1031,
- Iir_Kind_Nor_Operator => 1036,
- Iir_Kind_Xor_Operator => 1041,
- Iir_Kind_Xnor_Operator => 1046,
- Iir_Kind_Equality_Operator => 1051,
- Iir_Kind_Inequality_Operator => 1056,
- Iir_Kind_Less_Than_Operator => 1061,
- Iir_Kind_Less_Than_Or_Equal_Operator => 1066,
- Iir_Kind_Greater_Than_Operator => 1071,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1076,
- Iir_Kind_Match_Equality_Operator => 1081,
- Iir_Kind_Match_Inequality_Operator => 1086,
- Iir_Kind_Match_Less_Than_Operator => 1091,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1096,
- Iir_Kind_Match_Greater_Than_Operator => 1101,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1106,
- Iir_Kind_Sll_Operator => 1111,
- Iir_Kind_Sla_Operator => 1116,
- Iir_Kind_Srl_Operator => 1121,
- Iir_Kind_Sra_Operator => 1126,
- Iir_Kind_Rol_Operator => 1131,
- Iir_Kind_Ror_Operator => 1136,
- Iir_Kind_Addition_Operator => 1141,
- Iir_Kind_Substraction_Operator => 1146,
- Iir_Kind_Concatenation_Operator => 1151,
- Iir_Kind_Multiplication_Operator => 1156,
- Iir_Kind_Division_Operator => 1161,
- Iir_Kind_Modulus_Operator => 1166,
- Iir_Kind_Remainder_Operator => 1171,
- Iir_Kind_Exponentiation_Operator => 1176,
- Iir_Kind_Function_Call => 1184,
- Iir_Kind_Aggregate => 1190,
- Iir_Kind_Parenthesis_Expression => 1193,
- Iir_Kind_Qualified_Expression => 1197,
- Iir_Kind_Type_Conversion => 1202,
- Iir_Kind_Allocator_By_Expression => 1206,
- Iir_Kind_Allocator_By_Subtype => 1211,
- Iir_Kind_Selected_Element => 1217,
- Iir_Kind_Dereference => 1222,
- Iir_Kind_Implicit_Dereference => 1227,
- Iir_Kind_Slice_Name => 1234,
- Iir_Kind_Indexed_Name => 1240,
- Iir_Kind_Psl_Expression => 1242,
- Iir_Kind_Sensitized_Process_Statement => 1263,
- Iir_Kind_Process_Statement => 1283,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1294,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1305,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1317,
- Iir_Kind_Concurrent_Assertion_Statement => 1325,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1332,
- Iir_Kind_Psl_Assert_Statement => 1345,
- Iir_Kind_Psl_Cover_Statement => 1358,
- Iir_Kind_Block_Statement => 1371,
- Iir_Kind_If_Generate_Statement => 1381,
- Iir_Kind_Case_Generate_Statement => 1390,
- Iir_Kind_For_Generate_Statement => 1399,
- Iir_Kind_Component_Instantiation_Statement => 1409,
- Iir_Kind_Psl_Default_Clock => 1413,
- Iir_Kind_Simple_Simultaneous_Statement => 1420,
- Iir_Kind_Generate_Statement_Body => 1431,
- Iir_Kind_If_Generate_Else_Clause => 1436,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1445,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1454,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1464,
- Iir_Kind_Null_Statement => 1468,
- Iir_Kind_Assertion_Statement => 1475,
- Iir_Kind_Report_Statement => 1481,
- Iir_Kind_Wait_Statement => 1489,
- Iir_Kind_Variable_Assignment_Statement => 1495,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1501,
- Iir_Kind_Return_Statement => 1507,
- Iir_Kind_For_Loop_Statement => 1516,
- Iir_Kind_While_Loop_Statement => 1524,
- Iir_Kind_Next_Statement => 1530,
- Iir_Kind_Exit_Statement => 1536,
- Iir_Kind_Case_Statement => 1544,
- Iir_Kind_Procedure_Call_Statement => 1550,
- Iir_Kind_If_Statement => 1559,
- Iir_Kind_Elsif => 1564,
- Iir_Kind_Character_Literal => 1572,
- Iir_Kind_Simple_Name => 1580,
- Iir_Kind_Selected_Name => 1589,
- Iir_Kind_Operator_Symbol => 1595,
- Iir_Kind_Reference_Name => 1598,
- Iir_Kind_Selected_By_All_Name => 1604,
- Iir_Kind_Parenthesis_Name => 1609,
- Iir_Kind_External_Constant_Name => 1617,
- Iir_Kind_External_Signal_Name => 1625,
- Iir_Kind_External_Variable_Name => 1633,
- Iir_Kind_Package_Pathname => 1637,
- Iir_Kind_Absolute_Pathname => 1638,
- Iir_Kind_Relative_Pathname => 1639,
- Iir_Kind_Pathname_Element => 1644,
- Iir_Kind_Base_Attribute => 1646,
- Iir_Kind_Left_Type_Attribute => 1651,
- Iir_Kind_Right_Type_Attribute => 1656,
- Iir_Kind_High_Type_Attribute => 1661,
- Iir_Kind_Low_Type_Attribute => 1666,
- Iir_Kind_Ascending_Type_Attribute => 1671,
- Iir_Kind_Image_Attribute => 1677,
- Iir_Kind_Value_Attribute => 1683,
- Iir_Kind_Pos_Attribute => 1689,
- Iir_Kind_Val_Attribute => 1695,
- Iir_Kind_Succ_Attribute => 1701,
- Iir_Kind_Pred_Attribute => 1707,
- Iir_Kind_Leftof_Attribute => 1713,
- Iir_Kind_Rightof_Attribute => 1719,
- Iir_Kind_Delayed_Attribute => 1728,
- Iir_Kind_Stable_Attribute => 1737,
- Iir_Kind_Quiet_Attribute => 1746,
- Iir_Kind_Transaction_Attribute => 1755,
- Iir_Kind_Event_Attribute => 1759,
- Iir_Kind_Active_Attribute => 1763,
- Iir_Kind_Last_Event_Attribute => 1767,
- Iir_Kind_Last_Active_Attribute => 1771,
- Iir_Kind_Last_Value_Attribute => 1775,
- Iir_Kind_Driving_Attribute => 1779,
- Iir_Kind_Driving_Value_Attribute => 1783,
- Iir_Kind_Behavior_Attribute => 1783,
- Iir_Kind_Structure_Attribute => 1783,
- Iir_Kind_Simple_Name_Attribute => 1790,
- Iir_Kind_Instance_Name_Attribute => 1795,
- Iir_Kind_Path_Name_Attribute => 1800,
- Iir_Kind_Left_Array_Attribute => 1807,
- Iir_Kind_Right_Array_Attribute => 1814,
- Iir_Kind_High_Array_Attribute => 1821,
- Iir_Kind_Low_Array_Attribute => 1828,
- Iir_Kind_Length_Array_Attribute => 1835,
- Iir_Kind_Ascending_Array_Attribute => 1842,
- Iir_Kind_Range_Array_Attribute => 1849,
- Iir_Kind_Reverse_Range_Array_Attribute => 1856,
- Iir_Kind_Attribute_Name => 1865
+ Iir_Kind_Association_Element_Type => 128,
+ Iir_Kind_Association_Element_Subprogram => 133,
+ Iir_Kind_Choice_By_Others => 138,
+ Iir_Kind_Choice_By_Expression => 145,
+ Iir_Kind_Choice_By_Range => 152,
+ Iir_Kind_Choice_By_None => 157,
+ Iir_Kind_Choice_By_Name => 163,
+ Iir_Kind_Entity_Aspect_Entity => 165,
+ Iir_Kind_Entity_Aspect_Configuration => 166,
+ Iir_Kind_Entity_Aspect_Open => 166,
+ Iir_Kind_Block_Configuration => 172,
+ Iir_Kind_Block_Header => 176,
+ Iir_Kind_Component_Configuration => 183,
+ Iir_Kind_Binding_Indication => 187,
+ Iir_Kind_Entity_Class => 189,
+ Iir_Kind_Attribute_Value => 197,
+ Iir_Kind_Signature => 200,
+ Iir_Kind_Aggregate_Info => 207,
+ Iir_Kind_Procedure_Call => 211,
+ Iir_Kind_Record_Element_Constraint => 217,
+ Iir_Kind_Array_Element_Resolution => 219,
+ Iir_Kind_Record_Resolution => 220,
+ Iir_Kind_Record_Element_Resolution => 223,
+ Iir_Kind_Attribute_Specification => 231,
+ Iir_Kind_Disconnection_Specification => 237,
+ Iir_Kind_Configuration_Specification => 243,
+ Iir_Kind_Access_Type_Definition => 251,
+ Iir_Kind_Incomplete_Type_Definition => 259,
+ Iir_Kind_Interface_Type_Definition => 266,
+ Iir_Kind_File_Type_Definition => 273,
+ Iir_Kind_Protected_Type_Declaration => 282,
+ Iir_Kind_Record_Type_Definition => 292,
+ Iir_Kind_Array_Type_Definition => 304,
+ Iir_Kind_Array_Subtype_Definition => 319,
+ Iir_Kind_Record_Subtype_Definition => 330,
+ Iir_Kind_Access_Subtype_Definition => 338,
+ Iir_Kind_Physical_Subtype_Definition => 348,
+ Iir_Kind_Floating_Subtype_Definition => 359,
+ Iir_Kind_Integer_Subtype_Definition => 369,
+ Iir_Kind_Enumeration_Subtype_Definition => 379,
+ Iir_Kind_Enumeration_Type_Definition => 389,
+ Iir_Kind_Integer_Type_Definition => 397,
+ Iir_Kind_Floating_Type_Definition => 405,
+ Iir_Kind_Physical_Type_Definition => 416,
+ Iir_Kind_Range_Expression => 424,
+ Iir_Kind_Protected_Type_Body => 431,
+ Iir_Kind_Wildcard_Type_Definition => 436,
+ Iir_Kind_Subtype_Definition => 441,
+ Iir_Kind_Scalar_Nature_Definition => 445,
+ Iir_Kind_Overload_List => 446,
+ Iir_Kind_Type_Declaration => 453,
+ Iir_Kind_Anonymous_Type_Declaration => 459,
+ Iir_Kind_Subtype_Declaration => 466,
+ Iir_Kind_Nature_Declaration => 472,
+ Iir_Kind_Subnature_Declaration => 478,
+ Iir_Kind_Package_Declaration => 493,
+ Iir_Kind_Package_Instantiation_Declaration => 506,
+ Iir_Kind_Package_Body => 514,
+ Iir_Kind_Configuration_Declaration => 523,
+ Iir_Kind_Entity_Declaration => 535,
+ Iir_Kind_Architecture_Body => 547,
+ Iir_Kind_Context_Declaration => 553,
+ Iir_Kind_Package_Header => 555,
+ Iir_Kind_Unit_Declaration => 563,
+ Iir_Kind_Library_Declaration => 570,
+ Iir_Kind_Component_Declaration => 580,
+ Iir_Kind_Attribute_Declaration => 587,
+ Iir_Kind_Group_Template_Declaration => 593,
+ Iir_Kind_Group_Declaration => 600,
+ Iir_Kind_Element_Declaration => 607,
+ Iir_Kind_Non_Object_Alias_Declaration => 615,
+ Iir_Kind_Psl_Declaration => 623,
+ Iir_Kind_Psl_Endpoint_Declaration => 637,
+ Iir_Kind_Terminal_Declaration => 643,
+ Iir_Kind_Free_Quantity_Declaration => 652,
+ Iir_Kind_Across_Quantity_Declaration => 664,
+ Iir_Kind_Through_Quantity_Declaration => 676,
+ Iir_Kind_Enumeration_Literal => 687,
+ Iir_Kind_Function_Declaration => 712,
+ Iir_Kind_Procedure_Declaration => 736,
+ Iir_Kind_Function_Body => 746,
+ Iir_Kind_Procedure_Body => 757,
+ Iir_Kind_Object_Alias_Declaration => 768,
+ Iir_Kind_File_Declaration => 782,
+ Iir_Kind_Guard_Signal_Declaration => 795,
+ Iir_Kind_Signal_Declaration => 812,
+ Iir_Kind_Variable_Declaration => 825,
+ Iir_Kind_Constant_Declaration => 839,
+ Iir_Kind_Iterator_Declaration => 850,
+ Iir_Kind_Interface_Constant_Declaration => 866,
+ Iir_Kind_Interface_Variable_Declaration => 882,
+ Iir_Kind_Interface_Signal_Declaration => 903,
+ Iir_Kind_Interface_File_Declaration => 919,
+ Iir_Kind_Interface_Type_Declaration => 929,
+ Iir_Kind_Interface_Package_Declaration => 940,
+ Iir_Kind_Interface_Function_Declaration => 957,
+ Iir_Kind_Interface_Procedure_Declaration => 970,
+ Iir_Kind_Signal_Attribute_Declaration => 973,
+ Iir_Kind_Identity_Operator => 977,
+ Iir_Kind_Negation_Operator => 981,
+ Iir_Kind_Absolute_Operator => 985,
+ Iir_Kind_Not_Operator => 989,
+ Iir_Kind_Condition_Operator => 993,
+ Iir_Kind_Reduction_And_Operator => 997,
+ Iir_Kind_Reduction_Or_Operator => 1001,
+ Iir_Kind_Reduction_Nand_Operator => 1005,
+ Iir_Kind_Reduction_Nor_Operator => 1009,
+ Iir_Kind_Reduction_Xor_Operator => 1013,
+ Iir_Kind_Reduction_Xnor_Operator => 1017,
+ Iir_Kind_And_Operator => 1022,
+ Iir_Kind_Or_Operator => 1027,
+ Iir_Kind_Nand_Operator => 1032,
+ Iir_Kind_Nor_Operator => 1037,
+ Iir_Kind_Xor_Operator => 1042,
+ Iir_Kind_Xnor_Operator => 1047,
+ Iir_Kind_Equality_Operator => 1052,
+ Iir_Kind_Inequality_Operator => 1057,
+ Iir_Kind_Less_Than_Operator => 1062,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1067,
+ Iir_Kind_Greater_Than_Operator => 1072,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1077,
+ Iir_Kind_Match_Equality_Operator => 1082,
+ Iir_Kind_Match_Inequality_Operator => 1087,
+ Iir_Kind_Match_Less_Than_Operator => 1092,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1097,
+ Iir_Kind_Match_Greater_Than_Operator => 1102,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1107,
+ Iir_Kind_Sll_Operator => 1112,
+ Iir_Kind_Sla_Operator => 1117,
+ Iir_Kind_Srl_Operator => 1122,
+ Iir_Kind_Sra_Operator => 1127,
+ Iir_Kind_Rol_Operator => 1132,
+ Iir_Kind_Ror_Operator => 1137,
+ Iir_Kind_Addition_Operator => 1142,
+ Iir_Kind_Substraction_Operator => 1147,
+ Iir_Kind_Concatenation_Operator => 1152,
+ Iir_Kind_Multiplication_Operator => 1157,
+ Iir_Kind_Division_Operator => 1162,
+ Iir_Kind_Modulus_Operator => 1167,
+ Iir_Kind_Remainder_Operator => 1172,
+ Iir_Kind_Exponentiation_Operator => 1177,
+ Iir_Kind_Function_Call => 1185,
+ Iir_Kind_Aggregate => 1191,
+ Iir_Kind_Parenthesis_Expression => 1194,
+ Iir_Kind_Qualified_Expression => 1198,
+ Iir_Kind_Type_Conversion => 1203,
+ Iir_Kind_Allocator_By_Expression => 1207,
+ Iir_Kind_Allocator_By_Subtype => 1212,
+ Iir_Kind_Selected_Element => 1218,
+ Iir_Kind_Dereference => 1223,
+ Iir_Kind_Implicit_Dereference => 1228,
+ Iir_Kind_Slice_Name => 1235,
+ Iir_Kind_Indexed_Name => 1241,
+ Iir_Kind_Psl_Expression => 1243,
+ Iir_Kind_Sensitized_Process_Statement => 1264,
+ Iir_Kind_Process_Statement => 1284,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1295,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1306,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1318,
+ Iir_Kind_Concurrent_Assertion_Statement => 1326,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1333,
+ Iir_Kind_Psl_Assert_Statement => 1346,
+ Iir_Kind_Psl_Cover_Statement => 1359,
+ Iir_Kind_Block_Statement => 1372,
+ Iir_Kind_If_Generate_Statement => 1382,
+ Iir_Kind_Case_Generate_Statement => 1391,
+ Iir_Kind_For_Generate_Statement => 1400,
+ Iir_Kind_Component_Instantiation_Statement => 1410,
+ Iir_Kind_Psl_Default_Clock => 1414,
+ Iir_Kind_Simple_Simultaneous_Statement => 1421,
+ Iir_Kind_Generate_Statement_Body => 1432,
+ Iir_Kind_If_Generate_Else_Clause => 1437,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1446,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1455,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1465,
+ Iir_Kind_Null_Statement => 1469,
+ Iir_Kind_Assertion_Statement => 1476,
+ Iir_Kind_Report_Statement => 1482,
+ Iir_Kind_Wait_Statement => 1490,
+ Iir_Kind_Variable_Assignment_Statement => 1496,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1502,
+ Iir_Kind_Return_Statement => 1508,
+ Iir_Kind_For_Loop_Statement => 1517,
+ Iir_Kind_While_Loop_Statement => 1525,
+ Iir_Kind_Next_Statement => 1531,
+ Iir_Kind_Exit_Statement => 1537,
+ Iir_Kind_Case_Statement => 1545,
+ Iir_Kind_Procedure_Call_Statement => 1551,
+ Iir_Kind_If_Statement => 1560,
+ Iir_Kind_Elsif => 1565,
+ Iir_Kind_Character_Literal => 1573,
+ Iir_Kind_Simple_Name => 1581,
+ Iir_Kind_Selected_Name => 1590,
+ Iir_Kind_Operator_Symbol => 1596,
+ Iir_Kind_Reference_Name => 1599,
+ Iir_Kind_Selected_By_All_Name => 1605,
+ Iir_Kind_Parenthesis_Name => 1610,
+ Iir_Kind_External_Constant_Name => 1618,
+ Iir_Kind_External_Signal_Name => 1626,
+ Iir_Kind_External_Variable_Name => 1634,
+ Iir_Kind_Package_Pathname => 1638,
+ Iir_Kind_Absolute_Pathname => 1639,
+ Iir_Kind_Relative_Pathname => 1640,
+ Iir_Kind_Pathname_Element => 1645,
+ Iir_Kind_Base_Attribute => 1647,
+ Iir_Kind_Left_Type_Attribute => 1652,
+ Iir_Kind_Right_Type_Attribute => 1657,
+ Iir_Kind_High_Type_Attribute => 1662,
+ Iir_Kind_Low_Type_Attribute => 1667,
+ Iir_Kind_Ascending_Type_Attribute => 1672,
+ Iir_Kind_Image_Attribute => 1678,
+ Iir_Kind_Value_Attribute => 1684,
+ Iir_Kind_Pos_Attribute => 1690,
+ Iir_Kind_Val_Attribute => 1696,
+ Iir_Kind_Succ_Attribute => 1702,
+ Iir_Kind_Pred_Attribute => 1708,
+ Iir_Kind_Leftof_Attribute => 1714,
+ Iir_Kind_Rightof_Attribute => 1720,
+ Iir_Kind_Delayed_Attribute => 1729,
+ Iir_Kind_Stable_Attribute => 1738,
+ Iir_Kind_Quiet_Attribute => 1747,
+ Iir_Kind_Transaction_Attribute => 1756,
+ Iir_Kind_Event_Attribute => 1760,
+ Iir_Kind_Active_Attribute => 1764,
+ Iir_Kind_Last_Event_Attribute => 1768,
+ Iir_Kind_Last_Active_Attribute => 1772,
+ Iir_Kind_Last_Value_Attribute => 1776,
+ Iir_Kind_Driving_Attribute => 1780,
+ Iir_Kind_Driving_Value_Attribute => 1784,
+ Iir_Kind_Behavior_Attribute => 1784,
+ Iir_Kind_Structure_Attribute => 1784,
+ Iir_Kind_Simple_Name_Attribute => 1791,
+ Iir_Kind_Instance_Name_Attribute => 1796,
+ Iir_Kind_Path_Name_Attribute => 1801,
+ Iir_Kind_Left_Array_Attribute => 1808,
+ Iir_Kind_Right_Array_Attribute => 1815,
+ Iir_Kind_High_Array_Attribute => 1822,
+ Iir_Kind_Low_Array_Attribute => 1829,
+ Iir_Kind_Length_Array_Attribute => 1836,
+ Iir_Kind_Ascending_Array_Attribute => 1843,
+ Iir_Kind_Range_Array_Attribute => 1850,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1857,
+ Iir_Kind_Attribute_Name => 1866
);
function Get_Fields (K : Iir_Kind) return Fields_Array
@@ -9802,7 +9803,13 @@ package body Nodes_Meta is
function Has_Actual_Type (K : Iir_Kind) return Boolean is
begin
- return K = Iir_Kind_Association_Element_By_Individual;
+ case K is
+ when Iir_Kind_Association_Element_By_Individual
+ | Iir_Kind_Association_Element_Type =>
+ return True;
+ when others =>
+ return False;
+ end case;
end Has_Actual_Type;
function Has_Actual_Type_Definition (K : Iir_Kind) return Boolean is
diff --git a/src/vhdl/sem_assocs.adb b/src/vhdl/sem_assocs.adb
index d5d2a35f1..6708355b9 100644
--- a/src/vhdl/sem_assocs.adb
+++ b/src/vhdl/sem_assocs.adb
@@ -42,6 +42,42 @@ package body Sem_Assocs is
N_Assoc := Create_Iir (Iir_Kind_Association_Element_Package);
when Iir_Kind_Interface_Type_Declaration =>
N_Assoc := Create_Iir (Iir_Kind_Association_Element_Type);
+ if Get_Kind (Actual) = Iir_Kind_Parenthesis_Name then
+ -- Convert parenthesis name to array subtype.
+ declare
+ N_Actual : Iir;
+ Sub_Assoc : Iir;
+ Indexes : Iir_List;
+ Old : Iir;
+ begin
+ N_Actual := Create_Iir (Iir_Kind_Array_Subtype_Definition);
+ Location_Copy (N_Actual, Actual);
+ Set_Subtype_Type_Mark (N_Actual, Get_Prefix (Actual));
+ Sub_Assoc := Get_Association_Chain (Actual);
+ Indexes := Create_Iir_List;
+ Set_Index_Constraint_List (N_Actual, Indexes);
+ while Is_Valid (Sub_Assoc) loop
+ if Get_Kind (Sub_Assoc)
+ /= Iir_Kind_Association_Element_By_Expression
+ then
+ Error_Msg_Sem
+ (+Sub_Assoc, "index constraint must be a range");
+ else
+ if Get_Formal (Sub_Assoc) /= Null_Iir then
+ Error_Msg_Sem
+ (+Sub_Assoc, "formal part not allowed");
+ end if;
+ Append_Element (Indexes, Get_Actual (Sub_Assoc));
+ end if;
+ Old := Sub_Assoc;
+ Sub_Assoc := Get_Chain (Sub_Assoc);
+ Free_Iir (Old);
+ end loop;
+ Old := Actual;
+ Free_Iir (Old);
+ Actual := N_Actual;
+ end;
+ end if;
when Iir_Kinds_Interface_Subprogram_Declaration =>
N_Assoc := Create_Iir (Iir_Kind_Association_Element_Subprogram);
if Get_Kind (Actual) = Iir_Kind_String_Literal8 then
@@ -1616,14 +1652,12 @@ package body Sem_Assocs is
end Sem_Association_Package;
-- Create an implicit association_element_subprogram for the declaration
- -- of function ID for ACTUAL (a name of a type).
+ -- of function ID for ACTUAL_Type (a type/subtype definition).
function Sem_Implicit_Operator_Association
- (Id : Name_Id; Actual : Iir) return Iir
+ (Id : Name_Id; Actual_Type : Iir; Actual_Name : Iir) return Iir
is
use Sem_Scopes;
- Atype : constant Iir := Get_Type (Actual);
-
-- Return TRUE if DECL is a function declaration with a comparaison
-- operator profile.
function Has_Comparaison_Profile (Decl : Iir) return Boolean
@@ -1647,7 +1681,8 @@ package body Sem_Assocs is
if Inter = Null_Iir then
return False;
end if;
- if Get_Base_Type (Get_Type (Inter)) /= Get_Base_Type (Atype) then
+ if Get_Base_Type (Get_Type (Inter)) /= Get_Base_Type (Actual_Type)
+ then
return False;
end if;
Inter := Get_Chain (Inter);
@@ -1667,16 +1702,17 @@ package body Sem_Assocs is
Decl := Get_Declaration (Interp);
if Has_Comparaison_Profile (Decl) then
Res := Create_Iir (Iir_Kind_Association_Element_Subprogram);
- Location_Copy (Res, Actual);
- Set_Actual (Res, Build_Simple_Name (Decl, Get_Location (Actual)));
+ Location_Copy (Res, Actual_Name);
+ Set_Actual
+ (Res, Build_Simple_Name (Decl, Get_Location (Actual_Name)));
Set_Use_Flag (Decl, True);
return Res;
end if;
Interp := Get_Next_Interpretation (Interp);
end loop;
- Error_Msg_Sem (+Actual, "cannot find a %i declaration for type %i",
- (+Id, +Actual));
+ Error_Msg_Sem (+Actual_Name, "cannot find a %i declaration for type %i",
+ (+Id, +Actual_Name));
return Null_Iir;
end Sem_Implicit_Operator_Association;
@@ -1687,6 +1723,7 @@ package body Sem_Assocs is
is
Inter_Def : constant Iir := Get_Type (Inter);
Actual : Iir;
+ Actual_Type : Iir;
Op_Eq, Op_Neq : Iir;
begin
if not Finish then
@@ -1707,15 +1744,21 @@ package body Sem_Assocs is
-- Set type association for analysis of reference to this interface.
pragma Assert (Is_Null (Get_Associated_Type (Inter_Def)));
- Set_Associated_Type (Inter_Def, Get_Type (Actual));
+ if Get_Kind (Actual) in Iir_Kinds_Subtype_Definition then
+ Actual_Type := Actual;
+ else
+ Actual_Type := Get_Type (Actual);
+ end if;
+ Set_Actual_Type (Assoc, Actual_Type);
+ Set_Associated_Type (Inter_Def, Actual_Type);
-- FIXME: it is not clear at all from the LRM how the implicit
-- associations are done...
Op_Eq := Sem_Implicit_Operator_Association
- (Std_Names.Name_Op_Equality, Actual);
+ (Std_Names.Name_Op_Equality, Actual_Type, Actual);
if Op_Eq /= Null_Iir then
Op_Neq := Sem_Implicit_Operator_Association
- (Std_Names.Name_Op_Inequality, Actual);
+ (Std_Names.Name_Op_Inequality, Actual_Type, Actual);
Set_Chain (Op_Eq, Op_Neq);
Set_Subprogram_Association_Chain (Assoc, Op_Eq);
end if;
diff --git a/src/vhdl/sem_inst.adb b/src/vhdl/sem_inst.adb
index 147073063..caba67456 100644
--- a/src/vhdl/sem_inst.adb
+++ b/src/vhdl/sem_inst.adb
@@ -782,7 +782,7 @@ package body Sem_Inst is
declare
Inter_Type_Def : constant Iir :=
Get_Type (Get_Association_Interface (Assoc, Inter));
- Actual_Type : constant Iir := Get_Type (Get_Actual (Assoc));
+ Actual_Type : constant Iir := Get_Actual_Type (Assoc);
begin
Set_Instance (Inter_Type_Def, Actual_Type);
end;