diff options
Diffstat (limited to 'src/vhdl')
| -rw-r--r-- | src/vhdl/iirs.ads | 2 | ||||
| -rw-r--r-- | src/vhdl/nodes_meta.adb | 378 | ||||
| -rw-r--r-- | src/vhdl/sem.adb | 37 | ||||
| -rw-r--r-- | src/vhdl/sem.ads | 10 | ||||
| -rw-r--r-- | src/vhdl/sem_names.adb | 26 | 
5 files changed, 239 insertions, 214 deletions
| diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads index 4057b6fc0..7e3479421 100644 --- a/src/vhdl/iirs.ads +++ b/src/vhdl/iirs.ads @@ -928,6 +928,8 @@ package Iirs is     --  of their body.     --   Get/Set_Need_Instance_Bodies (Flag3)     -- +   --   Get/Set_Is_Within_Flag (Flag5) +   --     --   Get/Set_Visible_Flag (Flag4)     --     --   Get/Set_End_Has_Reserved_Id (Flag8) diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb index b7a3a7789..f865ce8c1 100644 --- a/src/vhdl/nodes_meta.adb +++ b/src/vhdl/nodes_meta.adb @@ -2837,6 +2837,7 @@ package body Nodes_Meta is        Field_Macro_Expanded_Flag,        Field_Need_Instance_Bodies,        Field_Visible_Flag, +      Field_Is_Within_Flag,        Field_End_Has_Reserved_Id,        Field_End_Has_Identifier,        Field_Parent, @@ -4503,194 +4504,194 @@ package body Nodes_Meta is        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 +      Iir_Kind_Package_Declaration => 545, +      Iir_Kind_Package_Instantiation_Declaration => 559, +      Iir_Kind_Package_Body => 567, +      Iir_Kind_Architecture_Body => 579, +      Iir_Kind_Package_Header => 581, +      Iir_Kind_Unit_Declaration => 590, +      Iir_Kind_Library_Declaration => 597, +      Iir_Kind_Component_Declaration => 607, +      Iir_Kind_Attribute_Declaration => 614, +      Iir_Kind_Group_Template_Declaration => 620, +      Iir_Kind_Group_Declaration => 627, +      Iir_Kind_Element_Declaration => 635, +      Iir_Kind_Non_Object_Alias_Declaration => 643, +      Iir_Kind_Psl_Declaration => 651, +      Iir_Kind_Psl_Endpoint_Declaration => 665, +      Iir_Kind_Terminal_Declaration => 671, +      Iir_Kind_Free_Quantity_Declaration => 680, +      Iir_Kind_Across_Quantity_Declaration => 692, +      Iir_Kind_Through_Quantity_Declaration => 704, +      Iir_Kind_Enumeration_Literal => 715, +      Iir_Kind_Function_Declaration => 740, +      Iir_Kind_Procedure_Declaration => 764, +      Iir_Kind_Function_Body => 774, +      Iir_Kind_Procedure_Body => 785, +      Iir_Kind_Object_Alias_Declaration => 796, +      Iir_Kind_File_Declaration => 810, +      Iir_Kind_Guard_Signal_Declaration => 823, +      Iir_Kind_Signal_Declaration => 840, +      Iir_Kind_Variable_Declaration => 853, +      Iir_Kind_Constant_Declaration => 867, +      Iir_Kind_Iterator_Declaration => 878, +      Iir_Kind_Interface_Constant_Declaration => 894, +      Iir_Kind_Interface_Variable_Declaration => 910, +      Iir_Kind_Interface_Signal_Declaration => 931, +      Iir_Kind_Interface_File_Declaration => 947, +      Iir_Kind_Interface_Type_Declaration => 957, +      Iir_Kind_Interface_Package_Declaration => 969, +      Iir_Kind_Interface_Function_Declaration => 986, +      Iir_Kind_Interface_Procedure_Declaration => 999, +      Iir_Kind_Signal_Attribute_Declaration => 1002, +      Iir_Kind_Identity_Operator => 1006, +      Iir_Kind_Negation_Operator => 1010, +      Iir_Kind_Absolute_Operator => 1014, +      Iir_Kind_Not_Operator => 1018, +      Iir_Kind_Implicit_Condition_Operator => 1022, +      Iir_Kind_Condition_Operator => 1026, +      Iir_Kind_Reduction_And_Operator => 1030, +      Iir_Kind_Reduction_Or_Operator => 1034, +      Iir_Kind_Reduction_Nand_Operator => 1038, +      Iir_Kind_Reduction_Nor_Operator => 1042, +      Iir_Kind_Reduction_Xor_Operator => 1046, +      Iir_Kind_Reduction_Xnor_Operator => 1050, +      Iir_Kind_And_Operator => 1055, +      Iir_Kind_Or_Operator => 1060, +      Iir_Kind_Nand_Operator => 1065, +      Iir_Kind_Nor_Operator => 1070, +      Iir_Kind_Xor_Operator => 1075, +      Iir_Kind_Xnor_Operator => 1080, +      Iir_Kind_Equality_Operator => 1085, +      Iir_Kind_Inequality_Operator => 1090, +      Iir_Kind_Less_Than_Operator => 1095, +      Iir_Kind_Less_Than_Or_Equal_Operator => 1100, +      Iir_Kind_Greater_Than_Operator => 1105, +      Iir_Kind_Greater_Than_Or_Equal_Operator => 1110, +      Iir_Kind_Match_Equality_Operator => 1115, +      Iir_Kind_Match_Inequality_Operator => 1120, +      Iir_Kind_Match_Less_Than_Operator => 1125, +      Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1130, +      Iir_Kind_Match_Greater_Than_Operator => 1135, +      Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1140, +      Iir_Kind_Sll_Operator => 1145, +      Iir_Kind_Sla_Operator => 1150, +      Iir_Kind_Srl_Operator => 1155, +      Iir_Kind_Sra_Operator => 1160, +      Iir_Kind_Rol_Operator => 1165, +      Iir_Kind_Ror_Operator => 1170, +      Iir_Kind_Addition_Operator => 1175, +      Iir_Kind_Substraction_Operator => 1180, +      Iir_Kind_Concatenation_Operator => 1185, +      Iir_Kind_Multiplication_Operator => 1190, +      Iir_Kind_Division_Operator => 1195, +      Iir_Kind_Modulus_Operator => 1200, +      Iir_Kind_Remainder_Operator => 1205, +      Iir_Kind_Exponentiation_Operator => 1210, +      Iir_Kind_Function_Call => 1218, +      Iir_Kind_Aggregate => 1225, +      Iir_Kind_Parenthesis_Expression => 1228, +      Iir_Kind_Qualified_Expression => 1232, +      Iir_Kind_Type_Conversion => 1237, +      Iir_Kind_Allocator_By_Expression => 1241, +      Iir_Kind_Allocator_By_Subtype => 1246, +      Iir_Kind_Selected_Element => 1253, +      Iir_Kind_Dereference => 1258, +      Iir_Kind_Implicit_Dereference => 1263, +      Iir_Kind_Slice_Name => 1270, +      Iir_Kind_Indexed_Name => 1276, +      Iir_Kind_Psl_Expression => 1278, +      Iir_Kind_Sensitized_Process_Statement => 1299, +      Iir_Kind_Process_Statement => 1319, +      Iir_Kind_Concurrent_Simple_Signal_Assignment => 1331, +      Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1343, +      Iir_Kind_Concurrent_Selected_Signal_Assignment => 1356, +      Iir_Kind_Concurrent_Assertion_Statement => 1364, +      Iir_Kind_Concurrent_Procedure_Call_Statement => 1371, +      Iir_Kind_Psl_Assert_Statement => 1384, +      Iir_Kind_Psl_Cover_Statement => 1397, +      Iir_Kind_Block_Statement => 1410, +      Iir_Kind_If_Generate_Statement => 1421, +      Iir_Kind_Case_Generate_Statement => 1430, +      Iir_Kind_For_Generate_Statement => 1439, +      Iir_Kind_Component_Instantiation_Statement => 1450, +      Iir_Kind_Psl_Default_Clock => 1454, +      Iir_Kind_Simple_Simultaneous_Statement => 1461, +      Iir_Kind_Generate_Statement_Body => 1472, +      Iir_Kind_If_Generate_Else_Clause => 1478, +      Iir_Kind_Simple_Signal_Assignment_Statement => 1488, +      Iir_Kind_Conditional_Signal_Assignment_Statement => 1498, +      Iir_Kind_Selected_Waveform_Assignment_Statement => 1509, +      Iir_Kind_Null_Statement => 1513, +      Iir_Kind_Assertion_Statement => 1520, +      Iir_Kind_Report_Statement => 1526, +      Iir_Kind_Wait_Statement => 1534, +      Iir_Kind_Variable_Assignment_Statement => 1541, +      Iir_Kind_Conditional_Variable_Assignment_Statement => 1548, +      Iir_Kind_Return_Statement => 1554, +      Iir_Kind_For_Loop_Statement => 1563, +      Iir_Kind_While_Loop_Statement => 1572, +      Iir_Kind_Next_Statement => 1579, +      Iir_Kind_Exit_Statement => 1586, +      Iir_Kind_Case_Statement => 1594, +      Iir_Kind_Procedure_Call_Statement => 1600, +      Iir_Kind_If_Statement => 1610, +      Iir_Kind_Elsif => 1616, +      Iir_Kind_Character_Literal => 1624, +      Iir_Kind_Simple_Name => 1632, +      Iir_Kind_Selected_Name => 1641, +      Iir_Kind_Operator_Symbol => 1647, +      Iir_Kind_Reference_Name => 1650, +      Iir_Kind_External_Constant_Name => 1659, +      Iir_Kind_External_Signal_Name => 1668, +      Iir_Kind_External_Variable_Name => 1677, +      Iir_Kind_Selected_By_All_Name => 1683, +      Iir_Kind_Parenthesis_Name => 1688, +      Iir_Kind_Package_Pathname => 1692, +      Iir_Kind_Absolute_Pathname => 1693, +      Iir_Kind_Relative_Pathname => 1694, +      Iir_Kind_Pathname_Element => 1699, +      Iir_Kind_Base_Attribute => 1701, +      Iir_Kind_Subtype_Attribute => 1706, +      Iir_Kind_Element_Attribute => 1711, +      Iir_Kind_Left_Type_Attribute => 1716, +      Iir_Kind_Right_Type_Attribute => 1721, +      Iir_Kind_High_Type_Attribute => 1726, +      Iir_Kind_Low_Type_Attribute => 1731, +      Iir_Kind_Ascending_Type_Attribute => 1736, +      Iir_Kind_Image_Attribute => 1742, +      Iir_Kind_Value_Attribute => 1748, +      Iir_Kind_Pos_Attribute => 1754, +      Iir_Kind_Val_Attribute => 1760, +      Iir_Kind_Succ_Attribute => 1766, +      Iir_Kind_Pred_Attribute => 1772, +      Iir_Kind_Leftof_Attribute => 1778, +      Iir_Kind_Rightof_Attribute => 1784, +      Iir_Kind_Delayed_Attribute => 1793, +      Iir_Kind_Stable_Attribute => 1802, +      Iir_Kind_Quiet_Attribute => 1811, +      Iir_Kind_Transaction_Attribute => 1820, +      Iir_Kind_Event_Attribute => 1824, +      Iir_Kind_Active_Attribute => 1828, +      Iir_Kind_Last_Event_Attribute => 1832, +      Iir_Kind_Last_Active_Attribute => 1836, +      Iir_Kind_Last_Value_Attribute => 1840, +      Iir_Kind_Driving_Attribute => 1844, +      Iir_Kind_Driving_Value_Attribute => 1848, +      Iir_Kind_Behavior_Attribute => 1848, +      Iir_Kind_Structure_Attribute => 1848, +      Iir_Kind_Simple_Name_Attribute => 1855, +      Iir_Kind_Instance_Name_Attribute => 1860, +      Iir_Kind_Path_Name_Attribute => 1865, +      Iir_Kind_Left_Array_Attribute => 1872, +      Iir_Kind_Right_Array_Attribute => 1879, +      Iir_Kind_High_Array_Attribute => 1886, +      Iir_Kind_Low_Array_Attribute => 1893, +      Iir_Kind_Length_Array_Attribute => 1900, +      Iir_Kind_Ascending_Array_Attribute => 1907, +      Iir_Kind_Range_Array_Attribute => 1914, +      Iir_Kind_Reverse_Range_Array_Attribute => 1921, +      Iir_Kind_Attribute_Name => 1930       );     function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -10302,6 +10303,7 @@ package body Nodes_Meta is     begin        case K is           when Iir_Kind_Entity_Declaration +           | Iir_Kind_Package_Declaration             | Iir_Kind_Architecture_Body             | Iir_Kind_Enumeration_Literal             | Iir_Kind_Function_Declaration diff --git a/src/vhdl/sem.adb b/src/vhdl/sem.adb index 1e12de32c..98ae4ec6c 100644 --- a/src/vhdl/sem.adb +++ b/src/vhdl/sem.adb @@ -58,7 +58,7 @@ package body Sem is     end Add_Dependence;     --  LRM 1.1  Entity declaration. -   procedure Sem_Entity_Declaration (Entity: Iir_Entity_Declaration) is +   procedure Sem_Entity_Declaration (Entity : Iir_Entity_Declaration) is     begin        Xrefs.Xref_Decl (Entity);        Sem_Scopes.Add_Name (Entity); @@ -2638,22 +2638,24 @@ package body Sem is     end Is_Package_Macro_Expanded;     --  LRM 2.5  Package Declarations. -   procedure Sem_Package_Declaration (Decl: Iir_Package_Declaration) +   procedure Sem_Package_Declaration (Pkg : Iir_Package_Declaration)     is -      Unit : constant Iir_Design_Unit := Get_Design_Unit (Decl); -      Header : constant Iir := Get_Package_Header (Decl); +      Unit : constant Iir_Design_Unit := Get_Design_Unit (Pkg); +      Header : constant Iir := Get_Package_Header (Pkg);        Implicit : Implicit_Signal_Declaration_Type;     begin -      Sem_Scopes.Add_Name (Decl); -      Set_Visible_Flag (Decl, True); -      Xref_Decl (Decl); +      Sem_Scopes.Add_Name (Pkg); +      Set_Visible_Flag (Pkg, True); +      Xref_Decl (Pkg); + +      Set_Is_Within_Flag (Pkg, True);        --  Identify IEEE.Std_Logic_1164 for VHDL08. -      if Get_Identifier (Decl) = Std_Names.Name_Std_Logic_1164 +      if Get_Identifier (Pkg) = Std_Names.Name_Std_Logic_1164          and then (Get_Identifier (Get_Library (Get_Design_File (Unit)))                      = Std_Names.Name_Ieee)        then -         Ieee.Std_Logic_1164.Std_Logic_1164_Pkg := Decl; +         Ieee.Std_Logic_1164.Std_Logic_1164_Pkg := Pkg;        end if;        --  LRM93 10.1 Declarative Region @@ -2661,7 +2663,7 @@ package body Sem is        --     body (if any).        Open_Declarative_Region; -      Push_Signals_Declarative_Part (Implicit, Decl); +      Push_Signals_Declarative_Part (Implicit, Pkg);        if Header /= Null_Iir then           declare @@ -2676,7 +2678,7 @@ package body Sem is              if Generic_Map /= Null_Iir then                 --  Generic-mapped packages are not macro-expanded. -               Set_Macro_Expanded_Flag (Decl, False); +               Set_Macro_Expanded_Flag (Pkg, False);                 if Sem_Generic_Association_Chain (Header, Header) then                    --  For generic-mapped packages, use the actual type for @@ -2700,25 +2702,26 @@ package body Sem is              else                 --  Uninstantiated package.  Maybe macro expanded.                 Set_Macro_Expanded_Flag -                 (Decl, Is_Package_Macro_Expanded (Decl)); +                 (Pkg, Is_Package_Macro_Expanded (Pkg));              end if;           end;        else           --  Simple packages are never expanded. -         Set_Macro_Expanded_Flag (Decl, False); +         Set_Macro_Expanded_Flag (Pkg, False);        end if; -      Sem_Declaration_Chain (Decl); +      Sem_Declaration_Chain (Pkg);        --  GHDL: subprogram bodies appear in package body.        Pop_Signals_Declarative_Part (Implicit);        Close_Declarative_Region; +      Set_Is_Within_Flag (Pkg, False); -      Set_Need_Body (Decl, Package_Need_Body_P (Decl)); +      Set_Need_Body (Pkg, Package_Need_Body_P (Pkg));        if Vhdl_Std >= Vhdl_08 then           Set_Need_Instance_Bodies -           (Decl, Package_Need_Instance_Bodies_P (Decl)); +           (Pkg, Package_Need_Instance_Bodies_P (Pkg));        end if;     end Sem_Package_Declaration; @@ -2791,6 +2794,7 @@ package body Sem is        Set_Package (Decl, Package_Decl);        Xref_Body (Decl, Package_Decl);        Set_Package_Body (Package_Decl, Decl); +      Set_Is_Within_Flag (Package_Decl, True);        --  LRM93 10.1 Declarative Region        --  4. A package declaration, together with the corresponding @@ -2804,6 +2808,7 @@ package body Sem is        Check_Full_Declaration (Package_Decl, Decl);        Close_Declarative_Region; +      Set_Is_Within_Flag (Package_Decl, False);     end Sem_Package_Body;     function Sem_Uninstantiated_Package_Name (Decl : Iir) return Iir diff --git a/src/vhdl/sem.ads b/src/vhdl/sem.ads index 346b21f2c..c42301031 100644 --- a/src/vhdl/sem.ads +++ b/src/vhdl/sem.ads @@ -67,17 +67,17 @@ package Sem is     procedure Sem_Use_Clause (Clauses : Iir_Use_Clause);     --  LRM 2.1  Subprogram Declarations. -   procedure Sem_Subprogram_Specification (Subprg: Iir); -   procedure Sem_Subprogram_Declaration (Subprg: Iir); +   procedure Sem_Subprogram_Specification (Subprg : Iir); +   procedure Sem_Subprogram_Declaration (Subprg : Iir);     --  LRM 2.2  Subprogram Bodies. -   procedure Sem_Subprogram_Body (Subprg: Iir); +   procedure Sem_Subprogram_Body (Subprg : Iir);     --  LRM 2.5  Package Declarations. -   procedure Sem_Package_Declaration (Decl: Iir_Package_Declaration); +   procedure Sem_Package_Declaration (Pkg : Iir_Package_Declaration);     --  LRM 2.6  Package Bodies. -   procedure Sem_Package_Body (Decl: Iir); +   procedure Sem_Package_Body (Decl : Iir);     --  LRM08 4.9  Package Instantiation Declaration     procedure Sem_Package_Instantiation_Declaration (Decl : Iir); diff --git a/src/vhdl/sem_names.adb b/src/vhdl/sem_names.adb index 09d99d8d5..749d848fe 100644 --- a/src/vhdl/sem_names.adb +++ b/src/vhdl/sem_names.adb @@ -2195,7 +2195,7 @@ package body Sem_Names is                      (+Name, "no declaration for %i in %n", (+Suffix, +Prefix));                 end if;              else -               --  LRM93 §6.3 +               --  LRM93 6.3                 --  This form of expanded name is only allowed within the                 --  construct itself.                 --  FIXME: LRM08 12.3 Visibility h) @@ -2203,12 +2203,28 @@ package body Sem_Names is                                 Iir_Kind_Package_Declaration,                                 Iir_Kind_Package_Instantiation_Declaration)                   and then not Get_Is_Within_Flag (Prefix) -                 and then not Soft                 then -                  Error_Msg_Sem -                    (+Prefix_Loc, -                     "an expanded name is only allowed within the construct"); +                  if not Soft then +                     Error_Msg_Sem +                       (+Prefix_Loc, +                        "an expanded name is only allowed " +                          & "within the construct"); +                  end if;                    --  Hum, keep res. +               elsif Get_Kind (Prefix) = Iir_Kind_Package_Declaration +                 and then not Get_Is_Within_Flag (Prefix) +                 and then Is_Uninstantiated_Package (Prefix) +               then +                  --  LRM08 12.3 f) Visibility +                  --  For a declaration given in a package declaration, other +                  --  than in a package declaration that defines an +                  --  uninstantiated package: [...] +                  if not Soft then +                     Error_Msg_Sem +                       (+Prefix_Loc, +                        "cannot refer a declaration in an " +                          & "uninstantiated package"); +                  end if;                 end if;              end if;           when Iir_Kind_Function_Declaration => | 
