diff options
-rw-r--r-- | pyGHDL/libghdl/vhdl/nodes.py | 635 | ||||
-rw-r--r-- | pyGHDL/libghdl/vhdl/nodes_meta.py | 3 | ||||
-rw-r--r-- | src/vhdl/vhdl-elocations.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-elocations.ads | 2 | ||||
-rw-r--r-- | src/vhdl/vhdl-errors.adb | 3 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.adb | 17 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.ads | 31 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes_meta.adb | 683 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes_meta.ads | 4 | ||||
-rw-r--r-- | src/vhdl/vhdl-utils.adb | 8 | ||||
-rw-r--r-- | src/vhdl/vhdl-utils.ads | 1 |
11 files changed, 757 insertions, 631 deletions
diff --git a/pyGHDL/libghdl/vhdl/nodes.py b/pyGHDL/libghdl/vhdl/nodes.py index 9aa63deb1..3d0c43f4b 100644 --- a/pyGHDL/libghdl/vhdl/nodes.py +++ b/pyGHDL/libghdl/vhdl/nodes.py @@ -20,319 +20,320 @@ class Iir_Kind: Error = 1 Design_File = 2 Design_Unit = 3 - Library_Clause = 4 - Use_Clause = 5 - Context_Reference = 6 - Integer_Literal = 7 - Floating_Point_Literal = 8 - Null_Literal = 9 - String_Literal8 = 10 - Physical_Int_Literal = 11 - Physical_Fp_Literal = 12 - Simple_Aggregate = 13 - Overflow_Literal = 14 - Unaffected_Waveform = 15 - Waveform_Element = 16 - Conditional_Waveform = 17 - Conditional_Expression = 18 - Association_Element_By_Expression = 19 - Association_Element_By_Individual = 20 - Association_Element_Open = 21 - Association_Element_Package = 22 - Association_Element_Type = 23 - Association_Element_Subprogram = 24 - Association_Element_Terminal = 25 - Choice_By_Range = 26 - Choice_By_Expression = 27 - Choice_By_Others = 28 - Choice_By_None = 29 - Choice_By_Name = 30 - Entity_Aspect_Entity = 31 - Entity_Aspect_Configuration = 32 - Entity_Aspect_Open = 33 - Psl_Hierarchical_Name = 34 - Block_Configuration = 35 - Block_Header = 36 - Component_Configuration = 37 - Binding_Indication = 38 - Entity_Class = 39 - Attribute_Value = 40 - Signature = 41 - Aggregate_Info = 42 - Procedure_Call = 43 - Record_Element_Constraint = 44 - Array_Element_Resolution = 45 - Record_Resolution = 46 - Record_Element_Resolution = 47 - Break_Element = 48 - Attribute_Specification = 49 - Disconnection_Specification = 50 - Step_Limit_Specification = 51 - Configuration_Specification = 52 - Access_Type_Definition = 53 - Incomplete_Type_Definition = 54 - Interface_Type_Definition = 55 - File_Type_Definition = 56 - Protected_Type_Declaration = 57 - Record_Type_Definition = 58 - Array_Type_Definition = 59 - Array_Subtype_Definition = 60 - Record_Subtype_Definition = 61 - Access_Subtype_Definition = 62 - Physical_Subtype_Definition = 63 - Floating_Subtype_Definition = 64 - Integer_Subtype_Definition = 65 - Enumeration_Subtype_Definition = 66 - Enumeration_Type_Definition = 67 - Integer_Type_Definition = 68 - Floating_Type_Definition = 69 - Physical_Type_Definition = 70 - Range_Expression = 71 - Protected_Type_Body = 72 - Wildcard_Type_Definition = 73 - Subtype_Definition = 74 - Scalar_Nature_Definition = 75 - Record_Nature_Definition = 76 - Array_Nature_Definition = 77 - Array_Subnature_Definition = 78 - Overload_List = 79 - Entity_Declaration = 80 - Configuration_Declaration = 81 - Context_Declaration = 82 - Package_Declaration = 83 - Package_Instantiation_Declaration = 84 - Vmode_Declaration = 85 - Vprop_Declaration = 86 - Vunit_Declaration = 87 - Package_Body = 88 - Architecture_Body = 89 - Type_Declaration = 90 - Anonymous_Type_Declaration = 91 - Subtype_Declaration = 92 - Nature_Declaration = 93 - Subnature_Declaration = 94 - Package_Header = 95 - Unit_Declaration = 96 - Library_Declaration = 97 - Component_Declaration = 98 - Attribute_Declaration = 99 - Group_Template_Declaration = 100 - Group_Declaration = 101 - Element_Declaration = 102 - Nature_Element_Declaration = 103 - Non_Object_Alias_Declaration = 104 - Psl_Declaration = 105 - Psl_Endpoint_Declaration = 106 - Enumeration_Literal = 107 - Function_Declaration = 108 - Procedure_Declaration = 109 - Function_Body = 110 - Procedure_Body = 111 - Function_Instantiation_Declaration = 112 - Procedure_Instantiation_Declaration = 113 - Terminal_Declaration = 114 - Object_Alias_Declaration = 115 - Free_Quantity_Declaration = 116 - Spectrum_Quantity_Declaration = 117 - Noise_Quantity_Declaration = 118 - Across_Quantity_Declaration = 119 - Through_Quantity_Declaration = 120 - File_Declaration = 121 - Guard_Signal_Declaration = 122 - Signal_Declaration = 123 - Variable_Declaration = 124 - Constant_Declaration = 125 - Iterator_Declaration = 126 - Interface_Constant_Declaration = 127 - Interface_Variable_Declaration = 128 - Interface_Signal_Declaration = 129 - Interface_File_Declaration = 130 - Interface_Quantity_Declaration = 131 - Interface_Terminal_Declaration = 132 - Interface_Type_Declaration = 133 - Interface_Package_Declaration = 134 - Interface_Function_Declaration = 135 - Interface_Procedure_Declaration = 136 - Anonymous_Signal_Declaration = 137 - Signal_Attribute_Declaration = 138 - Identity_Operator = 139 - Negation_Operator = 140 - Absolute_Operator = 141 - Not_Operator = 142 - Implicit_Condition_Operator = 143 - Condition_Operator = 144 - Reduction_And_Operator = 145 - Reduction_Or_Operator = 146 - Reduction_Nand_Operator = 147 - Reduction_Nor_Operator = 148 - Reduction_Xor_Operator = 149 - Reduction_Xnor_Operator = 150 - And_Operator = 151 - Or_Operator = 152 - Nand_Operator = 153 - Nor_Operator = 154 - Xor_Operator = 155 - Xnor_Operator = 156 - Equality_Operator = 157 - Inequality_Operator = 158 - Less_Than_Operator = 159 - Less_Than_Or_Equal_Operator = 160 - Greater_Than_Operator = 161 - Greater_Than_Or_Equal_Operator = 162 - Match_Equality_Operator = 163 - Match_Inequality_Operator = 164 - Match_Less_Than_Operator = 165 - Match_Less_Than_Or_Equal_Operator = 166 - Match_Greater_Than_Operator = 167 - Match_Greater_Than_Or_Equal_Operator = 168 - Sll_Operator = 169 - Sla_Operator = 170 - Srl_Operator = 171 - Sra_Operator = 172 - Rol_Operator = 173 - Ror_Operator = 174 - Addition_Operator = 175 - Substraction_Operator = 176 - Concatenation_Operator = 177 - Multiplication_Operator = 178 - Division_Operator = 179 - Modulus_Operator = 180 - Remainder_Operator = 181 - Exponentiation_Operator = 182 - Function_Call = 183 - Aggregate = 184 - Parenthesis_Expression = 185 - Qualified_Expression = 186 - Type_Conversion = 187 - Allocator_By_Expression = 188 - Allocator_By_Subtype = 189 - Selected_Element = 190 - Dereference = 191 - Implicit_Dereference = 192 - Slice_Name = 193 - Indexed_Name = 194 - Psl_Prev = 195 - Psl_Stable = 196 - Psl_Rose = 197 - Psl_Fell = 198 - Psl_Onehot = 199 - Psl_Onehot0 = 200 - Psl_Expression = 201 - Sensitized_Process_Statement = 202 - Process_Statement = 203 - Concurrent_Simple_Signal_Assignment = 204 - Concurrent_Conditional_Signal_Assignment = 205 - Concurrent_Selected_Signal_Assignment = 206 - Concurrent_Assertion_Statement = 207 - Concurrent_Procedure_Call_Statement = 208 - Concurrent_Break_Statement = 209 - Psl_Assert_Directive = 210 - Psl_Assume_Directive = 211 - Psl_Cover_Directive = 212 - Psl_Restrict_Directive = 213 - Block_Statement = 214 - If_Generate_Statement = 215 - Case_Generate_Statement = 216 - For_Generate_Statement = 217 - Component_Instantiation_Statement = 218 - Psl_Default_Clock = 219 - Generate_Statement_Body = 220 - If_Generate_Else_Clause = 221 - Simple_Simultaneous_Statement = 222 - Simultaneous_Null_Statement = 223 - Simultaneous_Procedural_Statement = 224 - Simultaneous_Case_Statement = 225 - Simultaneous_If_Statement = 226 - Simultaneous_Elsif = 227 - Simple_Signal_Assignment_Statement = 228 - Conditional_Signal_Assignment_Statement = 229 - Selected_Waveform_Assignment_Statement = 230 - Signal_Force_Assignment_Statement = 231 - Signal_Release_Assignment_Statement = 232 - Null_Statement = 233 - Assertion_Statement = 234 - Report_Statement = 235 - Wait_Statement = 236 - Variable_Assignment_Statement = 237 - Conditional_Variable_Assignment_Statement = 238 - Return_Statement = 239 - For_Loop_Statement = 240 - While_Loop_Statement = 241 - Next_Statement = 242 - Exit_Statement = 243 - Case_Statement = 244 - Procedure_Call_Statement = 245 - Break_Statement = 246 - If_Statement = 247 - Elsif = 248 - Character_Literal = 249 - Simple_Name = 250 - Selected_Name = 251 - Operator_Symbol = 252 - Reference_Name = 253 - External_Constant_Name = 254 - External_Signal_Name = 255 - External_Variable_Name = 256 - Selected_By_All_Name = 257 - Parenthesis_Name = 258 - Package_Pathname = 259 - Absolute_Pathname = 260 - Relative_Pathname = 261 - Pathname_Element = 262 - Base_Attribute = 263 - Subtype_Attribute = 264 - Element_Attribute = 265 - Across_Attribute = 266 - Through_Attribute = 267 - Nature_Reference_Attribute = 268 - Left_Type_Attribute = 269 - Right_Type_Attribute = 270 - High_Type_Attribute = 271 - Low_Type_Attribute = 272 - Ascending_Type_Attribute = 273 - Image_Attribute = 274 - Value_Attribute = 275 - Pos_Attribute = 276 - Val_Attribute = 277 - Succ_Attribute = 278 - Pred_Attribute = 279 - Leftof_Attribute = 280 - Rightof_Attribute = 281 - Signal_Slew_Attribute = 282 - Quantity_Slew_Attribute = 283 - Ramp_Attribute = 284 - Zoh_Attribute = 285 - Ltf_Attribute = 286 - Ztf_Attribute = 287 - Dot_Attribute = 288 - Integ_Attribute = 289 - Above_Attribute = 290 - Quantity_Delayed_Attribute = 291 - Delayed_Attribute = 292 - Stable_Attribute = 293 - Quiet_Attribute = 294 - Transaction_Attribute = 295 - Event_Attribute = 296 - Active_Attribute = 297 - Last_Event_Attribute = 298 - Last_Active_Attribute = 299 - Last_Value_Attribute = 300 - Driving_Attribute = 301 - Driving_Value_Attribute = 302 - Behavior_Attribute = 303 - Structure_Attribute = 304 - Simple_Name_Attribute = 305 - Instance_Name_Attribute = 306 - Path_Name_Attribute = 307 - Left_Array_Attribute = 308 - Right_Array_Attribute = 309 - High_Array_Attribute = 310 - Low_Array_Attribute = 311 - Length_Array_Attribute = 312 - Ascending_Array_Attribute = 313 - Range_Array_Attribute = 314 - Reverse_Range_Array_Attribute = 315 - Attribute_Name = 316 + Foreign_Module = 4 + Library_Clause = 5 + Use_Clause = 6 + Context_Reference = 7 + Integer_Literal = 8 + Floating_Point_Literal = 9 + Null_Literal = 10 + String_Literal8 = 11 + Physical_Int_Literal = 12 + Physical_Fp_Literal = 13 + Simple_Aggregate = 14 + Overflow_Literal = 15 + Unaffected_Waveform = 16 + Waveform_Element = 17 + Conditional_Waveform = 18 + Conditional_Expression = 19 + Association_Element_By_Expression = 20 + Association_Element_By_Individual = 21 + Association_Element_Open = 22 + Association_Element_Package = 23 + Association_Element_Type = 24 + Association_Element_Subprogram = 25 + Association_Element_Terminal = 26 + Choice_By_Range = 27 + Choice_By_Expression = 28 + Choice_By_Others = 29 + Choice_By_None = 30 + Choice_By_Name = 31 + Entity_Aspect_Entity = 32 + Entity_Aspect_Configuration = 33 + Entity_Aspect_Open = 34 + Psl_Hierarchical_Name = 35 + Block_Configuration = 36 + Block_Header = 37 + Component_Configuration = 38 + Binding_Indication = 39 + Entity_Class = 40 + Attribute_Value = 41 + Signature = 42 + Aggregate_Info = 43 + Procedure_Call = 44 + Record_Element_Constraint = 45 + Array_Element_Resolution = 46 + Record_Resolution = 47 + Record_Element_Resolution = 48 + Break_Element = 49 + Attribute_Specification = 50 + Disconnection_Specification = 51 + Step_Limit_Specification = 52 + Configuration_Specification = 53 + Access_Type_Definition = 54 + Incomplete_Type_Definition = 55 + Interface_Type_Definition = 56 + File_Type_Definition = 57 + Protected_Type_Declaration = 58 + Record_Type_Definition = 59 + Array_Type_Definition = 60 + Array_Subtype_Definition = 61 + Record_Subtype_Definition = 62 + Access_Subtype_Definition = 63 + Physical_Subtype_Definition = 64 + Floating_Subtype_Definition = 65 + Integer_Subtype_Definition = 66 + Enumeration_Subtype_Definition = 67 + Enumeration_Type_Definition = 68 + Integer_Type_Definition = 69 + Floating_Type_Definition = 70 + Physical_Type_Definition = 71 + Range_Expression = 72 + Protected_Type_Body = 73 + Wildcard_Type_Definition = 74 + Subtype_Definition = 75 + Scalar_Nature_Definition = 76 + Record_Nature_Definition = 77 + Array_Nature_Definition = 78 + Array_Subnature_Definition = 79 + Overload_List = 80 + Entity_Declaration = 81 + Configuration_Declaration = 82 + Context_Declaration = 83 + Package_Declaration = 84 + Package_Instantiation_Declaration = 85 + Vmode_Declaration = 86 + Vprop_Declaration = 87 + Vunit_Declaration = 88 + Package_Body = 89 + Architecture_Body = 90 + Type_Declaration = 91 + Anonymous_Type_Declaration = 92 + Subtype_Declaration = 93 + Nature_Declaration = 94 + Subnature_Declaration = 95 + Package_Header = 96 + Unit_Declaration = 97 + Library_Declaration = 98 + Component_Declaration = 99 + Attribute_Declaration = 100 + Group_Template_Declaration = 101 + Group_Declaration = 102 + Element_Declaration = 103 + Nature_Element_Declaration = 104 + Non_Object_Alias_Declaration = 105 + Psl_Declaration = 106 + Psl_Endpoint_Declaration = 107 + Enumeration_Literal = 108 + Function_Declaration = 109 + Procedure_Declaration = 110 + Function_Body = 111 + Procedure_Body = 112 + Function_Instantiation_Declaration = 113 + Procedure_Instantiation_Declaration = 114 + Terminal_Declaration = 115 + Object_Alias_Declaration = 116 + Free_Quantity_Declaration = 117 + Spectrum_Quantity_Declaration = 118 + Noise_Quantity_Declaration = 119 + Across_Quantity_Declaration = 120 + Through_Quantity_Declaration = 121 + File_Declaration = 122 + Guard_Signal_Declaration = 123 + Signal_Declaration = 124 + Variable_Declaration = 125 + Constant_Declaration = 126 + Iterator_Declaration = 127 + Interface_Constant_Declaration = 128 + Interface_Variable_Declaration = 129 + Interface_Signal_Declaration = 130 + Interface_File_Declaration = 131 + Interface_Quantity_Declaration = 132 + Interface_Terminal_Declaration = 133 + Interface_Type_Declaration = 134 + Interface_Package_Declaration = 135 + Interface_Function_Declaration = 136 + Interface_Procedure_Declaration = 137 + Anonymous_Signal_Declaration = 138 + Signal_Attribute_Declaration = 139 + Identity_Operator = 140 + Negation_Operator = 141 + Absolute_Operator = 142 + Not_Operator = 143 + Implicit_Condition_Operator = 144 + Condition_Operator = 145 + Reduction_And_Operator = 146 + Reduction_Or_Operator = 147 + Reduction_Nand_Operator = 148 + Reduction_Nor_Operator = 149 + Reduction_Xor_Operator = 150 + Reduction_Xnor_Operator = 151 + And_Operator = 152 + Or_Operator = 153 + Nand_Operator = 154 + Nor_Operator = 155 + Xor_Operator = 156 + Xnor_Operator = 157 + Equality_Operator = 158 + Inequality_Operator = 159 + Less_Than_Operator = 160 + Less_Than_Or_Equal_Operator = 161 + Greater_Than_Operator = 162 + Greater_Than_Or_Equal_Operator = 163 + Match_Equality_Operator = 164 + Match_Inequality_Operator = 165 + Match_Less_Than_Operator = 166 + Match_Less_Than_Or_Equal_Operator = 167 + Match_Greater_Than_Operator = 168 + Match_Greater_Than_Or_Equal_Operator = 169 + Sll_Operator = 170 + Sla_Operator = 171 + Srl_Operator = 172 + Sra_Operator = 173 + Rol_Operator = 174 + Ror_Operator = 175 + Addition_Operator = 176 + Substraction_Operator = 177 + Concatenation_Operator = 178 + Multiplication_Operator = 179 + Division_Operator = 180 + Modulus_Operator = 181 + Remainder_Operator = 182 + Exponentiation_Operator = 183 + Function_Call = 184 + Aggregate = 185 + Parenthesis_Expression = 186 + Qualified_Expression = 187 + Type_Conversion = 188 + Allocator_By_Expression = 189 + Allocator_By_Subtype = 190 + Selected_Element = 191 + Dereference = 192 + Implicit_Dereference = 193 + Slice_Name = 194 + Indexed_Name = 195 + Psl_Prev = 196 + Psl_Stable = 197 + Psl_Rose = 198 + Psl_Fell = 199 + Psl_Onehot = 200 + Psl_Onehot0 = 201 + Psl_Expression = 202 + Sensitized_Process_Statement = 203 + Process_Statement = 204 + Concurrent_Simple_Signal_Assignment = 205 + Concurrent_Conditional_Signal_Assignment = 206 + Concurrent_Selected_Signal_Assignment = 207 + Concurrent_Assertion_Statement = 208 + Concurrent_Procedure_Call_Statement = 209 + Concurrent_Break_Statement = 210 + Psl_Assert_Directive = 211 + Psl_Assume_Directive = 212 + Psl_Cover_Directive = 213 + Psl_Restrict_Directive = 214 + Block_Statement = 215 + If_Generate_Statement = 216 + Case_Generate_Statement = 217 + For_Generate_Statement = 218 + Component_Instantiation_Statement = 219 + Psl_Default_Clock = 220 + Generate_Statement_Body = 221 + If_Generate_Else_Clause = 222 + Simple_Simultaneous_Statement = 223 + Simultaneous_Null_Statement = 224 + Simultaneous_Procedural_Statement = 225 + Simultaneous_Case_Statement = 226 + Simultaneous_If_Statement = 227 + Simultaneous_Elsif = 228 + Simple_Signal_Assignment_Statement = 229 + Conditional_Signal_Assignment_Statement = 230 + Selected_Waveform_Assignment_Statement = 231 + Signal_Force_Assignment_Statement = 232 + Signal_Release_Assignment_Statement = 233 + Null_Statement = 234 + Assertion_Statement = 235 + Report_Statement = 236 + Wait_Statement = 237 + Variable_Assignment_Statement = 238 + Conditional_Variable_Assignment_Statement = 239 + Return_Statement = 240 + For_Loop_Statement = 241 + While_Loop_Statement = 242 + Next_Statement = 243 + Exit_Statement = 244 + Case_Statement = 245 + Procedure_Call_Statement = 246 + Break_Statement = 247 + If_Statement = 248 + Elsif = 249 + Character_Literal = 250 + Simple_Name = 251 + Selected_Name = 252 + Operator_Symbol = 253 + Reference_Name = 254 + External_Constant_Name = 255 + External_Signal_Name = 256 + External_Variable_Name = 257 + Selected_By_All_Name = 258 + Parenthesis_Name = 259 + Package_Pathname = 260 + Absolute_Pathname = 261 + Relative_Pathname = 262 + Pathname_Element = 263 + Base_Attribute = 264 + Subtype_Attribute = 265 + Element_Attribute = 266 + Across_Attribute = 267 + Through_Attribute = 268 + Nature_Reference_Attribute = 269 + Left_Type_Attribute = 270 + Right_Type_Attribute = 271 + High_Type_Attribute = 272 + Low_Type_Attribute = 273 + Ascending_Type_Attribute = 274 + Image_Attribute = 275 + Value_Attribute = 276 + Pos_Attribute = 277 + Val_Attribute = 278 + Succ_Attribute = 279 + Pred_Attribute = 280 + Leftof_Attribute = 281 + Rightof_Attribute = 282 + Signal_Slew_Attribute = 283 + Quantity_Slew_Attribute = 284 + Ramp_Attribute = 285 + Zoh_Attribute = 286 + Ltf_Attribute = 287 + Ztf_Attribute = 288 + Dot_Attribute = 289 + Integ_Attribute = 290 + Above_Attribute = 291 + Quantity_Delayed_Attribute = 292 + Delayed_Attribute = 293 + Stable_Attribute = 294 + Quiet_Attribute = 295 + Transaction_Attribute = 296 + Event_Attribute = 297 + Active_Attribute = 298 + Last_Event_Attribute = 299 + Last_Active_Attribute = 300 + Last_Value_Attribute = 301 + Driving_Attribute = 302 + Driving_Value_Attribute = 303 + Behavior_Attribute = 304 + Structure_Attribute = 305 + Simple_Name_Attribute = 306 + Instance_Name_Attribute = 307 + Path_Name_Attribute = 308 + Left_Array_Attribute = 309 + Right_Array_Attribute = 310 + High_Array_Attribute = 311 + Low_Array_Attribute = 312 + Length_Array_Attribute = 313 + Ascending_Array_Attribute = 314 + Range_Array_Attribute = 315 + Reverse_Range_Array_Attribute = 316 + Attribute_Name = 317 @export @@ -350,6 +351,11 @@ class Iir_Kinds: Iir_Kind.Architecture_Body, ] + Design_Unit = [ + Iir_Kind.Design_Unit, + Iir_Kind.Foreign_Module, + ] + Primary_Unit = [ Iir_Kind.Entity_Declaration, Iir_Kind.Configuration_Declaration, @@ -2883,3 +2889,6 @@ Set_Clock_Expression = libghdl.vhdl__nodes__set_clock_expression Get_Default_Clock = libghdl.vhdl__nodes__get_default_clock Set_Default_Clock = libghdl.vhdl__nodes__set_default_clock + +Get_Foreign_Node = libghdl.vhdl__nodes__get_foreign_node +Set_Foreign_Node = libghdl.vhdl__nodes__set_foreign_node diff --git a/pyGHDL/libghdl/vhdl/nodes_meta.py b/pyGHDL/libghdl/vhdl/nodes_meta.py index 255aac29b..97f2b31d3 100644 --- a/pyGHDL/libghdl/vhdl/nodes_meta.py +++ b/pyGHDL/libghdl/vhdl/nodes_meta.py @@ -440,6 +440,7 @@ class fields: Count_Expression = 367 Clock_Expression = 368 Default_Clock = 369 + Foreign_Node = 370 Get_Boolean = libghdl.vhdl__nodes_meta__get_boolean @@ -1308,3 +1309,5 @@ Has_Count_Expression = libghdl.vhdl__nodes_meta__has_count_expression Has_Clock_Expression = libghdl.vhdl__nodes_meta__has_clock_expression Has_Default_Clock = libghdl.vhdl__nodes_meta__has_default_clock + +Has_Foreign_Node = libghdl.vhdl__nodes_meta__has_foreign_node diff --git a/src/vhdl/vhdl-elocations.adb b/src/vhdl/vhdl-elocations.adb index c00aa0c13..059e02e8b 100644 --- a/src/vhdl/vhdl-elocations.adb +++ b/src/vhdl/vhdl-elocations.adb @@ -207,6 +207,7 @@ package body Vhdl.Elocations is | Iir_Kind_Error | Iir_Kind_Design_File | Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module | Iir_Kind_Use_Clause | Iir_Kind_Context_Reference | Iir_Kind_Integer_Literal diff --git a/src/vhdl/vhdl-elocations.ads b/src/vhdl/vhdl-elocations.ads index 8358645bf..51a9d7038 100644 --- a/src/vhdl/vhdl-elocations.ads +++ b/src/vhdl/vhdl-elocations.ads @@ -124,6 +124,8 @@ package Vhdl.Elocations is -- Declarations -- ------------------- + -- Iir_Kind_Foreign_Module (None) + -- Iir_Kind_Entity_Declaration (L6) -- -- Get/Set_Start_Location (Field1) diff --git a/src/vhdl/vhdl-errors.adb b/src/vhdl/vhdl-errors.adb index a03dfe1ab..69e4a0860 100644 --- a/src/vhdl/vhdl-errors.adb +++ b/src/vhdl/vhdl-errors.adb @@ -522,6 +522,9 @@ package body Vhdl.Errors is | Iir_Kind_Function_Body => return "subprogram body"; + when Iir_Kind_Foreign_Module => + return Disp_Identifier (Node, "foreign module"); + when Iir_Kind_Package_Declaration => return Disp_Identifier (Node, "package"); when Iir_Kind_Package_Body => diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb index d4ed0e97b..8acd7f6ac 100644 --- a/src/vhdl/vhdl-nodes.adb +++ b/src/vhdl/vhdl-nodes.adb @@ -1241,6 +1241,7 @@ package body Vhdl.Nodes is return Format_Short; when Iir_Kind_Design_File | Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module | Iir_Kind_Block_Header | Iir_Kind_Binding_Indication | Iir_Kind_Signature @@ -7356,4 +7357,20 @@ package body Vhdl.Nodes is Set_Field3 (N, Clk); end Set_Default_Clock; + function Get_Foreign_Node (N : Iir) return Int32 is + begin + pragma Assert (N /= Null_Iir); + pragma Assert (Has_Foreign_Node (Get_Kind (N)), + "no field Foreign_Node"); + return Iir_To_Int32 (Get_Field1 (N)); + end Get_Foreign_Node; + + procedure Set_Foreign_Node (N : Iir; En : Int32) is + begin + pragma Assert (N /= Null_Iir); + pragma Assert (Has_Foreign_Node (Get_Kind (N)), + "no field Foreign_Node"); + Set_Field1 (N, Int32_To_Iir (En)); + end Set_Foreign_Node; + end Vhdl.Nodes; diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index d86ebdf86..7d79ca43d 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -203,6 +203,7 @@ package Vhdl.Nodes is -- -- Get/Set_Last_Design_Unit (Field6) -- + -- Source file entry for this file. -- Get/Set_Design_File_Source (Field7) -- -- Identifier for the design file file name and dirname. @@ -266,6 +267,25 @@ package Vhdl.Nodes is -- Get/Set_Configuration_Mark_Flag (Flag4) -- Get/Set_Configuration_Done_Flag (Flag5) + -- Iir_Kind_Foreign_Module (Medium) + -- + -- Get/Set_Design_File (Field0) + -- Get/Set_Parent (Alias Field0) + -- + -- Get/Set_Identifier (Field3) + -- + -- Get/Set_Foreign_Node (Field1) + -- + -- Get/Set_Date (Field4) + -- + -- Get/Set_Chain (Field2) + -- + -- Get/Set_Hash_Chain (Field7) + -- + -- Get/Set_Date_State (State1) + -- + -- Get/Set_Elab_Flag (Flag3) + -- Iir_Kind_Library_Clause (Short) -- -- LRM08 13.2 Design libraries @@ -4821,7 +4841,10 @@ package Vhdl.Nodes is Iir_Kind_Error, Iir_Kind_Design_File, + Iir_Kind_Design_Unit, + Iir_Kind_Foreign_Module, + Iir_Kind_Library_Clause, Iir_Kind_Use_Clause, Iir_Kind_Context_Reference, @@ -6351,6 +6374,10 @@ package Vhdl.Nodes is --Iir_Kind_Package_Body Iir_Kind_Architecture_Body; + subtype Iir_Kinds_Design_Unit is Iir_Kind range + Iir_Kind_Design_Unit .. + Iir_Kind_Foreign_Module; + subtype Iir_Kinds_Primary_Unit is Iir_Kind range Iir_Kind_Entity_Declaration .. --Iir_Kind_Configuration_Declaration @@ -9252,4 +9279,8 @@ package Vhdl.Nodes is -- Field: Field3 Ref function Get_Default_Clock (N : Iir) return Iir; procedure Set_Default_Clock (N : Iir; Clk : Iir); + + -- Field: Field1 (uc) + function Get_Foreign_Node (N : Iir) return Int32; + procedure Set_Foreign_Node (N : Iir; En : Int32); end Vhdl.Nodes; diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index dddfbb467..bd85e083c 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -386,7 +386,8 @@ package body Vhdl.Nodes_Meta is Field_PSL_EOS_Flag => Type_Boolean, Field_Count_Expression => Type_Iir, Field_Clock_Expression => Type_Iir, - Field_Default_Clock => Type_Iir + Field_Default_Clock => Type_Iir, + Field_Foreign_Node => Type_Int32 ); function Get_Field_Type (F : Fields_Enum) return Types_Enum is @@ -1137,6 +1138,8 @@ package body Vhdl.Nodes_Meta is return "clock_expression"; when Field_Default_Clock => return "default_clock"; + when Field_Foreign_Node => + return "foreign_node"; end case; end Get_Field_Image; @@ -1151,6 +1154,8 @@ package body Vhdl.Nodes_Meta is return "design_file"; when Iir_Kind_Design_Unit => return "design_unit"; + when Iir_Kind_Foreign_Module => + return "foreign_module"; when Iir_Kind_Library_Clause => return "library_clause"; when Iir_Kind_Use_Clause => @@ -2523,6 +2528,8 @@ package body Vhdl.Nodes_Meta is return Attr_None; when Field_Default_Clock => return Attr_Ref; + when Field_Foreign_Node => + return Attr_None; end case; end Get_Field_Attribute; @@ -2566,6 +2573,15 @@ package body Vhdl.Nodes_Meta is Field_Hash_Chain, Field_Dependence_List, Field_Analysis_Checks_List, + -- Iir_Kind_Foreign_Module + Field_Foreign_Node, + Field_Identifier, + Field_Date, + Field_Elab_Flag, + Field_Date_State, + Field_Design_File, + Field_Chain, + Field_Hash_Chain, -- Iir_Kind_Library_Clause Field_Identifier, Field_Has_Identifier_List, @@ -5232,319 +5248,320 @@ package body Vhdl.Nodes_Meta is Iir_Kind_Error => 6, Iir_Kind_Design_File => 17, Iir_Kind_Design_Unit => 33, - Iir_Kind_Library_Clause => 38, - Iir_Kind_Use_Clause => 42, - Iir_Kind_Context_Reference => 46, - Iir_Kind_Integer_Literal => 51, - Iir_Kind_Floating_Point_Literal => 56, - Iir_Kind_Null_Literal => 58, - Iir_Kind_String_Literal8 => 69, - Iir_Kind_Physical_Int_Literal => 75, - Iir_Kind_Physical_Fp_Literal => 81, - Iir_Kind_Simple_Aggregate => 86, - Iir_Kind_Overflow_Literal => 89, - Iir_Kind_Unaffected_Waveform => 90, - Iir_Kind_Waveform_Element => 93, - Iir_Kind_Conditional_Waveform => 97, - Iir_Kind_Conditional_Expression => 101, - Iir_Kind_Association_Element_By_Expression => 109, - Iir_Kind_Association_Element_By_Individual => 118, - Iir_Kind_Association_Element_Open => 124, - Iir_Kind_Association_Element_Package => 130, - Iir_Kind_Association_Element_Type => 138, - Iir_Kind_Association_Element_Subprogram => 144, - Iir_Kind_Association_Element_Terminal => 150, - Iir_Kind_Choice_By_Range => 158, - Iir_Kind_Choice_By_Expression => 166, - Iir_Kind_Choice_By_Others => 172, - Iir_Kind_Choice_By_None => 178, - Iir_Kind_Choice_By_Name => 185, - Iir_Kind_Entity_Aspect_Entity => 187, - Iir_Kind_Entity_Aspect_Configuration => 188, - Iir_Kind_Entity_Aspect_Open => 188, - Iir_Kind_Psl_Hierarchical_Name => 190, - Iir_Kind_Block_Configuration => 196, - Iir_Kind_Block_Header => 200, - Iir_Kind_Component_Configuration => 207, - Iir_Kind_Binding_Indication => 211, - Iir_Kind_Entity_Class => 213, - Iir_Kind_Attribute_Value => 221, - Iir_Kind_Signature => 224, - Iir_Kind_Aggregate_Info => 231, - Iir_Kind_Procedure_Call => 235, - Iir_Kind_Record_Element_Constraint => 243, - Iir_Kind_Array_Element_Resolution => 245, - Iir_Kind_Record_Resolution => 246, - Iir_Kind_Record_Element_Resolution => 249, - Iir_Kind_Break_Element => 253, - Iir_Kind_Attribute_Specification => 262, - Iir_Kind_Disconnection_Specification => 268, - Iir_Kind_Step_Limit_Specification => 274, - Iir_Kind_Configuration_Specification => 280, - Iir_Kind_Access_Type_Definition => 287, - Iir_Kind_Incomplete_Type_Definition => 294, - Iir_Kind_Interface_Type_Definition => 300, - Iir_Kind_File_Type_Definition => 306, - Iir_Kind_Protected_Type_Declaration => 315, - Iir_Kind_Record_Type_Definition => 325, - Iir_Kind_Array_Type_Definition => 336, - Iir_Kind_Array_Subtype_Definition => 353, - Iir_Kind_Record_Subtype_Definition => 366, - Iir_Kind_Access_Subtype_Definition => 374, - Iir_Kind_Physical_Subtype_Definition => 384, - Iir_Kind_Floating_Subtype_Definition => 395, - Iir_Kind_Integer_Subtype_Definition => 405, - Iir_Kind_Enumeration_Subtype_Definition => 415, - Iir_Kind_Enumeration_Type_Definition => 426, - Iir_Kind_Integer_Type_Definition => 434, - Iir_Kind_Floating_Type_Definition => 442, - Iir_Kind_Physical_Type_Definition => 453, - Iir_Kind_Range_Expression => 461, - Iir_Kind_Protected_Type_Body => 469, - Iir_Kind_Wildcard_Type_Definition => 473, - Iir_Kind_Subtype_Definition => 480, - Iir_Kind_Scalar_Nature_Definition => 488, - Iir_Kind_Record_Nature_Definition => 501, - Iir_Kind_Array_Nature_Definition => 515, - Iir_Kind_Array_Subnature_Definition => 530, - Iir_Kind_Overload_List => 531, - Iir_Kind_Entity_Declaration => 544, - Iir_Kind_Configuration_Declaration => 554, - Iir_Kind_Context_Declaration => 560, - Iir_Kind_Package_Declaration => 575, - Iir_Kind_Package_Instantiation_Declaration => 589, - Iir_Kind_Vmode_Declaration => 601, - Iir_Kind_Vprop_Declaration => 613, - Iir_Kind_Vunit_Declaration => 626, - Iir_Kind_Package_Body => 634, - Iir_Kind_Architecture_Body => 647, - Iir_Kind_Type_Declaration => 654, - Iir_Kind_Anonymous_Type_Declaration => 660, - Iir_Kind_Subtype_Declaration => 668, - Iir_Kind_Nature_Declaration => 674, - Iir_Kind_Subnature_Declaration => 681, - Iir_Kind_Package_Header => 683, - Iir_Kind_Unit_Declaration => 692, - Iir_Kind_Library_Declaration => 700, - Iir_Kind_Component_Declaration => 710, - Iir_Kind_Attribute_Declaration => 717, - Iir_Kind_Group_Template_Declaration => 723, - Iir_Kind_Group_Declaration => 730, - Iir_Kind_Element_Declaration => 738, - Iir_Kind_Nature_Element_Declaration => 745, - Iir_Kind_Non_Object_Alias_Declaration => 753, - Iir_Kind_Psl_Declaration => 761, - Iir_Kind_Psl_Endpoint_Declaration => 775, - Iir_Kind_Enumeration_Literal => 786, - Iir_Kind_Function_Declaration => 811, - Iir_Kind_Procedure_Declaration => 835, - Iir_Kind_Function_Body => 845, - Iir_Kind_Procedure_Body => 856, - Iir_Kind_Function_Instantiation_Declaration => 867, - Iir_Kind_Procedure_Instantiation_Declaration => 877, - Iir_Kind_Terminal_Declaration => 886, - Iir_Kind_Object_Alias_Declaration => 898, - Iir_Kind_Free_Quantity_Declaration => 910, - Iir_Kind_Spectrum_Quantity_Declaration => 923, - Iir_Kind_Noise_Quantity_Declaration => 935, - Iir_Kind_Across_Quantity_Declaration => 951, - Iir_Kind_Through_Quantity_Declaration => 967, - Iir_Kind_File_Declaration => 982, - Iir_Kind_Guard_Signal_Declaration => 996, - Iir_Kind_Signal_Declaration => 1013, - Iir_Kind_Variable_Declaration => 1026, - Iir_Kind_Constant_Declaration => 1040, - Iir_Kind_Iterator_Declaration => 1052, - Iir_Kind_Interface_Constant_Declaration => 1069, - Iir_Kind_Interface_Variable_Declaration => 1085, - Iir_Kind_Interface_Signal_Declaration => 1106, - Iir_Kind_Interface_File_Declaration => 1122, - Iir_Kind_Interface_Quantity_Declaration => 1138, - Iir_Kind_Interface_Terminal_Declaration => 1150, - Iir_Kind_Interface_Type_Declaration => 1161, - Iir_Kind_Interface_Package_Declaration => 1174, - Iir_Kind_Interface_Function_Declaration => 1192, - Iir_Kind_Interface_Procedure_Declaration => 1206, - Iir_Kind_Anonymous_Signal_Declaration => 1215, - Iir_Kind_Signal_Attribute_Declaration => 1218, - Iir_Kind_Identity_Operator => 1222, - Iir_Kind_Negation_Operator => 1226, - Iir_Kind_Absolute_Operator => 1230, - Iir_Kind_Not_Operator => 1234, - Iir_Kind_Implicit_Condition_Operator => 1238, - Iir_Kind_Condition_Operator => 1242, - Iir_Kind_Reduction_And_Operator => 1246, - Iir_Kind_Reduction_Or_Operator => 1250, - Iir_Kind_Reduction_Nand_Operator => 1254, - Iir_Kind_Reduction_Nor_Operator => 1258, - Iir_Kind_Reduction_Xor_Operator => 1262, - Iir_Kind_Reduction_Xnor_Operator => 1266, - Iir_Kind_And_Operator => 1271, - Iir_Kind_Or_Operator => 1276, - Iir_Kind_Nand_Operator => 1281, - Iir_Kind_Nor_Operator => 1286, - Iir_Kind_Xor_Operator => 1291, - Iir_Kind_Xnor_Operator => 1296, - Iir_Kind_Equality_Operator => 1301, - Iir_Kind_Inequality_Operator => 1306, - Iir_Kind_Less_Than_Operator => 1311, - Iir_Kind_Less_Than_Or_Equal_Operator => 1316, - Iir_Kind_Greater_Than_Operator => 1321, - Iir_Kind_Greater_Than_Or_Equal_Operator => 1326, - Iir_Kind_Match_Equality_Operator => 1331, - Iir_Kind_Match_Inequality_Operator => 1336, - Iir_Kind_Match_Less_Than_Operator => 1341, - Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1346, - Iir_Kind_Match_Greater_Than_Operator => 1351, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1356, - Iir_Kind_Sll_Operator => 1361, - Iir_Kind_Sla_Operator => 1366, - Iir_Kind_Srl_Operator => 1371, - Iir_Kind_Sra_Operator => 1376, - Iir_Kind_Rol_Operator => 1381, - Iir_Kind_Ror_Operator => 1386, - Iir_Kind_Addition_Operator => 1391, - Iir_Kind_Substraction_Operator => 1396, - Iir_Kind_Concatenation_Operator => 1401, - Iir_Kind_Multiplication_Operator => 1406, - Iir_Kind_Division_Operator => 1411, - Iir_Kind_Modulus_Operator => 1416, - Iir_Kind_Remainder_Operator => 1421, - Iir_Kind_Exponentiation_Operator => 1426, - Iir_Kind_Function_Call => 1434, - Iir_Kind_Aggregate => 1441, - Iir_Kind_Parenthesis_Expression => 1444, - Iir_Kind_Qualified_Expression => 1448, - Iir_Kind_Type_Conversion => 1453, - Iir_Kind_Allocator_By_Expression => 1458, - Iir_Kind_Allocator_By_Subtype => 1464, - Iir_Kind_Selected_Element => 1472, - Iir_Kind_Dereference => 1477, - Iir_Kind_Implicit_Dereference => 1482, - Iir_Kind_Slice_Name => 1489, - Iir_Kind_Indexed_Name => 1495, - Iir_Kind_Psl_Prev => 1501, - Iir_Kind_Psl_Stable => 1506, - Iir_Kind_Psl_Rose => 1511, - Iir_Kind_Psl_Fell => 1516, - Iir_Kind_Psl_Onehot => 1519, - Iir_Kind_Psl_Onehot0 => 1522, - Iir_Kind_Psl_Expression => 1524, - Iir_Kind_Sensitized_Process_Statement => 1545, - Iir_Kind_Process_Statement => 1565, - Iir_Kind_Concurrent_Simple_Signal_Assignment => 1578, - Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1591, - Iir_Kind_Concurrent_Selected_Signal_Assignment => 1605, - Iir_Kind_Concurrent_Assertion_Statement => 1613, - Iir_Kind_Concurrent_Procedure_Call_Statement => 1620, - Iir_Kind_Concurrent_Break_Statement => 1628, - Iir_Kind_Psl_Assert_Directive => 1641, - Iir_Kind_Psl_Assume_Directive => 1652, - Iir_Kind_Psl_Cover_Directive => 1664, - Iir_Kind_Psl_Restrict_Directive => 1675, - Iir_Kind_Block_Statement => 1689, - Iir_Kind_If_Generate_Statement => 1700, - Iir_Kind_Case_Generate_Statement => 1709, - Iir_Kind_For_Generate_Statement => 1718, - Iir_Kind_Component_Instantiation_Statement => 1729, - Iir_Kind_Psl_Default_Clock => 1733, - Iir_Kind_Generate_Statement_Body => 1744, - Iir_Kind_If_Generate_Else_Clause => 1750, - Iir_Kind_Simple_Simultaneous_Statement => 1757, - Iir_Kind_Simultaneous_Null_Statement => 1761, - Iir_Kind_Simultaneous_Procedural_Statement => 1772, - Iir_Kind_Simultaneous_Case_Statement => 1781, - Iir_Kind_Simultaneous_If_Statement => 1790, - Iir_Kind_Simultaneous_Elsif => 1796, - Iir_Kind_Simple_Signal_Assignment_Statement => 1807, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1818, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1830, - Iir_Kind_Signal_Force_Assignment_Statement => 1840, - Iir_Kind_Signal_Release_Assignment_Statement => 1849, - Iir_Kind_Null_Statement => 1853, - Iir_Kind_Assertion_Statement => 1860, - Iir_Kind_Report_Statement => 1866, - Iir_Kind_Wait_Statement => 1874, - Iir_Kind_Variable_Assignment_Statement => 1881, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1888, - Iir_Kind_Return_Statement => 1894, - Iir_Kind_For_Loop_Statement => 1905, - Iir_Kind_While_Loop_Statement => 1916, - Iir_Kind_Next_Statement => 1923, - Iir_Kind_Exit_Statement => 1930, - Iir_Kind_Case_Statement => 1938, - Iir_Kind_Procedure_Call_Statement => 1944, - Iir_Kind_Break_Statement => 1951, - Iir_Kind_If_Statement => 1961, - Iir_Kind_Elsif => 1967, - Iir_Kind_Character_Literal => 1975, - Iir_Kind_Simple_Name => 1983, - Iir_Kind_Selected_Name => 1992, - Iir_Kind_Operator_Symbol => 1998, - Iir_Kind_Reference_Name => 2003, - Iir_Kind_External_Constant_Name => 2012, - Iir_Kind_External_Signal_Name => 2021, - Iir_Kind_External_Variable_Name => 2031, - Iir_Kind_Selected_By_All_Name => 2037, - Iir_Kind_Parenthesis_Name => 2042, - Iir_Kind_Package_Pathname => 2046, - Iir_Kind_Absolute_Pathname => 2047, - Iir_Kind_Relative_Pathname => 2048, - Iir_Kind_Pathname_Element => 2053, - Iir_Kind_Base_Attribute => 2055, - Iir_Kind_Subtype_Attribute => 2060, - Iir_Kind_Element_Attribute => 2065, - Iir_Kind_Across_Attribute => 2070, - Iir_Kind_Through_Attribute => 2075, - Iir_Kind_Nature_Reference_Attribute => 2079, - Iir_Kind_Left_Type_Attribute => 2084, - Iir_Kind_Right_Type_Attribute => 2089, - Iir_Kind_High_Type_Attribute => 2094, - Iir_Kind_Low_Type_Attribute => 2099, - Iir_Kind_Ascending_Type_Attribute => 2104, - Iir_Kind_Image_Attribute => 2110, - Iir_Kind_Value_Attribute => 2116, - Iir_Kind_Pos_Attribute => 2122, - Iir_Kind_Val_Attribute => 2128, - Iir_Kind_Succ_Attribute => 2134, - Iir_Kind_Pred_Attribute => 2140, - Iir_Kind_Leftof_Attribute => 2146, - Iir_Kind_Rightof_Attribute => 2152, - Iir_Kind_Signal_Slew_Attribute => 2160, - Iir_Kind_Quantity_Slew_Attribute => 2168, - Iir_Kind_Ramp_Attribute => 2176, - Iir_Kind_Zoh_Attribute => 2184, - Iir_Kind_Ltf_Attribute => 2192, - Iir_Kind_Ztf_Attribute => 2202, - Iir_Kind_Dot_Attribute => 2209, - Iir_Kind_Integ_Attribute => 2216, - Iir_Kind_Above_Attribute => 2224, - Iir_Kind_Quantity_Delayed_Attribute => 2232, - Iir_Kind_Delayed_Attribute => 2241, - Iir_Kind_Stable_Attribute => 2250, - Iir_Kind_Quiet_Attribute => 2259, - Iir_Kind_Transaction_Attribute => 2268, - Iir_Kind_Event_Attribute => 2272, - Iir_Kind_Active_Attribute => 2276, - Iir_Kind_Last_Event_Attribute => 2280, - Iir_Kind_Last_Active_Attribute => 2284, - Iir_Kind_Last_Value_Attribute => 2288, - Iir_Kind_Driving_Attribute => 2292, - Iir_Kind_Driving_Value_Attribute => 2296, - Iir_Kind_Behavior_Attribute => 2296, - Iir_Kind_Structure_Attribute => 2296, - Iir_Kind_Simple_Name_Attribute => 2303, - Iir_Kind_Instance_Name_Attribute => 2308, - Iir_Kind_Path_Name_Attribute => 2313, - Iir_Kind_Left_Array_Attribute => 2320, - Iir_Kind_Right_Array_Attribute => 2327, - Iir_Kind_High_Array_Attribute => 2334, - Iir_Kind_Low_Array_Attribute => 2341, - Iir_Kind_Length_Array_Attribute => 2348, - Iir_Kind_Ascending_Array_Attribute => 2355, - Iir_Kind_Range_Array_Attribute => 2362, - Iir_Kind_Reverse_Range_Array_Attribute => 2369, - Iir_Kind_Attribute_Name => 2378 + Iir_Kind_Foreign_Module => 41, + Iir_Kind_Library_Clause => 46, + Iir_Kind_Use_Clause => 50, + Iir_Kind_Context_Reference => 54, + Iir_Kind_Integer_Literal => 59, + Iir_Kind_Floating_Point_Literal => 64, + Iir_Kind_Null_Literal => 66, + Iir_Kind_String_Literal8 => 77, + Iir_Kind_Physical_Int_Literal => 83, + Iir_Kind_Physical_Fp_Literal => 89, + Iir_Kind_Simple_Aggregate => 94, + Iir_Kind_Overflow_Literal => 97, + Iir_Kind_Unaffected_Waveform => 98, + Iir_Kind_Waveform_Element => 101, + Iir_Kind_Conditional_Waveform => 105, + Iir_Kind_Conditional_Expression => 109, + Iir_Kind_Association_Element_By_Expression => 117, + Iir_Kind_Association_Element_By_Individual => 126, + Iir_Kind_Association_Element_Open => 132, + Iir_Kind_Association_Element_Package => 138, + Iir_Kind_Association_Element_Type => 146, + Iir_Kind_Association_Element_Subprogram => 152, + Iir_Kind_Association_Element_Terminal => 158, + Iir_Kind_Choice_By_Range => 166, + Iir_Kind_Choice_By_Expression => 174, + Iir_Kind_Choice_By_Others => 180, + Iir_Kind_Choice_By_None => 186, + Iir_Kind_Choice_By_Name => 193, + Iir_Kind_Entity_Aspect_Entity => 195, + Iir_Kind_Entity_Aspect_Configuration => 196, + Iir_Kind_Entity_Aspect_Open => 196, + Iir_Kind_Psl_Hierarchical_Name => 198, + Iir_Kind_Block_Configuration => 204, + Iir_Kind_Block_Header => 208, + Iir_Kind_Component_Configuration => 215, + Iir_Kind_Binding_Indication => 219, + Iir_Kind_Entity_Class => 221, + Iir_Kind_Attribute_Value => 229, + Iir_Kind_Signature => 232, + Iir_Kind_Aggregate_Info => 239, + Iir_Kind_Procedure_Call => 243, + Iir_Kind_Record_Element_Constraint => 251, + Iir_Kind_Array_Element_Resolution => 253, + Iir_Kind_Record_Resolution => 254, + Iir_Kind_Record_Element_Resolution => 257, + Iir_Kind_Break_Element => 261, + Iir_Kind_Attribute_Specification => 270, + Iir_Kind_Disconnection_Specification => 276, + Iir_Kind_Step_Limit_Specification => 282, + Iir_Kind_Configuration_Specification => 288, + Iir_Kind_Access_Type_Definition => 295, + Iir_Kind_Incomplete_Type_Definition => 302, + Iir_Kind_Interface_Type_Definition => 308, + Iir_Kind_File_Type_Definition => 314, + Iir_Kind_Protected_Type_Declaration => 323, + Iir_Kind_Record_Type_Definition => 333, + Iir_Kind_Array_Type_Definition => 344, + Iir_Kind_Array_Subtype_Definition => 361, + Iir_Kind_Record_Subtype_Definition => 374, + Iir_Kind_Access_Subtype_Definition => 382, + Iir_Kind_Physical_Subtype_Definition => 392, + Iir_Kind_Floating_Subtype_Definition => 403, + Iir_Kind_Integer_Subtype_Definition => 413, + Iir_Kind_Enumeration_Subtype_Definition => 423, + Iir_Kind_Enumeration_Type_Definition => 434, + Iir_Kind_Integer_Type_Definition => 442, + Iir_Kind_Floating_Type_Definition => 450, + Iir_Kind_Physical_Type_Definition => 461, + Iir_Kind_Range_Expression => 469, + Iir_Kind_Protected_Type_Body => 477, + Iir_Kind_Wildcard_Type_Definition => 481, + Iir_Kind_Subtype_Definition => 488, + Iir_Kind_Scalar_Nature_Definition => 496, + Iir_Kind_Record_Nature_Definition => 509, + Iir_Kind_Array_Nature_Definition => 523, + Iir_Kind_Array_Subnature_Definition => 538, + Iir_Kind_Overload_List => 539, + Iir_Kind_Entity_Declaration => 552, + Iir_Kind_Configuration_Declaration => 562, + Iir_Kind_Context_Declaration => 568, + Iir_Kind_Package_Declaration => 583, + Iir_Kind_Package_Instantiation_Declaration => 597, + Iir_Kind_Vmode_Declaration => 609, + Iir_Kind_Vprop_Declaration => 621, + Iir_Kind_Vunit_Declaration => 634, + Iir_Kind_Package_Body => 642, + Iir_Kind_Architecture_Body => 655, + Iir_Kind_Type_Declaration => 662, + Iir_Kind_Anonymous_Type_Declaration => 668, + Iir_Kind_Subtype_Declaration => 676, + Iir_Kind_Nature_Declaration => 682, + Iir_Kind_Subnature_Declaration => 689, + Iir_Kind_Package_Header => 691, + Iir_Kind_Unit_Declaration => 700, + Iir_Kind_Library_Declaration => 708, + Iir_Kind_Component_Declaration => 718, + Iir_Kind_Attribute_Declaration => 725, + Iir_Kind_Group_Template_Declaration => 731, + Iir_Kind_Group_Declaration => 738, + Iir_Kind_Element_Declaration => 746, + Iir_Kind_Nature_Element_Declaration => 753, + Iir_Kind_Non_Object_Alias_Declaration => 761, + Iir_Kind_Psl_Declaration => 769, + Iir_Kind_Psl_Endpoint_Declaration => 783, + Iir_Kind_Enumeration_Literal => 794, + Iir_Kind_Function_Declaration => 819, + Iir_Kind_Procedure_Declaration => 843, + Iir_Kind_Function_Body => 853, + Iir_Kind_Procedure_Body => 864, + Iir_Kind_Function_Instantiation_Declaration => 875, + Iir_Kind_Procedure_Instantiation_Declaration => 885, + Iir_Kind_Terminal_Declaration => 894, + Iir_Kind_Object_Alias_Declaration => 906, + Iir_Kind_Free_Quantity_Declaration => 918, + Iir_Kind_Spectrum_Quantity_Declaration => 931, + Iir_Kind_Noise_Quantity_Declaration => 943, + Iir_Kind_Across_Quantity_Declaration => 959, + Iir_Kind_Through_Quantity_Declaration => 975, + Iir_Kind_File_Declaration => 990, + Iir_Kind_Guard_Signal_Declaration => 1004, + Iir_Kind_Signal_Declaration => 1021, + Iir_Kind_Variable_Declaration => 1034, + Iir_Kind_Constant_Declaration => 1048, + Iir_Kind_Iterator_Declaration => 1060, + Iir_Kind_Interface_Constant_Declaration => 1077, + Iir_Kind_Interface_Variable_Declaration => 1093, + Iir_Kind_Interface_Signal_Declaration => 1114, + Iir_Kind_Interface_File_Declaration => 1130, + Iir_Kind_Interface_Quantity_Declaration => 1146, + Iir_Kind_Interface_Terminal_Declaration => 1158, + Iir_Kind_Interface_Type_Declaration => 1169, + Iir_Kind_Interface_Package_Declaration => 1182, + Iir_Kind_Interface_Function_Declaration => 1200, + Iir_Kind_Interface_Procedure_Declaration => 1214, + Iir_Kind_Anonymous_Signal_Declaration => 1223, + Iir_Kind_Signal_Attribute_Declaration => 1226, + Iir_Kind_Identity_Operator => 1230, + Iir_Kind_Negation_Operator => 1234, + Iir_Kind_Absolute_Operator => 1238, + Iir_Kind_Not_Operator => 1242, + Iir_Kind_Implicit_Condition_Operator => 1246, + Iir_Kind_Condition_Operator => 1250, + Iir_Kind_Reduction_And_Operator => 1254, + Iir_Kind_Reduction_Or_Operator => 1258, + Iir_Kind_Reduction_Nand_Operator => 1262, + Iir_Kind_Reduction_Nor_Operator => 1266, + Iir_Kind_Reduction_Xor_Operator => 1270, + Iir_Kind_Reduction_Xnor_Operator => 1274, + Iir_Kind_And_Operator => 1279, + Iir_Kind_Or_Operator => 1284, + Iir_Kind_Nand_Operator => 1289, + Iir_Kind_Nor_Operator => 1294, + Iir_Kind_Xor_Operator => 1299, + Iir_Kind_Xnor_Operator => 1304, + Iir_Kind_Equality_Operator => 1309, + Iir_Kind_Inequality_Operator => 1314, + Iir_Kind_Less_Than_Operator => 1319, + Iir_Kind_Less_Than_Or_Equal_Operator => 1324, + Iir_Kind_Greater_Than_Operator => 1329, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1334, + Iir_Kind_Match_Equality_Operator => 1339, + Iir_Kind_Match_Inequality_Operator => 1344, + Iir_Kind_Match_Less_Than_Operator => 1349, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1354, + Iir_Kind_Match_Greater_Than_Operator => 1359, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1364, + Iir_Kind_Sll_Operator => 1369, + Iir_Kind_Sla_Operator => 1374, + Iir_Kind_Srl_Operator => 1379, + Iir_Kind_Sra_Operator => 1384, + Iir_Kind_Rol_Operator => 1389, + Iir_Kind_Ror_Operator => 1394, + Iir_Kind_Addition_Operator => 1399, + Iir_Kind_Substraction_Operator => 1404, + Iir_Kind_Concatenation_Operator => 1409, + Iir_Kind_Multiplication_Operator => 1414, + Iir_Kind_Division_Operator => 1419, + Iir_Kind_Modulus_Operator => 1424, + Iir_Kind_Remainder_Operator => 1429, + Iir_Kind_Exponentiation_Operator => 1434, + Iir_Kind_Function_Call => 1442, + Iir_Kind_Aggregate => 1449, + Iir_Kind_Parenthesis_Expression => 1452, + Iir_Kind_Qualified_Expression => 1456, + Iir_Kind_Type_Conversion => 1461, + Iir_Kind_Allocator_By_Expression => 1466, + Iir_Kind_Allocator_By_Subtype => 1472, + Iir_Kind_Selected_Element => 1480, + Iir_Kind_Dereference => 1485, + Iir_Kind_Implicit_Dereference => 1490, + Iir_Kind_Slice_Name => 1497, + Iir_Kind_Indexed_Name => 1503, + Iir_Kind_Psl_Prev => 1509, + Iir_Kind_Psl_Stable => 1514, + Iir_Kind_Psl_Rose => 1519, + Iir_Kind_Psl_Fell => 1524, + Iir_Kind_Psl_Onehot => 1527, + Iir_Kind_Psl_Onehot0 => 1530, + Iir_Kind_Psl_Expression => 1532, + Iir_Kind_Sensitized_Process_Statement => 1553, + Iir_Kind_Process_Statement => 1573, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1586, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1599, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1613, + Iir_Kind_Concurrent_Assertion_Statement => 1621, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1628, + Iir_Kind_Concurrent_Break_Statement => 1636, + Iir_Kind_Psl_Assert_Directive => 1649, + Iir_Kind_Psl_Assume_Directive => 1660, + Iir_Kind_Psl_Cover_Directive => 1672, + Iir_Kind_Psl_Restrict_Directive => 1683, + Iir_Kind_Block_Statement => 1697, + Iir_Kind_If_Generate_Statement => 1708, + Iir_Kind_Case_Generate_Statement => 1717, + Iir_Kind_For_Generate_Statement => 1726, + Iir_Kind_Component_Instantiation_Statement => 1737, + Iir_Kind_Psl_Default_Clock => 1741, + Iir_Kind_Generate_Statement_Body => 1752, + Iir_Kind_If_Generate_Else_Clause => 1758, + Iir_Kind_Simple_Simultaneous_Statement => 1765, + Iir_Kind_Simultaneous_Null_Statement => 1769, + Iir_Kind_Simultaneous_Procedural_Statement => 1780, + Iir_Kind_Simultaneous_Case_Statement => 1789, + Iir_Kind_Simultaneous_If_Statement => 1798, + Iir_Kind_Simultaneous_Elsif => 1804, + Iir_Kind_Simple_Signal_Assignment_Statement => 1815, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1826, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1838, + Iir_Kind_Signal_Force_Assignment_Statement => 1848, + Iir_Kind_Signal_Release_Assignment_Statement => 1857, + Iir_Kind_Null_Statement => 1861, + Iir_Kind_Assertion_Statement => 1868, + Iir_Kind_Report_Statement => 1874, + Iir_Kind_Wait_Statement => 1882, + Iir_Kind_Variable_Assignment_Statement => 1889, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1896, + Iir_Kind_Return_Statement => 1902, + Iir_Kind_For_Loop_Statement => 1913, + Iir_Kind_While_Loop_Statement => 1924, + Iir_Kind_Next_Statement => 1931, + Iir_Kind_Exit_Statement => 1938, + Iir_Kind_Case_Statement => 1946, + Iir_Kind_Procedure_Call_Statement => 1952, + Iir_Kind_Break_Statement => 1959, + Iir_Kind_If_Statement => 1969, + Iir_Kind_Elsif => 1975, + Iir_Kind_Character_Literal => 1983, + Iir_Kind_Simple_Name => 1991, + Iir_Kind_Selected_Name => 2000, + Iir_Kind_Operator_Symbol => 2006, + Iir_Kind_Reference_Name => 2011, + Iir_Kind_External_Constant_Name => 2020, + Iir_Kind_External_Signal_Name => 2029, + Iir_Kind_External_Variable_Name => 2039, + Iir_Kind_Selected_By_All_Name => 2045, + Iir_Kind_Parenthesis_Name => 2050, + Iir_Kind_Package_Pathname => 2054, + Iir_Kind_Absolute_Pathname => 2055, + Iir_Kind_Relative_Pathname => 2056, + Iir_Kind_Pathname_Element => 2061, + Iir_Kind_Base_Attribute => 2063, + Iir_Kind_Subtype_Attribute => 2068, + Iir_Kind_Element_Attribute => 2073, + Iir_Kind_Across_Attribute => 2078, + Iir_Kind_Through_Attribute => 2083, + Iir_Kind_Nature_Reference_Attribute => 2087, + Iir_Kind_Left_Type_Attribute => 2092, + Iir_Kind_Right_Type_Attribute => 2097, + Iir_Kind_High_Type_Attribute => 2102, + Iir_Kind_Low_Type_Attribute => 2107, + Iir_Kind_Ascending_Type_Attribute => 2112, + Iir_Kind_Image_Attribute => 2118, + Iir_Kind_Value_Attribute => 2124, + Iir_Kind_Pos_Attribute => 2130, + Iir_Kind_Val_Attribute => 2136, + Iir_Kind_Succ_Attribute => 2142, + Iir_Kind_Pred_Attribute => 2148, + Iir_Kind_Leftof_Attribute => 2154, + Iir_Kind_Rightof_Attribute => 2160, + Iir_Kind_Signal_Slew_Attribute => 2168, + Iir_Kind_Quantity_Slew_Attribute => 2176, + Iir_Kind_Ramp_Attribute => 2184, + Iir_Kind_Zoh_Attribute => 2192, + Iir_Kind_Ltf_Attribute => 2200, + Iir_Kind_Ztf_Attribute => 2210, + Iir_Kind_Dot_Attribute => 2217, + Iir_Kind_Integ_Attribute => 2224, + Iir_Kind_Above_Attribute => 2232, + Iir_Kind_Quantity_Delayed_Attribute => 2240, + Iir_Kind_Delayed_Attribute => 2249, + Iir_Kind_Stable_Attribute => 2258, + Iir_Kind_Quiet_Attribute => 2267, + Iir_Kind_Transaction_Attribute => 2276, + Iir_Kind_Event_Attribute => 2280, + Iir_Kind_Active_Attribute => 2284, + Iir_Kind_Last_Event_Attribute => 2288, + Iir_Kind_Last_Active_Attribute => 2292, + Iir_Kind_Last_Value_Attribute => 2296, + Iir_Kind_Driving_Attribute => 2300, + Iir_Kind_Driving_Value_Attribute => 2304, + Iir_Kind_Behavior_Attribute => 2304, + Iir_Kind_Structure_Attribute => 2304, + Iir_Kind_Simple_Name_Attribute => 2311, + Iir_Kind_Instance_Name_Attribute => 2316, + Iir_Kind_Path_Name_Attribute => 2321, + Iir_Kind_Left_Array_Attribute => 2328, + Iir_Kind_Right_Array_Attribute => 2335, + Iir_Kind_High_Array_Attribute => 2342, + Iir_Kind_Low_Array_Attribute => 2349, + Iir_Kind_Length_Array_Attribute => 2356, + Iir_Kind_Ascending_Array_Attribute => 2363, + Iir_Kind_Range_Array_Attribute => 2370, + Iir_Kind_Reverse_Range_Array_Attribute => 2377, + Iir_Kind_Attribute_Name => 2386 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -7349,6 +7366,8 @@ package body Vhdl.Nodes_Meta is return Get_Literal_Length (N); when Field_PSL_Nbr_States => return Get_PSL_Nbr_States (N); + when Field_Foreign_Node => + return Get_Foreign_Node (N); when others => raise Internal_Error; end case; @@ -7369,6 +7388,8 @@ package body Vhdl.Nodes_Meta is Set_Literal_Length (N, V); when Field_PSL_Nbr_States => Set_PSL_Nbr_States (N, V); + when Field_Foreign_Node => + Set_Foreign_Node (N, V); when others => raise Internal_Error; end case; @@ -7766,7 +7787,13 @@ package body Vhdl.Nodes_Meta is function Has_Design_File (K : Iir_Kind) return Boolean is begin - return K = Iir_Kind_Design_Unit; + case K is + when Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module => + return True; + when others => + return False; + end case; end Has_Design_File; function Has_Design_File_Chain (K : Iir_Kind) return Boolean is @@ -7783,6 +7810,7 @@ package body Vhdl.Nodes_Meta is begin case K is when Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module | Iir_Kind_Library_Declaration => return True; when others => @@ -7813,7 +7841,13 @@ package body Vhdl.Nodes_Meta is function Has_Date_State (K : Iir_Kind) return Boolean is begin - return K = Iir_Kind_Design_Unit; + case K is + when Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module => + return True; + when others => + return False; + end case; end Has_Date_State; function Has_Guarded_Target_State (K : Iir_Kind) return Boolean is @@ -7840,7 +7874,13 @@ package body Vhdl.Nodes_Meta is function Has_Hash_Chain (K : Iir_Kind) return Boolean is begin - return K = Iir_Kind_Design_Unit; + case K is + when Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module => + return True; + when others => + return False; + end case; end Has_Hash_Chain; function Has_Design_Unit_Source_Pos (K : Iir_Kind) return Boolean is @@ -8437,6 +8477,7 @@ package body Vhdl.Nodes_Meta is case K is when Iir_Kind_Design_File | Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module | Iir_Kind_Library_Clause | Iir_Kind_Use_Clause | Iir_Kind_Context_Reference @@ -9351,6 +9392,7 @@ package body Vhdl.Nodes_Meta is begin case K is when Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module | Iir_Kind_Library_Clause | Iir_Kind_Record_Element_Constraint | Iir_Kind_Record_Element_Resolution @@ -10483,6 +10525,7 @@ package body Vhdl.Nodes_Meta is case K is when Iir_Kind_Design_File | Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module | Iir_Kind_Library_Declaration => return True; when others => @@ -10852,6 +10895,7 @@ package body Vhdl.Nodes_Meta is case K is when Iir_Kind_Design_File | Iir_Kind_Design_Unit + | Iir_Kind_Foreign_Module | Iir_Kind_Library_Clause | Iir_Kind_Use_Clause | Iir_Kind_Context_Reference @@ -12675,4 +12719,9 @@ package body Vhdl.Nodes_Meta is end case; end Has_Default_Clock; + function Has_Foreign_Node (K : Iir_Kind) return Boolean is + begin + return K = Iir_Kind_Foreign_Module; + end Has_Foreign_Node; + end Vhdl.Nodes_Meta; diff --git a/src/vhdl/vhdl-nodes_meta.ads b/src/vhdl/vhdl-nodes_meta.ads index 54a02b61e..65ace54bb 100644 --- a/src/vhdl/vhdl-nodes_meta.ads +++ b/src/vhdl/vhdl-nodes_meta.ads @@ -430,7 +430,8 @@ package Vhdl.Nodes_Meta is Field_PSL_EOS_Flag, Field_Count_Expression, Field_Clock_Expression, - Field_Default_Clock + Field_Default_Clock, + Field_Foreign_Node ); pragma Discard_Names (Fields_Enum); @@ -1020,4 +1021,5 @@ package Vhdl.Nodes_Meta is function Has_Count_Expression (K : Iir_Kind) return Boolean; function Has_Clock_Expression (K : Iir_Kind) return Boolean; function Has_Default_Clock (K : Iir_Kind) return Boolean; + function Has_Foreign_Node (K : Iir_Kind) return Boolean; end Vhdl.Nodes_Meta; diff --git a/src/vhdl/vhdl-utils.adb b/src/vhdl/vhdl-utils.adb index 35cf51ed8..70596c929 100644 --- a/src/vhdl/vhdl-utils.adb +++ b/src/vhdl/vhdl-utils.adb @@ -302,6 +302,7 @@ package body Vhdl.Utils is | Iir_Kind_Use_Clause | Iir_Kind_Context_Reference | Iir_Kind_Library_Declaration + | Iir_Kind_Foreign_Module | Iir_Kinds_Library_Unit | Iir_Kind_Component_Declaration | Iir_Kind_Function_Declaration @@ -1841,6 +1842,13 @@ package body Vhdl.Utils is return K = K1 or K = K2; end Kind_In; + function Kind_In (N : Iir; K1, K2, K3 : Iir_Kind) return Boolean + is + K : constant Iir_Kind := Get_Kind (N); + begin + return K = K1 or K = K2 or K = K3; + end Kind_In; + procedure Set_Attribute_Parameter (Attr : Iir; N : Parameter_Index; Param : Iir) is begin diff --git a/src/vhdl/vhdl-utils.ads b/src/vhdl/vhdl-utils.ads index 4d78640eb..fbea75776 100644 --- a/src/vhdl/vhdl-utils.ads +++ b/src/vhdl/vhdl-utils.ads @@ -398,6 +398,7 @@ package Vhdl.Utils is -- Return True IFF kind of N is K1 or K2. function Kind_In (N : Iir; K1, K2 : Iir_Kind) return Boolean; + function Kind_In (N : Iir; K1, K2, K3 : Iir_Kind) return Boolean; pragma Inline (Kind_In); subtype Parameter_Index is Natural range 1 .. 4; |