diff options
Diffstat (limited to 'src/vhdl/nodes_meta.adb')
-rw-r--r-- | src/vhdl/nodes_meta.adb | 242 |
1 files changed, 199 insertions, 43 deletions
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb index 8e380ae40..cbe86fbc3 100644 --- a/src/vhdl/nodes_meta.adb +++ b/src/vhdl/nodes_meta.adb @@ -249,6 +249,9 @@ package body Nodes_Meta is Field_Name_Staticness => Type_Iir_Staticness, Field_Prefix => Type_Iir, Field_Signature_Prefix => Type_Iir, + Field_External_Pathname => Type_Iir, + Field_Pathname_Suffix => Type_Iir, + Field_Pathname_Expression => Type_Iir, Field_Slice_Subtype => Type_Iir, Field_Suffix => Type_Iir, Field_Index_Subtype => Type_Iir, @@ -782,6 +785,12 @@ package body Nodes_Meta is return "prefix"; when Field_Signature_Prefix => return "signature_prefix"; + when Field_External_Pathname => + return "external_pathname"; + when Field_Pathname_Suffix => + return "pathname_suffix"; + when Field_Pathname_Expression => + return "pathname_expression"; when Field_Slice_Subtype => return "slice_subtype"; when Field_Suffix => @@ -1320,6 +1329,20 @@ package body Nodes_Meta is return "selected_by_all_name"; when Iir_Kind_Parenthesis_Name => return "parenthesis_name"; + when Iir_Kind_External_Constant_Name => + return "external_constant_name"; + when Iir_Kind_External_Signal_Name => + return "external_signal_name"; + when Iir_Kind_External_Variable_Name => + return "external_variable_name"; + when Iir_Kind_Package_Pathname => + return "package_pathname"; + when Iir_Kind_Absolute_Pathname => + return "absolute_pathname"; + when Iir_Kind_Relative_Pathname => + return "relative_pathname"; + when Iir_Kind_Pathname_Element => + return "pathname_element"; when Iir_Kind_Base_Attribute => return "base_attribute"; when Iir_Kind_Left_Type_Attribute => @@ -1864,6 +1887,12 @@ package body Nodes_Meta is return Attr_None; when Field_Signature_Prefix => return Attr_Ref; + when Field_External_Pathname => + return Attr_None; + when Field_Pathname_Suffix => + return Attr_None; + when Field_Pathname_Expression => + return Attr_None; when Field_Slice_Subtype => return Attr_None; when Field_Suffix => @@ -3620,6 +3649,50 @@ package body Nodes_Meta is Field_Association_Chain, Field_Type, Field_Named_Entity, + -- Iir_Kind_External_Constant_Name + Field_Shared_Flag, + Field_Is_Ref, + Field_Expr_Staticness, + Field_Name_Staticness, + Field_Chain, + Field_External_Pathname, + Field_Subtype_Indication, + Field_Parent, + Field_Type, + -- Iir_Kind_External_Signal_Name + Field_Shared_Flag, + Field_Is_Ref, + Field_Expr_Staticness, + Field_Name_Staticness, + Field_Chain, + Field_External_Pathname, + Field_Subtype_Indication, + Field_Parent, + Field_Type, + -- Iir_Kind_External_Variable_Name + Field_Shared_Flag, + Field_Is_Ref, + Field_Expr_Staticness, + Field_Name_Staticness, + Field_Chain, + Field_External_Pathname, + Field_Subtype_Indication, + Field_Parent, + Field_Type, + -- Iir_Kind_Package_Pathname + Field_Identifier, + Field_Pathname_Suffix, + Field_Named_Entity, + Field_Base_Name, + -- Iir_Kind_Absolute_Pathname + Field_Pathname_Suffix, + -- Iir_Kind_Relative_Pathname + Field_Pathname_Suffix, + -- Iir_Kind_Pathname_Element + Field_Identifier, + Field_Pathname_Suffix, + Field_Pathname_Expression, + Field_Named_Entity, -- Iir_Kind_Base_Attribute Field_Prefix, Field_Type, @@ -4082,45 +4155,52 @@ package body Nodes_Meta is Iir_Kind_Operator_Symbol => 1412, Iir_Kind_Selected_By_All_Name => 1417, Iir_Kind_Parenthesis_Name => 1421, - Iir_Kind_Base_Attribute => 1423, - Iir_Kind_Left_Type_Attribute => 1428, - Iir_Kind_Right_Type_Attribute => 1433, - Iir_Kind_High_Type_Attribute => 1438, - Iir_Kind_Low_Type_Attribute => 1443, - Iir_Kind_Ascending_Type_Attribute => 1448, - Iir_Kind_Image_Attribute => 1454, - Iir_Kind_Value_Attribute => 1460, - Iir_Kind_Pos_Attribute => 1466, - Iir_Kind_Val_Attribute => 1472, - Iir_Kind_Succ_Attribute => 1478, - Iir_Kind_Pred_Attribute => 1484, - Iir_Kind_Leftof_Attribute => 1490, - Iir_Kind_Rightof_Attribute => 1496, - Iir_Kind_Delayed_Attribute => 1504, - Iir_Kind_Stable_Attribute => 1512, - Iir_Kind_Quiet_Attribute => 1520, - Iir_Kind_Transaction_Attribute => 1528, - Iir_Kind_Event_Attribute => 1532, - Iir_Kind_Active_Attribute => 1536, - Iir_Kind_Last_Event_Attribute => 1540, - Iir_Kind_Last_Active_Attribute => 1544, - Iir_Kind_Last_Value_Attribute => 1548, - Iir_Kind_Driving_Attribute => 1552, - Iir_Kind_Driving_Value_Attribute => 1556, - Iir_Kind_Behavior_Attribute => 1556, - Iir_Kind_Structure_Attribute => 1556, - Iir_Kind_Simple_Name_Attribute => 1563, - Iir_Kind_Instance_Name_Attribute => 1568, - Iir_Kind_Path_Name_Attribute => 1573, - Iir_Kind_Left_Array_Attribute => 1580, - Iir_Kind_Right_Array_Attribute => 1587, - Iir_Kind_High_Array_Attribute => 1594, - Iir_Kind_Low_Array_Attribute => 1601, - Iir_Kind_Length_Array_Attribute => 1608, - Iir_Kind_Ascending_Array_Attribute => 1615, - Iir_Kind_Range_Array_Attribute => 1622, - Iir_Kind_Reverse_Range_Array_Attribute => 1629, - Iir_Kind_Attribute_Name => 1637 + Iir_Kind_External_Constant_Name => 1430, + Iir_Kind_External_Signal_Name => 1439, + Iir_Kind_External_Variable_Name => 1448, + Iir_Kind_Package_Pathname => 1452, + Iir_Kind_Absolute_Pathname => 1453, + Iir_Kind_Relative_Pathname => 1454, + Iir_Kind_Pathname_Element => 1458, + Iir_Kind_Base_Attribute => 1460, + Iir_Kind_Left_Type_Attribute => 1465, + Iir_Kind_Right_Type_Attribute => 1470, + Iir_Kind_High_Type_Attribute => 1475, + Iir_Kind_Low_Type_Attribute => 1480, + Iir_Kind_Ascending_Type_Attribute => 1485, + Iir_Kind_Image_Attribute => 1491, + Iir_Kind_Value_Attribute => 1497, + Iir_Kind_Pos_Attribute => 1503, + Iir_Kind_Val_Attribute => 1509, + Iir_Kind_Succ_Attribute => 1515, + Iir_Kind_Pred_Attribute => 1521, + Iir_Kind_Leftof_Attribute => 1527, + Iir_Kind_Rightof_Attribute => 1533, + Iir_Kind_Delayed_Attribute => 1541, + Iir_Kind_Stable_Attribute => 1549, + Iir_Kind_Quiet_Attribute => 1557, + Iir_Kind_Transaction_Attribute => 1565, + Iir_Kind_Event_Attribute => 1569, + Iir_Kind_Active_Attribute => 1573, + Iir_Kind_Last_Event_Attribute => 1577, + Iir_Kind_Last_Active_Attribute => 1581, + Iir_Kind_Last_Value_Attribute => 1585, + Iir_Kind_Driving_Attribute => 1589, + Iir_Kind_Driving_Value_Attribute => 1593, + Iir_Kind_Behavior_Attribute => 1593, + Iir_Kind_Structure_Attribute => 1593, + Iir_Kind_Simple_Name_Attribute => 1600, + Iir_Kind_Instance_Name_Attribute => 1605, + Iir_Kind_Path_Name_Attribute => 1610, + Iir_Kind_Left_Array_Attribute => 1617, + Iir_Kind_Right_Array_Attribute => 1624, + Iir_Kind_High_Array_Attribute => 1631, + Iir_Kind_Low_Array_Attribute => 1638, + Iir_Kind_Length_Array_Attribute => 1645, + Iir_Kind_Ascending_Array_Attribute => 1652, + Iir_Kind_Range_Array_Attribute => 1659, + Iir_Kind_Reverse_Range_Array_Attribute => 1666, + Iir_Kind_Attribute_Name => 1674 ); function Get_Fields (K : Iir_Kind) return Fields_Array @@ -4748,6 +4828,12 @@ package body Nodes_Meta is return Get_Prefix (N); when Field_Signature_Prefix => return Get_Signature_Prefix (N); + when Field_External_Pathname => + return Get_External_Pathname (N); + when Field_Pathname_Suffix => + return Get_Pathname_Suffix (N); + when Field_Pathname_Expression => + return Get_Pathname_Expression (N); when Field_Slice_Subtype => return Get_Slice_Subtype (N); when Field_Suffix => @@ -5108,6 +5194,12 @@ package body Nodes_Meta is Set_Prefix (N, V); when Field_Signature_Prefix => Set_Signature_Prefix (N, V); + when Field_External_Pathname => + Set_External_Pathname (N, V); + when Field_Pathname_Suffix => + Set_Pathname_Suffix (N, V); + when Field_Pathname_Expression => + Set_Pathname_Expression (N, V); when Field_Slice_Subtype => Set_Slice_Subtype (N, V); when Field_Suffix => @@ -6540,6 +6632,9 @@ package body Nodes_Meta is | Iir_Kind_Case_Statement | Iir_Kind_Procedure_Call_Statement | Iir_Kind_If_Statement + | Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name | Iir_Kind_Delayed_Attribute | Iir_Kind_Stable_Attribute | Iir_Kind_Quiet_Attribute @@ -6678,6 +6773,9 @@ package body Nodes_Meta is | Iir_Kind_Operator_Symbol | Iir_Kind_Selected_By_All_Name | Iir_Kind_Parenthesis_Name + | Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name | Iir_Kind_Base_Attribute | Iir_Kind_Left_Type_Attribute | Iir_Kind_Right_Type_Attribute @@ -6736,7 +6834,10 @@ package body Nodes_Meta is | Iir_Kind_Interface_Variable_Declaration | Iir_Kind_Interface_Signal_Declaration | Iir_Kind_Interface_File_Declaration - | Iir_Kind_Allocator_By_Subtype => + | Iir_Kind_Allocator_By_Subtype + | Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name => return True; when others => return False; @@ -6829,6 +6930,7 @@ package body Nodes_Meta is | Iir_Kind_Selected_Name | Iir_Kind_Operator_Symbol | Iir_Kind_Selected_By_All_Name + | Iir_Kind_Package_Pathname | Iir_Kind_Left_Type_Attribute | Iir_Kind_Right_Type_Attribute | Iir_Kind_High_Type_Attribute @@ -7023,7 +7125,15 @@ package body Nodes_Meta is function Has_Shared_Flag (K : Iir_Kind) return Boolean is begin - return K = Iir_Kind_Variable_Declaration; + case K is + when Iir_Kind_Variable_Declaration + | Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name => + return True; + when others => + return False; + end case; end Has_Shared_Flag; function Has_Design_Unit (K : Iir_Kind) return Boolean is @@ -7263,6 +7373,8 @@ package body Nodes_Meta is | Iir_Kind_Simple_Name | Iir_Kind_Selected_Name | Iir_Kind_Operator_Symbol + | Iir_Kind_Package_Pathname + | Iir_Kind_Pathname_Element | Iir_Kind_Attribute_Name => return True; when others => @@ -8300,7 +8412,10 @@ package body Nodes_Meta is | Iir_Kind_Case_Statement | Iir_Kind_Procedure_Call_Statement | Iir_Kind_If_Statement - | Iir_Kind_Elsif => + | Iir_Kind_Elsif + | Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name => return True; when others => return False; @@ -8382,6 +8497,8 @@ package body Nodes_Meta is | Iir_Kind_Operator_Symbol | Iir_Kind_Selected_By_All_Name | Iir_Kind_Parenthesis_Name + | Iir_Kind_Package_Pathname + | Iir_Kind_Pathname_Element | Iir_Kind_Attribute_Name => return True; when others => @@ -8491,6 +8608,9 @@ package body Nodes_Meta is | Iir_Kind_Simple_Name | Iir_Kind_Selected_Name | Iir_Kind_Selected_By_All_Name + | Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name | Iir_Kind_Left_Type_Attribute | Iir_Kind_Right_Type_Attribute | Iir_Kind_High_Type_Attribute @@ -8701,6 +8821,9 @@ package body Nodes_Meta is | Iir_Kind_Character_Literal | Iir_Kind_Simple_Name | Iir_Kind_Selected_Name + | Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name | Iir_Kind_Left_Type_Attribute | Iir_Kind_Right_Type_Attribute | Iir_Kind_High_Type_Attribute @@ -8804,6 +8927,36 @@ package body Nodes_Meta is return K = Iir_Kind_Signature; end Has_Signature_Prefix; + function Has_External_Pathname (K : Iir_Kind) return Boolean is + begin + case K is + when Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name => + return True; + when others => + return False; + end case; + end Has_External_Pathname; + + function Has_Pathname_Suffix (K : Iir_Kind) return Boolean is + begin + case K is + when Iir_Kind_Package_Pathname + | Iir_Kind_Absolute_Pathname + | Iir_Kind_Relative_Pathname + | Iir_Kind_Pathname_Element => + return True; + when others => + return False; + end case; + end Has_Pathname_Suffix; + + function Has_Pathname_Expression (K : Iir_Kind) return Boolean is + begin + return K = Iir_Kind_Pathname_Element; + end Has_Pathname_Expression; + function Has_Slice_Subtype (K : Iir_Kind) return Boolean is begin return K = Iir_Kind_Slice_Name; @@ -9415,7 +9568,10 @@ package body Nodes_Meta is | Iir_Kind_Interface_Constant_Declaration | Iir_Kind_Interface_Variable_Declaration | Iir_Kind_Interface_Signal_Declaration - | Iir_Kind_Interface_File_Declaration => + | Iir_Kind_Interface_File_Declaration + | Iir_Kind_External_Constant_Name + | Iir_Kind_External_Signal_Name + | Iir_Kind_External_Variable_Name => return True; when others => return False; |