From c24ef07771e91f11206f88d3c912941f942f4e4b Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 28 May 2019 06:36:57 +0200 Subject: vhdl: get rid of Get/Set_Physical_Unit. Use integer_literal for evaluated physical literals. --- src/vhdl/python/libghdl/thin/vhdl/nodes.py | 4 - src/vhdl/python/libghdl/thin/vhdl/nodes_meta.py | 168 ++++---- src/vhdl/vhdl-evaluation.adb | 31 +- src/vhdl/vhdl-nodes.adb | 20 +- src/vhdl/vhdl-nodes.ads | 13 +- src/vhdl/vhdl-nodes_meta.adb | 538 ++++++++++++------------ src/vhdl/vhdl-nodes_meta.ads | 2 - src/vhdl/vhdl-sem_expr.adb | 1 - src/vhdl/vhdl-sem_types.adb | 28 +- src/vhdl/vhdl-std_package.adb | 68 +-- 10 files changed, 402 insertions(+), 471 deletions(-) (limited to 'src') diff --git a/src/vhdl/python/libghdl/thin/vhdl/nodes.py b/src/vhdl/python/libghdl/thin/vhdl/nodes.py index a42710e5e..07d440896 100644 --- a/src/vhdl/python/libghdl/thin/vhdl/nodes.py +++ b/src/vhdl/python/libghdl/thin/vhdl/nodes.py @@ -2035,10 +2035,6 @@ Get_Right = libghdl.vhdl__nodes__get_right Set_Right = libghdl.vhdl__nodes__set_right -Get_Physical_Unit = libghdl.vhdl__nodes__get_physical_unit - -Set_Physical_Unit = libghdl.vhdl__nodes__set_physical_unit - Get_Unit_Name = libghdl.vhdl__nodes__get_unit_name Set_Unit_Name = libghdl.vhdl__nodes__set_unit_name diff --git a/src/vhdl/python/libghdl/thin/vhdl/nodes_meta.py b/src/vhdl/python/libghdl/thin/vhdl/nodes_meta.py index 58e795abd..523dc43de 100644 --- a/src/vhdl/python/libghdl/thin/vhdl/nodes_meta.py +++ b/src/vhdl/python/libghdl/thin/vhdl/nodes_meta.py @@ -305,89 +305,88 @@ class fields: Operand = 241 Left = 242 Right = 243 - Physical_Unit = 244 - Unit_Name = 245 - Name = 246 - Group_Template_Name = 247 - Name_Staticness = 248 - Prefix = 249 - Signature_Prefix = 250 - External_Pathname = 251 - Pathname_Suffix = 252 - Pathname_Expression = 253 - In_Formal_Flag = 254 - Slice_Subtype = 255 - Suffix = 256 - Index_Subtype = 257 - Parameter = 258 - Attr_Chain = 259 - Signal_Attribute_Declaration = 260 - Actual_Type = 261 - Actual_Type_Definition = 262 - Association_Chain = 263 - Individual_Association_Chain = 264 - Subprogram_Association_Chain = 265 - Aggregate_Info = 266 - Sub_Aggregate_Info = 267 - Aggr_Dynamic_Flag = 268 - Aggr_Min_Length = 269 - Aggr_Low_Limit = 270 - Aggr_High_Limit = 271 - Aggr_Others_Flag = 272 - Aggr_Named_Flag = 273 - Aggregate_Expand_Flag = 274 - Association_Choices_Chain = 275 - Case_Statement_Alternative_Chain = 276 - Choice_Staticness = 277 - Procedure_Call = 278 - Implementation = 279 - Parameter_Association_Chain = 280 - Method_Object = 281 - Subtype_Type_Mark = 282 - Type_Conversion_Subtype = 283 - Type_Mark = 284 - File_Type_Mark = 285 - Return_Type_Mark = 286 - Has_Disconnect_Flag = 287 - Has_Active_Flag = 288 - Is_Within_Flag = 289 - Type_Marks_List = 290 - Implicit_Alias_Flag = 291 - Alias_Signature = 292 - Attribute_Signature = 293 - Overload_List = 294 - Simple_Name_Identifier = 295 - Simple_Name_Subtype = 296 - Protected_Type_Body = 297 - Protected_Type_Declaration = 298 - Use_Flag = 299 - End_Has_Reserved_Id = 300 - End_Has_Identifier = 301 - End_Has_Postponed = 302 - Has_Label = 303 - Has_Begin = 304 - Has_End = 305 - Has_Is = 306 - Has_Pure = 307 - Has_Body = 308 - Has_Parameter = 309 - Has_Component = 310 - Has_Identifier_List = 311 - Has_Mode = 312 - Has_Class = 313 - Suspend_Flag = 314 - Is_Ref = 315 - Is_Forward_Ref = 316 - Psl_Property = 317 - Psl_Sequence = 318 - Psl_Declaration = 319 - Psl_Expression = 320 - Psl_Boolean = 321 - PSL_Clock = 322 - PSL_NFA = 323 - PSL_Nbr_States = 324 - PSL_Clock_Sensitivity = 325 - PSL_EOS_Flag = 326 + Unit_Name = 244 + Name = 245 + Group_Template_Name = 246 + Name_Staticness = 247 + Prefix = 248 + Signature_Prefix = 249 + External_Pathname = 250 + Pathname_Suffix = 251 + Pathname_Expression = 252 + In_Formal_Flag = 253 + Slice_Subtype = 254 + Suffix = 255 + Index_Subtype = 256 + Parameter = 257 + Attr_Chain = 258 + Signal_Attribute_Declaration = 259 + Actual_Type = 260 + Actual_Type_Definition = 261 + Association_Chain = 262 + Individual_Association_Chain = 263 + Subprogram_Association_Chain = 264 + Aggregate_Info = 265 + Sub_Aggregate_Info = 266 + Aggr_Dynamic_Flag = 267 + Aggr_Min_Length = 268 + Aggr_Low_Limit = 269 + Aggr_High_Limit = 270 + Aggr_Others_Flag = 271 + Aggr_Named_Flag = 272 + Aggregate_Expand_Flag = 273 + Association_Choices_Chain = 274 + Case_Statement_Alternative_Chain = 275 + Choice_Staticness = 276 + Procedure_Call = 277 + Implementation = 278 + Parameter_Association_Chain = 279 + Method_Object = 280 + Subtype_Type_Mark = 281 + Type_Conversion_Subtype = 282 + Type_Mark = 283 + File_Type_Mark = 284 + Return_Type_Mark = 285 + Has_Disconnect_Flag = 286 + Has_Active_Flag = 287 + Is_Within_Flag = 288 + Type_Marks_List = 289 + Implicit_Alias_Flag = 290 + Alias_Signature = 291 + Attribute_Signature = 292 + Overload_List = 293 + Simple_Name_Identifier = 294 + Simple_Name_Subtype = 295 + Protected_Type_Body = 296 + Protected_Type_Declaration = 297 + Use_Flag = 298 + End_Has_Reserved_Id = 299 + End_Has_Identifier = 300 + End_Has_Postponed = 301 + Has_Label = 302 + Has_Begin = 303 + Has_End = 304 + Has_Is = 305 + Has_Pure = 306 + Has_Body = 307 + Has_Parameter = 308 + Has_Component = 309 + Has_Identifier_List = 310 + Has_Mode = 311 + Has_Class = 312 + Suspend_Flag = 313 + Is_Ref = 314 + Is_Forward_Ref = 315 + Psl_Property = 316 + Psl_Sequence = 317 + Psl_Declaration = 318 + Psl_Expression = 319 + Psl_Boolean = 320 + PSL_Clock = 321 + PSL_NFA = 322 + PSL_Nbr_States = 323 + PSL_Clock_Sensitivity = 324 + PSL_EOS_Flag = 325 Get_Boolean = libghdl.vhdl__nodes_meta__get_boolean @@ -1185,9 +1184,6 @@ Has_Left =\ Has_Right =\ libghdl.vhdl__nodes_meta__has_right -Has_Physical_Unit =\ - libghdl.vhdl__nodes_meta__has_physical_unit - Has_Unit_Name =\ libghdl.vhdl__nodes_meta__has_unit_name diff --git a/src/vhdl/vhdl-evaluation.adb b/src/vhdl/vhdl-evaluation.adb index 71ee3b0d7..52b489816 100644 --- a/src/vhdl/vhdl-evaluation.adb +++ b/src/vhdl/vhdl-evaluation.adb @@ -48,9 +48,9 @@ package body Vhdl.Evaluation is when Iir_Kind_Physical_Int_Literal | Iir_Kind_Physical_Fp_Literal => -- Extract Unit. - Unit := Get_Physical_Literal (Get_Physical_Unit (Expr)); - pragma Assert (Get_Physical_Unit (Unit) - = Get_Primary_Unit (Get_Type (Unit))); + Unit := Get_Physical_Literal + (Get_Named_Entity (Get_Unit_Name (Expr))); + pragma Assert (Get_Kind (Unit) = Iir_Kind_Integer_Literal); case Kind is when Iir_Kind_Physical_Int_Literal => return Get_Value (Expr) * Get_Value (Unit); @@ -59,6 +59,8 @@ package body Vhdl.Evaluation is when others => raise Program_Error; end case; + when Iir_Kind_Integer_Literal => + return Get_Value (Expr); when Iir_Kind_Unit_Declaration => return Get_Value (Get_Physical_Literal (Expr)); when others => @@ -81,7 +83,7 @@ package body Vhdl.Evaluation is end Build_Integer; function Build_Floating (Val : Fp64; Origin : Iir) - return Iir_Floating_Point_Literal + return Iir_Floating_Point_Literal is Res : Iir_Floating_Point_Literal; begin @@ -111,15 +113,12 @@ package body Vhdl.Evaluation is end Build_Enumeration_Constant; function Build_Physical (Val : Int64; Origin : Iir) - return Iir_Physical_Int_Literal + return Iir_Integer_Literal is - Res : Iir_Physical_Int_Literal; - Unit_Name : Iir; + Res : Iir_Integer_Literal; begin - Res := Create_Iir (Iir_Kind_Physical_Int_Literal); + Res := Create_Iir (Iir_Kind_Integer_Literal); Location_Copy (Res, Origin); - Unit_Name := Get_Primary_Unit (Get_Base_Type (Get_Type (Origin))); - Set_Physical_Unit (Res, Unit_Name); Set_Value (Res, Val); Set_Type (Res, Get_Type (Origin)); Set_Literal_Origin (Res, Origin); @@ -214,16 +213,10 @@ package body Vhdl.Evaluation is (Iir_Index32 (Get_Enum_Pos (Val)), Origin); when Iir_Kind_Physical_Int_Literal - | Iir_Kind_Physical_Fp_Literal => - Res := Create_Iir (Iir_Kind_Physical_Int_Literal); - Set_Physical_Unit (Res, Get_Primary_Unit - (Get_Base_Type (Get_Type (Origin)))); - Set_Value (Res, Get_Physical_Value (Val)); - - when Iir_Kind_Unit_Declaration => - Res := Create_Iir (Iir_Kind_Physical_Int_Literal); + | Iir_Kind_Physical_Fp_Literal + | Iir_Kind_Unit_Declaration => + Res := Create_Iir (Iir_Kind_Integer_Literal); Set_Value (Res, Get_Physical_Value (Val)); - Set_Physical_Unit (Res, Get_Primary_Unit (Get_Type (Val))); when Iir_Kind_String_Literal8 => Res := Create_Iir (Iir_Kind_String_Literal8); diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb index 7a532c113..40048a84f 100644 --- a/src/vhdl/vhdl-nodes.adb +++ b/src/vhdl/vhdl-nodes.adb @@ -5253,28 +5253,12 @@ package body Vhdl.Nodes is Set_Field4 (Target, An_Iir); end Set_Right; - function Get_Physical_Unit (Lit : Iir) return Iir is - begin - pragma Assert (Lit /= Null_Iir); - pragma Assert (Has_Physical_Unit (Get_Kind (Lit)), - "no field Physical_Unit"); - return Get_Field3 (Lit); - end Get_Physical_Unit; - - procedure Set_Physical_Unit (Lit : Iir; Name : Iir) is - begin - pragma Assert (Lit /= Null_Iir); - pragma Assert (Has_Physical_Unit (Get_Kind (Lit)), - "no field Physical_Unit"); - Set_Field3 (Lit, Name); - end Set_Physical_Unit; - function Get_Unit_Name (Target : Iir) return Iir is begin pragma Assert (Target /= Null_Iir); pragma Assert (Has_Unit_Name (Get_Kind (Target)), "no field Unit_Name"); - return Get_Field0 (Target); + return Get_Field3 (Target); end Get_Unit_Name; procedure Set_Unit_Name (Target : Iir; Name : Iir) is @@ -5282,7 +5266,7 @@ package body Vhdl.Nodes is pragma Assert (Target /= Null_Iir); pragma Assert (Has_Unit_Name (Get_Kind (Target)), "no field Unit_Name"); - Set_Field0 (Target, Name); + Set_Field3 (Target, Name); end Set_Unit_Name; function Get_Name (Target : Iir) return Iir is diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index 57e9e3fdc..8e20bf830 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -366,11 +366,8 @@ package Vhdl.Nodes is -- -- Get/Set_Literal_Origin (Field2) -- - -- The physical unit of the literal. - -- Get/Set_Physical_Unit (Field3) - -- - -- The name of the physical unit (if any). - -- Get/Set_Unit_Name (Field0) + -- The name of the physical unit. + -- Get/Set_Unit_Name (Field3) -- -- Get/Set_Type (Field1) -- @@ -7149,11 +7146,7 @@ package Vhdl.Nodes is function Get_Right (Target : Iir) return Iir; procedure Set_Right (Target : Iir; An_Iir : Iir); - -- Field: Field3 Ref - function Get_Physical_Unit (Lit : Iir) return Iir; - procedure Set_Physical_Unit (Lit : Iir; Name : Iir); - - -- Field: Field0 + -- Field: Field3 function Get_Unit_Name (Target : Iir) return Iir; procedure Set_Unit_Name (Target : Iir; Name : Iir); diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index 5b8375ddc..be9ab31d8 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -263,7 +263,6 @@ package body Vhdl.Nodes_Meta is Field_Operand => Type_Iir, Field_Left => Type_Iir, Field_Right => Type_Iir, - Field_Physical_Unit => Type_Iir, Field_Unit_Name => Type_Iir, Field_Name => Type_Iir, Field_Group_Template_Name => Type_Iir, @@ -844,8 +843,6 @@ package body Vhdl.Nodes_Meta is return "left"; when Field_Right => return "right"; - when Field_Physical_Unit => - return "physical_unit"; when Field_Unit_Name => return "unit_name"; when Field_Name => @@ -2048,8 +2045,6 @@ package body Vhdl.Nodes_Meta is return Attr_None; when Field_Right => return Attr_None; - when Field_Physical_Unit => - return Attr_Ref; when Field_Unit_Name => return Attr_None; when Field_Name => @@ -2302,14 +2297,12 @@ package body Vhdl.Nodes_Meta is Field_Value, Field_Expr_Staticness, Field_Literal_Origin, - Field_Physical_Unit, Field_Unit_Name, Field_Type, -- Iir_Kind_Physical_Fp_Literal Field_Fp_Value, Field_Expr_Staticness, Field_Literal_Origin, - Field_Physical_Unit, Field_Unit_Name, Field_Type, -- Iir_Kind_Simple_Aggregate @@ -4436,264 +4429,264 @@ package body Vhdl.Nodes_Meta is Iir_Kind_Floating_Point_Literal => 55, Iir_Kind_Null_Literal => 57, Iir_Kind_String_Literal8 => 67, - Iir_Kind_Physical_Int_Literal => 73, - Iir_Kind_Physical_Fp_Literal => 79, - Iir_Kind_Simple_Aggregate => 84, - Iir_Kind_Overflow_Literal => 87, - Iir_Kind_Unaffected_Waveform => 88, - Iir_Kind_Waveform_Element => 91, - Iir_Kind_Conditional_Waveform => 95, - Iir_Kind_Conditional_Expression => 99, - Iir_Kind_Association_Element_By_Expression => 107, - Iir_Kind_Association_Element_By_Individual => 116, - Iir_Kind_Association_Element_Open => 122, - Iir_Kind_Association_Element_Package => 128, - Iir_Kind_Association_Element_Type => 136, - Iir_Kind_Association_Element_Subprogram => 142, - Iir_Kind_Choice_By_Range => 151, - Iir_Kind_Choice_By_Expression => 160, - Iir_Kind_Choice_By_Others => 167, - Iir_Kind_Choice_By_None => 174, - Iir_Kind_Choice_By_Name => 182, - Iir_Kind_Entity_Aspect_Entity => 184, - Iir_Kind_Entity_Aspect_Configuration => 185, - Iir_Kind_Entity_Aspect_Open => 185, - Iir_Kind_Block_Configuration => 191, - Iir_Kind_Block_Header => 195, - Iir_Kind_Component_Configuration => 202, - Iir_Kind_Binding_Indication => 206, - Iir_Kind_Entity_Class => 208, - Iir_Kind_Attribute_Value => 216, - Iir_Kind_Signature => 219, - Iir_Kind_Aggregate_Info => 226, - Iir_Kind_Procedure_Call => 230, - Iir_Kind_Record_Element_Constraint => 236, - Iir_Kind_Array_Element_Resolution => 238, - Iir_Kind_Record_Resolution => 239, - Iir_Kind_Record_Element_Resolution => 242, - Iir_Kind_Attribute_Specification => 250, - Iir_Kind_Disconnection_Specification => 256, - Iir_Kind_Configuration_Specification => 262, - Iir_Kind_Access_Type_Definition => 270, - Iir_Kind_Incomplete_Type_Definition => 278, - Iir_Kind_Interface_Type_Definition => 285, - Iir_Kind_File_Type_Definition => 292, - Iir_Kind_Protected_Type_Declaration => 301, - Iir_Kind_Record_Type_Definition => 312, - Iir_Kind_Array_Type_Definition => 324, - Iir_Kind_Array_Subtype_Definition => 339, - Iir_Kind_Record_Subtype_Definition => 352, - Iir_Kind_Access_Subtype_Definition => 360, - Iir_Kind_Physical_Subtype_Definition => 370, - Iir_Kind_Floating_Subtype_Definition => 381, - Iir_Kind_Integer_Subtype_Definition => 391, - Iir_Kind_Enumeration_Subtype_Definition => 401, - Iir_Kind_Enumeration_Type_Definition => 412, - Iir_Kind_Integer_Type_Definition => 420, - Iir_Kind_Floating_Type_Definition => 428, - Iir_Kind_Physical_Type_Definition => 439, - Iir_Kind_Range_Expression => 447, - Iir_Kind_Protected_Type_Body => 454, - Iir_Kind_Wildcard_Type_Definition => 459, - Iir_Kind_Subtype_Definition => 466, - Iir_Kind_Scalar_Nature_Definition => 470, - Iir_Kind_Overload_List => 471, - Iir_Kind_Type_Declaration => 478, - Iir_Kind_Anonymous_Type_Declaration => 484, - Iir_Kind_Subtype_Declaration => 491, - Iir_Kind_Nature_Declaration => 497, - Iir_Kind_Subnature_Declaration => 503, - Iir_Kind_Entity_Declaration => 515, - Iir_Kind_Configuration_Declaration => 524, - Iir_Kind_Context_Declaration => 530, - Iir_Kind_Package_Declaration => 545, - Iir_Kind_Package_Instantiation_Declaration => 559, - Iir_Kind_Package_Body => 567, - Iir_Kind_Architecture_Body => 579, - Iir_Kind_Package_Header => 581, - Iir_Kind_Unit_Declaration => 590, - Iir_Kind_Library_Declaration => 597, - Iir_Kind_Component_Declaration => 607, - Iir_Kind_Attribute_Declaration => 614, - Iir_Kind_Group_Template_Declaration => 620, - Iir_Kind_Group_Declaration => 627, - Iir_Kind_Element_Declaration => 634, - Iir_Kind_Non_Object_Alias_Declaration => 642, - Iir_Kind_Psl_Declaration => 650, - Iir_Kind_Psl_Endpoint_Declaration => 664, - Iir_Kind_Terminal_Declaration => 671, - Iir_Kind_Free_Quantity_Declaration => 682, - Iir_Kind_Across_Quantity_Declaration => 694, - Iir_Kind_Through_Quantity_Declaration => 706, - Iir_Kind_Enumeration_Literal => 717, - Iir_Kind_Function_Declaration => 742, - Iir_Kind_Procedure_Declaration => 766, - Iir_Kind_Function_Body => 776, - Iir_Kind_Procedure_Body => 787, - Iir_Kind_Object_Alias_Declaration => 798, - Iir_Kind_File_Declaration => 812, - Iir_Kind_Guard_Signal_Declaration => 825, - Iir_Kind_Signal_Declaration => 842, - Iir_Kind_Variable_Declaration => 855, - Iir_Kind_Constant_Declaration => 869, - Iir_Kind_Iterator_Declaration => 880, - Iir_Kind_Interface_Constant_Declaration => 896, - Iir_Kind_Interface_Variable_Declaration => 912, - Iir_Kind_Interface_Signal_Declaration => 933, - Iir_Kind_Interface_File_Declaration => 949, - Iir_Kind_Interface_Type_Declaration => 959, - Iir_Kind_Interface_Package_Declaration => 971, - Iir_Kind_Interface_Function_Declaration => 988, - Iir_Kind_Interface_Procedure_Declaration => 1001, - Iir_Kind_Signal_Attribute_Declaration => 1004, - Iir_Kind_Identity_Operator => 1008, - Iir_Kind_Negation_Operator => 1012, - Iir_Kind_Absolute_Operator => 1016, - Iir_Kind_Not_Operator => 1020, - Iir_Kind_Implicit_Condition_Operator => 1024, - Iir_Kind_Condition_Operator => 1028, - Iir_Kind_Reduction_And_Operator => 1032, - Iir_Kind_Reduction_Or_Operator => 1036, - Iir_Kind_Reduction_Nand_Operator => 1040, - Iir_Kind_Reduction_Nor_Operator => 1044, - Iir_Kind_Reduction_Xor_Operator => 1048, - Iir_Kind_Reduction_Xnor_Operator => 1052, - Iir_Kind_And_Operator => 1057, - Iir_Kind_Or_Operator => 1062, - Iir_Kind_Nand_Operator => 1067, - Iir_Kind_Nor_Operator => 1072, - Iir_Kind_Xor_Operator => 1077, - Iir_Kind_Xnor_Operator => 1082, - Iir_Kind_Equality_Operator => 1087, - Iir_Kind_Inequality_Operator => 1092, - Iir_Kind_Less_Than_Operator => 1097, - Iir_Kind_Less_Than_Or_Equal_Operator => 1102, - Iir_Kind_Greater_Than_Operator => 1107, - Iir_Kind_Greater_Than_Or_Equal_Operator => 1112, - Iir_Kind_Match_Equality_Operator => 1117, - Iir_Kind_Match_Inequality_Operator => 1122, - Iir_Kind_Match_Less_Than_Operator => 1127, - Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1132, - Iir_Kind_Match_Greater_Than_Operator => 1137, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1142, - Iir_Kind_Sll_Operator => 1147, - Iir_Kind_Sla_Operator => 1152, - Iir_Kind_Srl_Operator => 1157, - Iir_Kind_Sra_Operator => 1162, - Iir_Kind_Rol_Operator => 1167, - Iir_Kind_Ror_Operator => 1172, - Iir_Kind_Addition_Operator => 1177, - Iir_Kind_Substraction_Operator => 1182, - Iir_Kind_Concatenation_Operator => 1187, - Iir_Kind_Multiplication_Operator => 1192, - Iir_Kind_Division_Operator => 1197, - Iir_Kind_Modulus_Operator => 1202, - Iir_Kind_Remainder_Operator => 1207, - Iir_Kind_Exponentiation_Operator => 1212, - Iir_Kind_Function_Call => 1220, - Iir_Kind_Aggregate => 1227, - Iir_Kind_Parenthesis_Expression => 1230, - Iir_Kind_Qualified_Expression => 1234, - Iir_Kind_Type_Conversion => 1239, - Iir_Kind_Allocator_By_Expression => 1243, - Iir_Kind_Allocator_By_Subtype => 1248, - Iir_Kind_Selected_Element => 1256, - Iir_Kind_Dereference => 1261, - Iir_Kind_Implicit_Dereference => 1266, - Iir_Kind_Slice_Name => 1273, - Iir_Kind_Indexed_Name => 1279, - Iir_Kind_Psl_Expression => 1281, - Iir_Kind_Sensitized_Process_Statement => 1302, - Iir_Kind_Process_Statement => 1322, - Iir_Kind_Concurrent_Simple_Signal_Assignment => 1334, - Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1346, - Iir_Kind_Concurrent_Selected_Signal_Assignment => 1359, - Iir_Kind_Concurrent_Assertion_Statement => 1367, - Iir_Kind_Concurrent_Procedure_Call_Statement => 1374, - Iir_Kind_Psl_Assert_Statement => 1387, - Iir_Kind_Psl_Cover_Statement => 1400, - Iir_Kind_Block_Statement => 1414, - Iir_Kind_If_Generate_Statement => 1425, - Iir_Kind_Case_Generate_Statement => 1434, - Iir_Kind_For_Generate_Statement => 1443, - Iir_Kind_Component_Instantiation_Statement => 1454, - Iir_Kind_Psl_Default_Clock => 1458, - Iir_Kind_Simple_Simultaneous_Statement => 1465, - Iir_Kind_Generate_Statement_Body => 1476, - Iir_Kind_If_Generate_Else_Clause => 1482, - Iir_Kind_Simple_Signal_Assignment_Statement => 1492, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1502, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1513, - Iir_Kind_Null_Statement => 1517, - Iir_Kind_Assertion_Statement => 1524, - Iir_Kind_Report_Statement => 1530, - Iir_Kind_Wait_Statement => 1538, - Iir_Kind_Variable_Assignment_Statement => 1545, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1552, - Iir_Kind_Return_Statement => 1558, - Iir_Kind_For_Loop_Statement => 1567, - Iir_Kind_While_Loop_Statement => 1576, - Iir_Kind_Next_Statement => 1583, - Iir_Kind_Exit_Statement => 1590, - Iir_Kind_Case_Statement => 1598, - Iir_Kind_Procedure_Call_Statement => 1604, - Iir_Kind_If_Statement => 1614, - Iir_Kind_Elsif => 1620, - Iir_Kind_Character_Literal => 1628, - Iir_Kind_Simple_Name => 1636, - Iir_Kind_Selected_Name => 1645, - Iir_Kind_Operator_Symbol => 1651, - Iir_Kind_Reference_Name => 1654, - Iir_Kind_External_Constant_Name => 1662, - Iir_Kind_External_Signal_Name => 1670, - Iir_Kind_External_Variable_Name => 1679, - Iir_Kind_Selected_By_All_Name => 1685, - Iir_Kind_Parenthesis_Name => 1690, - Iir_Kind_Package_Pathname => 1694, - Iir_Kind_Absolute_Pathname => 1695, - Iir_Kind_Relative_Pathname => 1696, - Iir_Kind_Pathname_Element => 1701, - Iir_Kind_Base_Attribute => 1703, - Iir_Kind_Subtype_Attribute => 1708, - Iir_Kind_Element_Attribute => 1713, - Iir_Kind_Left_Type_Attribute => 1718, - Iir_Kind_Right_Type_Attribute => 1723, - Iir_Kind_High_Type_Attribute => 1728, - Iir_Kind_Low_Type_Attribute => 1733, - Iir_Kind_Ascending_Type_Attribute => 1738, - Iir_Kind_Image_Attribute => 1744, - Iir_Kind_Value_Attribute => 1750, - Iir_Kind_Pos_Attribute => 1756, - Iir_Kind_Val_Attribute => 1762, - Iir_Kind_Succ_Attribute => 1768, - Iir_Kind_Pred_Attribute => 1774, - Iir_Kind_Leftof_Attribute => 1780, - Iir_Kind_Rightof_Attribute => 1786, - Iir_Kind_Delayed_Attribute => 1795, - Iir_Kind_Stable_Attribute => 1804, - Iir_Kind_Quiet_Attribute => 1813, - Iir_Kind_Transaction_Attribute => 1822, - Iir_Kind_Event_Attribute => 1826, - Iir_Kind_Active_Attribute => 1830, - Iir_Kind_Last_Event_Attribute => 1834, - Iir_Kind_Last_Active_Attribute => 1838, - Iir_Kind_Last_Value_Attribute => 1842, - Iir_Kind_Driving_Attribute => 1846, - Iir_Kind_Driving_Value_Attribute => 1850, - Iir_Kind_Behavior_Attribute => 1850, - Iir_Kind_Structure_Attribute => 1850, - Iir_Kind_Simple_Name_Attribute => 1857, - Iir_Kind_Instance_Name_Attribute => 1862, - Iir_Kind_Path_Name_Attribute => 1867, - Iir_Kind_Left_Array_Attribute => 1874, - Iir_Kind_Right_Array_Attribute => 1881, - Iir_Kind_High_Array_Attribute => 1888, - Iir_Kind_Low_Array_Attribute => 1895, - Iir_Kind_Length_Array_Attribute => 1902, - Iir_Kind_Ascending_Array_Attribute => 1909, - Iir_Kind_Range_Array_Attribute => 1916, - Iir_Kind_Reverse_Range_Array_Attribute => 1923, - Iir_Kind_Attribute_Name => 1932 + Iir_Kind_Physical_Int_Literal => 72, + Iir_Kind_Physical_Fp_Literal => 77, + Iir_Kind_Simple_Aggregate => 82, + Iir_Kind_Overflow_Literal => 85, + Iir_Kind_Unaffected_Waveform => 86, + Iir_Kind_Waveform_Element => 89, + Iir_Kind_Conditional_Waveform => 93, + Iir_Kind_Conditional_Expression => 97, + Iir_Kind_Association_Element_By_Expression => 105, + Iir_Kind_Association_Element_By_Individual => 114, + Iir_Kind_Association_Element_Open => 120, + Iir_Kind_Association_Element_Package => 126, + Iir_Kind_Association_Element_Type => 134, + Iir_Kind_Association_Element_Subprogram => 140, + Iir_Kind_Choice_By_Range => 149, + Iir_Kind_Choice_By_Expression => 158, + Iir_Kind_Choice_By_Others => 165, + Iir_Kind_Choice_By_None => 172, + Iir_Kind_Choice_By_Name => 180, + Iir_Kind_Entity_Aspect_Entity => 182, + Iir_Kind_Entity_Aspect_Configuration => 183, + Iir_Kind_Entity_Aspect_Open => 183, + Iir_Kind_Block_Configuration => 189, + Iir_Kind_Block_Header => 193, + Iir_Kind_Component_Configuration => 200, + Iir_Kind_Binding_Indication => 204, + Iir_Kind_Entity_Class => 206, + Iir_Kind_Attribute_Value => 214, + Iir_Kind_Signature => 217, + Iir_Kind_Aggregate_Info => 224, + Iir_Kind_Procedure_Call => 228, + Iir_Kind_Record_Element_Constraint => 234, + Iir_Kind_Array_Element_Resolution => 236, + Iir_Kind_Record_Resolution => 237, + Iir_Kind_Record_Element_Resolution => 240, + Iir_Kind_Attribute_Specification => 248, + Iir_Kind_Disconnection_Specification => 254, + Iir_Kind_Configuration_Specification => 260, + Iir_Kind_Access_Type_Definition => 268, + Iir_Kind_Incomplete_Type_Definition => 276, + Iir_Kind_Interface_Type_Definition => 283, + Iir_Kind_File_Type_Definition => 290, + Iir_Kind_Protected_Type_Declaration => 299, + Iir_Kind_Record_Type_Definition => 310, + Iir_Kind_Array_Type_Definition => 322, + Iir_Kind_Array_Subtype_Definition => 337, + Iir_Kind_Record_Subtype_Definition => 350, + Iir_Kind_Access_Subtype_Definition => 358, + Iir_Kind_Physical_Subtype_Definition => 368, + Iir_Kind_Floating_Subtype_Definition => 379, + Iir_Kind_Integer_Subtype_Definition => 389, + Iir_Kind_Enumeration_Subtype_Definition => 399, + Iir_Kind_Enumeration_Type_Definition => 410, + Iir_Kind_Integer_Type_Definition => 418, + Iir_Kind_Floating_Type_Definition => 426, + Iir_Kind_Physical_Type_Definition => 437, + Iir_Kind_Range_Expression => 445, + Iir_Kind_Protected_Type_Body => 452, + Iir_Kind_Wildcard_Type_Definition => 457, + Iir_Kind_Subtype_Definition => 464, + Iir_Kind_Scalar_Nature_Definition => 468, + Iir_Kind_Overload_List => 469, + Iir_Kind_Type_Declaration => 476, + Iir_Kind_Anonymous_Type_Declaration => 482, + Iir_Kind_Subtype_Declaration => 489, + Iir_Kind_Nature_Declaration => 495, + Iir_Kind_Subnature_Declaration => 501, + Iir_Kind_Entity_Declaration => 513, + Iir_Kind_Configuration_Declaration => 522, + Iir_Kind_Context_Declaration => 528, + Iir_Kind_Package_Declaration => 543, + Iir_Kind_Package_Instantiation_Declaration => 557, + Iir_Kind_Package_Body => 565, + Iir_Kind_Architecture_Body => 577, + Iir_Kind_Package_Header => 579, + Iir_Kind_Unit_Declaration => 588, + Iir_Kind_Library_Declaration => 595, + Iir_Kind_Component_Declaration => 605, + Iir_Kind_Attribute_Declaration => 612, + Iir_Kind_Group_Template_Declaration => 618, + Iir_Kind_Group_Declaration => 625, + Iir_Kind_Element_Declaration => 632, + Iir_Kind_Non_Object_Alias_Declaration => 640, + Iir_Kind_Psl_Declaration => 648, + Iir_Kind_Psl_Endpoint_Declaration => 662, + Iir_Kind_Terminal_Declaration => 669, + Iir_Kind_Free_Quantity_Declaration => 680, + Iir_Kind_Across_Quantity_Declaration => 692, + Iir_Kind_Through_Quantity_Declaration => 704, + Iir_Kind_Enumeration_Literal => 715, + Iir_Kind_Function_Declaration => 740, + Iir_Kind_Procedure_Declaration => 764, + Iir_Kind_Function_Body => 774, + Iir_Kind_Procedure_Body => 785, + Iir_Kind_Object_Alias_Declaration => 796, + Iir_Kind_File_Declaration => 810, + Iir_Kind_Guard_Signal_Declaration => 823, + Iir_Kind_Signal_Declaration => 840, + Iir_Kind_Variable_Declaration => 853, + Iir_Kind_Constant_Declaration => 867, + Iir_Kind_Iterator_Declaration => 878, + Iir_Kind_Interface_Constant_Declaration => 894, + Iir_Kind_Interface_Variable_Declaration => 910, + Iir_Kind_Interface_Signal_Declaration => 931, + Iir_Kind_Interface_File_Declaration => 947, + Iir_Kind_Interface_Type_Declaration => 957, + Iir_Kind_Interface_Package_Declaration => 969, + Iir_Kind_Interface_Function_Declaration => 986, + Iir_Kind_Interface_Procedure_Declaration => 999, + Iir_Kind_Signal_Attribute_Declaration => 1002, + Iir_Kind_Identity_Operator => 1006, + Iir_Kind_Negation_Operator => 1010, + Iir_Kind_Absolute_Operator => 1014, + Iir_Kind_Not_Operator => 1018, + Iir_Kind_Implicit_Condition_Operator => 1022, + Iir_Kind_Condition_Operator => 1026, + Iir_Kind_Reduction_And_Operator => 1030, + Iir_Kind_Reduction_Or_Operator => 1034, + Iir_Kind_Reduction_Nand_Operator => 1038, + Iir_Kind_Reduction_Nor_Operator => 1042, + Iir_Kind_Reduction_Xor_Operator => 1046, + Iir_Kind_Reduction_Xnor_Operator => 1050, + Iir_Kind_And_Operator => 1055, + Iir_Kind_Or_Operator => 1060, + Iir_Kind_Nand_Operator => 1065, + Iir_Kind_Nor_Operator => 1070, + Iir_Kind_Xor_Operator => 1075, + Iir_Kind_Xnor_Operator => 1080, + Iir_Kind_Equality_Operator => 1085, + Iir_Kind_Inequality_Operator => 1090, + Iir_Kind_Less_Than_Operator => 1095, + Iir_Kind_Less_Than_Or_Equal_Operator => 1100, + Iir_Kind_Greater_Than_Operator => 1105, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1110, + Iir_Kind_Match_Equality_Operator => 1115, + Iir_Kind_Match_Inequality_Operator => 1120, + Iir_Kind_Match_Less_Than_Operator => 1125, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1130, + Iir_Kind_Match_Greater_Than_Operator => 1135, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1140, + Iir_Kind_Sll_Operator => 1145, + Iir_Kind_Sla_Operator => 1150, + Iir_Kind_Srl_Operator => 1155, + Iir_Kind_Sra_Operator => 1160, + Iir_Kind_Rol_Operator => 1165, + Iir_Kind_Ror_Operator => 1170, + Iir_Kind_Addition_Operator => 1175, + Iir_Kind_Substraction_Operator => 1180, + Iir_Kind_Concatenation_Operator => 1185, + Iir_Kind_Multiplication_Operator => 1190, + Iir_Kind_Division_Operator => 1195, + Iir_Kind_Modulus_Operator => 1200, + Iir_Kind_Remainder_Operator => 1205, + Iir_Kind_Exponentiation_Operator => 1210, + Iir_Kind_Function_Call => 1218, + Iir_Kind_Aggregate => 1225, + Iir_Kind_Parenthesis_Expression => 1228, + Iir_Kind_Qualified_Expression => 1232, + Iir_Kind_Type_Conversion => 1237, + Iir_Kind_Allocator_By_Expression => 1241, + Iir_Kind_Allocator_By_Subtype => 1246, + Iir_Kind_Selected_Element => 1254, + Iir_Kind_Dereference => 1259, + Iir_Kind_Implicit_Dereference => 1264, + Iir_Kind_Slice_Name => 1271, + Iir_Kind_Indexed_Name => 1277, + Iir_Kind_Psl_Expression => 1279, + Iir_Kind_Sensitized_Process_Statement => 1300, + Iir_Kind_Process_Statement => 1320, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1332, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1344, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1357, + Iir_Kind_Concurrent_Assertion_Statement => 1365, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1372, + Iir_Kind_Psl_Assert_Statement => 1385, + Iir_Kind_Psl_Cover_Statement => 1398, + Iir_Kind_Block_Statement => 1412, + Iir_Kind_If_Generate_Statement => 1423, + Iir_Kind_Case_Generate_Statement => 1432, + Iir_Kind_For_Generate_Statement => 1441, + Iir_Kind_Component_Instantiation_Statement => 1452, + Iir_Kind_Psl_Default_Clock => 1456, + Iir_Kind_Simple_Simultaneous_Statement => 1463, + Iir_Kind_Generate_Statement_Body => 1474, + Iir_Kind_If_Generate_Else_Clause => 1480, + Iir_Kind_Simple_Signal_Assignment_Statement => 1490, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1500, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1511, + Iir_Kind_Null_Statement => 1515, + Iir_Kind_Assertion_Statement => 1522, + Iir_Kind_Report_Statement => 1528, + Iir_Kind_Wait_Statement => 1536, + Iir_Kind_Variable_Assignment_Statement => 1543, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1550, + Iir_Kind_Return_Statement => 1556, + Iir_Kind_For_Loop_Statement => 1565, + Iir_Kind_While_Loop_Statement => 1574, + Iir_Kind_Next_Statement => 1581, + Iir_Kind_Exit_Statement => 1588, + Iir_Kind_Case_Statement => 1596, + Iir_Kind_Procedure_Call_Statement => 1602, + Iir_Kind_If_Statement => 1612, + Iir_Kind_Elsif => 1618, + Iir_Kind_Character_Literal => 1626, + Iir_Kind_Simple_Name => 1634, + Iir_Kind_Selected_Name => 1643, + Iir_Kind_Operator_Symbol => 1649, + Iir_Kind_Reference_Name => 1652, + Iir_Kind_External_Constant_Name => 1660, + Iir_Kind_External_Signal_Name => 1668, + Iir_Kind_External_Variable_Name => 1677, + Iir_Kind_Selected_By_All_Name => 1683, + Iir_Kind_Parenthesis_Name => 1688, + Iir_Kind_Package_Pathname => 1692, + Iir_Kind_Absolute_Pathname => 1693, + Iir_Kind_Relative_Pathname => 1694, + Iir_Kind_Pathname_Element => 1699, + Iir_Kind_Base_Attribute => 1701, + Iir_Kind_Subtype_Attribute => 1706, + Iir_Kind_Element_Attribute => 1711, + Iir_Kind_Left_Type_Attribute => 1716, + Iir_Kind_Right_Type_Attribute => 1721, + Iir_Kind_High_Type_Attribute => 1726, + Iir_Kind_Low_Type_Attribute => 1731, + Iir_Kind_Ascending_Type_Attribute => 1736, + Iir_Kind_Image_Attribute => 1742, + Iir_Kind_Value_Attribute => 1748, + Iir_Kind_Pos_Attribute => 1754, + Iir_Kind_Val_Attribute => 1760, + Iir_Kind_Succ_Attribute => 1766, + Iir_Kind_Pred_Attribute => 1772, + Iir_Kind_Leftof_Attribute => 1778, + Iir_Kind_Rightof_Attribute => 1784, + Iir_Kind_Delayed_Attribute => 1793, + Iir_Kind_Stable_Attribute => 1802, + Iir_Kind_Quiet_Attribute => 1811, + Iir_Kind_Transaction_Attribute => 1820, + Iir_Kind_Event_Attribute => 1824, + Iir_Kind_Active_Attribute => 1828, + Iir_Kind_Last_Event_Attribute => 1832, + Iir_Kind_Last_Active_Attribute => 1836, + Iir_Kind_Last_Value_Attribute => 1840, + Iir_Kind_Driving_Attribute => 1844, + Iir_Kind_Driving_Value_Attribute => 1848, + Iir_Kind_Behavior_Attribute => 1848, + Iir_Kind_Structure_Attribute => 1848, + Iir_Kind_Simple_Name_Attribute => 1855, + Iir_Kind_Instance_Name_Attribute => 1860, + Iir_Kind_Path_Name_Attribute => 1865, + Iir_Kind_Left_Array_Attribute => 1872, + Iir_Kind_Right_Array_Attribute => 1879, + Iir_Kind_High_Array_Attribute => 1886, + Iir_Kind_Low_Array_Attribute => 1893, + Iir_Kind_Length_Array_Attribute => 1900, + Iir_Kind_Ascending_Array_Attribute => 1907, + Iir_Kind_Range_Array_Attribute => 1914, + Iir_Kind_Reverse_Range_Array_Attribute => 1921, + Iir_Kind_Attribute_Name => 1930 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -5398,8 +5391,6 @@ package body Vhdl.Nodes_Meta is return Get_Left (N); when Field_Right => return Get_Right (N); - when Field_Physical_Unit => - return Get_Physical_Unit (N); when Field_Unit_Name => return Get_Unit_Name (N); when Field_Name => @@ -5794,8 +5785,6 @@ package body Vhdl.Nodes_Meta is Set_Left (N, V); when Field_Right => Set_Right (N, V); - when Field_Physical_Unit => - Set_Physical_Unit (N, V); when Field_Unit_Name => Set_Unit_Name (N, V); when Field_Name => @@ -9712,17 +9701,6 @@ package body Vhdl.Nodes_Meta is end case; end Has_Right; - function Has_Physical_Unit (K : Iir_Kind) return Boolean is - begin - case K is - when Iir_Kind_Physical_Int_Literal - | Iir_Kind_Physical_Fp_Literal => - return True; - when others => - return False; - end case; - end Has_Physical_Unit; - function Has_Unit_Name (K : Iir_Kind) return Boolean is begin case K is diff --git a/src/vhdl/vhdl-nodes_meta.ads b/src/vhdl/vhdl-nodes_meta.ads index ee64fc92d..55804ab15 100644 --- a/src/vhdl/vhdl-nodes_meta.ads +++ b/src/vhdl/vhdl-nodes_meta.ads @@ -305,7 +305,6 @@ package Vhdl.Nodes_Meta is Field_Operand, Field_Left, Field_Right, - Field_Physical_Unit, Field_Unit_Name, Field_Name, Field_Group_Template_Name, @@ -838,7 +837,6 @@ package Vhdl.Nodes_Meta is function Has_Operand (K : Iir_Kind) return Boolean; function Has_Left (K : Iir_Kind) return Boolean; function Has_Right (K : Iir_Kind) return Boolean; - function Has_Physical_Unit (K : Iir_Kind) return Boolean; function Has_Unit_Name (K : Iir_Kind) return Boolean; function Has_Name (K : Iir_Kind) return Boolean; function Has_Group_Template_Name (K : Iir_Kind) return Boolean; diff --git a/src/vhdl/vhdl-sem_expr.adb b/src/vhdl/vhdl-sem_expr.adb index 1129abdb7..1c15236f1 100644 --- a/src/vhdl/vhdl-sem_expr.adb +++ b/src/vhdl/vhdl-sem_expr.adb @@ -3995,7 +3995,6 @@ package body Vhdl.Sem_Expr is end if; end if; Set_Unit_Name (Res, Unit_Name); - Set_Physical_Unit (Res, Get_Named_Entity (Unit_Name)); Unit_Type := Get_Type (Unit_Name); Set_Type (Res, Unit_Type); diff --git a/src/vhdl/vhdl-sem_types.adb b/src/vhdl/vhdl-sem_types.adb index 88d410e76..312752088 100644 --- a/src/vhdl/vhdl-sem_types.adb +++ b/src/vhdl/vhdl-sem_types.adb @@ -322,9 +322,8 @@ package body Vhdl.Sem_Types is is Lit : Iir; begin - Lit := Create_Iir (Iir_Kind_Physical_Int_Literal); + Lit := Create_Iir (Iir_Kind_Integer_Literal); Set_Value (Lit, Val); - Set_Physical_Unit (Lit, Unit); Set_Expr_Staticness (Lit, Locally); Set_Type (Lit, Get_Type (Unit)); Location_Copy (Lit, Unit); @@ -412,23 +411,6 @@ package body Vhdl.Sem_Types is Xref_Decl (Unit); declare - -- Convert an integer literal to a physical literal. - -- This is used to convert bounds. - function Lit_To_Phys_Lit (Lim : Iir_Integer_Literal) - return Iir_Physical_Int_Literal - is - Res : Iir_Physical_Int_Literal; - begin - Res := Create_Iir (Iir_Kind_Physical_Int_Literal); - Location_Copy (Res, Lim); - Set_Type (Res, Def); - Set_Value (Res, Get_Value (Lim)); - Set_Physical_Unit (Res, Get_Primary_Unit (Def)); - Set_Expr_Staticness (Res, Locally); - Set_Literal_Origin (Res, Lim); - return Res; - end Lit_To_Phys_Lit; - Phys_Range : Iir_Range_Expression; Lit : Iir; begin @@ -437,12 +419,12 @@ package body Vhdl.Sem_Types is Location_Copy (Phys_Range, Range_Expr1); Set_Type (Phys_Range, Def); Set_Direction (Phys_Range, Get_Direction (Range_Expr1)); - Lit := Lit_To_Phys_Lit (Get_Left_Limit (Range_Expr1)); - Set_Left_Limit (Phys_Range, Lit); + Lit := Get_Left_Limit (Range_Expr1); Set_Left_Limit_Expr (Phys_Range, Lit); - Lit := Lit_To_Phys_Lit (Get_Right_Limit (Range_Expr1)); - Set_Right_Limit (Phys_Range, Lit); + Set_Left_Limit (Phys_Range, Lit); + Lit := Get_Right_Limit (Range_Expr1); Set_Right_Limit_Expr (Phys_Range, Lit); + Set_Right_Limit (Phys_Range, Lit); Set_Expr_Staticness (Phys_Range, Get_Expr_Staticness (Range_Expr1)); diff --git a/src/vhdl/vhdl-std_package.adb b/src/vhdl/vhdl-std_package.adb index cb6e3809d..db6139622 100644 --- a/src/vhdl/vhdl-std_package.adb +++ b/src/vhdl/vhdl-std_package.adb @@ -792,30 +792,23 @@ package body Vhdl.Std_Package is Time_Staticness : Iir_Staticness; First_Unit, Last_Unit : Iir_Unit_Declaration; - function Create_Std_Phys_Lit_Wo_Unit (Value : Int64; Unit : Iir) + function Create_Std_Phys_Lit (Value : Int64; Unit : Iir) return Iir_Physical_Int_Literal is Lit: Iir_Physical_Int_Literal; + Unit_Name : Iir; begin Lit := Create_Std_Iir (Iir_Kind_Physical_Int_Literal); Set_Value (Lit, Value); pragma Assert (Get_Kind (Unit) = Iir_Kind_Unit_Declaration); - Set_Physical_Unit (Lit, Unit); - Set_Type (Lit, Time_Type_Definition); - Set_Expr_Staticness (Lit, Time_Staticness); - return Lit; - end Create_Std_Phys_Lit_Wo_Unit; - function Create_Std_Phys_Lit (Value : Int64; Unit : Iir) - return Iir_Physical_Int_Literal - is - Lit: Iir_Physical_Int_Literal; - Unit_Name : Iir; - begin - Lit := Create_Std_Phys_Lit_Wo_Unit (Value, Unit); Unit_Name := Create_Std_Iir (Iir_Kind_Simple_Name); Set_Identifier (Unit_Name, Get_Identifier (Unit)); + Set_Named_Entity (Unit_Name, Unit); Set_Unit_Name (Lit, Unit_Name); + + Set_Type (Lit, Time_Type_Definition); + Set_Expr_Staticness (Lit, Time_Staticness); return Lit; end Create_Std_Phys_Lit; @@ -826,15 +819,19 @@ package body Vhdl.Std_Package is is Lit, Lit1 : Iir_Physical_Int_Literal; begin + -- The unit. Unit := Create_Std_Decl (Iir_Kind_Unit_Declaration); Set_Std_Identifier (Unit, Name); Set_Type (Unit, Time_Type_Definition); + -- The physical literal. Lit1 := Create_Std_Phys_Lit (Multiplier_Value, Multiplier); - Lit := Create_Std_Phys_Lit - (Multiplier_Value - * Get_Value (Get_Physical_Literal (Multiplier)), - Get_Physical_Unit (Get_Physical_Literal (Multiplier))); + + -- The computed value of the physical literal. + Lit := Create_Std_Iir (Iir_Kind_Integer_Literal); + Set_Value (Lit, + Multiplier_Value + * Get_Value (Get_Physical_Literal (Multiplier))); Set_Literal_Origin (Lit, Lit1); Set_Physical_Literal (Unit, Lit); @@ -867,8 +864,14 @@ package body Vhdl.Std_Package is Set_Type (Time_Fs_Unit, Time_Type_Definition); Set_Expr_Staticness (Time_Fs_Unit, Time_Staticness); Set_Name_Staticness (Time_Fs_Unit, Locally); - Set_Physical_Literal - (Time_Fs_Unit, Create_Std_Phys_Lit (1, Time_Fs_Unit)); + declare + Lit : Iir; + begin + Lit := Create_Std_Iir (Iir_Kind_Integer_Literal); + Set_Value (Lit, 1); + Set_Physical_Literal (Time_Fs_Unit, Lit); + Set_Literal_Origin (Lit, Create_Std_Phys_Lit (1, Time_Fs_Unit)); + end; Chain_Append (First_Unit, Last_Unit, Time_Fs_Unit); Create_Unit (Time_Ps_Unit, 1000, Time_Fs_Unit, Name_Ps); @@ -893,10 +896,10 @@ package body Vhdl.Std_Package is Time_Subtype_Definition := Create_Std_Iir (Iir_Kind_Physical_Subtype_Definition); Constraint := Create_Std_Range_Expr - (Create_Std_Phys_Lit_Wo_Unit (Low_Bound (Flags.Flag_Time_64), - Time_Fs_Unit), - Create_Std_Phys_Lit_Wo_Unit (High_Bound (Flags.Flag_Time_64), - Time_Fs_Unit), + (Create_Std_Phys_Lit (Low_Bound (Flags.Flag_Time_64), + Time_Fs_Unit), + Create_Std_Phys_Lit (High_Bound (Flags.Flag_Time_64), + Time_Fs_Unit), Time_Type_Definition); Set_Range_Constraint (Time_Subtype_Definition, Constraint); Set_Base_Type (Time_Subtype_Definition, Time_Type_Definition); @@ -1273,6 +1276,14 @@ package body Vhdl.Std_Package is procedure Set_Time_Resolution (Resolution : Character) is + procedure Change_Unit (Lit : Iir; Unit : Iir) + is + Name : constant Iir := Get_Unit_Name (Lit); + begin + Set_Identifier (Name, Get_Identifier (Unit)); + Set_Named_Entity (Name, Unit); + end Change_Unit; + Unit : Iir; Prim : Iir; Rng : Iir; @@ -1300,14 +1311,14 @@ package body Vhdl.Std_Package is -- Adjust range of TIME subtype. Rng := Get_Range_Constraint (Time_Subtype_Definition); - Set_Physical_Unit (Get_Left_Limit (Rng), Prim); - Set_Physical_Unit (Get_Right_Limit (Rng), Prim); + Change_Unit (Get_Left_Limit (Rng), Prim); + Change_Unit (Get_Right_Limit (Rng), Prim); -- Adjust range of DELAY_LENGTH. if Vhdl_Std >= Vhdl_93c then Rng := Get_Range_Constraint (Delay_Length_Subtype_Definition); - Set_Physical_Unit (Get_Left_Limit (Rng), Prim); - Set_Physical_Unit (Get_Right_Limit (Rng), Prim); + Change_Unit (Get_Left_Limit (Rng), Prim); + Change_Unit (Get_Right_Limit (Rng), Prim); end if; Unit := Get_Unit_Chain (Time_Type_Definition); @@ -1319,7 +1330,8 @@ package body Vhdl.Std_Package is begin if Prim = Null_Iir then -- Primary already set, just recompute values. - Lit_Unit := Get_Physical_Literal (Get_Physical_Unit (Orig)); + Lit_Unit := Get_Physical_Literal + (Get_Named_Entity (Get_Unit_Name (Orig))); Set_Value (Lit, Get_Value (Orig) * Get_Value (Lit_Unit)); elsif Unit = Prim then Set_Value (Lit, 1); -- cgit v1.2.3