diff options
author | Tristan Gingold <tgingold@free.fr> | 2021-08-06 06:58:39 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2021-08-06 09:16:19 +0200 |
commit | 3b80a2e5a9545422e9808f6f3b3f9c4a2421433b (patch) | |
tree | 22ea684d58cd77e94b780e8e5c9499c3c67fbac1 | |
parent | ece6e78f537b4f16b020d2eb258038d00a794559 (diff) | |
download | ghdl-3b80a2e5a9545422e9808f6f3b3f9c4a2421433b.tar.gz ghdl-3b80a2e5a9545422e9808f6f3b3f9c4a2421433b.tar.bz2 ghdl-3b80a2e5a9545422e9808f6f3b3f9c4a2421433b.zip |
vhdl: introduce iir_kind_association_element_by_name
-rw-r--r-- | pyGHDL/dom/_Translate.py | 3 | ||||
-rw-r--r-- | pyGHDL/libghdl/vhdl/nodes.py | 602 | ||||
-rw-r--r-- | src/synth/synth-vhdl_insts.adb | 7 | ||||
-rw-r--r-- | src/vhdl/simulate/simul-elaboration.adb | 2 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap4.adb | 3 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap5.adb | 11 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap8.adb | 3 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap9.adb | 3 | ||||
-rw-r--r-- | src/vhdl/vhdl-canon.adb | 10 | ||||
-rw-r--r-- | src/vhdl/vhdl-elocations.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-elocations.ads | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-elocations_meta.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-errors.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-evaluation.adb | 3 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.ads | 11 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes_meta.adb | 628 | ||||
-rw-r--r-- | src/vhdl/vhdl-prints.adb | 5 | ||||
-rw-r--r-- | src/vhdl/vhdl-sem.adb | 183 |
19 files changed, 789 insertions, 690 deletions
diff --git a/pyGHDL/dom/_Translate.py b/pyGHDL/dom/_Translate.py index a9ead8c2c..d24ac33bc 100644 --- a/pyGHDL/dom/_Translate.py +++ b/pyGHDL/dom/_Translate.py @@ -176,7 +176,8 @@ def GetAssociations(node: Iir) -> List: for item in utils.chain_iter(nodes.Get_Association_Chain(node)): kind = GetIirKindOfNode(item) - if kind == nodes.Iir_Kind.Association_Element_By_Expression: + if kind in (nodes.Iir_Kind.Association_Element_By_Expression, + nodes.Iir_Kind.Association_Element_By_Name): actual = nodes.Get_Actual(item) expr = GetExpressionFromNode(actual) diff --git a/pyGHDL/libghdl/vhdl/nodes.py b/pyGHDL/libghdl/vhdl/nodes.py index 9bffe757c..173cbf3d9 100644 --- a/pyGHDL/libghdl/vhdl/nodes.py +++ b/pyGHDL/libghdl/vhdl/nodes.py @@ -65,303 +65,304 @@ class Iir_Kind(IntEnum): 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 + Association_Element_By_Name = 21 + Association_Element_By_Individual = 22 + Association_Element_Open = 23 + Association_Element_Package = 24 + Association_Element_Type = 25 + Association_Element_Subprogram = 26 + Association_Element_Terminal = 27 + Choice_By_Range = 28 + Choice_By_Expression = 29 + Choice_By_Others = 30 + Choice_By_None = 31 + Choice_By_Name = 32 + Entity_Aspect_Entity = 33 + Entity_Aspect_Configuration = 34 + Entity_Aspect_Open = 35 + Psl_Hierarchical_Name = 36 + Block_Configuration = 37 + Block_Header = 38 + Component_Configuration = 39 + Binding_Indication = 40 + Entity_Class = 41 + Attribute_Value = 42 + Signature = 43 + Aggregate_Info = 44 + Procedure_Call = 45 + Record_Element_Constraint = 46 + Array_Element_Resolution = 47 + Record_Resolution = 48 + Record_Element_Resolution = 49 + Break_Element = 50 + Attribute_Specification = 51 + Disconnection_Specification = 52 + Step_Limit_Specification = 53 + Configuration_Specification = 54 + Access_Type_Definition = 55 + Incomplete_Type_Definition = 56 + Interface_Type_Definition = 57 + File_Type_Definition = 58 + Protected_Type_Declaration = 59 + Record_Type_Definition = 60 + Array_Type_Definition = 61 + Array_Subtype_Definition = 62 + Record_Subtype_Definition = 63 + Access_Subtype_Definition = 64 + Physical_Subtype_Definition = 65 + Floating_Subtype_Definition = 66 + Integer_Subtype_Definition = 67 + Enumeration_Subtype_Definition = 68 + Enumeration_Type_Definition = 69 + Integer_Type_Definition = 70 + Floating_Type_Definition = 71 + Physical_Type_Definition = 72 + Range_Expression = 73 + Protected_Type_Body = 74 + Wildcard_Type_Definition = 75 + Subtype_Definition = 76 + Scalar_Nature_Definition = 77 + Record_Nature_Definition = 78 + Array_Nature_Definition = 79 + Array_Subnature_Definition = 80 + Overload_List = 81 + Entity_Declaration = 82 + Configuration_Declaration = 83 + Context_Declaration = 84 + Package_Declaration = 85 + Package_Instantiation_Declaration = 86 + Vmode_Declaration = 87 + Vprop_Declaration = 88 + Vunit_Declaration = 89 + Package_Body = 90 + Architecture_Body = 91 + Type_Declaration = 92 + Anonymous_Type_Declaration = 93 + Subtype_Declaration = 94 + Nature_Declaration = 95 + Subnature_Declaration = 96 + Package_Header = 97 + Unit_Declaration = 98 + Library_Declaration = 99 + Component_Declaration = 100 + Attribute_Declaration = 101 + Group_Template_Declaration = 102 + Group_Declaration = 103 + Element_Declaration = 104 + Nature_Element_Declaration = 105 + Non_Object_Alias_Declaration = 106 + Psl_Declaration = 107 + Psl_Endpoint_Declaration = 108 + Enumeration_Literal = 109 + Function_Declaration = 110 + Procedure_Declaration = 111 + Function_Body = 112 + Procedure_Body = 113 + Function_Instantiation_Declaration = 114 + Procedure_Instantiation_Declaration = 115 + Terminal_Declaration = 116 + Object_Alias_Declaration = 117 + Free_Quantity_Declaration = 118 + Spectrum_Quantity_Declaration = 119 + Noise_Quantity_Declaration = 120 + Across_Quantity_Declaration = 121 + Through_Quantity_Declaration = 122 + File_Declaration = 123 + Guard_Signal_Declaration = 124 + Signal_Declaration = 125 + Variable_Declaration = 126 + Constant_Declaration = 127 + Iterator_Declaration = 128 + Interface_Constant_Declaration = 129 + Interface_Variable_Declaration = 130 + Interface_Signal_Declaration = 131 + Interface_File_Declaration = 132 + Interface_Quantity_Declaration = 133 + Interface_Terminal_Declaration = 134 + Interface_Type_Declaration = 135 + Interface_Package_Declaration = 136 + Interface_Function_Declaration = 137 + Interface_Procedure_Declaration = 138 + Anonymous_Signal_Declaration = 139 + Signal_Attribute_Declaration = 140 + Identity_Operator = 141 + Negation_Operator = 142 + Absolute_Operator = 143 + Not_Operator = 144 + Implicit_Condition_Operator = 145 + Condition_Operator = 146 + Reduction_And_Operator = 147 + Reduction_Or_Operator = 148 + Reduction_Nand_Operator = 149 + Reduction_Nor_Operator = 150 + Reduction_Xor_Operator = 151 + Reduction_Xnor_Operator = 152 + And_Operator = 153 + Or_Operator = 154 + Nand_Operator = 155 + Nor_Operator = 156 + Xor_Operator = 157 + Xnor_Operator = 158 + Equality_Operator = 159 + Inequality_Operator = 160 + Less_Than_Operator = 161 + Less_Than_Or_Equal_Operator = 162 + Greater_Than_Operator = 163 + Greater_Than_Or_Equal_Operator = 164 + Match_Equality_Operator = 165 + Match_Inequality_Operator = 166 + Match_Less_Than_Operator = 167 + Match_Less_Than_Or_Equal_Operator = 168 + Match_Greater_Than_Operator = 169 + Match_Greater_Than_Or_Equal_Operator = 170 + Sll_Operator = 171 + Sla_Operator = 172 + Srl_Operator = 173 + Sra_Operator = 174 + Rol_Operator = 175 + Ror_Operator = 176 + Addition_Operator = 177 + Substraction_Operator = 178 + Concatenation_Operator = 179 + Multiplication_Operator = 180 + Division_Operator = 181 + Modulus_Operator = 182 + Remainder_Operator = 183 + Exponentiation_Operator = 184 + Function_Call = 185 + Aggregate = 186 + Parenthesis_Expression = 187 + Qualified_Expression = 188 + Type_Conversion = 189 + Allocator_By_Expression = 190 + Allocator_By_Subtype = 191 + Selected_Element = 192 + Dereference = 193 + Implicit_Dereference = 194 + Slice_Name = 195 + Indexed_Name = 196 + Psl_Prev = 197 + Psl_Stable = 198 + Psl_Rose = 199 + Psl_Fell = 200 + Psl_Onehot = 201 + Psl_Onehot0 = 202 + Psl_Expression = 203 + Sensitized_Process_Statement = 204 + Process_Statement = 205 + Concurrent_Simple_Signal_Assignment = 206 + Concurrent_Conditional_Signal_Assignment = 207 + Concurrent_Selected_Signal_Assignment = 208 + Concurrent_Assertion_Statement = 209 + Concurrent_Procedure_Call_Statement = 210 + Concurrent_Break_Statement = 211 + Psl_Assert_Directive = 212 + Psl_Assume_Directive = 213 + Psl_Cover_Directive = 214 + Psl_Restrict_Directive = 215 + Block_Statement = 216 + If_Generate_Statement = 217 + Case_Generate_Statement = 218 + For_Generate_Statement = 219 + Component_Instantiation_Statement = 220 + Psl_Default_Clock = 221 + Generate_Statement_Body = 222 + If_Generate_Else_Clause = 223 + Simple_Simultaneous_Statement = 224 + Simultaneous_Null_Statement = 225 + Simultaneous_Procedural_Statement = 226 + Simultaneous_Case_Statement = 227 + Simultaneous_If_Statement = 228 + Simultaneous_Elsif = 229 + Simple_Signal_Assignment_Statement = 230 + Conditional_Signal_Assignment_Statement = 231 + Selected_Waveform_Assignment_Statement = 232 + Signal_Force_Assignment_Statement = 233 + Signal_Release_Assignment_Statement = 234 + Null_Statement = 235 + Assertion_Statement = 236 + Report_Statement = 237 + Wait_Statement = 238 + Variable_Assignment_Statement = 239 + Conditional_Variable_Assignment_Statement = 240 + Return_Statement = 241 + For_Loop_Statement = 242 + While_Loop_Statement = 243 + Next_Statement = 244 + Exit_Statement = 245 + Case_Statement = 246 + Procedure_Call_Statement = 247 + Break_Statement = 248 + If_Statement = 249 + Elsif = 250 + Character_Literal = 251 + Simple_Name = 252 + Selected_Name = 253 + Operator_Symbol = 254 + Reference_Name = 255 + External_Constant_Name = 256 + External_Signal_Name = 257 + External_Variable_Name = 258 + Selected_By_All_Name = 259 + Parenthesis_Name = 260 + Package_Pathname = 261 + Absolute_Pathname = 262 + Relative_Pathname = 263 + Pathname_Element = 264 + Base_Attribute = 265 + Subtype_Attribute = 266 + Element_Attribute = 267 + Across_Attribute = 268 + Through_Attribute = 269 + Nature_Reference_Attribute = 270 + Left_Type_Attribute = 271 + Right_Type_Attribute = 272 + High_Type_Attribute = 273 + Low_Type_Attribute = 274 + Ascending_Type_Attribute = 275 + Image_Attribute = 276 + Value_Attribute = 277 + Pos_Attribute = 278 + Val_Attribute = 279 + Succ_Attribute = 280 + Pred_Attribute = 281 + Leftof_Attribute = 282 + Rightof_Attribute = 283 + Signal_Slew_Attribute = 284 + Quantity_Slew_Attribute = 285 + Ramp_Attribute = 286 + Zoh_Attribute = 287 + Ltf_Attribute = 288 + Ztf_Attribute = 289 + Dot_Attribute = 290 + Integ_Attribute = 291 + Above_Attribute = 292 + Quantity_Delayed_Attribute = 293 + Delayed_Attribute = 294 + Stable_Attribute = 295 + Quiet_Attribute = 296 + Transaction_Attribute = 297 + Event_Attribute = 298 + Active_Attribute = 299 + Last_Event_Attribute = 300 + Last_Active_Attribute = 301 + Last_Value_Attribute = 302 + Driving_Attribute = 303 + Driving_Value_Attribute = 304 + Behavior_Attribute = 305 + Structure_Attribute = 306 + Simple_Name_Attribute = 307 + Instance_Name_Attribute = 308 + Path_Name_Attribute = 309 + Left_Array_Attribute = 310 + Right_Array_Attribute = 311 + High_Array_Attribute = 312 + Low_Array_Attribute = 313 + Length_Array_Attribute = 314 + Ascending_Array_Attribute = 315 + Range_Array_Attribute = 316 + Reverse_Range_Array_Attribute = 317 + Attribute_Name = 318 @export @@ -704,12 +705,19 @@ class Iir_Kinds: Association_Element_Parameters = [ Iir_Kind.Association_Element_By_Expression, + Iir_Kind.Association_Element_By_Name, Iir_Kind.Association_Element_By_Individual, Iir_Kind.Association_Element_Open, ] + Association_Element_By_Actual = [ + Iir_Kind.Association_Element_By_Expression, + Iir_Kind.Association_Element_By_Name, + ] + Association_Element = [ Iir_Kind.Association_Element_By_Expression, + Iir_Kind.Association_Element_By_Name, Iir_Kind.Association_Element_By_Individual, Iir_Kind.Association_Element_Open, Iir_Kind.Association_Element_Package, diff --git a/src/synth/synth-vhdl_insts.adb b/src/synth/synth-vhdl_insts.adb index 2902001d5..06ec882be 100644 --- a/src/synth/synth-vhdl_insts.adb +++ b/src/synth/synth-vhdl_insts.adb @@ -772,7 +772,8 @@ package body Synth.Vhdl_Insts is when Iir_Kind_Association_Element_Open => Actual := Get_Default_Value (Inter); Act_Inst := Inter_Inst; - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => Actual := Get_Actual (Assoc); if Get_Kind (Actual) = Iir_Kind_Reference_Name then -- Skip inserted anonymous signal declaration. @@ -845,7 +846,7 @@ package body Synth.Vhdl_Insts is when Iir_Kind_Association_Element_Open => -- Not connected. return; - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kinds_Association_Element_By_Actual => Actual := Get_Actual (Assoc); when others => Synth_Individual_Output_Assoc @@ -1022,7 +1023,7 @@ package body Synth.Vhdl_Insts is raise Internal_Error; end if; case Get_Kind (Assoc) is - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kinds_Association_Element_By_Actual => return Synth_Type_Of_Object (Syn_Inst, Get_Actual (Assoc)); when others => raise Internal_Error; diff --git a/src/vhdl/simulate/simul-elaboration.adb b/src/vhdl/simulate/simul-elaboration.adb index 9533570a2..e93192cb6 100644 --- a/src/vhdl/simulate/simul-elaboration.adb +++ b/src/vhdl/simulate/simul-elaboration.adb @@ -1319,7 +1319,7 @@ package body Simul.Elaboration is -- actual is not the reserved word OPEN. Inter := Get_Association_Interface (Assoc, Port); case Get_Kind (Assoc) is - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kinds_Association_Element_By_Actual => if Get_Actual_Conversion (Assoc) = Null_Iir and then Get_Formal_Conversion (Assoc) = Null_Iir then diff --git a/src/vhdl/translate/trans-chap4.adb b/src/vhdl/translate/trans-chap4.adb index 5a412dd08..72b88140c 100644 --- a/src/vhdl/translate/trans-chap4.adb +++ b/src/vhdl/translate/trans-chap4.adb @@ -3114,8 +3114,7 @@ package body Trans.Chap4 is Inter := Get_Port_Chain (Entity); end if; while Assoc /= Null_Iir loop - if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression - then + if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Name then Info := null; if Get_Actual_Conversion (Assoc) /= Null_Iir then Info := Add_Info (Assoc, Kind_Assoc); diff --git a/src/vhdl/translate/trans-chap5.adb b/src/vhdl/translate/trans-chap5.adb index b53896033..9b2eec152 100644 --- a/src/vhdl/translate/trans-chap5.adb +++ b/src/vhdl/translate/trans-chap5.adb @@ -386,7 +386,7 @@ package body Trans.Chap5 is Mode : Connect_Mode; begin pragma Assert - (Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression); + (Get_Kind (Assoc) in Iir_Kinds_Association_Element_By_Actual); Open_Temp; if Get_Actual_Conversion (Assoc) = Null_Iir @@ -648,7 +648,8 @@ package body Trans.Chap5 is begin Open_Temp; case Iir_Kinds_Association_Element_Parameters (Get_Kind (Assoc)) is - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => pragma Assert (Get_Whole_Association_Flag (Assoc)); Bounds := Get_Unconstrained_Port_Bounds (Assoc, Port); when Iir_Kind_Association_Element_Open => @@ -727,7 +728,8 @@ package body Trans.Chap5 is | Iir_Kind_Association_Element_Open => pragma Assert (Get_Whole_Association_Flag (Assoc)); Chap4.Elab_Signal_Declaration_Storage (Formal, False); - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => if Get_Whole_Association_Flag (Assoc) then Chap4.Elab_Signal_Declaration_Storage (Formal, Get_Collapse_Signal_Flag (Assoc)); @@ -738,7 +740,8 @@ package body Trans.Chap5 is -- Create or copy signals. Open_Temp; case Iir_Kinds_Association_Element_Parameters (Get_Kind (Assoc)) is - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => if Get_Whole_Association_Flag (Assoc) then if Get_Collapse_Signal_Flag (Assoc) then Value := Get_Default_Value (Formal_Base); diff --git a/src/vhdl/translate/trans-chap8.adb b/src/vhdl/translate/trans-chap8.adb index 3ae6c2e56..3626460aa 100644 --- a/src/vhdl/translate/trans-chap8.adb +++ b/src/vhdl/translate/trans-chap8.adb @@ -2584,7 +2584,8 @@ package body Trans.Chap8 is Has_Value_Field := True; Actual := Null_Iir; Act_Type := Get_Actual_Type (Assoc); - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => Actual := Get_Actual (Assoc); Act_Type := Get_Type (Actual); when Iir_Kind_Association_Element_Open => diff --git a/src/vhdl/translate/trans-chap9.adb b/src/vhdl/translate/trans-chap9.adb index 4e64907d8..89bc687d5 100644 --- a/src/vhdl/translate/trans-chap9.adb +++ b/src/vhdl/translate/trans-chap9.adb @@ -200,8 +200,7 @@ package body Trans.Chap9 is Assoc := Get_Port_Map_Aspect_Chain (Inst); Inter := Get_Port_Chain (Ports); while Assoc /= Null_Iir loop - if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression - then + if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Name then declare Act_Conv : constant Iir := Get_Actual_Conversion (Assoc); Act_Type : constant Iir := Get_Type (Get_Actual (Assoc)); diff --git a/src/vhdl/vhdl-canon.adb b/src/vhdl/vhdl-canon.adb index d5acdf171..f56c0674f 100644 --- a/src/vhdl/vhdl-canon.adb +++ b/src/vhdl/vhdl-canon.adb @@ -930,10 +930,11 @@ package body Vhdl.Canon is Set_Chain (Assoc_El, Null_Iir); Chain_Append (N_Chain, Last, Assoc_El); - case Get_Kind (Assoc_El) is + case Iir_Kinds_Association_Element (Get_Kind (Assoc_El)) is when Iir_Kind_Association_Element_Open => goto Done; - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => if Get_Whole_Association_Flag (Assoc_El) then goto Done; end if; @@ -944,8 +945,6 @@ package body Vhdl.Canon is | Iir_Kind_Association_Element_Subprogram | Iir_Kind_Association_Element_Terminal => goto Done; - when others => - Error_Kind ("canon_association_chain", Assoc_El); end case; elsif Found then -- No more associations. @@ -2530,7 +2529,8 @@ package body Vhdl.Canon is case Get_Kind (Assoc) is when Iir_Kind_Association_Element_Open => null; - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => Set_Actual (El, Sem_Inst.Copy_Tree (Get_Actual (Assoc))); Set_Actual_Conversion (El, diff --git a/src/vhdl/vhdl-elocations.adb b/src/vhdl/vhdl-elocations.adb index 059e02e8b..1b42f3640 100644 --- a/src/vhdl/vhdl-elocations.adb +++ b/src/vhdl/vhdl-elocations.adb @@ -456,6 +456,7 @@ package body Vhdl.Elocations is return Format_None; when Iir_Kind_Library_Clause | Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_By_Individual | Iir_Kind_Association_Element_Open | Iir_Kind_Association_Element_Package diff --git a/src/vhdl/vhdl-elocations.ads b/src/vhdl/vhdl-elocations.ads index 51a9d7038..d5fa98b85 100644 --- a/src/vhdl/vhdl-elocations.ads +++ b/src/vhdl/vhdl-elocations.ads @@ -51,6 +51,7 @@ package Vhdl.Elocations is ------------- -- Iir_Kind_Association_Element_By_Expression (L1) + -- Iir_Kind_Association_Element_By_Name (L1) -- Iir_Kind_Association_Element_Open (L1) -- Iir_Kind_Association_Element_By_Individual (L1) -- Iir_Kind_Association_Element_Package (L1) diff --git a/src/vhdl/vhdl-elocations_meta.adb b/src/vhdl/vhdl-elocations_meta.adb index 751ae2cb5..b20c29bbd 100644 --- a/src/vhdl/vhdl-elocations_meta.adb +++ b/src/vhdl/vhdl-elocations_meta.adb @@ -390,6 +390,7 @@ package body Vhdl.Elocations_Meta is begin case K is when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_By_Individual | Iir_Kind_Association_Element_Open | Iir_Kind_Association_Element_Package diff --git a/src/vhdl/vhdl-errors.adb b/src/vhdl/vhdl-errors.adb index 69e4a0860..27d6c9a7f 100644 --- a/src/vhdl/vhdl-errors.adb +++ b/src/vhdl/vhdl-errors.adb @@ -293,6 +293,7 @@ package body Vhdl.Errors is when Iir_Kind_Association_Element_By_Individual => return "individual association element"; when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_Package | Iir_Kind_Association_Element_Type | Iir_Kind_Association_Element_Subprogram diff --git a/src/vhdl/vhdl-evaluation.adb b/src/vhdl/vhdl-evaluation.adb index e1f5ea32e..32b337e73 100644 --- a/src/vhdl/vhdl-evaluation.adb +++ b/src/vhdl/vhdl-evaluation.adb @@ -3422,7 +3422,8 @@ package body Vhdl.Evaluation is case Iir_Kinds_Association_Element_Parameters (Get_Kind (Assoc)) is - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => Assoc_Expr := Get_Actual (Assoc); if not Can_Eval_Value (Assoc_Expr, False) then return False; diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb index ee975fd8f..2fae16c38 100644 --- a/src/vhdl/vhdl-nodes.adb +++ b/src/vhdl/vhdl-nodes.adb @@ -1001,6 +1001,7 @@ package body Vhdl.Nodes is | Iir_Kind_Conditional_Waveform | Iir_Kind_Conditional_Expression | Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_By_Individual | Iir_Kind_Association_Element_Open | Iir_Kind_Association_Element_Package diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index 05f717c47..5e53da773 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -446,6 +446,7 @@ package Vhdl.Nodes is ------------- -- Iir_Kind_Association_Element_By_Expression (Short) + -- Iir_Kind_Association_Element_By_Name (Short) -- Iir_Kind_Association_Element_Open (Short) -- Iir_Kind_Association_Element_By_Individual (Short) -- Iir_Kind_Association_Element_Package (Short) @@ -460,6 +461,7 @@ package Vhdl.Nodes is -- Get/Set_Chain (Field2) -- -- Only for Iir_Kind_Association_Element_By_Expression: + -- Only for Iir_Kind_Association_Element_By_Name: -- Only for Iir_Kind_Association_Element_Package: -- Only for Iir_Kind_Association_Element_Type: -- Only for Iir_Kind_Association_Element_Subprogram: @@ -472,6 +474,7 @@ package Vhdl.Nodes is -- A function call or a type conversion for the actual. -- FIXME: should be a name ? -- Only for Iir_Kind_Association_Element_By_Expression: + -- Only for Iir_Kind_Association_Element_By_Name: -- Get/Set_Actual_Conversion (Field4) -- -- Only for Iir_Kind_Association_Element_Type: @@ -479,6 +482,7 @@ package Vhdl.Nodes is -- -- A function call or a type conversion for the formal. -- Only for Iir_Kind_Association_Element_By_Expression: + -- Only for Iir_Kind_Association_Element_By_Name: -- Get/Set_Formal_Conversion (Field5) -- -- Owner of Actual_Type if needed. @@ -4855,6 +4859,7 @@ package Vhdl.Nodes is Iir_Kind_Conditional_Waveform, Iir_Kind_Conditional_Expression, Iir_Kind_Association_Element_By_Expression, + Iir_Kind_Association_Element_By_Name, Iir_Kind_Association_Element_By_Individual, Iir_Kind_Association_Element_Open, Iir_Kind_Association_Element_Package, @@ -6668,11 +6673,17 @@ package Vhdl.Nodes is -- Association elements for parameters. subtype Iir_Kinds_Association_Element_Parameters is Iir_Kind range Iir_Kind_Association_Element_By_Expression .. + --Iir_Kind_Association_Element_By_Name --Iir_Kind_Association_Element_By_Individual Iir_Kind_Association_Element_Open; + subtype Iir_Kinds_Association_Element_By_Actual is Iir_Kind range + Iir_Kind_Association_Element_By_Expression .. + Iir_Kind_Association_Element_By_Name; + subtype Iir_Kinds_Association_Element is Iir_Kind range Iir_Kind_Association_Element_By_Expression .. + --Iir_Kind_Association_Element_By_Name --Iir_Kind_Association_Element_By_Individual --Iir_Kind_Association_Element_Open --Iir_Kind_Association_Element_Package diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index 25f1dc86c..0b8092802 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -1185,6 +1185,8 @@ package body Vhdl.Nodes_Meta is return "conditional_expression"; when Iir_Kind_Association_Element_By_Expression => return "association_element_by_expression"; + when Iir_Kind_Association_Element_By_Name => + return "association_element_by_name"; when Iir_Kind_Association_Element_By_Individual => return "association_element_by_individual"; when Iir_Kind_Association_Element_Open => @@ -2669,6 +2671,15 @@ package body Vhdl.Nodes_Meta is Field_Actual, Field_Actual_Conversion, Field_Formal_Conversion, + -- Iir_Kind_Association_Element_By_Name + Field_Whole_Association_Flag, + Field_Collapse_Signal_Flag, + Field_In_Formal_Flag, + Field_Formal, + Field_Chain, + Field_Actual, + Field_Actual_Conversion, + Field_Formal_Conversion, -- Iir_Kind_Association_Element_By_Individual Field_Whole_Association_Flag, Field_Collapse_Signal_Flag, @@ -5255,303 +5266,304 @@ package body Vhdl.Nodes_Meta is 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 => 1740, - Iir_Kind_Generate_Statement_Body => 1751, - Iir_Kind_If_Generate_Else_Clause => 1757, - Iir_Kind_Simple_Simultaneous_Statement => 1764, - Iir_Kind_Simultaneous_Null_Statement => 1768, - Iir_Kind_Simultaneous_Procedural_Statement => 1779, - Iir_Kind_Simultaneous_Case_Statement => 1788, - Iir_Kind_Simultaneous_If_Statement => 1797, - Iir_Kind_Simultaneous_Elsif => 1803, - Iir_Kind_Simple_Signal_Assignment_Statement => 1814, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1825, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1837, - Iir_Kind_Signal_Force_Assignment_Statement => 1847, - Iir_Kind_Signal_Release_Assignment_Statement => 1856, - Iir_Kind_Null_Statement => 1860, - Iir_Kind_Assertion_Statement => 1867, - Iir_Kind_Report_Statement => 1873, - Iir_Kind_Wait_Statement => 1881, - Iir_Kind_Variable_Assignment_Statement => 1888, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1895, - Iir_Kind_Return_Statement => 1901, - Iir_Kind_For_Loop_Statement => 1912, - Iir_Kind_While_Loop_Statement => 1923, - Iir_Kind_Next_Statement => 1930, - Iir_Kind_Exit_Statement => 1937, - Iir_Kind_Case_Statement => 1945, - Iir_Kind_Procedure_Call_Statement => 1951, - Iir_Kind_Break_Statement => 1958, - Iir_Kind_If_Statement => 1968, - Iir_Kind_Elsif => 1974, - Iir_Kind_Character_Literal => 1981, - Iir_Kind_Simple_Name => 1988, - Iir_Kind_Selected_Name => 1996, - Iir_Kind_Operator_Symbol => 2001, - Iir_Kind_Reference_Name => 2006, - Iir_Kind_External_Constant_Name => 2015, - Iir_Kind_External_Signal_Name => 2024, - Iir_Kind_External_Variable_Name => 2034, - Iir_Kind_Selected_By_All_Name => 2040, - Iir_Kind_Parenthesis_Name => 2045, - Iir_Kind_Package_Pathname => 2049, - Iir_Kind_Absolute_Pathname => 2050, - Iir_Kind_Relative_Pathname => 2051, - Iir_Kind_Pathname_Element => 2056, - Iir_Kind_Base_Attribute => 2058, - Iir_Kind_Subtype_Attribute => 2063, - Iir_Kind_Element_Attribute => 2068, - Iir_Kind_Across_Attribute => 2073, - Iir_Kind_Through_Attribute => 2078, - Iir_Kind_Nature_Reference_Attribute => 2082, - Iir_Kind_Left_Type_Attribute => 2087, - Iir_Kind_Right_Type_Attribute => 2092, - Iir_Kind_High_Type_Attribute => 2097, - Iir_Kind_Low_Type_Attribute => 2102, - Iir_Kind_Ascending_Type_Attribute => 2107, - Iir_Kind_Image_Attribute => 2113, - Iir_Kind_Value_Attribute => 2119, - Iir_Kind_Pos_Attribute => 2125, - Iir_Kind_Val_Attribute => 2131, - Iir_Kind_Succ_Attribute => 2137, - Iir_Kind_Pred_Attribute => 2143, - Iir_Kind_Leftof_Attribute => 2149, - Iir_Kind_Rightof_Attribute => 2155, - Iir_Kind_Signal_Slew_Attribute => 2163, - Iir_Kind_Quantity_Slew_Attribute => 2171, - Iir_Kind_Ramp_Attribute => 2179, - Iir_Kind_Zoh_Attribute => 2187, - Iir_Kind_Ltf_Attribute => 2195, - Iir_Kind_Ztf_Attribute => 2205, - Iir_Kind_Dot_Attribute => 2212, - Iir_Kind_Integ_Attribute => 2219, - Iir_Kind_Above_Attribute => 2227, - Iir_Kind_Quantity_Delayed_Attribute => 2235, - Iir_Kind_Delayed_Attribute => 2244, - Iir_Kind_Stable_Attribute => 2253, - Iir_Kind_Quiet_Attribute => 2262, - Iir_Kind_Transaction_Attribute => 2271, - Iir_Kind_Event_Attribute => 2275, - Iir_Kind_Active_Attribute => 2279, - Iir_Kind_Last_Event_Attribute => 2283, - Iir_Kind_Last_Active_Attribute => 2287, - Iir_Kind_Last_Value_Attribute => 2291, - Iir_Kind_Driving_Attribute => 2295, - Iir_Kind_Driving_Value_Attribute => 2299, - Iir_Kind_Behavior_Attribute => 2299, - Iir_Kind_Structure_Attribute => 2299, - Iir_Kind_Simple_Name_Attribute => 2306, - Iir_Kind_Instance_Name_Attribute => 2311, - Iir_Kind_Path_Name_Attribute => 2316, - Iir_Kind_Left_Array_Attribute => 2323, - Iir_Kind_Right_Array_Attribute => 2330, - Iir_Kind_High_Array_Attribute => 2337, - Iir_Kind_Low_Array_Attribute => 2344, - Iir_Kind_Length_Array_Attribute => 2351, - Iir_Kind_Ascending_Array_Attribute => 2358, - Iir_Kind_Range_Array_Attribute => 2365, - Iir_Kind_Reverse_Range_Array_Attribute => 2372, - Iir_Kind_Attribute_Name => 2381 + Iir_Kind_Association_Element_By_Name => 125, + Iir_Kind_Association_Element_By_Individual => 134, + Iir_Kind_Association_Element_Open => 140, + Iir_Kind_Association_Element_Package => 146, + Iir_Kind_Association_Element_Type => 154, + Iir_Kind_Association_Element_Subprogram => 160, + Iir_Kind_Association_Element_Terminal => 166, + Iir_Kind_Choice_By_Range => 174, + Iir_Kind_Choice_By_Expression => 182, + Iir_Kind_Choice_By_Others => 188, + Iir_Kind_Choice_By_None => 194, + Iir_Kind_Choice_By_Name => 201, + Iir_Kind_Entity_Aspect_Entity => 203, + Iir_Kind_Entity_Aspect_Configuration => 204, + Iir_Kind_Entity_Aspect_Open => 204, + Iir_Kind_Psl_Hierarchical_Name => 206, + Iir_Kind_Block_Configuration => 212, + Iir_Kind_Block_Header => 216, + Iir_Kind_Component_Configuration => 223, + Iir_Kind_Binding_Indication => 227, + Iir_Kind_Entity_Class => 229, + Iir_Kind_Attribute_Value => 237, + Iir_Kind_Signature => 240, + Iir_Kind_Aggregate_Info => 247, + Iir_Kind_Procedure_Call => 251, + Iir_Kind_Record_Element_Constraint => 259, + Iir_Kind_Array_Element_Resolution => 261, + Iir_Kind_Record_Resolution => 262, + Iir_Kind_Record_Element_Resolution => 265, + Iir_Kind_Break_Element => 269, + Iir_Kind_Attribute_Specification => 278, + Iir_Kind_Disconnection_Specification => 284, + Iir_Kind_Step_Limit_Specification => 290, + Iir_Kind_Configuration_Specification => 296, + Iir_Kind_Access_Type_Definition => 303, + Iir_Kind_Incomplete_Type_Definition => 310, + Iir_Kind_Interface_Type_Definition => 316, + Iir_Kind_File_Type_Definition => 322, + Iir_Kind_Protected_Type_Declaration => 331, + Iir_Kind_Record_Type_Definition => 341, + Iir_Kind_Array_Type_Definition => 352, + Iir_Kind_Array_Subtype_Definition => 369, + Iir_Kind_Record_Subtype_Definition => 382, + Iir_Kind_Access_Subtype_Definition => 390, + Iir_Kind_Physical_Subtype_Definition => 400, + Iir_Kind_Floating_Subtype_Definition => 411, + Iir_Kind_Integer_Subtype_Definition => 421, + Iir_Kind_Enumeration_Subtype_Definition => 431, + Iir_Kind_Enumeration_Type_Definition => 442, + Iir_Kind_Integer_Type_Definition => 450, + Iir_Kind_Floating_Type_Definition => 458, + Iir_Kind_Physical_Type_Definition => 469, + Iir_Kind_Range_Expression => 477, + Iir_Kind_Protected_Type_Body => 485, + Iir_Kind_Wildcard_Type_Definition => 489, + Iir_Kind_Subtype_Definition => 496, + Iir_Kind_Scalar_Nature_Definition => 504, + Iir_Kind_Record_Nature_Definition => 517, + Iir_Kind_Array_Nature_Definition => 531, + Iir_Kind_Array_Subnature_Definition => 546, + Iir_Kind_Overload_List => 547, + Iir_Kind_Entity_Declaration => 560, + Iir_Kind_Configuration_Declaration => 570, + Iir_Kind_Context_Declaration => 576, + Iir_Kind_Package_Declaration => 591, + Iir_Kind_Package_Instantiation_Declaration => 605, + Iir_Kind_Vmode_Declaration => 617, + Iir_Kind_Vprop_Declaration => 629, + Iir_Kind_Vunit_Declaration => 642, + Iir_Kind_Package_Body => 650, + Iir_Kind_Architecture_Body => 663, + Iir_Kind_Type_Declaration => 670, + Iir_Kind_Anonymous_Type_Declaration => 676, + Iir_Kind_Subtype_Declaration => 684, + Iir_Kind_Nature_Declaration => 690, + Iir_Kind_Subnature_Declaration => 697, + Iir_Kind_Package_Header => 699, + Iir_Kind_Unit_Declaration => 708, + Iir_Kind_Library_Declaration => 716, + Iir_Kind_Component_Declaration => 726, + Iir_Kind_Attribute_Declaration => 733, + Iir_Kind_Group_Template_Declaration => 739, + Iir_Kind_Group_Declaration => 746, + Iir_Kind_Element_Declaration => 754, + Iir_Kind_Nature_Element_Declaration => 761, + Iir_Kind_Non_Object_Alias_Declaration => 769, + Iir_Kind_Psl_Declaration => 777, + Iir_Kind_Psl_Endpoint_Declaration => 791, + Iir_Kind_Enumeration_Literal => 802, + Iir_Kind_Function_Declaration => 827, + Iir_Kind_Procedure_Declaration => 851, + Iir_Kind_Function_Body => 861, + Iir_Kind_Procedure_Body => 872, + Iir_Kind_Function_Instantiation_Declaration => 883, + Iir_Kind_Procedure_Instantiation_Declaration => 893, + Iir_Kind_Terminal_Declaration => 902, + Iir_Kind_Object_Alias_Declaration => 914, + Iir_Kind_Free_Quantity_Declaration => 926, + Iir_Kind_Spectrum_Quantity_Declaration => 939, + Iir_Kind_Noise_Quantity_Declaration => 951, + Iir_Kind_Across_Quantity_Declaration => 967, + Iir_Kind_Through_Quantity_Declaration => 983, + Iir_Kind_File_Declaration => 998, + Iir_Kind_Guard_Signal_Declaration => 1012, + Iir_Kind_Signal_Declaration => 1029, + Iir_Kind_Variable_Declaration => 1042, + Iir_Kind_Constant_Declaration => 1056, + Iir_Kind_Iterator_Declaration => 1068, + Iir_Kind_Interface_Constant_Declaration => 1085, + Iir_Kind_Interface_Variable_Declaration => 1101, + Iir_Kind_Interface_Signal_Declaration => 1122, + Iir_Kind_Interface_File_Declaration => 1138, + Iir_Kind_Interface_Quantity_Declaration => 1154, + Iir_Kind_Interface_Terminal_Declaration => 1166, + Iir_Kind_Interface_Type_Declaration => 1177, + Iir_Kind_Interface_Package_Declaration => 1190, + Iir_Kind_Interface_Function_Declaration => 1208, + Iir_Kind_Interface_Procedure_Declaration => 1222, + Iir_Kind_Anonymous_Signal_Declaration => 1231, + Iir_Kind_Signal_Attribute_Declaration => 1234, + Iir_Kind_Identity_Operator => 1238, + Iir_Kind_Negation_Operator => 1242, + Iir_Kind_Absolute_Operator => 1246, + Iir_Kind_Not_Operator => 1250, + Iir_Kind_Implicit_Condition_Operator => 1254, + Iir_Kind_Condition_Operator => 1258, + Iir_Kind_Reduction_And_Operator => 1262, + Iir_Kind_Reduction_Or_Operator => 1266, + Iir_Kind_Reduction_Nand_Operator => 1270, + Iir_Kind_Reduction_Nor_Operator => 1274, + Iir_Kind_Reduction_Xor_Operator => 1278, + Iir_Kind_Reduction_Xnor_Operator => 1282, + Iir_Kind_And_Operator => 1287, + Iir_Kind_Or_Operator => 1292, + Iir_Kind_Nand_Operator => 1297, + Iir_Kind_Nor_Operator => 1302, + Iir_Kind_Xor_Operator => 1307, + Iir_Kind_Xnor_Operator => 1312, + Iir_Kind_Equality_Operator => 1317, + Iir_Kind_Inequality_Operator => 1322, + Iir_Kind_Less_Than_Operator => 1327, + Iir_Kind_Less_Than_Or_Equal_Operator => 1332, + Iir_Kind_Greater_Than_Operator => 1337, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1342, + Iir_Kind_Match_Equality_Operator => 1347, + Iir_Kind_Match_Inequality_Operator => 1352, + Iir_Kind_Match_Less_Than_Operator => 1357, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1362, + Iir_Kind_Match_Greater_Than_Operator => 1367, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1372, + Iir_Kind_Sll_Operator => 1377, + Iir_Kind_Sla_Operator => 1382, + Iir_Kind_Srl_Operator => 1387, + Iir_Kind_Sra_Operator => 1392, + Iir_Kind_Rol_Operator => 1397, + Iir_Kind_Ror_Operator => 1402, + Iir_Kind_Addition_Operator => 1407, + Iir_Kind_Substraction_Operator => 1412, + Iir_Kind_Concatenation_Operator => 1417, + Iir_Kind_Multiplication_Operator => 1422, + Iir_Kind_Division_Operator => 1427, + Iir_Kind_Modulus_Operator => 1432, + Iir_Kind_Remainder_Operator => 1437, + Iir_Kind_Exponentiation_Operator => 1442, + Iir_Kind_Function_Call => 1450, + Iir_Kind_Aggregate => 1457, + Iir_Kind_Parenthesis_Expression => 1460, + Iir_Kind_Qualified_Expression => 1464, + Iir_Kind_Type_Conversion => 1469, + Iir_Kind_Allocator_By_Expression => 1474, + Iir_Kind_Allocator_By_Subtype => 1480, + Iir_Kind_Selected_Element => 1488, + Iir_Kind_Dereference => 1493, + Iir_Kind_Implicit_Dereference => 1498, + Iir_Kind_Slice_Name => 1505, + Iir_Kind_Indexed_Name => 1511, + Iir_Kind_Psl_Prev => 1517, + Iir_Kind_Psl_Stable => 1522, + Iir_Kind_Psl_Rose => 1527, + Iir_Kind_Psl_Fell => 1532, + Iir_Kind_Psl_Onehot => 1535, + Iir_Kind_Psl_Onehot0 => 1538, + Iir_Kind_Psl_Expression => 1540, + Iir_Kind_Sensitized_Process_Statement => 1561, + Iir_Kind_Process_Statement => 1581, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1594, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1607, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1621, + Iir_Kind_Concurrent_Assertion_Statement => 1629, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1636, + Iir_Kind_Concurrent_Break_Statement => 1644, + Iir_Kind_Psl_Assert_Directive => 1657, + Iir_Kind_Psl_Assume_Directive => 1668, + Iir_Kind_Psl_Cover_Directive => 1680, + Iir_Kind_Psl_Restrict_Directive => 1691, + Iir_Kind_Block_Statement => 1705, + Iir_Kind_If_Generate_Statement => 1716, + Iir_Kind_Case_Generate_Statement => 1725, + Iir_Kind_For_Generate_Statement => 1734, + Iir_Kind_Component_Instantiation_Statement => 1745, + Iir_Kind_Psl_Default_Clock => 1748, + Iir_Kind_Generate_Statement_Body => 1759, + Iir_Kind_If_Generate_Else_Clause => 1765, + Iir_Kind_Simple_Simultaneous_Statement => 1772, + Iir_Kind_Simultaneous_Null_Statement => 1776, + Iir_Kind_Simultaneous_Procedural_Statement => 1787, + Iir_Kind_Simultaneous_Case_Statement => 1796, + Iir_Kind_Simultaneous_If_Statement => 1805, + Iir_Kind_Simultaneous_Elsif => 1811, + Iir_Kind_Simple_Signal_Assignment_Statement => 1822, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1833, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1845, + Iir_Kind_Signal_Force_Assignment_Statement => 1855, + Iir_Kind_Signal_Release_Assignment_Statement => 1864, + Iir_Kind_Null_Statement => 1868, + Iir_Kind_Assertion_Statement => 1875, + Iir_Kind_Report_Statement => 1881, + Iir_Kind_Wait_Statement => 1889, + Iir_Kind_Variable_Assignment_Statement => 1896, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1903, + Iir_Kind_Return_Statement => 1909, + Iir_Kind_For_Loop_Statement => 1920, + Iir_Kind_While_Loop_Statement => 1931, + Iir_Kind_Next_Statement => 1938, + Iir_Kind_Exit_Statement => 1945, + Iir_Kind_Case_Statement => 1953, + Iir_Kind_Procedure_Call_Statement => 1959, + Iir_Kind_Break_Statement => 1966, + Iir_Kind_If_Statement => 1976, + Iir_Kind_Elsif => 1982, + Iir_Kind_Character_Literal => 1989, + Iir_Kind_Simple_Name => 1996, + Iir_Kind_Selected_Name => 2004, + Iir_Kind_Operator_Symbol => 2009, + Iir_Kind_Reference_Name => 2014, + Iir_Kind_External_Constant_Name => 2023, + Iir_Kind_External_Signal_Name => 2032, + Iir_Kind_External_Variable_Name => 2042, + Iir_Kind_Selected_By_All_Name => 2048, + Iir_Kind_Parenthesis_Name => 2053, + Iir_Kind_Package_Pathname => 2057, + Iir_Kind_Absolute_Pathname => 2058, + Iir_Kind_Relative_Pathname => 2059, + Iir_Kind_Pathname_Element => 2064, + Iir_Kind_Base_Attribute => 2066, + Iir_Kind_Subtype_Attribute => 2071, + Iir_Kind_Element_Attribute => 2076, + Iir_Kind_Across_Attribute => 2081, + Iir_Kind_Through_Attribute => 2086, + Iir_Kind_Nature_Reference_Attribute => 2090, + Iir_Kind_Left_Type_Attribute => 2095, + Iir_Kind_Right_Type_Attribute => 2100, + Iir_Kind_High_Type_Attribute => 2105, + Iir_Kind_Low_Type_Attribute => 2110, + Iir_Kind_Ascending_Type_Attribute => 2115, + Iir_Kind_Image_Attribute => 2121, + Iir_Kind_Value_Attribute => 2127, + Iir_Kind_Pos_Attribute => 2133, + Iir_Kind_Val_Attribute => 2139, + Iir_Kind_Succ_Attribute => 2145, + Iir_Kind_Pred_Attribute => 2151, + Iir_Kind_Leftof_Attribute => 2157, + Iir_Kind_Rightof_Attribute => 2163, + Iir_Kind_Signal_Slew_Attribute => 2171, + Iir_Kind_Quantity_Slew_Attribute => 2179, + Iir_Kind_Ramp_Attribute => 2187, + Iir_Kind_Zoh_Attribute => 2195, + Iir_Kind_Ltf_Attribute => 2203, + Iir_Kind_Ztf_Attribute => 2213, + Iir_Kind_Dot_Attribute => 2220, + Iir_Kind_Integ_Attribute => 2227, + Iir_Kind_Above_Attribute => 2235, + Iir_Kind_Quantity_Delayed_Attribute => 2243, + Iir_Kind_Delayed_Attribute => 2252, + Iir_Kind_Stable_Attribute => 2261, + Iir_Kind_Quiet_Attribute => 2270, + Iir_Kind_Transaction_Attribute => 2279, + Iir_Kind_Event_Attribute => 2283, + Iir_Kind_Active_Attribute => 2287, + Iir_Kind_Last_Event_Attribute => 2291, + Iir_Kind_Last_Active_Attribute => 2295, + Iir_Kind_Last_Value_Attribute => 2299, + Iir_Kind_Driving_Attribute => 2303, + Iir_Kind_Driving_Value_Attribute => 2307, + Iir_Kind_Behavior_Attribute => 2307, + Iir_Kind_Structure_Attribute => 2307, + Iir_Kind_Simple_Name_Attribute => 2314, + Iir_Kind_Instance_Name_Attribute => 2319, + Iir_Kind_Path_Name_Attribute => 2324, + Iir_Kind_Left_Array_Attribute => 2331, + Iir_Kind_Right_Array_Attribute => 2338, + Iir_Kind_High_Array_Attribute => 2345, + Iir_Kind_Low_Array_Attribute => 2352, + Iir_Kind_Length_Array_Attribute => 2359, + Iir_Kind_Ascending_Array_Attribute => 2366, + Iir_Kind_Range_Array_Attribute => 2373, + Iir_Kind_Reverse_Range_Array_Attribute => 2380, + Iir_Kind_Attribute_Name => 2389 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -8061,6 +8073,7 @@ package body Vhdl.Nodes_Meta is begin case K is when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_By_Individual | Iir_Kind_Association_Element_Open | Iir_Kind_Association_Element_Package @@ -8077,6 +8090,7 @@ package body Vhdl.Nodes_Meta is begin case K is when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_Package | Iir_Kind_Association_Element_Type | Iir_Kind_Association_Element_Subprogram @@ -8089,18 +8103,31 @@ package body Vhdl.Nodes_Meta is function Has_Actual_Conversion (K : Iir_Kind) return Boolean is begin - return K = Iir_Kind_Association_Element_By_Expression; + case K is + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => + return True; + when others => + return False; + end case; end Has_Actual_Conversion; function Has_Formal_Conversion (K : Iir_Kind) return Boolean is begin - return K = Iir_Kind_Association_Element_By_Expression; + case K is + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => + return True; + when others => + return False; + end case; end Has_Formal_Conversion; function Has_Whole_Association_Flag (K : Iir_Kind) return Boolean is begin case K is when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_By_Individual | Iir_Kind_Association_Element_Open | Iir_Kind_Association_Element_Package @@ -8117,6 +8144,7 @@ package body Vhdl.Nodes_Meta is begin case K is when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_By_Individual | Iir_Kind_Association_Element_Open | Iir_Kind_Association_Element_Package @@ -8472,6 +8500,7 @@ package body Vhdl.Nodes_Meta is | Iir_Kind_Conditional_Waveform | Iir_Kind_Conditional_Expression | Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_By_Individual | Iir_Kind_Association_Element_Open | Iir_Kind_Association_Element_Package @@ -11636,6 +11665,7 @@ package body Vhdl.Nodes_Meta is begin case K is when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name | Iir_Kind_Association_Element_By_Individual | Iir_Kind_Association_Element_Open | Iir_Kind_Association_Element_Package diff --git a/src/vhdl/vhdl-prints.adb b/src/vhdl/vhdl-prints.adb index 35a6f4958..c0abf532e 100644 --- a/src/vhdl/vhdl-prints.adb +++ b/src/vhdl/vhdl-prints.adb @@ -3316,7 +3316,7 @@ package body Vhdl.Prints is end if; -- Formal part. - if Get_Kind (El) = Iir_Kind_Association_Element_By_Expression then + if Get_Kind (El) in Iir_Kinds_Association_Element_By_Actual then Conv := Get_Formal_Conversion (El); if Conv /= Null_Iir then Disp_Conversion (Ctxt, Conv); @@ -3342,7 +3342,8 @@ package body Vhdl.Prints is | Iir_Kind_Association_Element_Subprogram | Iir_Kind_Association_Element_Terminal => Print (Ctxt, Get_Actual (El)); - when Iir_Kind_Association_Element_By_Expression => + when Iir_Kind_Association_Element_By_Expression + | Iir_Kind_Association_Element_By_Name => Conv := Get_Actual_Conversion (El); if Conv /= Null_Iir then Disp_Conversion (Ctxt, Conv); diff --git a/src/vhdl/vhdl-sem.adb b/src/vhdl/vhdl-sem.adb index 06b6fbced..142a7706b 100644 --- a/src/vhdl/vhdl-sem.adb +++ b/src/vhdl/vhdl-sem.adb @@ -37,6 +37,7 @@ with Vhdl.Sem_Utils; with Vhdl.Sem_Stmts; use Vhdl.Sem_Stmts; with Vhdl.Nodes_Utils; with Vhdl.Xrefs; use Vhdl.Xrefs; +with Vhdl.Elocations; package body Vhdl.Sem is -- Forward declarations. @@ -528,87 +529,108 @@ package body Vhdl.Sem is return Res; end Sem_Insert_Anonymous_Signal; - procedure Sem_Signal_Port_Association - (Assoc : Iir; Formal : Iir; Formal_Base : Iir) + function Sem_Signal_Port_Association + (Assoc : Iir; Formal : Iir; Formal_Base : Iir) return Iir is Actual : Iir; + N_Assoc : Iir; Prefix : Iir; Object : Iir; begin - if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression then - Actual := Get_Actual (Assoc); - -- There has been an error, exit from the loop. - if Actual = Null_Iir then - return; + Actual := Get_Actual (Assoc); + -- There has been an error, return now. + if Actual = Null_Iir then + return Assoc; + end if; + Object := Name_To_Object (Actual); + + if Is_Valid (Object) and then Is_Signal_Object (Object) then + -- Port or signal. + + -- Mutate to By_Name. + N_Assoc := Create_Iir (Iir_Kind_Association_Element_By_Name); + Location_Copy (N_Assoc, Assoc); + Set_Formal (N_Assoc, Get_Formal (Assoc)); + Set_Chain (N_Assoc, Get_Chain (Assoc)); + Set_Actual (N_Assoc, Actual); + Set_Actual_Conversion (N_Assoc, Get_Actual_Conversion (Assoc)); + Set_Formal_Conversion (N_Assoc, Get_Formal_Conversion (Assoc)); + Set_Whole_Association_Flag + (N_Assoc, Get_Whole_Association_Flag (Assoc)); + pragma Assert (not Get_In_Formal_Flag (Assoc)); + if Flag_Elocations then + declare + use Vhdl.Elocations; + begin + Create_Elocations (N_Assoc); + Set_Arrow_Location (N_Assoc, Get_Arrow_Location (Assoc)); + end; end if; - Object := Name_To_Object (Actual); - if Is_Valid (Object) and then Is_Signal_Object (Object) then - -- Port or signal. - Set_Collapse_Signal_Flag - (Assoc, Can_Collapse_Signals (Assoc, Formal)); - if Get_Name_Staticness (Object) < Globally then - Error_Msg_Sem (+Actual, "actual must be a static name"); - end if; - Check_Port_Association_Bounds_Restrictions - (Formal, Actual, Assoc); - Prefix := Get_Object_Prefix (Object); - case Get_Kind (Prefix) is - when Iir_Kind_Interface_Signal_Declaration => - declare - P : Boolean; - pragma Unreferenced (P); - begin - P := Check_Port_Association_Mode_Restrictions - (Formal_Base, Prefix, Assoc); - end; - when Iir_Kind_Signal_Declaration => - Set_Use_Flag (Prefix, True); - when others => - -- FIXME: attributes ? - null; - end case; - else - -- Expression. - Set_Collapse_Signal_Flag (Assoc, False); - - pragma Assert (Is_Null (Get_Actual_Conversion (Assoc))); - if Flags.Vhdl_Std >= Vhdl_93 then - -- LRM93 1.1.1.2 Ports - -- Moreover, the ports of a block may be associated - -- with an expression, in order to provide these ports - -- with constant driving values; such ports must be - -- of mode in. - if Get_Mode (Formal_Base) /= Iir_In_Mode then - Error_Msg_Sem - (+Assoc, "only 'in' ports may be associated with " - & "expression"); - end if; + Free_Iir (Assoc); - -- Is it possible to have a globally static name that is - -- not readable ? - Check_Read (Actual); - - -- LRM93 1.1.1.2 Ports - -- The actual, if an expression, must be a globally - -- static expression. - if Get_Expr_Staticness (Actual) < Globally then - if Flags.Vhdl_Std >= Vhdl_08 then - -- LRM08 6.5.6.3 Port clauses - Actual := Sem_Insert_Anonymous_Signal (Formal, Actual); - Set_Actual (Assoc, Actual); - Set_Collapse_Signal_Flag (Assoc, True); - else - Error_Msg_Sem - (+Actual, - "actual expression must be globally static"); - end if; - end if; - else + Set_Collapse_Signal_Flag + (N_Assoc, Can_Collapse_Signals (N_Assoc, Formal)); + if Get_Name_Staticness (Object) < Globally then + Error_Msg_Sem (+Actual, "actual must be a static name"); + end if; + Check_Port_Association_Bounds_Restrictions + (Formal, Actual, N_Assoc); + Prefix := Get_Object_Prefix (Object); + case Get_Kind (Prefix) is + when Iir_Kind_Interface_Signal_Declaration => + declare + P : Boolean; + pragma Unreferenced (P); + begin + P := Check_Port_Association_Mode_Restrictions + (Formal_Base, Prefix, N_Assoc); + end; + when Iir_Kind_Signal_Declaration => + Set_Use_Flag (Prefix, True); + when others => + -- FIXME: attributes ? + null; + end case; + return N_Assoc; + else + -- Expression. + Set_Collapse_Signal_Flag (Assoc, False); + + pragma Assert (Is_Null (Get_Actual_Conversion (Assoc))); + if Flags.Vhdl_Std >= Vhdl_93 then + -- LRM93 1.1.1.2 Ports + -- Moreover, the ports of a block may be associated + -- with an expression, in order to provide these ports + -- with constant driving values; such ports must be + -- of mode in. + if Get_Mode (Formal_Base) /= Iir_In_Mode then Error_Msg_Sem - (+Assoc, - "cannot associate ports with expression in vhdl87"); + (+Assoc, "only 'in' ports may be associated with expression"); + end if; + + -- Is it possible to have a globally static name that is + -- not readable ? + Check_Read (Actual); + + -- LRM93 1.1.1.2 Ports + -- The actual, if an expression, must be a globally + -- static expression. + if Get_Expr_Staticness (Actual) < Globally then + if Flags.Vhdl_Std >= Vhdl_08 then + -- LRM08 6.5.6.3 Port clauses + Actual := Sem_Insert_Anonymous_Signal (Formal, Actual); + Set_Actual (Assoc, Actual); + Set_Collapse_Signal_Flag (Assoc, True); + else + Error_Msg_Sem + (+Actual, "actual expression must be globally static"); + end if; end if; + else + Error_Msg_Sem + (+Assoc, "cannot associate ports with expression in vhdl87"); end if; + return Assoc; end if; end Sem_Signal_Port_Association; @@ -618,6 +640,7 @@ package body Vhdl.Sem is (Inter_Parent : Iir; Assoc_Parent : Iir) is Assoc : Iir; + Prev_Assoc, N_Assoc : Iir; Match : Compatibility_Level; Assoc_Chain : Iir; Inter_Chain : Iir; @@ -684,17 +707,33 @@ package body Vhdl.Sem is -- The actual, if an expression, must be a globally static expression. Assoc := Assoc_Chain; Inter := Get_Port_Chain (Inter_Parent); + Prev_Assoc := Null_Iir; while Assoc /= Null_Iir loop Formal := Get_Association_Formal (Assoc, Inter); Formal_Base := Get_Interface_Of_Formal (Formal); case Get_Kind (Formal_Base) is when Iir_Kind_Interface_Signal_Declaration => - Sem_Signal_Port_Association (Assoc, Formal, Formal_Base); + if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression + then + N_Assoc := Sem_Signal_Port_Association + (Assoc, Formal, Formal_Base); + + -- Reinsert the new association (in case of mutation). + if N_Assoc /= Assoc then + if Prev_Assoc /= Null_Iir then + Set_Chain (Prev_Assoc, N_Assoc); + else + Set_Port_Map_Aspect_Chain (Assoc_Parent, N_Assoc); + end if; + Assoc := N_Assoc; + end if; + end if; when others => null; end case; + Prev_Assoc := Assoc; Next_Association_Interface (Assoc, Inter); end loop; end Sem_Port_Association_Chain; |