aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-09-01 06:26:39 +0200
committerTristan Gingold <tgingold@free.fr>2016-09-01 21:17:13 +0200
commit3d73c2660aa6e32d8976f5a73494c425bb9ce73f (patch)
tree56775e53f258675b0ea4dfbfcb5c212387ac65b1
parent4e6853861f3809d45424b6eb372ccd91ed76f0cb (diff)
downloadghdl-3d73c2660aa6e32d8976f5a73494c425bb9ce73f.tar.gz
ghdl-3d73c2660aa6e32d8976f5a73494c425bb9ce73f.tar.bz2
ghdl-3d73c2660aa6e32d8976f5a73494c425bb9ce73f.zip
vhdl08: preliminary work for nested package and type association.
-rw-r--r--src/vhdl/canon.adb32
-rw-r--r--src/vhdl/errorout.adb3
-rw-r--r--src/vhdl/iirs.adb19
-rw-r--r--src/vhdl/iirs.ads55
-rw-r--r--src/vhdl/nodes_meta.adb524
-rw-r--r--src/vhdl/parse.adb36
-rw-r--r--src/vhdl/sem.adb16
-rw-r--r--src/vhdl/sem.ads9
-rw-r--r--src/vhdl/sem_assocs.adb76
-rw-r--r--src/vhdl/sem_decls.adb8
-rw-r--r--src/vhdl/sem_inst.adb12
-rw-r--r--src/vhdl/sem_scopes.adb1
12 files changed, 474 insertions, 317 deletions
diff --git a/src/vhdl/canon.adb b/src/vhdl/canon.adb
index f3cc675e8..74b271f80 100644
--- a/src/vhdl/canon.adb
+++ b/src/vhdl/canon.adb
@@ -887,7 +887,8 @@ package body Canon is
end if;
when Iir_Kind_Association_Element_By_Individual =>
Found := True;
- when Iir_Kind_Association_Element_Package =>
+ when Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type =>
goto Done;
when others =>
Error_Kind ("canon_association_chain", Assoc_El);
@@ -2551,6 +2552,19 @@ package body Canon is
end if;
end Canon_Subtype_Indication_If_Anonymous;
+ procedure Canon_Package_Instantiation_Declaration (Decl : Iir)
+ is
+ Pkg : constant Iir :=
+ Get_Named_Entity (Get_Uninstantiated_Package_Name (Decl));
+ Hdr : constant Iir := Get_Package_Header (Pkg);
+ begin
+ Set_Generic_Map_Aspect_Chain
+ (Decl,
+ Canon_Association_Chain_And_Actuals
+ (Get_Generic_Chain (Hdr),
+ Get_Generic_Map_Aspect_Chain (Decl), Decl));
+ end Canon_Package_Instantiation_Declaration;
+
procedure Canon_Declaration (Top : Iir_Design_Unit;
Decl : Iir;
Parent : Iir;
@@ -2632,6 +2646,10 @@ package body Canon is
when Iir_Kind_Configuration_Specification =>
Canon_Component_Specification (Decl, Parent);
Canon_Component_Configuration (Top, Decl);
+
+ when Iir_Kind_Package_Instantiation_Declaration =>
+ Canon_Package_Instantiation_Declaration (Decl);
+
-- declare
-- List : Iir_List;
-- Binding : Iir_Binding_Indication;
@@ -3000,17 +3018,7 @@ package body Canon is
Canon_Declarations (Unit, El, Null_Iir);
Canon_Block_Configuration (Unit, Get_Block_Configuration (El));
when Iir_Kind_Package_Instantiation_Declaration =>
- declare
- Pkg : constant Iir :=
- Get_Named_Entity (Get_Uninstantiated_Package_Name (El));
- Hdr : constant Iir := Get_Package_Header (Pkg);
- begin
- Set_Generic_Map_Aspect_Chain
- (El,
- Canon_Association_Chain_And_Actuals
- (Get_Generic_Chain (Hdr),
- Get_Generic_Map_Aspect_Chain (El), El));
- end;
+ Canon_Package_Instantiation_Declaration (El);
when Iir_Kind_Context_Declaration =>
null;
when others =>
diff --git a/src/vhdl/errorout.adb b/src/vhdl/errorout.adb
index e937cda57..1181af907 100644
--- a/src/vhdl/errorout.adb
+++ b/src/vhdl/errorout.adb
@@ -715,7 +715,8 @@ package body Errorout is
when Iir_Kind_Association_Element_By_Individual =>
return "individual association element";
when Iir_Kind_Association_Element_By_Expression
- | Iir_Kind_Association_Element_Package =>
+ | Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type =>
return "association element";
when Iir_Kind_Overload_List =>
return "overloaded name or expression";
diff --git a/src/vhdl/iirs.adb b/src/vhdl/iirs.adb
index 05acf1b3a..72c645c2a 100644
--- a/src/vhdl/iirs.adb
+++ b/src/vhdl/iirs.adb
@@ -266,6 +266,7 @@ package body Iirs is
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type
| Iir_Kind_Choice_By_Others
| Iir_Kind_Choice_By_Expression
| Iir_Kind_Choice_By_Range
@@ -309,7 +310,6 @@ package body Iirs is
| Iir_Kind_Subtype_Declaration
| Iir_Kind_Nature_Declaration
| Iir_Kind_Subnature_Declaration
- | Iir_Kind_Package_Declaration
| Iir_Kind_Package_Body
| Iir_Kind_Configuration_Declaration
| Iir_Kind_Context_Declaration
@@ -477,6 +477,7 @@ package body Iirs is
| Iir_Kind_Floating_Subtype_Definition
| Iir_Kind_Subtype_Definition
| Iir_Kind_Scalar_Nature_Definition
+ | Iir_Kind_Package_Declaration
| Iir_Kind_Package_Instantiation_Declaration
| Iir_Kind_Entity_Declaration
| Iir_Kind_Architecture_Body
@@ -1700,7 +1701,7 @@ package body Iirs is
pragma Assert (Pkg /= Null_Iir);
pragma Assert (Has_Package_Body (Get_Kind (Pkg)),
"no field Package_Body");
- return Get_Field2 (Pkg);
+ return Get_Field5 (Pkg);
end Get_Package_Body;
procedure Set_Package_Body (Pkg : Iir; Decl : Iir) is
@@ -1708,7 +1709,7 @@ package body Iirs is
pragma Assert (Pkg /= Null_Iir);
pragma Assert (Has_Package_Body (Get_Kind (Pkg)),
"no field Package_Body");
- Set_Field2 (Pkg, Decl);
+ Set_Field5 (Pkg, Decl);
end Set_Package_Body;
function Get_Need_Body (Decl : Iir_Package_Declaration) return Boolean is
@@ -3787,7 +3788,7 @@ package body Iirs is
pragma Assert (Pkg /= Null_Iir);
pragma Assert (Has_Package_Header (Get_Kind (Pkg)),
"no field Package_Header");
- return Get_Field5 (Pkg);
+ return Get_Field6 (Pkg);
end Get_Package_Header;
procedure Set_Package_Header (Pkg : Iir; Header : Iir) is
@@ -3795,7 +3796,7 @@ package body Iirs is
pragma Assert (Pkg /= Null_Iir);
pragma Assert (Has_Package_Header (Get_Kind (Pkg)),
"no field Package_Header");
- Set_Field5 (Pkg, Header);
+ Set_Field6 (Pkg, Header);
end Set_Package_Header;
function Get_Block_Header (Target : Iir) return Iir is
@@ -3819,7 +3820,7 @@ package body Iirs is
pragma Assert (Inst /= Null_Iir);
pragma Assert (Has_Uninstantiated_Package_Name (Get_Kind (Inst)),
"no field Uninstantiated_Package_Name");
- return Get_Field5 (Inst);
+ return Get_Field7 (Inst);
end Get_Uninstantiated_Package_Name;
procedure Set_Uninstantiated_Package_Name (Inst : Iir; Name : Iir) is
@@ -3827,7 +3828,7 @@ package body Iirs is
pragma Assert (Inst /= Null_Iir);
pragma Assert (Has_Uninstantiated_Package_Name (Get_Kind (Inst)),
"no field Uninstantiated_Package_Name");
- Set_Field5 (Inst, Name);
+ Set_Field7 (Inst, Name);
end Set_Uninstantiated_Package_Name;
function Get_Generate_Block_Configuration (Target : Iir) return Iir is
@@ -4413,7 +4414,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
@@ -4421,7 +4422,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_Associated_Interface (Assoc : Iir) return Iir is
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index da25f490f..3efcea38e 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -390,6 +390,7 @@ package Iirs is
-- Iir_Kind_Association_Element_Open (Short)
-- Iir_Kind_Association_Element_By_Individual (Short)
-- Iir_Kind_Association_Element_Package (Short)
+ -- Iir_Kind_Association_Element_Type (Short)
-- These are used for association element of an association list with
-- an interface (ie subprogram call, port map, generic map).
--
@@ -399,19 +400,14 @@ package Iirs is
--
-- Only for Iir_Kind_Association_Element_By_Expression:
-- Only for Iir_Kind_Association_Element_Package:
+ -- Only for Iir_Kind_Association_Element_Type:
-- Get/Set_Actual (Field3)
--
-- Only for Iir_Kind_Association_Element_By_Individual:
- -- Get/Set_Actual_Type (Field3)
- --
- -- Only for Iir_Kind_Association_Element_By_Individual:
- -- Must be Locally unless there is an error on one choice.
- -- Get/Set_Choice_Staticness (State2)
- --
- -- Only for Iir_Kind_Association_Element_By_Individual:
-- Get/Set_Individual_Association_Chain (Field4)
--
-- Only for Iir_Kind_Association_Element_Package:
+ -- Only for Iir_Kind_Association_Element_Type:
-- Get/Set_Associated_Interface (Field4)
--
-- A function call or a type conversion for the association.
@@ -419,6 +415,10 @@ package Iirs is
-- Only for Iir_Kind_Association_Element_By_Expression:
-- Get/Set_In_Conversion (Field4)
--
+ -- Only for Iir_Kind_Association_Element_By_Individual:
+ -- Only for Iir_Kind_Association_Element_Type:
+ -- Get/Set_Actual_Type (Field5)
+ --
-- Only for Iir_Kind_Association_Element_By_Expression:
-- Get/Set_Out_Conversion (Field5)
--
@@ -430,6 +430,10 @@ package Iirs is
--
-- Only for Iir_Kind_Association_Element_Open:
-- Get/Set_Artificial_Flag (Flag3)
+ --
+ -- Only for Iir_Kind_Association_Element_By_Individual:
+ -- Must be Locally unless there is an error on one choice.
+ -- Get/Set_Choice_Staticness (State2)
-- Iir_Kind_Waveform_Element (Short)
--
@@ -825,20 +829,23 @@ package Iirs is
--
-- Get/Set_Generic_Map_Aspect_Chain (Field8)
- -- Iir_Kind_Package_Declaration (Short)
+ -- Iir_Kind_Package_Declaration (Medium)
--
-- Get/Set_Parent (Field0)
-- Get/Set_Design_Unit (Alias Field0)
--
-- Get/Set_Declaration_Chain (Field1)
--
- -- Get/Set_Package_Body (Field2)
+ -- For nested packages
+ -- Get/Set_Chain (Field2)
--
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Package_Header (Field5)
+ -- Get/Set_Package_Body (Field5)
+ --
+ -- Get/Set_Package_Header (Field6)
--
-- Get/Set_Need_Body (Flag1)
--
@@ -857,6 +864,9 @@ package Iirs is
--
-- Get/Set_Declaration_Chain (Field1)
--
+ -- For nested packages.
+ -- Get/Set_Chain (Field2)
+ --
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Attribute_Value_Chain (Field4)
@@ -875,16 +885,19 @@ package Iirs is
--
-- Get/Set_Declaration_Chain (Field1)
--
- -- Get/Set_Package_Body (Field2)
+ -- For nested packages
+ -- Get/Set_Chain (Field2)
--
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Uninstantiated_Package_Name (Field5)
+ -- Get/Set_Package_Body (Field5)
--
-- Get/Set_Generic_Chain (Field6)
--
+ -- Get/Set_Uninstantiated_Package_Name (Field7)
+ --
-- Get/Set_Generic_Map_Aspect_Chain (Field8)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -1225,10 +1238,10 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Uninstantiated_Package_Name (Field5)
- --
-- Get/Set_Generic_Chain (Field6)
--
+ -- Get/Set_Uninstantiated_Package_Name (Field7)
+ --
-- Get/Set_Generic_Map_Aspect_Chain (Field8)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -3730,6 +3743,7 @@ package Iirs is
Iir_Kind_Association_Element_By_Individual,
Iir_Kind_Association_Element_Open,
Iir_Kind_Association_Element_Package,
+ Iir_Kind_Association_Element_Type,
Iir_Kind_Choice_By_Others,
Iir_Kind_Choice_By_Expression,
Iir_Kind_Choice_By_Range,
@@ -5701,7 +5715,7 @@ package Iirs is
procedure Set_Package (Package_Body : Iir; Decl : Iir);
-- The package body corresponding to the package declaration.
- -- Field: Field2 Ref
+ -- Field: Field5 Ref
function Get_Package_Body (Pkg : Iir) return Iir;
procedure Set_Package_Body (Pkg : Iir; Decl : Iir);
@@ -6373,7 +6387,7 @@ package Iirs is
function Get_Block_Block_Configuration (Block : Iir) return Iir;
procedure Set_Block_Block_Configuration (Block : Iir; Conf : Iir);
- -- Field: Field5
+ -- Field: Field6
function Get_Package_Header (Pkg : Iir) return Iir;
procedure Set_Package_Header (Pkg : Iir; Header : Iir);
@@ -6381,7 +6395,7 @@ package Iirs is
function Get_Block_Header (Target : Iir) return Iir;
procedure Set_Block_Header (Target : Iir; Header : Iir);
- -- Field: Field5
+ -- Field: Field7
function Get_Uninstantiated_Package_Name (Inst : Iir) return Iir;
procedure Set_Uninstantiated_Package_Name (Inst : Iir; Name : Iir);
@@ -6558,9 +6572,10 @@ package Iirs is
procedure Set_Parameter (Target : Iir; Param : Iir);
-- Type of the actual for an association by individual.
- -- Unless the formal is an unconstrained array type, this is the same as
- -- the formal type.
- -- Field: Field3
+ -- Unless the formal is an unconstrained array type, this is the same as
+ -- the formal type.
+ -- Subtype indiciation for a type association.
+ -- Field: Field5
function Get_Actual_Type (Target : Iir) return Iir;
procedure Set_Actual_Type (Target : Iir; Atype : Iir);
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb
index ae9c29c8e..4e09367f7 100644
--- a/src/vhdl/nodes_meta.adb
+++ b/src/vhdl/nodes_meta.adb
@@ -997,6 +997,8 @@ package body Nodes_Meta is
return "association_element_open";
when Iir_Kind_Association_Element_Package =>
return "association_element_package";
+ when Iir_Kind_Association_Element_Type =>
+ return "association_element_type";
when Iir_Kind_Choice_By_Others =>
return "choice_by_others";
when Iir_Kind_Choice_By_Expression =>
@@ -2219,8 +2221,8 @@ package body Nodes_Meta is
Field_Choice_Staticness,
Field_Formal,
Field_Chain,
- Field_Actual_Type,
Field_Individual_Association_Chain,
+ Field_Actual_Type,
-- Iir_Kind_Association_Element_Open
Field_Whole_Association_Flag,
Field_Collapse_Signal_Flag,
@@ -2234,6 +2236,14 @@ package body Nodes_Meta is
Field_Chain,
Field_Actual,
Field_Associated_Interface,
+ -- Iir_Kind_Association_Element_Type
+ Field_Whole_Association_Flag,
+ Field_Collapse_Signal_Flag,
+ Field_Formal,
+ Field_Chain,
+ Field_Actual,
+ Field_Actual_Type,
+ Field_Associated_Interface,
-- Iir_Kind_Choice_By_Others
Field_Same_Alternative_Flag,
Field_Chain,
@@ -2620,6 +2630,7 @@ package body Nodes_Meta is
Field_End_Has_Reserved_Id,
Field_End_Has_Identifier,
Field_Declaration_Chain,
+ Field_Chain,
Field_Attribute_Value_Chain,
Field_Package_Header,
Field_Parent,
@@ -2630,9 +2641,10 @@ package body Nodes_Meta is
Field_End_Has_Reserved_Id,
Field_End_Has_Identifier,
Field_Declaration_Chain,
+ Field_Chain,
Field_Attribute_Value_Chain,
- Field_Uninstantiated_Package_Name,
Field_Generic_Chain,
+ Field_Uninstantiated_Package_Name,
Field_Generic_Map_Aspect_Chain,
Field_Parent,
Field_Package_Body,
@@ -2641,6 +2653,7 @@ package body Nodes_Meta is
Field_End_Has_Reserved_Id,
Field_End_Has_Identifier,
Field_Declaration_Chain,
+ Field_Chain,
Field_Attribute_Value_Chain,
Field_Parent,
Field_Package,
@@ -3103,8 +3116,8 @@ package body Nodes_Meta is
Field_Declaration_Chain,
Field_Chain,
Field_Attribute_Value_Chain,
- Field_Uninstantiated_Package_Name,
Field_Generic_Chain,
+ Field_Uninstantiated_Package_Name,
Field_Generic_Map_Aspect_Chain,
Field_Parent,
-- Iir_Kind_Identity_Operator
@@ -4145,242 +4158,243 @@ package body Nodes_Meta is
Iir_Kind_Association_Element_By_Individual => 108,
Iir_Kind_Association_Element_Open => 113,
Iir_Kind_Association_Element_Package => 119,
- Iir_Kind_Choice_By_Others => 124,
- Iir_Kind_Choice_By_Expression => 131,
- Iir_Kind_Choice_By_Range => 138,
- Iir_Kind_Choice_By_None => 143,
- Iir_Kind_Choice_By_Name => 149,
- Iir_Kind_Entity_Aspect_Entity => 151,
- Iir_Kind_Entity_Aspect_Configuration => 152,
- Iir_Kind_Entity_Aspect_Open => 152,
- Iir_Kind_Block_Configuration => 158,
- Iir_Kind_Block_Header => 162,
- Iir_Kind_Component_Configuration => 168,
- Iir_Kind_Binding_Indication => 174,
- Iir_Kind_Entity_Class => 176,
- Iir_Kind_Attribute_Value => 184,
- Iir_Kind_Signature => 187,
- Iir_Kind_Aggregate_Info => 194,
- Iir_Kind_Procedure_Call => 198,
- Iir_Kind_Record_Element_Constraint => 204,
- Iir_Kind_Array_Element_Resolution => 205,
- Iir_Kind_Record_Resolution => 206,
- Iir_Kind_Record_Element_Resolution => 209,
- Iir_Kind_Attribute_Specification => 218,
- Iir_Kind_Disconnection_Specification => 223,
- Iir_Kind_Configuration_Specification => 228,
- Iir_Kind_Access_Type_Definition => 235,
- Iir_Kind_Incomplete_Type_Definition => 242,
- Iir_Kind_Interface_Type_Definition => 248,
- Iir_Kind_File_Type_Definition => 255,
- Iir_Kind_Protected_Type_Declaration => 264,
- Iir_Kind_Record_Type_Definition => 274,
- Iir_Kind_Array_Type_Definition => 286,
- Iir_Kind_Array_Subtype_Definition => 301,
- Iir_Kind_Record_Subtype_Definition => 312,
- Iir_Kind_Access_Subtype_Definition => 320,
- Iir_Kind_Physical_Subtype_Definition => 329,
- Iir_Kind_Floating_Subtype_Definition => 339,
- Iir_Kind_Integer_Subtype_Definition => 348,
- Iir_Kind_Enumeration_Subtype_Definition => 357,
- Iir_Kind_Enumeration_Type_Definition => 366,
- Iir_Kind_Integer_Type_Definition => 372,
- Iir_Kind_Floating_Type_Definition => 378,
- Iir_Kind_Physical_Type_Definition => 387,
- Iir_Kind_Range_Expression => 393,
- Iir_Kind_Protected_Type_Body => 400,
- Iir_Kind_Wildcard_Type_Definition => 405,
- Iir_Kind_Subtype_Definition => 409,
- Iir_Kind_Scalar_Nature_Definition => 413,
- Iir_Kind_Overload_List => 414,
- Iir_Kind_Type_Declaration => 420,
- Iir_Kind_Anonymous_Type_Declaration => 425,
- Iir_Kind_Subtype_Declaration => 433,
- Iir_Kind_Nature_Declaration => 439,
- Iir_Kind_Subnature_Declaration => 445,
- Iir_Kind_Package_Declaration => 455,
- Iir_Kind_Package_Instantiation_Declaration => 466,
- Iir_Kind_Package_Body => 473,
- Iir_Kind_Configuration_Declaration => 482,
- Iir_Kind_Entity_Declaration => 494,
- Iir_Kind_Architecture_Body => 506,
- Iir_Kind_Context_Declaration => 512,
- Iir_Kind_Package_Header => 514,
- Iir_Kind_Unit_Declaration => 523,
- Iir_Kind_Library_Declaration => 530,
- Iir_Kind_Component_Declaration => 540,
- Iir_Kind_Attribute_Declaration => 547,
- Iir_Kind_Group_Template_Declaration => 553,
- Iir_Kind_Group_Declaration => 560,
- Iir_Kind_Element_Declaration => 567,
- Iir_Kind_Non_Object_Alias_Declaration => 575,
- Iir_Kind_Psl_Declaration => 583,
- Iir_Kind_Psl_Endpoint_Declaration => 597,
- Iir_Kind_Terminal_Declaration => 603,
- Iir_Kind_Free_Quantity_Declaration => 612,
- Iir_Kind_Across_Quantity_Declaration => 624,
- Iir_Kind_Through_Quantity_Declaration => 636,
- Iir_Kind_Enumeration_Literal => 647,
- Iir_Kind_Function_Declaration => 671,
- Iir_Kind_Procedure_Declaration => 694,
- Iir_Kind_Function_Body => 704,
- Iir_Kind_Procedure_Body => 715,
- Iir_Kind_Object_Alias_Declaration => 727,
- Iir_Kind_File_Declaration => 742,
- Iir_Kind_Guard_Signal_Declaration => 755,
- Iir_Kind_Signal_Declaration => 772,
- Iir_Kind_Variable_Declaration => 785,
- Iir_Kind_Constant_Declaration => 799,
- Iir_Kind_Iterator_Declaration => 811,
- Iir_Kind_Interface_Constant_Declaration => 827,
- Iir_Kind_Interface_Variable_Declaration => 843,
- Iir_Kind_Interface_Signal_Declaration => 864,
- Iir_Kind_Interface_File_Declaration => 880,
- Iir_Kind_Interface_Type_Declaration => 890,
- Iir_Kind_Interface_Package_Declaration => 899,
- Iir_Kind_Identity_Operator => 903,
- Iir_Kind_Negation_Operator => 907,
- Iir_Kind_Absolute_Operator => 911,
- Iir_Kind_Not_Operator => 915,
- Iir_Kind_Condition_Operator => 919,
- Iir_Kind_Reduction_And_Operator => 923,
- Iir_Kind_Reduction_Or_Operator => 927,
- Iir_Kind_Reduction_Nand_Operator => 931,
- Iir_Kind_Reduction_Nor_Operator => 935,
- Iir_Kind_Reduction_Xor_Operator => 939,
- Iir_Kind_Reduction_Xnor_Operator => 943,
- Iir_Kind_And_Operator => 948,
- Iir_Kind_Or_Operator => 953,
- Iir_Kind_Nand_Operator => 958,
- Iir_Kind_Nor_Operator => 963,
- Iir_Kind_Xor_Operator => 968,
- Iir_Kind_Xnor_Operator => 973,
- Iir_Kind_Equality_Operator => 978,
- Iir_Kind_Inequality_Operator => 983,
- Iir_Kind_Less_Than_Operator => 988,
- Iir_Kind_Less_Than_Or_Equal_Operator => 993,
- Iir_Kind_Greater_Than_Operator => 998,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1003,
- Iir_Kind_Match_Equality_Operator => 1008,
- Iir_Kind_Match_Inequality_Operator => 1013,
- Iir_Kind_Match_Less_Than_Operator => 1018,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1023,
- Iir_Kind_Match_Greater_Than_Operator => 1028,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1033,
- Iir_Kind_Sll_Operator => 1038,
- Iir_Kind_Sla_Operator => 1043,
- Iir_Kind_Srl_Operator => 1048,
- Iir_Kind_Sra_Operator => 1053,
- Iir_Kind_Rol_Operator => 1058,
- Iir_Kind_Ror_Operator => 1063,
- Iir_Kind_Addition_Operator => 1068,
- Iir_Kind_Substraction_Operator => 1073,
- Iir_Kind_Concatenation_Operator => 1078,
- Iir_Kind_Multiplication_Operator => 1083,
- Iir_Kind_Division_Operator => 1088,
- Iir_Kind_Modulus_Operator => 1093,
- Iir_Kind_Remainder_Operator => 1098,
- Iir_Kind_Exponentiation_Operator => 1103,
- Iir_Kind_Function_Call => 1111,
- Iir_Kind_Aggregate => 1117,
- Iir_Kind_Parenthesis_Expression => 1120,
- Iir_Kind_Qualified_Expression => 1124,
- Iir_Kind_Type_Conversion => 1129,
- Iir_Kind_Allocator_By_Expression => 1133,
- Iir_Kind_Allocator_By_Subtype => 1139,
- Iir_Kind_Selected_Element => 1145,
- Iir_Kind_Dereference => 1150,
- Iir_Kind_Implicit_Dereference => 1155,
- Iir_Kind_Slice_Name => 1162,
- Iir_Kind_Indexed_Name => 1168,
- Iir_Kind_Psl_Expression => 1170,
- Iir_Kind_Sensitized_Process_Statement => 1190,
- Iir_Kind_Process_Statement => 1210,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1221,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1232,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1244,
- Iir_Kind_Concurrent_Assertion_Statement => 1252,
- Iir_Kind_Psl_Default_Clock => 1256,
- Iir_Kind_Psl_Assert_Statement => 1269,
- Iir_Kind_Psl_Cover_Statement => 1282,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1289,
- Iir_Kind_Block_Statement => 1302,
- Iir_Kind_If_Generate_Statement => 1312,
- Iir_Kind_Case_Generate_Statement => 1321,
- Iir_Kind_For_Generate_Statement => 1330,
- Iir_Kind_Component_Instantiation_Statement => 1340,
- Iir_Kind_Simple_Simultaneous_Statement => 1347,
- Iir_Kind_Generate_Statement_Body => 1358,
- Iir_Kind_If_Generate_Else_Clause => 1363,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1372,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1381,
- Iir_Kind_Null_Statement => 1385,
- Iir_Kind_Assertion_Statement => 1392,
- Iir_Kind_Report_Statement => 1398,
- Iir_Kind_Wait_Statement => 1405,
- Iir_Kind_Variable_Assignment_Statement => 1411,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1417,
- Iir_Kind_Return_Statement => 1423,
- Iir_Kind_For_Loop_Statement => 1432,
- Iir_Kind_While_Loop_Statement => 1440,
- Iir_Kind_Next_Statement => 1446,
- Iir_Kind_Exit_Statement => 1452,
- Iir_Kind_Case_Statement => 1460,
- Iir_Kind_Procedure_Call_Statement => 1466,
- Iir_Kind_If_Statement => 1475,
- Iir_Kind_Elsif => 1480,
- Iir_Kind_Character_Literal => 1487,
- Iir_Kind_Simple_Name => 1494,
- Iir_Kind_Selected_Name => 1502,
- Iir_Kind_Operator_Symbol => 1507,
- Iir_Kind_Selected_By_All_Name => 1512,
- Iir_Kind_Parenthesis_Name => 1516,
- Iir_Kind_External_Constant_Name => 1525,
- Iir_Kind_External_Signal_Name => 1534,
- Iir_Kind_External_Variable_Name => 1543,
- Iir_Kind_Package_Pathname => 1546,
- Iir_Kind_Absolute_Pathname => 1547,
- Iir_Kind_Relative_Pathname => 1548,
- Iir_Kind_Pathname_Element => 1552,
- Iir_Kind_Base_Attribute => 1554,
- Iir_Kind_Left_Type_Attribute => 1559,
- Iir_Kind_Right_Type_Attribute => 1564,
- Iir_Kind_High_Type_Attribute => 1569,
- Iir_Kind_Low_Type_Attribute => 1574,
- Iir_Kind_Ascending_Type_Attribute => 1579,
- Iir_Kind_Image_Attribute => 1585,
- Iir_Kind_Value_Attribute => 1591,
- Iir_Kind_Pos_Attribute => 1597,
- Iir_Kind_Val_Attribute => 1603,
- Iir_Kind_Succ_Attribute => 1609,
- Iir_Kind_Pred_Attribute => 1615,
- Iir_Kind_Leftof_Attribute => 1621,
- Iir_Kind_Rightof_Attribute => 1627,
- Iir_Kind_Delayed_Attribute => 1635,
- Iir_Kind_Stable_Attribute => 1643,
- Iir_Kind_Quiet_Attribute => 1651,
- Iir_Kind_Transaction_Attribute => 1659,
- Iir_Kind_Event_Attribute => 1663,
- Iir_Kind_Active_Attribute => 1667,
- Iir_Kind_Last_Event_Attribute => 1671,
- Iir_Kind_Last_Active_Attribute => 1675,
- Iir_Kind_Last_Value_Attribute => 1679,
- Iir_Kind_Driving_Attribute => 1683,
- Iir_Kind_Driving_Value_Attribute => 1687,
- Iir_Kind_Behavior_Attribute => 1687,
- Iir_Kind_Structure_Attribute => 1687,
- Iir_Kind_Simple_Name_Attribute => 1694,
- Iir_Kind_Instance_Name_Attribute => 1699,
- Iir_Kind_Path_Name_Attribute => 1704,
- Iir_Kind_Left_Array_Attribute => 1711,
- Iir_Kind_Right_Array_Attribute => 1718,
- Iir_Kind_High_Array_Attribute => 1725,
- Iir_Kind_Low_Array_Attribute => 1732,
- Iir_Kind_Length_Array_Attribute => 1739,
- Iir_Kind_Ascending_Array_Attribute => 1746,
- Iir_Kind_Range_Array_Attribute => 1753,
- Iir_Kind_Reverse_Range_Array_Attribute => 1760,
- Iir_Kind_Attribute_Name => 1768
+ Iir_Kind_Association_Element_Type => 126,
+ Iir_Kind_Choice_By_Others => 131,
+ Iir_Kind_Choice_By_Expression => 138,
+ Iir_Kind_Choice_By_Range => 145,
+ Iir_Kind_Choice_By_None => 150,
+ Iir_Kind_Choice_By_Name => 156,
+ Iir_Kind_Entity_Aspect_Entity => 158,
+ Iir_Kind_Entity_Aspect_Configuration => 159,
+ Iir_Kind_Entity_Aspect_Open => 159,
+ Iir_Kind_Block_Configuration => 165,
+ Iir_Kind_Block_Header => 169,
+ Iir_Kind_Component_Configuration => 175,
+ Iir_Kind_Binding_Indication => 181,
+ Iir_Kind_Entity_Class => 183,
+ Iir_Kind_Attribute_Value => 191,
+ Iir_Kind_Signature => 194,
+ Iir_Kind_Aggregate_Info => 201,
+ Iir_Kind_Procedure_Call => 205,
+ Iir_Kind_Record_Element_Constraint => 211,
+ Iir_Kind_Array_Element_Resolution => 212,
+ Iir_Kind_Record_Resolution => 213,
+ Iir_Kind_Record_Element_Resolution => 216,
+ Iir_Kind_Attribute_Specification => 225,
+ Iir_Kind_Disconnection_Specification => 230,
+ Iir_Kind_Configuration_Specification => 235,
+ Iir_Kind_Access_Type_Definition => 242,
+ Iir_Kind_Incomplete_Type_Definition => 249,
+ Iir_Kind_Interface_Type_Definition => 255,
+ Iir_Kind_File_Type_Definition => 262,
+ Iir_Kind_Protected_Type_Declaration => 271,
+ Iir_Kind_Record_Type_Definition => 281,
+ Iir_Kind_Array_Type_Definition => 293,
+ Iir_Kind_Array_Subtype_Definition => 308,
+ Iir_Kind_Record_Subtype_Definition => 319,
+ Iir_Kind_Access_Subtype_Definition => 327,
+ Iir_Kind_Physical_Subtype_Definition => 336,
+ Iir_Kind_Floating_Subtype_Definition => 346,
+ Iir_Kind_Integer_Subtype_Definition => 355,
+ Iir_Kind_Enumeration_Subtype_Definition => 364,
+ Iir_Kind_Enumeration_Type_Definition => 373,
+ Iir_Kind_Integer_Type_Definition => 379,
+ Iir_Kind_Floating_Type_Definition => 385,
+ Iir_Kind_Physical_Type_Definition => 394,
+ Iir_Kind_Range_Expression => 400,
+ Iir_Kind_Protected_Type_Body => 407,
+ Iir_Kind_Wildcard_Type_Definition => 412,
+ Iir_Kind_Subtype_Definition => 416,
+ Iir_Kind_Scalar_Nature_Definition => 420,
+ Iir_Kind_Overload_List => 421,
+ Iir_Kind_Type_Declaration => 427,
+ Iir_Kind_Anonymous_Type_Declaration => 432,
+ Iir_Kind_Subtype_Declaration => 440,
+ Iir_Kind_Nature_Declaration => 446,
+ Iir_Kind_Subnature_Declaration => 452,
+ Iir_Kind_Package_Declaration => 463,
+ Iir_Kind_Package_Instantiation_Declaration => 475,
+ Iir_Kind_Package_Body => 483,
+ Iir_Kind_Configuration_Declaration => 492,
+ Iir_Kind_Entity_Declaration => 504,
+ Iir_Kind_Architecture_Body => 516,
+ Iir_Kind_Context_Declaration => 522,
+ Iir_Kind_Package_Header => 524,
+ Iir_Kind_Unit_Declaration => 533,
+ Iir_Kind_Library_Declaration => 540,
+ Iir_Kind_Component_Declaration => 550,
+ Iir_Kind_Attribute_Declaration => 557,
+ Iir_Kind_Group_Template_Declaration => 563,
+ Iir_Kind_Group_Declaration => 570,
+ Iir_Kind_Element_Declaration => 577,
+ Iir_Kind_Non_Object_Alias_Declaration => 585,
+ Iir_Kind_Psl_Declaration => 593,
+ Iir_Kind_Psl_Endpoint_Declaration => 607,
+ Iir_Kind_Terminal_Declaration => 613,
+ Iir_Kind_Free_Quantity_Declaration => 622,
+ Iir_Kind_Across_Quantity_Declaration => 634,
+ Iir_Kind_Through_Quantity_Declaration => 646,
+ Iir_Kind_Enumeration_Literal => 657,
+ Iir_Kind_Function_Declaration => 681,
+ Iir_Kind_Procedure_Declaration => 704,
+ Iir_Kind_Function_Body => 714,
+ Iir_Kind_Procedure_Body => 725,
+ Iir_Kind_Object_Alias_Declaration => 737,
+ Iir_Kind_File_Declaration => 752,
+ Iir_Kind_Guard_Signal_Declaration => 765,
+ Iir_Kind_Signal_Declaration => 782,
+ Iir_Kind_Variable_Declaration => 795,
+ Iir_Kind_Constant_Declaration => 809,
+ Iir_Kind_Iterator_Declaration => 821,
+ Iir_Kind_Interface_Constant_Declaration => 837,
+ Iir_Kind_Interface_Variable_Declaration => 853,
+ Iir_Kind_Interface_Signal_Declaration => 874,
+ Iir_Kind_Interface_File_Declaration => 890,
+ Iir_Kind_Interface_Type_Declaration => 900,
+ Iir_Kind_Interface_Package_Declaration => 909,
+ Iir_Kind_Identity_Operator => 913,
+ Iir_Kind_Negation_Operator => 917,
+ Iir_Kind_Absolute_Operator => 921,
+ Iir_Kind_Not_Operator => 925,
+ Iir_Kind_Condition_Operator => 929,
+ Iir_Kind_Reduction_And_Operator => 933,
+ Iir_Kind_Reduction_Or_Operator => 937,
+ Iir_Kind_Reduction_Nand_Operator => 941,
+ Iir_Kind_Reduction_Nor_Operator => 945,
+ Iir_Kind_Reduction_Xor_Operator => 949,
+ Iir_Kind_Reduction_Xnor_Operator => 953,
+ Iir_Kind_And_Operator => 958,
+ Iir_Kind_Or_Operator => 963,
+ Iir_Kind_Nand_Operator => 968,
+ Iir_Kind_Nor_Operator => 973,
+ Iir_Kind_Xor_Operator => 978,
+ Iir_Kind_Xnor_Operator => 983,
+ Iir_Kind_Equality_Operator => 988,
+ Iir_Kind_Inequality_Operator => 993,
+ Iir_Kind_Less_Than_Operator => 998,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1003,
+ Iir_Kind_Greater_Than_Operator => 1008,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1013,
+ Iir_Kind_Match_Equality_Operator => 1018,
+ Iir_Kind_Match_Inequality_Operator => 1023,
+ Iir_Kind_Match_Less_Than_Operator => 1028,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1033,
+ Iir_Kind_Match_Greater_Than_Operator => 1038,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1043,
+ Iir_Kind_Sll_Operator => 1048,
+ Iir_Kind_Sla_Operator => 1053,
+ Iir_Kind_Srl_Operator => 1058,
+ Iir_Kind_Sra_Operator => 1063,
+ Iir_Kind_Rol_Operator => 1068,
+ Iir_Kind_Ror_Operator => 1073,
+ Iir_Kind_Addition_Operator => 1078,
+ Iir_Kind_Substraction_Operator => 1083,
+ Iir_Kind_Concatenation_Operator => 1088,
+ Iir_Kind_Multiplication_Operator => 1093,
+ Iir_Kind_Division_Operator => 1098,
+ Iir_Kind_Modulus_Operator => 1103,
+ Iir_Kind_Remainder_Operator => 1108,
+ Iir_Kind_Exponentiation_Operator => 1113,
+ Iir_Kind_Function_Call => 1121,
+ Iir_Kind_Aggregate => 1127,
+ Iir_Kind_Parenthesis_Expression => 1130,
+ Iir_Kind_Qualified_Expression => 1134,
+ Iir_Kind_Type_Conversion => 1139,
+ Iir_Kind_Allocator_By_Expression => 1143,
+ Iir_Kind_Allocator_By_Subtype => 1149,
+ Iir_Kind_Selected_Element => 1155,
+ Iir_Kind_Dereference => 1160,
+ Iir_Kind_Implicit_Dereference => 1165,
+ Iir_Kind_Slice_Name => 1172,
+ Iir_Kind_Indexed_Name => 1178,
+ Iir_Kind_Psl_Expression => 1180,
+ Iir_Kind_Sensitized_Process_Statement => 1200,
+ Iir_Kind_Process_Statement => 1220,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1231,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1242,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1254,
+ Iir_Kind_Concurrent_Assertion_Statement => 1262,
+ Iir_Kind_Psl_Default_Clock => 1266,
+ Iir_Kind_Psl_Assert_Statement => 1279,
+ Iir_Kind_Psl_Cover_Statement => 1292,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1299,
+ Iir_Kind_Block_Statement => 1312,
+ Iir_Kind_If_Generate_Statement => 1322,
+ Iir_Kind_Case_Generate_Statement => 1331,
+ Iir_Kind_For_Generate_Statement => 1340,
+ Iir_Kind_Component_Instantiation_Statement => 1350,
+ Iir_Kind_Simple_Simultaneous_Statement => 1357,
+ Iir_Kind_Generate_Statement_Body => 1368,
+ Iir_Kind_If_Generate_Else_Clause => 1373,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1382,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1391,
+ Iir_Kind_Null_Statement => 1395,
+ Iir_Kind_Assertion_Statement => 1402,
+ Iir_Kind_Report_Statement => 1408,
+ Iir_Kind_Wait_Statement => 1415,
+ Iir_Kind_Variable_Assignment_Statement => 1421,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1427,
+ Iir_Kind_Return_Statement => 1433,
+ Iir_Kind_For_Loop_Statement => 1442,
+ Iir_Kind_While_Loop_Statement => 1450,
+ Iir_Kind_Next_Statement => 1456,
+ Iir_Kind_Exit_Statement => 1462,
+ Iir_Kind_Case_Statement => 1470,
+ Iir_Kind_Procedure_Call_Statement => 1476,
+ Iir_Kind_If_Statement => 1485,
+ Iir_Kind_Elsif => 1490,
+ Iir_Kind_Character_Literal => 1497,
+ Iir_Kind_Simple_Name => 1504,
+ Iir_Kind_Selected_Name => 1512,
+ Iir_Kind_Operator_Symbol => 1517,
+ Iir_Kind_Selected_By_All_Name => 1522,
+ Iir_Kind_Parenthesis_Name => 1526,
+ Iir_Kind_External_Constant_Name => 1535,
+ Iir_Kind_External_Signal_Name => 1544,
+ Iir_Kind_External_Variable_Name => 1553,
+ Iir_Kind_Package_Pathname => 1556,
+ Iir_Kind_Absolute_Pathname => 1557,
+ Iir_Kind_Relative_Pathname => 1558,
+ Iir_Kind_Pathname_Element => 1562,
+ Iir_Kind_Base_Attribute => 1564,
+ Iir_Kind_Left_Type_Attribute => 1569,
+ Iir_Kind_Right_Type_Attribute => 1574,
+ Iir_Kind_High_Type_Attribute => 1579,
+ Iir_Kind_Low_Type_Attribute => 1584,
+ Iir_Kind_Ascending_Type_Attribute => 1589,
+ Iir_Kind_Image_Attribute => 1595,
+ Iir_Kind_Value_Attribute => 1601,
+ Iir_Kind_Pos_Attribute => 1607,
+ Iir_Kind_Val_Attribute => 1613,
+ Iir_Kind_Succ_Attribute => 1619,
+ Iir_Kind_Pred_Attribute => 1625,
+ Iir_Kind_Leftof_Attribute => 1631,
+ Iir_Kind_Rightof_Attribute => 1637,
+ Iir_Kind_Delayed_Attribute => 1645,
+ Iir_Kind_Stable_Attribute => 1653,
+ Iir_Kind_Quiet_Attribute => 1661,
+ Iir_Kind_Transaction_Attribute => 1669,
+ Iir_Kind_Event_Attribute => 1673,
+ Iir_Kind_Active_Attribute => 1677,
+ Iir_Kind_Last_Event_Attribute => 1681,
+ Iir_Kind_Last_Active_Attribute => 1685,
+ Iir_Kind_Last_Value_Attribute => 1689,
+ Iir_Kind_Driving_Attribute => 1693,
+ Iir_Kind_Driving_Value_Attribute => 1697,
+ Iir_Kind_Behavior_Attribute => 1697,
+ Iir_Kind_Structure_Attribute => 1697,
+ Iir_Kind_Simple_Name_Attribute => 1704,
+ Iir_Kind_Instance_Name_Attribute => 1709,
+ Iir_Kind_Path_Name_Attribute => 1714,
+ Iir_Kind_Left_Array_Attribute => 1721,
+ Iir_Kind_Right_Array_Attribute => 1728,
+ Iir_Kind_High_Array_Attribute => 1735,
+ Iir_Kind_Low_Array_Attribute => 1742,
+ Iir_Kind_Length_Array_Attribute => 1749,
+ Iir_Kind_Ascending_Array_Attribute => 1756,
+ Iir_Kind_Range_Array_Attribute => 1763,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1770,
+ Iir_Kind_Attribute_Name => 1778
);
function Get_Fields (K : Iir_Kind) return Fields_Array
@@ -6516,7 +6530,8 @@ package body Nodes_Meta is
when Iir_Kind_Association_Element_By_Expression
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
- | Iir_Kind_Association_Element_Package =>
+ | Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type =>
return True;
when others =>
return False;
@@ -6527,7 +6542,8 @@ package body Nodes_Meta is
begin
case K is
when Iir_Kind_Association_Element_By_Expression
- | Iir_Kind_Association_Element_Package =>
+ | Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type =>
return True;
when others =>
return False;
@@ -6550,7 +6566,8 @@ package body Nodes_Meta is
when Iir_Kind_Association_Element_By_Expression
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
- | Iir_Kind_Association_Element_Package =>
+ | Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type =>
return True;
when others =>
return False;
@@ -6563,7 +6580,8 @@ package body Nodes_Meta is
when Iir_Kind_Association_Element_By_Expression
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
- | Iir_Kind_Association_Element_Package =>
+ | Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type =>
return True;
when others =>
return False;
@@ -6800,6 +6818,7 @@ package body Nodes_Meta is
| Iir_Kind_Association_Element_By_Individual
| Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type
| Iir_Kind_Choice_By_Others
| Iir_Kind_Choice_By_Expression
| Iir_Kind_Choice_By_Range
@@ -6819,6 +6838,9 @@ package body Nodes_Meta is
| Iir_Kind_Subtype_Declaration
| Iir_Kind_Nature_Declaration
| Iir_Kind_Subnature_Declaration
+ | Iir_Kind_Package_Declaration
+ | Iir_Kind_Package_Instantiation_Declaration
+ | Iir_Kind_Package_Body
| Iir_Kind_Unit_Declaration
| Iir_Kind_Library_Declaration
| Iir_Kind_Component_Declaration
@@ -9337,12 +9359,24 @@ 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_Associated_Interface (K : Iir_Kind) return Boolean is
begin
- return K = Iir_Kind_Association_Element_Package;
+ case K is
+ when Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type =>
+ return True;
+ when others =>
+ return False;
+ end case;
end Has_Associated_Interface;
function Has_Association_Chain (K : Iir_Kind) return Boolean is
diff --git a/src/vhdl/parse.adb b/src/vhdl/parse.adb
index 4be6c1ce6..eda42e380 100644
--- a/src/vhdl/parse.adb
+++ b/src/vhdl/parse.adb
@@ -69,6 +69,7 @@ package body Parse is
function Parse_Signature return Iir_Signature;
procedure Parse_Declarative_Part (Parent : Iir);
function Parse_Tolerance_Aspect_Opt return Iir;
+ function Parse_Package (Parent : Iir) return Iir;
Expect_Error: exception;
@@ -80,7 +81,9 @@ package body Parse is
procedure Set_End_Location (Node : Iir) is
begin
- Set_End_Location (Node, Get_Token_Location);
+ if Get_Kind (Node) = Iir_Kind_Design_Unit then
+ Set_End_Location (Node, Get_Token_Location);
+ end if;
end Set_End_Location;
procedure Unexpected (Where: String) is
@@ -3879,6 +3882,12 @@ package body Parse is
Decl := Parse_Use_Clause;
when Tok_Group =>
Decl := Parse_Group;
+ when Tok_Package =>
+ if Vhdl_Std < Vhdl_08 then
+ Error_Msg_Parse
+ ("nested package not allowed before vhdl 2008");
+ end if;
+ Decl := Parse_Package (Parent);
when Tok_Identifier =>
Error_Msg_Parse
@@ -7969,8 +7978,9 @@ package body Parse is
-- package_header -- LRM08
-- package_declarative_part
-- END [ PACKAGE ] [ PACKAGE_simple_name ] ;
- procedure Parse_Package_Declaration
+ function Parse_Package_Declaration
(Unit : Iir_Design_Unit; Id : Name_Id; Loc : Location_Type)
+ return Iir
is
Res: Iir_Package_Declaration;
begin
@@ -8005,7 +8015,7 @@ package body Parse is
Check_End_Name (Res);
Expect (Tok_Semi_Colon);
- Set_Library_Unit (Unit, Res);
+ return Res;
end Parse_Package_Declaration;
-- precond : BODY
@@ -8016,7 +8026,7 @@ package body Parse is
-- PACKAGE BODY PACKAGE_simple_name IS
-- package_body_declarative_part
-- END [ PACKAGE BODY ] [ PACKAGE_simple_name ] ;
- procedure Parse_Package_Body (Unit : Iir_Design_Unit)
+ function Parse_Package_Body (Unit : Iir_Design_Unit) return Iir
is
Res: Iir;
begin
@@ -8056,7 +8066,7 @@ package body Parse is
Check_End_Name (Res);
Expect (Tok_Semi_Colon);
- Set_Library_Unit (Unit, Res);
+ return Res;
end Parse_Package_Body;
-- precond : NEW
@@ -8096,10 +8106,11 @@ package body Parse is
-- package_declaration
-- | package_body
-- | package_instantiation_declaration
- procedure Parse_Package (Unit : Iir_Design_Unit)
+ function Parse_Package (Parent : Iir) return Iir
is
Loc : Location_Type;
Id : Name_Id;
+ Res : Iir;
begin
-- Skip 'package'
Scan;
@@ -8108,7 +8119,7 @@ package body Parse is
-- Skip 'body'
Scan;
- Parse_Package_Body (Unit);
+ return Parse_Package_Body (Parent);
else
Expect (Tok_Identifier);
Id := Current_Identifier;
@@ -8122,13 +8133,12 @@ package body Parse is
Scan;
if Current_Token = Tok_New then
- Set_Library_Unit
- (Unit,
- Parse_Package_Instantiation_Declaration (Id, Loc));
+ Res := Parse_Package_Instantiation_Declaration (Id, Loc);
-- Note: there is no 'end' in instantiation.
- Set_End_Location (Unit, Get_Token_Location);
+ Set_End_Location (Parent);
+ return Res;
else
- Parse_Package_Declaration (Unit, Id, Loc);
+ return Parse_Package_Declaration (Parent, Id, Loc);
end if;
end if;
end Parse_Package;
@@ -8331,7 +8341,7 @@ package body Parse is
when Tok_Architecture =>
Parse_Architecture_Body (Res);
when Tok_Package =>
- Parse_Package (Res);
+ Set_Library_Unit (Res, Parse_Package (Res));
when Tok_Configuration =>
Parse_Configuration_Declaration (Res);
when others =>
diff --git a/src/vhdl/sem.adb b/src/vhdl/sem.adb
index dab4d9f83..38dc3a0c0 100644
--- a/src/vhdl/sem.adb
+++ b/src/vhdl/sem.adb
@@ -429,10 +429,11 @@ package body Sem is
Check_Read (Get_Actual (El));
when Iir_Kind_Association_Element_Open
| Iir_Kind_Association_Element_By_Individual
- | Iir_Kind_Association_Element_Package =>
+ | Iir_Kind_Association_Element_Package
+ | Iir_Kind_Association_Element_Type =>
null;
when others =>
- Error_Kind ("sem_generic_map_association_chain(1)", El);
+ Error_Kind ("sem_generic_association_chain(1)", El);
end case;
El := Get_Chain (El);
end loop;
@@ -2548,6 +2549,17 @@ package body Sem is
null;
when Iir_Kind_Protected_Type_Body =>
null;
+ when Iir_Kind_Package_Declaration =>
+ -- LRM08 4.8 Package bodies
+ -- A package body that is not a library unit shall appear
+ -- immediately within the same declarative region as the
+ -- corresponding package declaration and textually subsequent
+ -- to that package declaration.
+ return True;
+ when Iir_Kind_Package_Body =>
+ null;
+ when Iir_Kind_Package_Instantiation_Declaration =>
+ null;
when Iir_Kind_Nature_Declaration
| Iir_Kind_Subnature_Declaration =>
null;
diff --git a/src/vhdl/sem.ads b/src/vhdl/sem.ads
index 21bf89328..12cbc13e8 100644
--- a/src/vhdl/sem.ads
+++ b/src/vhdl/sem.ads
@@ -70,6 +70,15 @@ package Sem is
-- LRM 2.2 Subprogram Bodies.
procedure Sem_Subprogram_Body (Subprg: Iir);
+ -- LRM 2.5 Package Declarations.
+ procedure Sem_Package_Declaration (Decl: Iir_Package_Declaration);
+
+ -- LRM 2.6 Package Bodies.
+ procedure Sem_Package_Body (Decl: Iir);
+
+ -- LRM08 4.9 Package Instantiation Declaration
+ procedure Sem_Package_Instantiation_Declaration (Decl : Iir);
+
-- Do late analysis checks (pure rules).
procedure Sem_Analysis_Checks_List (Unit : Iir_Design_Unit;
Emit_Warnings : Boolean);
diff --git a/src/vhdl/sem_assocs.adb b/src/vhdl/sem_assocs.adb
index 10d4f7896..8c56e971e 100644
--- a/src/vhdl/sem_assocs.adb
+++ b/src/vhdl/sem_assocs.adb
@@ -21,6 +21,7 @@ with Flags; use Flags;
with Types; use Types;
with Iirs_Utils; use Iirs_Utils;
with Sem_Names; use Sem_Names;
+with Sem_Types;
with Iir_Chains; use Iir_Chains;
with Xrefs;
@@ -33,6 +34,8 @@ package body Sem_Assocs is
case Get_Kind (Inter) is
when Iir_Kind_Interface_Package_Declaration =>
N_Assoc := Create_Iir (Iir_Kind_Association_Element_Package);
+ when Iir_Kind_Interface_Type_Declaration =>
+ N_Assoc := Create_Iir (Iir_Kind_Association_Element_Type);
when others =>
Error_Kind ("rewrite_non_object_association", Inter);
end case;
@@ -1341,29 +1344,26 @@ package body Sem_Assocs is
Match := Fully_Compatible;
end Sem_Association_Open;
- procedure Sem_Association_Package
+ procedure Sem_Association_Package_Type_Not_Finish
(Assoc : Iir;
Inter : Iir;
- Finish : Boolean;
- Match : out Compatibility_Level)
- is
- Formal : constant Iir := Get_Formal (Assoc);
- Actual : Iir;
- Package_Inter : Iir;
+ Match : out Compatibility_Level) is
begin
- if not Finish then
- if Get_Associated_Interface (Assoc) = Inter then
- Match := Fully_Compatible;
- else
- Match := Not_Compatible;
- end if;
- return;
+ -- Can be associated only once
+ if Get_Associated_Interface (Assoc) = Inter then
+ Match := Fully_Compatible;
+ else
+ Match := Not_Compatible;
end if;
+ end Sem_Association_Package_Type_Not_Finish;
+ procedure Sem_Association_Package_Type_Finish (Assoc : Iir; Inter : Iir)
+ is
+ Formal : constant Iir := Get_Formal (Assoc);
+ begin
-- Always match (as this is a generic association, there is no
-- need to resolve overload).
pragma Assert (Get_Associated_Interface (Assoc) = Inter);
- Match := Fully_Compatible;
if Formal /= Null_Iir then
pragma Assert (Get_Kind (Formal) = Iir_Kind_Simple_Name);
@@ -1372,6 +1372,24 @@ package body Sem_Assocs is
Set_Base_Name (Formal, Inter);
Xrefs.Xref_Ref (Formal, Inter);
end if;
+ end Sem_Association_Package_Type_Finish;
+
+ procedure Sem_Association_Package
+ (Assoc : Iir;
+ Inter : Iir;
+ Finish : Boolean;
+ Match : out Compatibility_Level)
+ is
+ Actual : Iir;
+ Package_Inter : Iir;
+ begin
+ if not Finish then
+ Sem_Association_Package_Type_Not_Finish (Assoc, Inter, Match);
+ return;
+ end if;
+
+ Match := Fully_Compatible;
+ Sem_Association_Package_Type_Finish (Assoc, Inter);
-- Analyze actual.
Actual := Get_Actual (Assoc);
@@ -1421,6 +1439,31 @@ package body Sem_Assocs is
return;
end Sem_Association_Package;
+ procedure Sem_Association_Type
+ (Assoc : Iir;
+ Inter : Iir;
+ Finish : Boolean;
+ Match : out Compatibility_Level)
+ is
+ Actual : Iir;
+ begin
+ if not Finish then
+ Sem_Association_Package_Type_Not_Finish (Assoc, Inter, Match);
+ return;
+ end if;
+
+ Match := Fully_Compatible;
+ Sem_Association_Package_Type_Finish (Assoc, Inter);
+ Actual := Get_Actual (Assoc);
+
+ -- LRM08 6.5.7.2 Generic map aspects
+ -- An actual associated with a formal generic type must be a subtype
+ -- indication.
+ -- FIXME: ghdl only supports type_mark!
+ Actual := Sem_Types.Sem_Subtype_Indication (Actual);
+ Set_Actual_Type (Assoc, Get_Type (Actual));
+ end Sem_Association_Type;
+
-- Associate ASSOC with interface INTERFACE
-- This sets MATCH.
procedure Sem_Association_By_Expression
@@ -1658,6 +1701,9 @@ package body Sem_Assocs is
when Iir_Kind_Association_Element_Package =>
Sem_Association_Package (Assoc, Inter, Finish, Match);
+ when Iir_Kind_Association_Element_Type =>
+ Sem_Association_Type (Assoc, Inter, Finish, Match);
+
when Iir_Kind_Association_Element_By_Expression =>
Sem_Association_By_Expression (Assoc, Inter, Finish, Match);
diff --git a/src/vhdl/sem_decls.adb b/src/vhdl/sem_decls.adb
index 43406648e..cb1fe09ab 100644
--- a/src/vhdl/sem_decls.adb
+++ b/src/vhdl/sem_decls.adb
@@ -2973,6 +2973,14 @@ package body Sem_Decls is
null;
when Iir_Kind_Protected_Type_Body =>
Sem_Protected_Type_Body (Decl);
+
+ when Iir_Kind_Package_Declaration =>
+ Sem_Package_Declaration (Decl);
+ when Iir_Kind_Package_Body =>
+ Sem_Package_Body (Decl);
+ when Iir_Kind_Package_Instantiation_Declaration =>
+ Sem_Package_Instantiation_Declaration (Decl);
+
when Iir_Kind_Nature_Declaration =>
Sem_Nature_Declaration (Decl);
when Iir_Kind_Terminal_Declaration =>
diff --git a/src/vhdl/sem_inst.adb b/src/vhdl/sem_inst.adb
index 4fd153c32..ae4a6975b 100644
--- a/src/vhdl/sem_inst.adb
+++ b/src/vhdl/sem_inst.adb
@@ -439,6 +439,8 @@ package body Sem_Inst is
when Iir_Kind_Interface_Package_Declaration =>
Set_Uninstantiated_Package_Name
(Res, Get_Uninstantiated_Package_Name (Inter));
+ when Iir_Kind_Interface_Type_Declaration =>
+ Set_Type (Res, Get_Type (Inter));
when others =>
Error_Kind ("instantiate_generic_chain", Res);
end case;
@@ -604,6 +606,16 @@ package body Sem_Inst is
Set_Instance_On_Chain (Get_Declaration_Chain (Sub_Pkg),
Get_Declaration_Chain (Sub_Inst));
end;
+ when Iir_Kind_Association_Element_Type =>
+ -- Replace the incomplete interface type by the actual subtype
+ -- indication.
+ declare
+ Inter_Type_Def : constant Iir :=
+ Get_Type (Get_Associated_Interface (Assoc));
+ Actual_Type : constant Iir := Get_Actual_Type (Assoc);
+ begin
+ Set_Instance (Inter_Type_Def, Actual_Type);
+ end;
when others =>
Error_Kind ("instantiate_generic_map_chain", Assoc);
end case;
diff --git a/src/vhdl/sem_scopes.adb b/src/vhdl/sem_scopes.adb
index d30ca4380..422bd9ba4 100644
--- a/src/vhdl/sem_scopes.adb
+++ b/src/vhdl/sem_scopes.adb
@@ -969,6 +969,7 @@ package body Sem_Scopes is
| Iir_Kind_Terminal_Declaration
| Iir_Kind_Entity_Declaration
| Iir_Kind_Package_Declaration
+ | Iir_Kind_Package_Instantiation_Declaration
| Iir_Kind_Configuration_Declaration
| Iir_Kind_Context_Declaration
| Iir_Kinds_Concurrent_Statement