diff options
author | Tristan Gingold <tgingold@free.fr> | 2020-07-22 06:57:46 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2020-07-22 22:23:00 +0200 |
commit | d8a81db96f512c0d58b554df294f4acb0915d6a9 (patch) | |
tree | 2d1bdd2f3ee9e225adda728e8a3c6eff54ffb78c /src | |
parent | 4b862ddc4d81ff8b60bbc78eeb26d4221bfd52d8 (diff) | |
download | ghdl-d8a81db96f512c0d58b554df294f4acb0915d6a9.tar.gz ghdl-d8a81db96f512c0d58b554df294f4acb0915d6a9.tar.bz2 ghdl-d8a81db96f512c0d58b554df294f4acb0915d6a9.zip |
vhdl: replace base_type with parent_type in nodes
Only for subtype definition and remove base_type in type definitions.
Allows to better track the addition of contraints.
Diffstat (limited to 'src')
-rw-r--r-- | src/synth/synth-aggr.adb | 1 | ||||
-rw-r--r-- | src/vhdl/simulate/simul-environments.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-disp_tree.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-evaluation.adb | 12 | ||||
-rw-r--r-- | src/vhdl/vhdl-ieee-numeric.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-ieee-std_logic_1164.adb | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-ieee-vital_timing.adb | 2 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.adb | 17 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.adb.in | 1 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.ads | 51 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes_meta.adb | 684 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes_meta.ads | 4 | ||||
-rw-r--r-- | src/vhdl/vhdl-sem_assocs.adb | 4 | ||||
-rw-r--r-- | src/vhdl/vhdl-sem_decls.adb | 2 | ||||
-rw-r--r-- | src/vhdl/vhdl-sem_expr.adb | 3 | ||||
-rw-r--r-- | src/vhdl/vhdl-sem_names.adb | 4 | ||||
-rw-r--r-- | src/vhdl/vhdl-sem_types.adb | 38 | ||||
-rw-r--r-- | src/vhdl/vhdl-std_package.adb | 39 | ||||
-rw-r--r-- | src/vhdl/vhdl-utils.adb | 49 | ||||
-rw-r--r-- | src/vhdl/vhdl-utils.ads | 8 |
20 files changed, 431 insertions, 492 deletions
diff --git a/src/synth/synth-aggr.adb b/src/synth/synth-aggr.adb index 6177c106d..7732744a1 100644 --- a/src/synth/synth-aggr.adb +++ b/src/synth/synth-aggr.adb @@ -25,6 +25,7 @@ with Netlists.Utils; use Netlists.Utils; with Netlists.Builders; use Netlists.Builders; with Vhdl.Errors; use Vhdl.Errors; +with Vhdl.Utils; use Vhdl.Utils; with Synth.Errors; use Synth.Errors; with Synth.Expr; use Synth.Expr; diff --git a/src/vhdl/simulate/simul-environments.adb b/src/vhdl/simulate/simul-environments.adb index 221e812d7..5e28441cf 100644 --- a/src/vhdl/simulate/simul-environments.adb +++ b/src/vhdl/simulate/simul-environments.adb @@ -22,6 +22,7 @@ with GNAT.Debug_Utilities; with Simple_IO; with Name_Table; +with Vhdl.Utils; use Vhdl.Utils; with Simul.Debugger; use Simul.Debugger; package body Simul.Environments is diff --git a/src/vhdl/vhdl-disp_tree.adb b/src/vhdl/vhdl-disp_tree.adb index b9801ce89..06a06d640 100644 --- a/src/vhdl/vhdl-disp_tree.adb +++ b/src/vhdl/vhdl-disp_tree.adb @@ -25,6 +25,7 @@ with Files_Map; with PSL.Types; use PSL.Types; with PSL.Dump_Tree; with Vhdl.Nodes_Meta; +with Vhdl.Utils; use Vhdl.Utils; -- Do not add a use clause for iirs_utils, as it may crash for ill-formed -- trees, which is annoying while debugging. diff --git a/src/vhdl/vhdl-evaluation.adb b/src/vhdl/vhdl-evaluation.adb index d21288136..65fa9e6ec 100644 --- a/src/vhdl/vhdl-evaluation.adb +++ b/src/vhdl/vhdl-evaluation.adb @@ -392,7 +392,7 @@ package body Vhdl.Evaluation is Error_Kind ("create_range_subtype_by_length", A_Type); end case; Set_Location (Res, Loc); - Set_Base_Type (Res, Get_Base_Type (A_Type)); + Set_Parent_Type (Res, A_Type); Set_Type_Staticness (Res, Locally); return Res; @@ -1199,18 +1199,20 @@ package body Vhdl.Evaluation is Get_Range_Constraint (Left_Index); Ret_Type : constant Iir := Get_Return_Type (Get_Implementation (Orig)); + Rng_Type : constant Iir := Get_Index_Type (Ret_Type, 0); A_Range : Iir; Index_Type : Iir; begin A_Range := Create_Iir (Iir_Kind_Range_Expression); - Set_Type (A_Range, Get_Index_Type (Ret_Type, 0)); + Location_Copy (A_Range, Orig); + Set_Type (A_Range, Rng_Type); Set_Expr_Staticness (A_Range, Locally); Set_Left_Limit (A_Range, Get_Left_Limit (Left_Range)); Set_Direction (A_Range, Get_Direction (Left_Range)); - Location_Copy (A_Range, Orig); Set_Right_Limit_By_Length (A_Range, Int64 (Res_Len)); + Index_Type := Create_Range_Subtype_From_Type - (Left_Index, Get_Location (Orig)); + (Rng_Type, Get_Location (Orig)); Set_Range_Constraint (Index_Type, A_Range); Res_Type := Create_Unidim_Array_From_Index (Origin_Type, Index_Type, Orig); @@ -2350,7 +2352,7 @@ package body Vhdl.Evaluation is Index_Type := Create_Iir (Iir_Kind_Integer_Subtype_Definition); Location_Copy (Index_Type, Conv); Set_Range_Constraint (Index_Type, Rng); - Set_Base_Type (Index_Type, Get_Base_Type (Conv_Index_Type)); + Set_Parent_Type (Index_Type, Conv_Index_Type); Set_Type_Staticness (Index_Type, Locally); end if; Res_Type := Create_Unidim_Array_From_Index diff --git a/src/vhdl/vhdl-ieee-numeric.adb b/src/vhdl/vhdl-ieee-numeric.adb index db368c380..a6a0559e4 100644 --- a/src/vhdl/vhdl-ieee-numeric.adb +++ b/src/vhdl/vhdl-ieee-numeric.adb @@ -21,6 +21,7 @@ with Vhdl.Std_Package; with Std_Names; use Std_Names; with Vhdl.Errors; use Vhdl.Errors; with Vhdl.Ieee.Std_Logic_1164; +with Vhdl.Utils; use Vhdl.Utils; package body Vhdl.Ieee.Numeric is type Pkg_Kind is (Pkg_Std, Pkg_Bit); diff --git a/src/vhdl/vhdl-ieee-std_logic_1164.adb b/src/vhdl/vhdl-ieee-std_logic_1164.adb index 44fc5f631..ca962d2f5 100644 --- a/src/vhdl/vhdl-ieee-std_logic_1164.adb +++ b/src/vhdl/vhdl-ieee-std_logic_1164.adb @@ -19,6 +19,7 @@ with Types; use Types; with Name_Table; with Std_Names; use Std_Names; with Vhdl.Errors; use Vhdl.Errors; +with Vhdl.Utils; use Vhdl.Utils; with Vhdl.Std_Package; package body Vhdl.Ieee.Std_Logic_1164 is diff --git a/src/vhdl/vhdl-ieee-vital_timing.adb b/src/vhdl/vhdl-ieee-vital_timing.adb index 89cfc7df0..5650d4fdd 100644 --- a/src/vhdl/vhdl-ieee-vital_timing.adb +++ b/src/vhdl/vhdl-ieee-vital_timing.adb @@ -27,7 +27,7 @@ with Vhdl.Sem_Scopes; with Vhdl.Sem_Specs; with Vhdl.Evaluation; with Vhdl.Sem; -with Vhdl.Utils; +with Vhdl.Utils; use Vhdl.Utils; package body Vhdl.Ieee.Vital_Timing is -- This package is based on IEEE 1076.4 1995. diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb index b74f4b307..4891f57a8 100644 --- a/src/vhdl/vhdl-nodes.adb +++ b/src/vhdl/vhdl-nodes.adb @@ -842,7 +842,6 @@ package body Vhdl.Nodes is begin Res := Create_Node (Format_Short); Set_Nkind (Res, Iir_Kind'Pos (Iir_Kind_Error)); - Set_Base_Type (Res, Res); return Res; end Create_Iir_Error; @@ -3776,21 +3775,21 @@ package body Vhdl.Nodes is Set_Field3 (Decl, Limit); end Set_Right_Limit_Expr; - function Get_Base_Type (Decl : Iir) return Iir is + function Get_Parent_Type (Decl : Iir) return Iir is begin pragma Assert (Decl /= Null_Iir); - pragma Assert (Has_Base_Type (Get_Kind (Decl)), - "no field Base_Type"); + pragma Assert (Has_Parent_Type (Get_Kind (Decl)), + "no field Parent_Type"); return Get_Field4 (Decl); - end Get_Base_Type; + end Get_Parent_Type; - procedure Set_Base_Type (Decl : Iir; Base_Type : Iir) is + procedure Set_Parent_Type (Decl : Iir; Base_Type : Iir) is begin pragma Assert (Decl /= Null_Iir); - pragma Assert (Has_Base_Type (Get_Kind (Decl)), - "no field Base_Type"); + pragma Assert (Has_Parent_Type (Get_Kind (Decl)), + "no field Parent_Type"); Set_Field4 (Decl, Base_Type); - end Set_Base_Type; + end Set_Parent_Type; function Get_Simple_Nature (Def : Iir) return Iir is begin diff --git a/src/vhdl/vhdl-nodes.adb.in b/src/vhdl/vhdl-nodes.adb.in index 913f54f7e..5c77f9fef 100644 --- a/src/vhdl/vhdl-nodes.adb.in +++ b/src/vhdl/vhdl-nodes.adb.in @@ -842,7 +842,6 @@ package body Vhdl.Nodes is begin Res := Create_Node (Format_Short); Set_Nkind (Res, Iir_Kind'Pos (Iir_Kind_Error)); - Set_Base_Type (Res, Res); return Res; end Create_Iir_Error; diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index 629f4671e..a7ea499f3 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -2315,10 +2315,10 @@ package Vhdl.Nodes is -- Note: a type definition cannot be anoynymous. -- Get/Set_Type_Declarator (Field3) -- - -- The base type. - -- For a subtype, it returns the type. - -- For a type, it must return the type itself. - -- Get/Set_Base_Type (Field4) + -- The parent type. + -- This is the type or subtype which was used to build a subtype. This + -- creates a path to the base type. Only for subtypes. + -- Get/Set_Parent_Type (Field4) -- -- The staticness of a type, according to LRM93 7.4.1. -- Note: These types definition are always locally static: @@ -2347,9 +2347,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Always itself - -- Get/Set_Base_Type (Field4) - -- -- Get/Set_Resolved_Flag (Flag1) -- -- Get/Set_Signal_Type_Flag (Flag2) @@ -2411,8 +2408,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Get/Set_Resolved_Flag (Flag1) -- -- Get/Set_Signal_Type_Flag (Flag2) @@ -2483,8 +2478,6 @@ package Vhdl.Nodes is -- The type declarator that has created this type. -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Type staticness is always locally. -- Get/Set_Type_Staticness (State1) -- @@ -2521,8 +2514,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Get/Set_Type_Staticness (State1) -- -- Get/Set_Constraint_State (State2) @@ -2550,8 +2541,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Get/Set_Type_Staticness (State1) -- -- Get/Set_Constraint_State (State2) @@ -2584,8 +2573,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Next access type that also referenced the same incomplete type when -- defined. -- Get/Set_Incomplete_Type_Ref_Chain (Field0) @@ -2602,8 +2589,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Get/Set_Resolved_Flag (Flag1) -- -- Get/Set_Signal_Type_Flag (Flag2) @@ -2626,8 +2611,6 @@ package Vhdl.Nodes is -- Set to the incomplete type declaration. -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Set to the complete type definition when completed. -- Get/Set_Complete_Type_Definition (Field5) -- @@ -2645,8 +2628,6 @@ package Vhdl.Nodes is -- Set to interface type declaration. -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Set only during analysis of association: type associated with this -- interface, so that references to this interface can use the actual -- type. @@ -2668,8 +2649,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Get/Set_Attribute_Value_Chain (Field5) -- -- Get/Set_Type_Staticness (State1) @@ -2711,8 +2690,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Get/Set_Resolved_Flag (Flag1) -- -- Get/Set_Signal_Type_Flag (Flag2) @@ -2796,7 +2773,7 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) + -- Get/Set_Parent_Type (Field4) -- -- Get/Set_Resolution_Indication (Field5) -- @@ -2818,7 +2795,7 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) + -- Get/Set_Parent_Type (Field4) -- -- Get/Set_Resolution_Indication (Field5) -- @@ -2842,7 +2819,7 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) + -- Get/Set_Parent_Type (Field4) -- -- Get/Set_Designated_Subtype_Indication (Field5) -- @@ -2900,7 +2877,7 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) + -- Get/Set_Parent_Type (Field4) -- -- Get/Set_Resolution_Indication (Field5) -- @@ -2942,7 +2919,7 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) + -- Get/Set_Parent_Type (Field4) -- -- Get/Set_Type_Staticness (State1) -- @@ -2989,7 +2966,7 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) + -- Get/Set_Parent_Type (Field4) -- -- Get/Set_Resolution_Indication (Field5) -- @@ -4740,8 +4717,6 @@ package Vhdl.Nodes is -- -- Get/Set_Type_Declarator (Field3) -- - -- Get/Set_Base_Type (Field4) - -- -- Get/Set_Expr_Staticness (State1) -- -- Get/Set_Type_Staticness (Alias State1) @@ -7987,9 +7962,9 @@ package Vhdl.Nodes is procedure Set_Right_Limit_Expr (Decl : Iir_Range_Expression; Limit : Iir); -- Field: Field4 Ref - function Get_Base_Type (Decl : Iir) return Iir; - procedure Set_Base_Type (Decl : Iir; Base_Type : Iir); - pragma Inline (Get_Base_Type); + function Get_Parent_Type (Decl : Iir) return Iir; + procedure Set_Parent_Type (Decl : Iir; Base_Type : Iir); + pragma Inline (Get_Parent_Type); -- Only for composite base nature: the simple nature. -- Field: Field7 Ref diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index 20f40cfe4..d400818a8 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -168,7 +168,7 @@ package body Vhdl.Nodes_Meta is Field_Right_Limit => Type_Iir, Field_Left_Limit_Expr => Type_Iir, Field_Right_Limit_Expr => Type_Iir, - Field_Base_Type => Type_Iir, + Field_Parent_Type => Type_Iir, Field_Simple_Nature => Type_Iir, Field_Base_Nature => Type_Iir, Field_Resolution_Indication => Type_Iir, @@ -691,8 +691,8 @@ package body Vhdl.Nodes_Meta is return "left_limit_expr"; when Field_Right_Limit_Expr => return "right_limit_expr"; - when Field_Base_Type => - return "base_type"; + when Field_Parent_Type => + return "parent_type"; when Field_Simple_Nature => return "simple_nature"; when Field_Base_Nature => @@ -2053,7 +2053,7 @@ package body Vhdl.Nodes_Meta is return Attr_None; when Field_Right_Limit_Expr => return Attr_None; - when Field_Base_Type => + when Field_Parent_Type => return Attr_Ref; when Field_Simple_Nature => return Attr_Ref; @@ -2497,7 +2497,6 @@ package body Vhdl.Nodes_Meta is Field_Type, Field_Error_Origin, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Design_File Field_Design_File_Directory, Field_Design_File_Filename, @@ -2829,7 +2828,6 @@ package body Vhdl.Nodes_Meta is Field_Designated_Subtype_Indication, Field_Designated_Type, Field_Type_Declarator, - Field_Base_Type, Field_Incomplete_Type_Ref_Chain, -- Iir_Kind_Incomplete_Type_Definition Field_Resolved_Flag, @@ -2838,7 +2836,6 @@ package body Vhdl.Nodes_Meta is Field_Type_Staticness, Field_Incomplete_Type_Ref_Chain, Field_Type_Declarator, - Field_Base_Type, Field_Complete_Type_Definition, -- Iir_Kind_Interface_Type_Definition Field_Resolved_Flag, @@ -2846,7 +2843,6 @@ package body Vhdl.Nodes_Meta is Field_Has_Signal_Flag, Field_Type_Staticness, Field_Type_Declarator, - Field_Base_Type, Field_Associated_Type, -- Iir_Kind_File_Type_Definition Field_Resolved_Flag, @@ -2855,7 +2851,6 @@ package body Vhdl.Nodes_Meta is Field_Type_Staticness, Field_File_Type_Mark, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Protected_Type_Declaration Field_Resolved_Flag, Field_Signal_Type_Flag, @@ -2865,7 +2860,6 @@ package body Vhdl.Nodes_Meta is Field_Declaration_Chain, Field_Protected_Type_Body, Field_Type_Declarator, - Field_Base_Type, Field_Attribute_Value_Chain, -- Iir_Kind_Record_Type_Definition Field_Resolved_Flag, @@ -2878,7 +2872,6 @@ package body Vhdl.Nodes_Meta is Field_Constraint_State, Field_Elements_Declaration_List, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Array_Type_Definition Field_Resolved_Flag, Field_Signal_Type_Flag, @@ -2891,7 +2884,6 @@ package body Vhdl.Nodes_Meta is Field_Index_Subtype_List, Field_Element_Subtype, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Array_Subtype_Definition Field_Resolved_Flag, Field_Signal_Type_Flag, @@ -2907,7 +2899,7 @@ package body Vhdl.Nodes_Meta is Field_Tolerance, Field_Element_Subtype, Field_Type_Declarator, - Field_Base_Type, + Field_Parent_Type, -- Iir_Kind_Record_Subtype_Definition Field_Resolved_Flag, Field_Is_Ref, @@ -2919,7 +2911,7 @@ package body Vhdl.Nodes_Meta is Field_Elements_Declaration_List, Field_Subtype_Type_Mark, Field_Type_Declarator, - Field_Base_Type, + Field_Parent_Type, Field_Resolution_Indication, Field_Tolerance, -- Iir_Kind_Access_Subtype_Definition @@ -2929,7 +2921,7 @@ package body Vhdl.Nodes_Meta is Field_Designated_Type, Field_Subtype_Type_Mark, Field_Type_Declarator, - Field_Base_Type, + Field_Parent_Type, Field_Designated_Subtype_Indication, -- Iir_Kind_Physical_Subtype_Definition Field_Resolved_Flag, @@ -2940,7 +2932,7 @@ package body Vhdl.Nodes_Meta is Field_Range_Constraint, Field_Subtype_Type_Mark, Field_Type_Declarator, - Field_Base_Type, + Field_Parent_Type, Field_Resolution_Indication, -- Iir_Kind_Floating_Subtype_Definition Field_Resolved_Flag, @@ -2951,7 +2943,7 @@ package body Vhdl.Nodes_Meta is Field_Range_Constraint, Field_Subtype_Type_Mark, Field_Type_Declarator, - Field_Base_Type, + Field_Parent_Type, Field_Resolution_Indication, Field_Tolerance, -- Iir_Kind_Integer_Subtype_Definition @@ -2963,7 +2955,7 @@ package body Vhdl.Nodes_Meta is Field_Range_Constraint, Field_Subtype_Type_Mark, Field_Type_Declarator, - Field_Base_Type, + Field_Parent_Type, Field_Resolution_Indication, -- Iir_Kind_Enumeration_Subtype_Definition Field_Resolved_Flag, @@ -2974,7 +2966,7 @@ package body Vhdl.Nodes_Meta is Field_Range_Constraint, Field_Subtype_Type_Mark, Field_Type_Declarator, - Field_Base_Type, + Field_Parent_Type, Field_Resolution_Indication, -- Iir_Kind_Enumeration_Type_Definition Field_Resolved_Flag, @@ -2988,7 +2980,6 @@ package body Vhdl.Nodes_Meta is Field_Enumeration_Literal_List, Field_Range_Constraint, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Integer_Type_Definition Field_Resolved_Flag, Field_Is_Ref, @@ -2998,7 +2989,6 @@ package body Vhdl.Nodes_Meta is Field_Type_Staticness, Field_Range_Constraint, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Floating_Type_Definition Field_Resolved_Flag, Field_Is_Ref, @@ -3008,7 +2998,6 @@ package body Vhdl.Nodes_Meta is Field_Type_Staticness, Field_Range_Constraint, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Physical_Type_Definition Field_Resolved_Flag, Field_Is_Ref, @@ -3021,7 +3010,6 @@ package body Vhdl.Nodes_Meta is Field_Range_Constraint, Field_Unit_Chain, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Range_Expression Field_Direction, Field_Expr_Staticness, @@ -3045,13 +3033,12 @@ package body Vhdl.Nodes_Meta is Field_Signal_Type_Flag, Field_Type_Staticness, Field_Type_Declarator, - Field_Base_Type, -- Iir_Kind_Subtype_Definition Field_Is_Ref, Field_Range_Constraint, Field_Subtype_Type_Mark, Field_Type_Declarator, - Field_Base_Type, + Field_Parent_Type, Field_Resolution_Indication, Field_Tolerance, -- Iir_Kind_Scalar_Nature_Definition @@ -5145,316 +5132,316 @@ package body Vhdl.Nodes_Meta is Fields_Of_Iir_Last : constant array (Iir_Kind) of Fields_Index_Extended := ( Iir_Kind_Unused => -1, - Iir_Kind_Error => 7, - Iir_Kind_Design_File => 18, - Iir_Kind_Design_Unit => 34, - Iir_Kind_Library_Clause => 39, - Iir_Kind_Use_Clause => 43, - Iir_Kind_Context_Reference => 47, - Iir_Kind_Integer_Literal => 52, - Iir_Kind_Floating_Point_Literal => 57, - Iir_Kind_Null_Literal => 59, - Iir_Kind_String_Literal8 => 70, - Iir_Kind_Physical_Int_Literal => 76, - Iir_Kind_Physical_Fp_Literal => 82, - Iir_Kind_Simple_Aggregate => 87, - Iir_Kind_Overflow_Literal => 90, - Iir_Kind_Unaffected_Waveform => 91, - Iir_Kind_Waveform_Element => 94, - Iir_Kind_Conditional_Waveform => 98, - Iir_Kind_Conditional_Expression => 102, - Iir_Kind_Association_Element_By_Expression => 110, - Iir_Kind_Association_Element_By_Individual => 119, - Iir_Kind_Association_Element_Open => 125, - Iir_Kind_Association_Element_Package => 131, - Iir_Kind_Association_Element_Type => 139, - Iir_Kind_Association_Element_Subprogram => 145, - Iir_Kind_Association_Element_Terminal => 151, - Iir_Kind_Choice_By_Range => 159, - Iir_Kind_Choice_By_Expression => 167, - Iir_Kind_Choice_By_Others => 173, - Iir_Kind_Choice_By_None => 179, - Iir_Kind_Choice_By_Name => 186, - Iir_Kind_Entity_Aspect_Entity => 188, - Iir_Kind_Entity_Aspect_Configuration => 189, - Iir_Kind_Entity_Aspect_Open => 189, - Iir_Kind_Psl_Hierarchical_Name => 191, - Iir_Kind_Block_Configuration => 197, - Iir_Kind_Block_Header => 201, - Iir_Kind_Component_Configuration => 208, - Iir_Kind_Binding_Indication => 212, - Iir_Kind_Entity_Class => 214, - Iir_Kind_Attribute_Value => 222, - Iir_Kind_Signature => 225, - Iir_Kind_Aggregate_Info => 232, - Iir_Kind_Procedure_Call => 236, - Iir_Kind_Record_Element_Constraint => 244, - Iir_Kind_Array_Element_Resolution => 246, - Iir_Kind_Record_Resolution => 247, - Iir_Kind_Record_Element_Resolution => 250, - Iir_Kind_Break_Element => 254, - Iir_Kind_Attribute_Specification => 262, - Iir_Kind_Disconnection_Specification => 268, - Iir_Kind_Step_Limit_Specification => 274, - Iir_Kind_Configuration_Specification => 280, - Iir_Kind_Access_Type_Definition => 288, - Iir_Kind_Incomplete_Type_Definition => 296, - Iir_Kind_Interface_Type_Definition => 303, - Iir_Kind_File_Type_Definition => 310, - Iir_Kind_Protected_Type_Declaration => 320, - Iir_Kind_Record_Type_Definition => 331, - Iir_Kind_Array_Type_Definition => 343, - Iir_Kind_Array_Subtype_Definition => 358, - Iir_Kind_Record_Subtype_Definition => 371, - Iir_Kind_Access_Subtype_Definition => 379, - Iir_Kind_Physical_Subtype_Definition => 389, - Iir_Kind_Floating_Subtype_Definition => 400, - Iir_Kind_Integer_Subtype_Definition => 410, - Iir_Kind_Enumeration_Subtype_Definition => 420, - Iir_Kind_Enumeration_Type_Definition => 432, - Iir_Kind_Integer_Type_Definition => 441, - Iir_Kind_Floating_Type_Definition => 450, - Iir_Kind_Physical_Type_Definition => 462, - Iir_Kind_Range_Expression => 470, - Iir_Kind_Protected_Type_Body => 478, - Iir_Kind_Wildcard_Type_Definition => 483, - Iir_Kind_Subtype_Definition => 490, - Iir_Kind_Scalar_Nature_Definition => 498, - Iir_Kind_Record_Nature_Definition => 511, - Iir_Kind_Array_Nature_Definition => 525, - Iir_Kind_Array_Subnature_Definition => 540, - Iir_Kind_Overload_List => 541, - Iir_Kind_Entity_Declaration => 554, - Iir_Kind_Configuration_Declaration => 563, - Iir_Kind_Context_Declaration => 569, - Iir_Kind_Package_Declaration => 584, - Iir_Kind_Package_Instantiation_Declaration => 598, - Iir_Kind_Vmode_Declaration => 610, - Iir_Kind_Vprop_Declaration => 622, - Iir_Kind_Vunit_Declaration => 635, - Iir_Kind_Package_Body => 643, - Iir_Kind_Architecture_Body => 656, - Iir_Kind_Type_Declaration => 663, - Iir_Kind_Anonymous_Type_Declaration => 669, - Iir_Kind_Subtype_Declaration => 677, - Iir_Kind_Nature_Declaration => 683, - Iir_Kind_Subnature_Declaration => 690, - Iir_Kind_Package_Header => 692, - Iir_Kind_Unit_Declaration => 701, - Iir_Kind_Library_Declaration => 709, - Iir_Kind_Component_Declaration => 719, - Iir_Kind_Attribute_Declaration => 726, - Iir_Kind_Group_Template_Declaration => 732, - Iir_Kind_Group_Declaration => 739, - Iir_Kind_Element_Declaration => 747, - Iir_Kind_Nature_Element_Declaration => 754, - Iir_Kind_Non_Object_Alias_Declaration => 762, - Iir_Kind_Psl_Declaration => 770, - Iir_Kind_Psl_Endpoint_Declaration => 784, - Iir_Kind_Enumeration_Literal => 795, - Iir_Kind_Function_Declaration => 820, - Iir_Kind_Procedure_Declaration => 844, - Iir_Kind_Function_Body => 854, - Iir_Kind_Procedure_Body => 865, - Iir_Kind_Terminal_Declaration => 874, - Iir_Kind_Object_Alias_Declaration => 886, - Iir_Kind_Free_Quantity_Declaration => 898, - Iir_Kind_Spectrum_Quantity_Declaration => 911, - Iir_Kind_Noise_Quantity_Declaration => 923, - Iir_Kind_Across_Quantity_Declaration => 939, - Iir_Kind_Through_Quantity_Declaration => 955, - Iir_Kind_File_Declaration => 970, - Iir_Kind_Guard_Signal_Declaration => 983, - Iir_Kind_Signal_Declaration => 1000, - Iir_Kind_Variable_Declaration => 1013, - Iir_Kind_Constant_Declaration => 1027, - Iir_Kind_Iterator_Declaration => 1039, - Iir_Kind_Interface_Constant_Declaration => 1056, - Iir_Kind_Interface_Variable_Declaration => 1072, - Iir_Kind_Interface_Signal_Declaration => 1093, - Iir_Kind_Interface_File_Declaration => 1109, - Iir_Kind_Interface_Quantity_Declaration => 1125, - Iir_Kind_Interface_Terminal_Declaration => 1137, - Iir_Kind_Interface_Type_Declaration => 1148, - Iir_Kind_Interface_Package_Declaration => 1161, - Iir_Kind_Interface_Function_Declaration => 1179, - Iir_Kind_Interface_Procedure_Declaration => 1193, - Iir_Kind_Anonymous_Signal_Declaration => 1202, - Iir_Kind_Signal_Attribute_Declaration => 1205, - Iir_Kind_Identity_Operator => 1209, - Iir_Kind_Negation_Operator => 1213, - Iir_Kind_Absolute_Operator => 1217, - Iir_Kind_Not_Operator => 1221, - Iir_Kind_Implicit_Condition_Operator => 1225, - Iir_Kind_Condition_Operator => 1229, - Iir_Kind_Reduction_And_Operator => 1233, - Iir_Kind_Reduction_Or_Operator => 1237, - Iir_Kind_Reduction_Nand_Operator => 1241, - Iir_Kind_Reduction_Nor_Operator => 1245, - Iir_Kind_Reduction_Xor_Operator => 1249, - Iir_Kind_Reduction_Xnor_Operator => 1253, - Iir_Kind_And_Operator => 1258, - Iir_Kind_Or_Operator => 1263, - Iir_Kind_Nand_Operator => 1268, - Iir_Kind_Nor_Operator => 1273, - Iir_Kind_Xor_Operator => 1278, - Iir_Kind_Xnor_Operator => 1283, - Iir_Kind_Equality_Operator => 1288, - Iir_Kind_Inequality_Operator => 1293, - Iir_Kind_Less_Than_Operator => 1298, - Iir_Kind_Less_Than_Or_Equal_Operator => 1303, - Iir_Kind_Greater_Than_Operator => 1308, - Iir_Kind_Greater_Than_Or_Equal_Operator => 1313, - Iir_Kind_Match_Equality_Operator => 1318, - Iir_Kind_Match_Inequality_Operator => 1323, - Iir_Kind_Match_Less_Than_Operator => 1328, - Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1333, - Iir_Kind_Match_Greater_Than_Operator => 1338, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1343, - Iir_Kind_Sll_Operator => 1348, - Iir_Kind_Sla_Operator => 1353, - Iir_Kind_Srl_Operator => 1358, - Iir_Kind_Sra_Operator => 1363, - Iir_Kind_Rol_Operator => 1368, - Iir_Kind_Ror_Operator => 1373, - Iir_Kind_Addition_Operator => 1378, - Iir_Kind_Substraction_Operator => 1383, - Iir_Kind_Concatenation_Operator => 1388, - Iir_Kind_Multiplication_Operator => 1393, - Iir_Kind_Division_Operator => 1398, - Iir_Kind_Modulus_Operator => 1403, - Iir_Kind_Remainder_Operator => 1408, - Iir_Kind_Exponentiation_Operator => 1413, - Iir_Kind_Function_Call => 1421, - Iir_Kind_Aggregate => 1428, - Iir_Kind_Parenthesis_Expression => 1431, - Iir_Kind_Qualified_Expression => 1435, - Iir_Kind_Type_Conversion => 1440, - Iir_Kind_Allocator_By_Expression => 1445, - Iir_Kind_Allocator_By_Subtype => 1451, - Iir_Kind_Selected_Element => 1459, - Iir_Kind_Dereference => 1464, - Iir_Kind_Implicit_Dereference => 1469, - Iir_Kind_Slice_Name => 1476, - Iir_Kind_Indexed_Name => 1482, - Iir_Kind_Psl_Prev => 1488, - Iir_Kind_Psl_Stable => 1493, - Iir_Kind_Psl_Rose => 1498, - Iir_Kind_Psl_Fell => 1503, - Iir_Kind_Psl_Expression => 1505, - Iir_Kind_Sensitized_Process_Statement => 1526, - Iir_Kind_Process_Statement => 1546, - Iir_Kind_Concurrent_Simple_Signal_Assignment => 1559, - Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1572, - Iir_Kind_Concurrent_Selected_Signal_Assignment => 1586, - Iir_Kind_Concurrent_Assertion_Statement => 1594, - Iir_Kind_Concurrent_Procedure_Call_Statement => 1601, - Iir_Kind_Concurrent_Break_Statement => 1609, - Iir_Kind_Psl_Assert_Directive => 1622, - Iir_Kind_Psl_Assume_Directive => 1633, - Iir_Kind_Psl_Cover_Directive => 1645, - Iir_Kind_Psl_Restrict_Directive => 1656, - Iir_Kind_Block_Statement => 1670, - Iir_Kind_If_Generate_Statement => 1681, - Iir_Kind_Case_Generate_Statement => 1690, - Iir_Kind_For_Generate_Statement => 1699, - Iir_Kind_Component_Instantiation_Statement => 1710, - Iir_Kind_Psl_Default_Clock => 1714, - Iir_Kind_Generate_Statement_Body => 1725, - Iir_Kind_If_Generate_Else_Clause => 1731, - Iir_Kind_Simple_Simultaneous_Statement => 1738, - Iir_Kind_Simultaneous_Null_Statement => 1742, - Iir_Kind_Simultaneous_Procedural_Statement => 1753, - Iir_Kind_Simultaneous_Case_Statement => 1762, - Iir_Kind_Simultaneous_If_Statement => 1771, - Iir_Kind_Simultaneous_Elsif => 1777, - Iir_Kind_Simple_Signal_Assignment_Statement => 1788, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1799, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1811, - Iir_Kind_Null_Statement => 1815, - Iir_Kind_Assertion_Statement => 1822, - Iir_Kind_Report_Statement => 1828, - Iir_Kind_Wait_Statement => 1836, - Iir_Kind_Variable_Assignment_Statement => 1843, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1850, - Iir_Kind_Return_Statement => 1856, - Iir_Kind_For_Loop_Statement => 1867, - Iir_Kind_While_Loop_Statement => 1878, - Iir_Kind_Next_Statement => 1885, - Iir_Kind_Exit_Statement => 1892, - Iir_Kind_Case_Statement => 1900, - Iir_Kind_Procedure_Call_Statement => 1906, - Iir_Kind_Break_Statement => 1913, - Iir_Kind_If_Statement => 1923, - Iir_Kind_Elsif => 1929, - Iir_Kind_Character_Literal => 1937, - Iir_Kind_Simple_Name => 1945, - Iir_Kind_Selected_Name => 1954, - Iir_Kind_Operator_Symbol => 1960, - Iir_Kind_Reference_Name => 1965, - Iir_Kind_External_Constant_Name => 1974, - Iir_Kind_External_Signal_Name => 1983, - Iir_Kind_External_Variable_Name => 1993, - Iir_Kind_Selected_By_All_Name => 1999, - Iir_Kind_Parenthesis_Name => 2004, - Iir_Kind_Package_Pathname => 2008, - Iir_Kind_Absolute_Pathname => 2009, - Iir_Kind_Relative_Pathname => 2010, - Iir_Kind_Pathname_Element => 2015, - Iir_Kind_Base_Attribute => 2017, - Iir_Kind_Subtype_Attribute => 2022, - Iir_Kind_Element_Attribute => 2027, - Iir_Kind_Across_Attribute => 2032, - Iir_Kind_Through_Attribute => 2037, - Iir_Kind_Nature_Reference_Attribute => 2041, - Iir_Kind_Left_Type_Attribute => 2046, - Iir_Kind_Right_Type_Attribute => 2051, - Iir_Kind_High_Type_Attribute => 2056, - Iir_Kind_Low_Type_Attribute => 2061, - Iir_Kind_Ascending_Type_Attribute => 2066, - Iir_Kind_Image_Attribute => 2072, - Iir_Kind_Value_Attribute => 2078, - Iir_Kind_Pos_Attribute => 2084, - Iir_Kind_Val_Attribute => 2090, - Iir_Kind_Succ_Attribute => 2096, - Iir_Kind_Pred_Attribute => 2102, - Iir_Kind_Leftof_Attribute => 2108, - Iir_Kind_Rightof_Attribute => 2114, - Iir_Kind_Signal_Slew_Attribute => 2122, - Iir_Kind_Quantity_Slew_Attribute => 2130, - Iir_Kind_Ramp_Attribute => 2138, - Iir_Kind_Zoh_Attribute => 2146, - Iir_Kind_Ltf_Attribute => 2154, - Iir_Kind_Ztf_Attribute => 2164, - Iir_Kind_Dot_Attribute => 2171, - Iir_Kind_Integ_Attribute => 2178, - Iir_Kind_Above_Attribute => 2186, - Iir_Kind_Quantity_Delayed_Attribute => 2194, - Iir_Kind_Delayed_Attribute => 2203, - Iir_Kind_Stable_Attribute => 2212, - Iir_Kind_Quiet_Attribute => 2221, - Iir_Kind_Transaction_Attribute => 2230, - Iir_Kind_Event_Attribute => 2234, - Iir_Kind_Active_Attribute => 2238, - Iir_Kind_Last_Event_Attribute => 2242, - Iir_Kind_Last_Active_Attribute => 2246, - Iir_Kind_Last_Value_Attribute => 2250, - Iir_Kind_Driving_Attribute => 2254, - Iir_Kind_Driving_Value_Attribute => 2258, - Iir_Kind_Behavior_Attribute => 2258, - Iir_Kind_Structure_Attribute => 2258, - Iir_Kind_Simple_Name_Attribute => 2265, - Iir_Kind_Instance_Name_Attribute => 2270, - Iir_Kind_Path_Name_Attribute => 2275, - Iir_Kind_Left_Array_Attribute => 2282, - Iir_Kind_Right_Array_Attribute => 2289, - Iir_Kind_High_Array_Attribute => 2296, - Iir_Kind_Low_Array_Attribute => 2303, - Iir_Kind_Length_Array_Attribute => 2310, - Iir_Kind_Ascending_Array_Attribute => 2317, - Iir_Kind_Range_Array_Attribute => 2324, - Iir_Kind_Reverse_Range_Array_Attribute => 2331, - Iir_Kind_Attribute_Name => 2340 + Iir_Kind_Error => 6, + Iir_Kind_Design_File => 17, + Iir_Kind_Design_Unit => 33, + Iir_Kind_Library_Clause => 38, + Iir_Kind_Use_Clause => 42, + Iir_Kind_Context_Reference => 46, + Iir_Kind_Integer_Literal => 51, + Iir_Kind_Floating_Point_Literal => 56, + Iir_Kind_Null_Literal => 58, + Iir_Kind_String_Literal8 => 69, + Iir_Kind_Physical_Int_Literal => 75, + Iir_Kind_Physical_Fp_Literal => 81, + Iir_Kind_Simple_Aggregate => 86, + Iir_Kind_Overflow_Literal => 89, + Iir_Kind_Unaffected_Waveform => 90, + Iir_Kind_Waveform_Element => 93, + Iir_Kind_Conditional_Waveform => 97, + Iir_Kind_Conditional_Expression => 101, + Iir_Kind_Association_Element_By_Expression => 109, + Iir_Kind_Association_Element_By_Individual => 118, + Iir_Kind_Association_Element_Open => 124, + Iir_Kind_Association_Element_Package => 130, + Iir_Kind_Association_Element_Type => 138, + Iir_Kind_Association_Element_Subprogram => 144, + Iir_Kind_Association_Element_Terminal => 150, + Iir_Kind_Choice_By_Range => 158, + Iir_Kind_Choice_By_Expression => 166, + Iir_Kind_Choice_By_Others => 172, + Iir_Kind_Choice_By_None => 178, + Iir_Kind_Choice_By_Name => 185, + Iir_Kind_Entity_Aspect_Entity => 187, + Iir_Kind_Entity_Aspect_Configuration => 188, + Iir_Kind_Entity_Aspect_Open => 188, + Iir_Kind_Psl_Hierarchical_Name => 190, + Iir_Kind_Block_Configuration => 196, + Iir_Kind_Block_Header => 200, + Iir_Kind_Component_Configuration => 207, + Iir_Kind_Binding_Indication => 211, + Iir_Kind_Entity_Class => 213, + Iir_Kind_Attribute_Value => 221, + Iir_Kind_Signature => 224, + Iir_Kind_Aggregate_Info => 231, + Iir_Kind_Procedure_Call => 235, + Iir_Kind_Record_Element_Constraint => 243, + Iir_Kind_Array_Element_Resolution => 245, + Iir_Kind_Record_Resolution => 246, + Iir_Kind_Record_Element_Resolution => 249, + Iir_Kind_Break_Element => 253, + Iir_Kind_Attribute_Specification => 261, + Iir_Kind_Disconnection_Specification => 267, + Iir_Kind_Step_Limit_Specification => 273, + Iir_Kind_Configuration_Specification => 279, + Iir_Kind_Access_Type_Definition => 286, + Iir_Kind_Incomplete_Type_Definition => 293, + Iir_Kind_Interface_Type_Definition => 299, + Iir_Kind_File_Type_Definition => 305, + Iir_Kind_Protected_Type_Declaration => 314, + Iir_Kind_Record_Type_Definition => 324, + Iir_Kind_Array_Type_Definition => 335, + Iir_Kind_Array_Subtype_Definition => 350, + Iir_Kind_Record_Subtype_Definition => 363, + Iir_Kind_Access_Subtype_Definition => 371, + Iir_Kind_Physical_Subtype_Definition => 381, + Iir_Kind_Floating_Subtype_Definition => 392, + Iir_Kind_Integer_Subtype_Definition => 402, + Iir_Kind_Enumeration_Subtype_Definition => 412, + Iir_Kind_Enumeration_Type_Definition => 423, + Iir_Kind_Integer_Type_Definition => 431, + Iir_Kind_Floating_Type_Definition => 439, + Iir_Kind_Physical_Type_Definition => 450, + Iir_Kind_Range_Expression => 458, + Iir_Kind_Protected_Type_Body => 466, + Iir_Kind_Wildcard_Type_Definition => 470, + Iir_Kind_Subtype_Definition => 477, + Iir_Kind_Scalar_Nature_Definition => 485, + Iir_Kind_Record_Nature_Definition => 498, + Iir_Kind_Array_Nature_Definition => 512, + Iir_Kind_Array_Subnature_Definition => 527, + Iir_Kind_Overload_List => 528, + Iir_Kind_Entity_Declaration => 541, + Iir_Kind_Configuration_Declaration => 550, + Iir_Kind_Context_Declaration => 556, + Iir_Kind_Package_Declaration => 571, + Iir_Kind_Package_Instantiation_Declaration => 585, + Iir_Kind_Vmode_Declaration => 597, + Iir_Kind_Vprop_Declaration => 609, + Iir_Kind_Vunit_Declaration => 622, + Iir_Kind_Package_Body => 630, + Iir_Kind_Architecture_Body => 643, + Iir_Kind_Type_Declaration => 650, + Iir_Kind_Anonymous_Type_Declaration => 656, + Iir_Kind_Subtype_Declaration => 664, + Iir_Kind_Nature_Declaration => 670, + Iir_Kind_Subnature_Declaration => 677, + Iir_Kind_Package_Header => 679, + Iir_Kind_Unit_Declaration => 688, + Iir_Kind_Library_Declaration => 696, + Iir_Kind_Component_Declaration => 706, + Iir_Kind_Attribute_Declaration => 713, + Iir_Kind_Group_Template_Declaration => 719, + Iir_Kind_Group_Declaration => 726, + Iir_Kind_Element_Declaration => 734, + Iir_Kind_Nature_Element_Declaration => 741, + Iir_Kind_Non_Object_Alias_Declaration => 749, + Iir_Kind_Psl_Declaration => 757, + Iir_Kind_Psl_Endpoint_Declaration => 771, + Iir_Kind_Enumeration_Literal => 782, + Iir_Kind_Function_Declaration => 807, + Iir_Kind_Procedure_Declaration => 831, + Iir_Kind_Function_Body => 841, + Iir_Kind_Procedure_Body => 852, + Iir_Kind_Terminal_Declaration => 861, + Iir_Kind_Object_Alias_Declaration => 873, + Iir_Kind_Free_Quantity_Declaration => 885, + Iir_Kind_Spectrum_Quantity_Declaration => 898, + Iir_Kind_Noise_Quantity_Declaration => 910, + Iir_Kind_Across_Quantity_Declaration => 926, + Iir_Kind_Through_Quantity_Declaration => 942, + Iir_Kind_File_Declaration => 957, + Iir_Kind_Guard_Signal_Declaration => 970, + Iir_Kind_Signal_Declaration => 987, + Iir_Kind_Variable_Declaration => 1000, + Iir_Kind_Constant_Declaration => 1014, + Iir_Kind_Iterator_Declaration => 1026, + Iir_Kind_Interface_Constant_Declaration => 1043, + Iir_Kind_Interface_Variable_Declaration => 1059, + Iir_Kind_Interface_Signal_Declaration => 1080, + Iir_Kind_Interface_File_Declaration => 1096, + Iir_Kind_Interface_Quantity_Declaration => 1112, + Iir_Kind_Interface_Terminal_Declaration => 1124, + Iir_Kind_Interface_Type_Declaration => 1135, + Iir_Kind_Interface_Package_Declaration => 1148, + Iir_Kind_Interface_Function_Declaration => 1166, + Iir_Kind_Interface_Procedure_Declaration => 1180, + Iir_Kind_Anonymous_Signal_Declaration => 1189, + Iir_Kind_Signal_Attribute_Declaration => 1192, + Iir_Kind_Identity_Operator => 1196, + Iir_Kind_Negation_Operator => 1200, + Iir_Kind_Absolute_Operator => 1204, + Iir_Kind_Not_Operator => 1208, + Iir_Kind_Implicit_Condition_Operator => 1212, + Iir_Kind_Condition_Operator => 1216, + Iir_Kind_Reduction_And_Operator => 1220, + Iir_Kind_Reduction_Or_Operator => 1224, + Iir_Kind_Reduction_Nand_Operator => 1228, + Iir_Kind_Reduction_Nor_Operator => 1232, + Iir_Kind_Reduction_Xor_Operator => 1236, + Iir_Kind_Reduction_Xnor_Operator => 1240, + Iir_Kind_And_Operator => 1245, + Iir_Kind_Or_Operator => 1250, + Iir_Kind_Nand_Operator => 1255, + Iir_Kind_Nor_Operator => 1260, + Iir_Kind_Xor_Operator => 1265, + Iir_Kind_Xnor_Operator => 1270, + Iir_Kind_Equality_Operator => 1275, + Iir_Kind_Inequality_Operator => 1280, + Iir_Kind_Less_Than_Operator => 1285, + Iir_Kind_Less_Than_Or_Equal_Operator => 1290, + Iir_Kind_Greater_Than_Operator => 1295, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1300, + Iir_Kind_Match_Equality_Operator => 1305, + Iir_Kind_Match_Inequality_Operator => 1310, + Iir_Kind_Match_Less_Than_Operator => 1315, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1320, + Iir_Kind_Match_Greater_Than_Operator => 1325, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1330, + Iir_Kind_Sll_Operator => 1335, + Iir_Kind_Sla_Operator => 1340, + Iir_Kind_Srl_Operator => 1345, + Iir_Kind_Sra_Operator => 1350, + Iir_Kind_Rol_Operator => 1355, + Iir_Kind_Ror_Operator => 1360, + Iir_Kind_Addition_Operator => 1365, + Iir_Kind_Substraction_Operator => 1370, + Iir_Kind_Concatenation_Operator => 1375, + Iir_Kind_Multiplication_Operator => 1380, + Iir_Kind_Division_Operator => 1385, + Iir_Kind_Modulus_Operator => 1390, + Iir_Kind_Remainder_Operator => 1395, + Iir_Kind_Exponentiation_Operator => 1400, + Iir_Kind_Function_Call => 1408, + Iir_Kind_Aggregate => 1415, + Iir_Kind_Parenthesis_Expression => 1418, + Iir_Kind_Qualified_Expression => 1422, + Iir_Kind_Type_Conversion => 1427, + Iir_Kind_Allocator_By_Expression => 1432, + Iir_Kind_Allocator_By_Subtype => 1438, + Iir_Kind_Selected_Element => 1446, + Iir_Kind_Dereference => 1451, + Iir_Kind_Implicit_Dereference => 1456, + Iir_Kind_Slice_Name => 1463, + Iir_Kind_Indexed_Name => 1469, + Iir_Kind_Psl_Prev => 1475, + Iir_Kind_Psl_Stable => 1480, + Iir_Kind_Psl_Rose => 1485, + Iir_Kind_Psl_Fell => 1490, + Iir_Kind_Psl_Expression => 1492, + Iir_Kind_Sensitized_Process_Statement => 1513, + Iir_Kind_Process_Statement => 1533, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1546, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1559, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1573, + Iir_Kind_Concurrent_Assertion_Statement => 1581, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1588, + Iir_Kind_Concurrent_Break_Statement => 1596, + Iir_Kind_Psl_Assert_Directive => 1609, + Iir_Kind_Psl_Assume_Directive => 1620, + Iir_Kind_Psl_Cover_Directive => 1632, + Iir_Kind_Psl_Restrict_Directive => 1643, + Iir_Kind_Block_Statement => 1657, + Iir_Kind_If_Generate_Statement => 1668, + Iir_Kind_Case_Generate_Statement => 1677, + Iir_Kind_For_Generate_Statement => 1686, + Iir_Kind_Component_Instantiation_Statement => 1697, + Iir_Kind_Psl_Default_Clock => 1701, + Iir_Kind_Generate_Statement_Body => 1712, + Iir_Kind_If_Generate_Else_Clause => 1718, + Iir_Kind_Simple_Simultaneous_Statement => 1725, + Iir_Kind_Simultaneous_Null_Statement => 1729, + Iir_Kind_Simultaneous_Procedural_Statement => 1740, + Iir_Kind_Simultaneous_Case_Statement => 1749, + Iir_Kind_Simultaneous_If_Statement => 1758, + Iir_Kind_Simultaneous_Elsif => 1764, + Iir_Kind_Simple_Signal_Assignment_Statement => 1775, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1786, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1798, + Iir_Kind_Null_Statement => 1802, + Iir_Kind_Assertion_Statement => 1809, + Iir_Kind_Report_Statement => 1815, + Iir_Kind_Wait_Statement => 1823, + Iir_Kind_Variable_Assignment_Statement => 1830, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1837, + Iir_Kind_Return_Statement => 1843, + Iir_Kind_For_Loop_Statement => 1854, + Iir_Kind_While_Loop_Statement => 1865, + Iir_Kind_Next_Statement => 1872, + Iir_Kind_Exit_Statement => 1879, + Iir_Kind_Case_Statement => 1887, + Iir_Kind_Procedure_Call_Statement => 1893, + Iir_Kind_Break_Statement => 1900, + Iir_Kind_If_Statement => 1910, + Iir_Kind_Elsif => 1916, + Iir_Kind_Character_Literal => 1924, + Iir_Kind_Simple_Name => 1932, + Iir_Kind_Selected_Name => 1941, + Iir_Kind_Operator_Symbol => 1947, + Iir_Kind_Reference_Name => 1952, + Iir_Kind_External_Constant_Name => 1961, + Iir_Kind_External_Signal_Name => 1970, + Iir_Kind_External_Variable_Name => 1980, + Iir_Kind_Selected_By_All_Name => 1986, + Iir_Kind_Parenthesis_Name => 1991, + Iir_Kind_Package_Pathname => 1995, + Iir_Kind_Absolute_Pathname => 1996, + Iir_Kind_Relative_Pathname => 1997, + Iir_Kind_Pathname_Element => 2002, + Iir_Kind_Base_Attribute => 2004, + Iir_Kind_Subtype_Attribute => 2009, + Iir_Kind_Element_Attribute => 2014, + Iir_Kind_Across_Attribute => 2019, + Iir_Kind_Through_Attribute => 2024, + Iir_Kind_Nature_Reference_Attribute => 2028, + Iir_Kind_Left_Type_Attribute => 2033, + Iir_Kind_Right_Type_Attribute => 2038, + Iir_Kind_High_Type_Attribute => 2043, + Iir_Kind_Low_Type_Attribute => 2048, + Iir_Kind_Ascending_Type_Attribute => 2053, + Iir_Kind_Image_Attribute => 2059, + Iir_Kind_Value_Attribute => 2065, + Iir_Kind_Pos_Attribute => 2071, + Iir_Kind_Val_Attribute => 2077, + Iir_Kind_Succ_Attribute => 2083, + Iir_Kind_Pred_Attribute => 2089, + Iir_Kind_Leftof_Attribute => 2095, + Iir_Kind_Rightof_Attribute => 2101, + Iir_Kind_Signal_Slew_Attribute => 2109, + Iir_Kind_Quantity_Slew_Attribute => 2117, + Iir_Kind_Ramp_Attribute => 2125, + Iir_Kind_Zoh_Attribute => 2133, + Iir_Kind_Ltf_Attribute => 2141, + Iir_Kind_Ztf_Attribute => 2151, + Iir_Kind_Dot_Attribute => 2158, + Iir_Kind_Integ_Attribute => 2165, + Iir_Kind_Above_Attribute => 2173, + Iir_Kind_Quantity_Delayed_Attribute => 2181, + Iir_Kind_Delayed_Attribute => 2190, + Iir_Kind_Stable_Attribute => 2199, + Iir_Kind_Quiet_Attribute => 2208, + Iir_Kind_Transaction_Attribute => 2217, + Iir_Kind_Event_Attribute => 2221, + Iir_Kind_Active_Attribute => 2225, + Iir_Kind_Last_Event_Attribute => 2229, + Iir_Kind_Last_Active_Attribute => 2233, + Iir_Kind_Last_Value_Attribute => 2237, + Iir_Kind_Driving_Attribute => 2241, + Iir_Kind_Driving_Value_Attribute => 2245, + Iir_Kind_Behavior_Attribute => 2245, + Iir_Kind_Structure_Attribute => 2245, + Iir_Kind_Simple_Name_Attribute => 2252, + Iir_Kind_Instance_Name_Attribute => 2257, + Iir_Kind_Path_Name_Attribute => 2262, + Iir_Kind_Left_Array_Attribute => 2269, + Iir_Kind_Right_Array_Attribute => 2276, + Iir_Kind_High_Array_Attribute => 2283, + Iir_Kind_Low_Array_Attribute => 2290, + Iir_Kind_Length_Array_Attribute => 2297, + Iir_Kind_Ascending_Array_Attribute => 2304, + Iir_Kind_Range_Array_Attribute => 2311, + Iir_Kind_Reverse_Range_Array_Attribute => 2318, + Iir_Kind_Attribute_Name => 2327 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -6077,8 +6064,8 @@ package body Vhdl.Nodes_Meta is return Get_Left_Limit_Expr (N); when Field_Right_Limit_Expr => return Get_Right_Limit_Expr (N); - when Field_Base_Type => - return Get_Base_Type (N); + when Field_Parent_Type => + return Get_Parent_Type (N); when Field_Simple_Nature => return Get_Simple_Nature (N); when Field_Base_Nature => @@ -6533,8 +6520,8 @@ package body Vhdl.Nodes_Meta is Set_Left_Limit_Expr (N, V); when Field_Right_Limit_Expr => Set_Right_Limit_Expr (N, V); - when Field_Base_Type => - Set_Base_Type (N, V); + when Field_Parent_Type => + Set_Parent_Type (N, V); when Field_Simple_Nature => Set_Simple_Nature (N, V); when Field_Base_Nature => @@ -9491,35 +9478,22 @@ package body Vhdl.Nodes_Meta is return K = Iir_Kind_Range_Expression; end Has_Right_Limit_Expr; - function Has_Base_Type (K : Iir_Kind) return Boolean is + function Has_Parent_Type (K : Iir_Kind) return Boolean is begin case K is - when Iir_Kind_Error - | Iir_Kind_Access_Type_Definition - | Iir_Kind_Incomplete_Type_Definition - | Iir_Kind_Interface_Type_Definition - | Iir_Kind_File_Type_Definition - | Iir_Kind_Protected_Type_Declaration - | Iir_Kind_Record_Type_Definition - | Iir_Kind_Array_Type_Definition - | Iir_Kind_Array_Subtype_Definition + when Iir_Kind_Array_Subtype_Definition | Iir_Kind_Record_Subtype_Definition | Iir_Kind_Access_Subtype_Definition | Iir_Kind_Physical_Subtype_Definition | Iir_Kind_Floating_Subtype_Definition | Iir_Kind_Integer_Subtype_Definition | Iir_Kind_Enumeration_Subtype_Definition - | Iir_Kind_Enumeration_Type_Definition - | Iir_Kind_Integer_Type_Definition - | Iir_Kind_Floating_Type_Definition - | Iir_Kind_Physical_Type_Definition - | Iir_Kind_Wildcard_Type_Definition | Iir_Kind_Subtype_Definition => return True; when others => return False; end case; - end Has_Base_Type; + end Has_Parent_Type; function Has_Simple_Nature (K : Iir_Kind) return Boolean is begin diff --git a/src/vhdl/vhdl-nodes_meta.ads b/src/vhdl/vhdl-nodes_meta.ads index 80fe7d136..1b5a19269 100644 --- a/src/vhdl/vhdl-nodes_meta.ads +++ b/src/vhdl/vhdl-nodes_meta.ads @@ -211,7 +211,7 @@ package Vhdl.Nodes_Meta is Field_Right_Limit, Field_Left_Limit_Expr, Field_Right_Limit_Expr, - Field_Base_Type, + Field_Parent_Type, Field_Simple_Nature, Field_Base_Nature, Field_Resolution_Indication, @@ -783,7 +783,7 @@ package Vhdl.Nodes_Meta is function Has_Right_Limit (K : Iir_Kind) return Boolean; function Has_Left_Limit_Expr (K : Iir_Kind) return Boolean; function Has_Right_Limit_Expr (K : Iir_Kind) return Boolean; - function Has_Base_Type (K : Iir_Kind) return Boolean; + function Has_Parent_Type (K : Iir_Kind) return Boolean; function Has_Simple_Nature (K : Iir_Kind) return Boolean; function Has_Base_Nature (K : Iir_Kind) return Boolean; function Has_Resolution_Indication (K : Iir_Kind) return Boolean; diff --git a/src/vhdl/vhdl-sem_assocs.adb b/src/vhdl/vhdl-sem_assocs.adb index 927877458..67e9699d9 100644 --- a/src/vhdl/vhdl-sem_assocs.adb +++ b/src/vhdl/vhdl-sem_assocs.adb @@ -955,7 +955,7 @@ package body Vhdl.Sem_Assocs is Error_Kind ("finish_individual_assoc_array", Base_Index); end case; Location_Copy (Actual_Index, Actual); - Set_Base_Type (Actual_Index, Get_Base_Type (Base_Index)); + Set_Parent_Type (Actual_Index, Base_Index); Index_Constraint := Get_Range_Constraint (Base_Index); Index_Subtype_Constraint := Create_Iir (Iir_Kind_Range_Expression); @@ -1070,7 +1070,7 @@ package body Vhdl.Sem_Assocs is Ntype := Create_Iir (Iir_Kind_Record_Subtype_Definition); Set_Is_Ref (Ntype, True); Location_Copy (Ntype, Assoc); - Set_Base_Type (Ntype, Get_Base_Type (Atype)); + Set_Parent_Type (Ntype, Atype); if Get_Kind (Atype) = Iir_Kind_Record_Subtype_Definition then Set_Resolution_Indication (Ntype, Get_Resolution_Indication (Atype)); diff --git a/src/vhdl/vhdl-sem_decls.adb b/src/vhdl/vhdl-sem_decls.adb index d85a0631a..8b365a225 100644 --- a/src/vhdl/vhdl-sem_decls.adb +++ b/src/vhdl/vhdl-sem_decls.adb @@ -552,7 +552,6 @@ package body Vhdl.Sem_Decls is Set_Location (Def, Get_Location (Inter)); Set_Type_Declarator (Def, Inter); Set_Type (Inter, Def); - Set_Base_Type (Def, Def); Set_Type_Staticness (Def, None); Set_Resolved_Flag (Def, False); Set_Signal_Type_Flag (Def, True); @@ -704,7 +703,6 @@ package body Vhdl.Sem_Decls is Def := Create_Iir (Iir_Kind_Incomplete_Type_Definition); Location_Copy (Def, Decl); Set_Type_Definition (Decl, Def); - Set_Base_Type (Def, Def); Set_Signal_Type_Flag (Def, True); Set_Type_Declarator (Def, Decl); Set_Visible_Flag (Decl, True); diff --git a/src/vhdl/vhdl-sem_expr.adb b/src/vhdl/vhdl-sem_expr.adb index 49ad9ed8a..07da48d8d 100644 --- a/src/vhdl/vhdl-sem_expr.adb +++ b/src/vhdl/vhdl-sem_expr.adb @@ -3775,7 +3775,7 @@ package body Vhdl.Sem_Expr is Error_Kind ("sem_array_aggregate(2)", Index_Type); end case; Location_Copy (Info.Index_Subtype, Aggr); - Set_Base_Type (Info.Index_Subtype, Get_Base_Type (Index_Type)); + Set_Parent_Type (Info.Index_Subtype, Get_Base_Type (Index_Type)); Index_Constraint := Get_Range_Constraint (Index_Type); -- LRM93 7.3.2.2 @@ -4913,7 +4913,6 @@ package body Vhdl.Sem_Expr is -- Always ok. -- Use the error as a type. Set_Type (Expr, Expr); - Set_Base_Type (Expr, Expr); return Expr; when others => diff --git a/src/vhdl/vhdl-sem_names.adb b/src/vhdl/vhdl-sem_names.adb index 107bb46cb..11333e1fd 100644 --- a/src/vhdl/vhdl-sem_names.adb +++ b/src/vhdl/vhdl-sem_names.adb @@ -825,7 +825,7 @@ package body Vhdl.Sem_Names is Set_Range_Constraint (Slice_Type, Suffix_Rng); Set_Is_Ref (Slice_Type, True); Set_Type_Staticness (Slice_Type, Staticness); - Set_Base_Type (Slice_Type, Get_Base_Type (Index_Type)); + Set_Parent_Type (Slice_Type, Get_Base_Type (Index_Type)); Set_Location (Slice_Type, Get_Location (Suffix)); -- Attach the new index subtype to the array subtype. @@ -838,7 +838,7 @@ package body Vhdl.Sem_Names is Set_Index_Subtype_List (Expr_Type, Index_List); Set_Nth_Element (Index_List, 0, Slice_Type); Prefix_Base_Type := Get_Base_Type (Prefix_Type); - Set_Base_Type (Expr_Type, Prefix_Base_Type); + Set_Parent_Type (Expr_Type, Prefix_Base_Type); Set_Signal_Type_Flag (Expr_Type, Get_Signal_Type_Flag (Prefix_Base_Type)); Set_Element_Subtype (Expr_Type, Get_Element_Subtype (Prefix_Type)); diff --git a/src/vhdl/vhdl-sem_types.adb b/src/vhdl/vhdl-sem_types.adb index 759e0af3f..10c84d41c 100644 --- a/src/vhdl/vhdl-sem_types.adb +++ b/src/vhdl/vhdl-sem_types.adb @@ -247,11 +247,10 @@ package body Vhdl.Sem_Types is Location_Copy (Ntype, Loc); Ndef := Create_Iir (Iir_Kind_Integer_Type_Definition); Location_Copy (Ndef, Loc); - Set_Base_Type (Ndef, Ndef); Set_Type_Declarator (Ndef, Decl); Set_Type_Staticness (Ndef, Locally); Set_Signal_Type_Flag (Ndef, True); - Set_Base_Type (Ntype, Ndef); + Set_Parent_Type (Ntype, Ndef); Set_Type_Declarator (Ntype, Decl); Set_Range_Constraint (Ntype, Constraint); Set_Type_Staticness (Ntype, Get_Expr_Staticness (Constraint)); @@ -302,12 +301,11 @@ package body Vhdl.Sem_Types is Location_Copy (Ntype, Expr); Ndef := Create_Iir (Iir_Kind_Floating_Type_Definition); Location_Copy (Ndef, Expr); - Set_Base_Type (Ndef, Ndef); Set_Type_Declarator (Ndef, Decl); Set_Type_Staticness (Ndef, Get_Expr_Staticness (Expr)); Set_Scalar_Size (Ndef, Scalar_64); Set_Signal_Type_Flag (Ndef, True); - Set_Base_Type (Ntype, Ndef); + Set_Parent_Type (Ntype, Ndef); Set_Type_Declarator (Ntype, Decl); Set_Range_Constraint (Ntype, Rng); Set_Resolved_Flag (Ntype, False); @@ -369,7 +367,6 @@ package body Vhdl.Sem_Types is -- type and a subtype of the base type, in which case the simple name -- denotes the subtype, and the base type is anonymous. Set_Type_Declarator (Def, Decl); - Set_Base_Type (Def, Def); Set_Resolved_Flag (Def, False); Set_Type_Staticness (Def, Locally); Set_Signal_Type_Flag (Def, True); @@ -414,7 +411,7 @@ package body Vhdl.Sem_Types is -- Create the subtype. Sub_Type := Create_Iir (Iir_Kind_Physical_Subtype_Definition); Location_Copy (Sub_Type, Range_Expr); - Set_Base_Type (Sub_Type, Def); + Set_Parent_Type (Sub_Type, Def); Set_Signal_Type_Flag (Sub_Type, True); -- Analyze the primary unit. @@ -579,7 +576,6 @@ package body Vhdl.Sem_Types is El : Iir; begin Decl := Get_Type_Definition (Type_Decl); - Set_Base_Type (Decl, Decl); Set_Resolved_Flag (Decl, False); Set_Signal_Type_Flag (Decl, False); Set_Type_Staticness (Decl, None); @@ -822,7 +818,6 @@ package body Vhdl.Sem_Types is El: Iir; Only_Characters : Boolean; begin - Set_Base_Type (Def, Def); Set_Type_Staticness (Def, Locally); Set_Signal_Type_Flag (Def, True); @@ -939,7 +934,6 @@ package body Vhdl.Sem_Types is Xref_Decl (El); end loop; Close_Declarative_Region; - Set_Base_Type (Def, Def); Set_Resolved_Flag (Def, Resolved_Flag); Set_Type_Staticness (Def, Type_Staticness); Set_Constraint_State (Def, Constraint); @@ -973,8 +967,6 @@ package body Vhdl.Sem_Types is function Sem_Unbounded_Array_Type_Definition (Def: Iir) return Iir is begin - Set_Base_Type (Def, Def); - Sem_Unbounded_Array_Indexes (Def); Sem_Array_Element (Def); @@ -1044,7 +1036,6 @@ package body Vhdl.Sem_Types is -- Create a definition for the base type of subtype DEF. Base_Type := Create_Iir (Iir_Kind_Array_Type_Definition); Location_Copy (Base_Type, Def); - Set_Base_Type (Base_Type, Base_Type); Set_Type_Declarator (Base_Type, Decl); Base_Index_List := Create_Iir_Flist (Get_Nbr_Elements (Index_List)); Set_Index_Subtype_Definition_List (Base_Type, Base_Index_List); @@ -1116,7 +1107,7 @@ package body Vhdl.Sem_Types is Set_Index_Constraint_Flag (Def, True); Set_Constraint_State (Def, Get_Array_Constraint (Def)); Set_Constraint_State (Base_Type, Get_Array_Constraint (Base_Type)); - Set_Base_Type (Def, Base_Type); + Set_Parent_Type (Def, Base_Type); Set_Subtype_Type_Mark (Def, Null_Iir); return Def; end Sem_Constrained_Array_Type_Definition; @@ -1151,7 +1142,6 @@ package body Vhdl.Sem_Types is end case; Set_Designated_Type (Def, D_Type); end if; - Set_Base_Type (Def, Def); Set_Type_Staticness (Def, None); Set_Resolved_Flag (Def, False); Set_Signal_Type_Flag (Def, False); @@ -1210,7 +1200,6 @@ package body Vhdl.Sem_Types is end case; end if; - Set_Base_Type (Def, Def); Set_Resolved_Flag (Def, False); Set_Text_File_Flag (Def, Is_Text_Type_Declaration (Decl)); Set_Signal_Type_Flag (Def, False); @@ -1311,7 +1300,7 @@ package body Vhdl.Sem_Types is end case; Location_Copy (Sub_Type, A_Range); Set_Range_Constraint (Sub_Type, A_Range); - Set_Base_Type (Sub_Type, Get_Base_Type (Range_Type)); + Set_Parent_Type (Sub_Type, Get_Base_Type (Range_Type)); Set_Type_Staticness (Sub_Type, Get_Expr_Staticness (A_Range)); Set_Signal_Type_Flag (Sub_Type, True); return Sub_Type; @@ -1539,7 +1528,7 @@ package body Vhdl.Sem_Types is Error_Kind ("copy_subtype_indication", Def); end case; Location_Copy (Res, Def); - Set_Base_Type (Res, Get_Base_Type (Def)); + Set_Parent_Type (Res, Get_Base_Type (Def)); Set_Type_Staticness (Res, Get_Type_Staticness (Def)); Set_Signal_Type_Flag (Res, Get_Signal_Type_Flag (Def)); return Res; @@ -1577,7 +1566,7 @@ package body Vhdl.Sem_Types is Location_Copy (Res, Loc); -- FIXME: can be globally! Set_Type_Staticness (Res, None); - Set_Base_Type (Res, Get_Base_Type (Atype)); + Set_Parent_Type (Res, Get_Base_Type (Atype)); Set_Signal_Type_Flag (Res, Get_Signal_Type_Flag (Atype)); Set_Resolved_Flag (Res, Get_Resolved_Flag (Atype)); Set_Constraint_State (Res, Fully_Constrained); @@ -1700,7 +1689,7 @@ package body Vhdl.Sem_Types is Index_Staticness : Iir_Staticness; begin -- Check each index constraint against array type. - Set_Base_Type (Def, Base_Type); + Set_Parent_Type (Def, Base_Type); Sem_Array_Constraint_Indexes (Def, Type_Mark, Base_Type, Index_Staticness); @@ -1980,7 +1969,7 @@ package body Vhdl.Sem_Types is Res := Create_Iir (Iir_Kind_Record_Subtype_Definition); Set_Is_Ref (Res, True); Location_Copy (Res, Def); - Set_Base_Type (Res, Get_Base_Type (Type_Mark)); + Set_Parent_Type (Res, Type_Mark); if Get_Kind (Type_Mark) = Iir_Kind_Record_Subtype_Definition then Set_Resolution_Indication (Res, Get_Resolution_Indication (Type_Mark)); @@ -2222,7 +2211,7 @@ package body Vhdl.Sem_Types is Res := Create_Iir (Get_Kind (Type_Mark)); end if; Location_Copy (Res, Def); - Set_Base_Type (Res, Get_Base_Type (Type_Mark)); + Set_Parent_Type (Res, Type_Mark); Set_Resolution_Indication (Res, Get_Resolution_Indication (Def)); A_Range := Get_Range_Constraint (Def); if A_Range = Null_Iir then @@ -2324,7 +2313,7 @@ package body Vhdl.Sem_Types is (Def, Base_Type, Null_Iir); Res := Create_Iir (Iir_Kind_Access_Subtype_Definition); Location_Copy (Res, Def); - Set_Base_Type (Res, Type_Mark); + Set_Parent_Type (Res, Type_Mark); Set_Designated_Subtype_Indication (Res, Sub_Type); Set_Signal_Type_Flag (Res, False); @@ -2409,7 +2398,6 @@ package body Vhdl.Sem_Types is Type_Mark := Sem_Type_Mark (Def, Incomplete); return Type_Mark; when Iir_Kind_Error => - Set_Base_Type (Def, Def); return Def; when others => null; @@ -2529,7 +2517,7 @@ package body Vhdl.Sem_Types is Location_Copy (St_Def, Def); Set_Index_Subtype_List (St_Def, Get_Index_Subtype_List (Def)); Set_Element_Subtype (St_Def, Get_Element_Subtype (Br_Def)); - Set_Base_Type (St_Def, Get_Base_Type (Br_Def)); + Set_Parent_Type (St_Def, Br_Def); Set_Type_Staticness (St_Def, Get_Nature_Staticness (Def)); Set_Constraint_State (St_Def, Get_Constraint_State (Def)); Set_Type_Declarator (St_Def, Get_Nature_Declarator (Def)); @@ -2636,7 +2624,6 @@ package body Vhdl.Sem_Types is Arr := Create_Iir (Iir_Kind_Array_Type_Definition); Location_Copy (Arr, Def); Set_Index_Subtype_List (Arr, Get_Index_Subtype_List (Def)); - Set_Base_Type (Arr, Arr); Set_Type_Staticness (Arr, None); Set_Type_Declarator (Arr, Decl); Set_Element_Subtype (Arr, Get_Branch_Type (El_Nat, I)); @@ -2748,7 +2735,6 @@ package body Vhdl.Sem_Types is St_Def := Create_Iir (Iir_Kind_Record_Type_Definition); Location_Copy (St_Def, Def); Set_Type_Declarator (St_Def, Decl); - Set_Base_Type (St_Def, St_Def); St_List := Create_Iir_Flist (Get_Nbr_Elements (El_List)); Set_Elements_Declaration_List (St_Def, St_List); Staticness := Locally; diff --git a/src/vhdl/vhdl-std_package.adb b/src/vhdl/vhdl-std_package.adb index c9d1ce938..5fa8fc2fd 100644 --- a/src/vhdl/vhdl-std_package.adb +++ b/src/vhdl/vhdl-std_package.adb @@ -261,7 +261,6 @@ package body Vhdl.Std_Package is begin --Integer_Type_Definition := -- Create_Std_Iir (Iir_Kind_Integer_Type_Definition); - Set_Base_Type (Type_Definition, Type_Definition); Set_Type_Staticness (Type_Definition, Locally); Set_Signal_Type_Flag (Type_Definition, True); Set_Has_Signal_Flag (Type_Definition, not Flags.Flag_Whole_Analyze); @@ -282,7 +281,7 @@ package body Vhdl.Std_Package is begin Subtype_Definition := Create_Std_Iir (Iir_Kind_Integer_Subtype_Definition); - Set_Base_Type (Subtype_Definition, Type_Definition); + Set_Parent_Type (Subtype_Definition, Type_Definition); Constraint := Create_Std_Range_Expr (Create_Std_Integer (Low_Bound (Is_64), Universal_Integer_Type_Definition), @@ -316,7 +315,6 @@ package body Vhdl.Std_Package is Index := Create_Std_Type_Mark (Natural_Subtype_Declaration); Def := Create_Std_Iir (Iir_Kind_Array_Type_Definition); - Set_Base_Type (Def, Def); Index_List := Create_Iir_Flist (1); Set_Index_Subtype_Definition_List (Def, Index_List); @@ -403,7 +401,6 @@ package body Vhdl.Std_Package is begin Decl := Create_Std_Decl (Iir_Kind_Type_Declaration); Set_Identifier (Decl, Name_Table.Get_Identifier (Name)); - Set_Base_Type (Def, Def); Set_Type_Staticness (Def, None); Set_Type_Definition (Decl, Def); Set_Type_Declarator (Def, Decl); @@ -462,7 +459,6 @@ package body Vhdl.Std_Package is -- (false, true) Boolean_Type_Definition := Create_Std_Iir (Iir_Kind_Enumeration_Type_Definition); - Set_Base_Type (Boolean_Type_Definition, Boolean_Type_Definition); Set_Enumeration_Literal_List (Boolean_Type_Definition, Create_Iir_Flist (2)); Boolean_False := Create_Std_Literal @@ -501,7 +497,6 @@ package body Vhdl.Std_Package is Create_Std_Iir (Iir_Kind_Enumeration_Type_Definition); Set_Enumeration_Literal_List (Bit_Type_Definition, Create_Iir_Flist (2)); - Set_Base_Type (Bit_Type_Definition, Bit_Type_Definition); Set_Is_Character_Type (Bit_Type_Definition, True); Bit_0 := Create_Std_Literal (Get_Std_Character ('0'), 0, Bit_Type_Definition); @@ -540,7 +535,6 @@ package body Vhdl.Std_Package is begin Character_Type_Definition := Create_Std_Iir (Iir_Kind_Enumeration_Type_Definition); - Set_Base_Type (Character_Type_Definition, Character_Type_Definition); Set_Is_Character_Type (Character_Type_Definition, True); if Vhdl_Std = Vhdl_87 then Len := 128; @@ -592,8 +586,6 @@ package body Vhdl.Std_Package is -- (note, warning, error, failure) Severity_Level_Type_Definition := Create_Std_Iir (Iir_Kind_Enumeration_Type_Definition); - Set_Base_Type (Severity_Level_Type_Definition, - Severity_Level_Type_Definition); Set_Enumeration_Literal_List (Severity_Level_Type_Definition, Create_Iir_Flist (4)); Set_Scalar_Size (Severity_Level_Type_Definition, Scalar_8); @@ -652,8 +644,6 @@ package body Vhdl.Std_Package is declare Constraint : Iir_Range_Expression; begin - Set_Base_Type (Universal_Real_Type_Definition, - Universal_Real_Type_Definition); Set_Type_Staticness (Universal_Real_Type_Definition, Locally); Set_Signal_Type_Flag (Universal_Real_Type_Definition, True); Set_Has_Signal_Flag (Universal_Real_Type_Definition, False); @@ -670,8 +660,8 @@ package body Vhdl.Std_Package is Universal_Real_Subtype_Definition := Create_Std_Iir (Iir_Kind_Floating_Subtype_Definition); - Set_Base_Type (Universal_Real_Subtype_Definition, - Universal_Real_Type_Definition); + Set_Parent_Type (Universal_Real_Subtype_Definition, + Universal_Real_Type_Definition); Constraint := Create_Std_Range_Expr (Create_Std_Fp (Fp64'First, Universal_Real_Type_Definition), Create_Std_Fp (Fp64'Last, Universal_Real_Type_Definition), @@ -718,8 +708,6 @@ package body Vhdl.Std_Package is end; begin - Set_Base_Type (Convertible_Real_Type_Definition, - Convertible_Real_Type_Definition); Set_Type_Staticness (Convertible_Real_Type_Definition, Locally); Set_Signal_Type_Flag (Convertible_Real_Type_Definition, True); Set_Has_Signal_Flag (Convertible_Real_Type_Definition, False); @@ -772,7 +760,6 @@ package body Vhdl.Std_Package is begin Real_Type_Definition := Create_Std_Iir (Iir_Kind_Floating_Type_Definition); - Set_Base_Type (Real_Type_Definition, Real_Type_Definition); Set_Type_Staticness (Real_Type_Definition, Locally); Set_Signal_Type_Flag (Real_Type_Definition, True); Set_Has_Signal_Flag (Real_Type_Definition, @@ -790,7 +777,7 @@ package body Vhdl.Std_Package is Real_Subtype_Definition := Create_Std_Iir (Iir_Kind_Floating_Subtype_Definition); - Set_Base_Type (Real_Subtype_Definition, Real_Type_Definition); + Set_Parent_Type (Real_Subtype_Definition, Real_Type_Definition); Constraint := Create_Std_Range_Expr (Create_Std_Fp (Fp64'First, Universal_Real_Type_Definition), Create_Std_Fp (Fp64'Last, Universal_Real_Type_Definition), @@ -878,7 +865,6 @@ package body Vhdl.Std_Package is Time_Type_Definition := Create_Std_Iir (Iir_Kind_Physical_Type_Definition); - Set_Base_Type (Time_Type_Definition, Time_Type_Definition); Set_Type_Staticness (Time_Type_Definition, Locally);--Time_Staticness Set_Signal_Type_Flag (Time_Type_Definition, True); Set_Has_Signal_Flag (Time_Type_Definition, @@ -932,7 +918,7 @@ package body Vhdl.Std_Package is Time_Fs_Unit), Time_Type_Definition); Set_Range_Constraint (Time_Subtype_Definition, Constraint); - Set_Base_Type (Time_Subtype_Definition, Time_Type_Definition); + Set_Parent_Type (Time_Subtype_Definition, Time_Type_Definition); --Set_Subtype_Type_Mark (Time_Subtype_Definition, -- Time_Type_Definition); Set_Type_Staticness (Time_Subtype_Definition, Time_Staticness); @@ -967,7 +953,7 @@ package body Vhdl.Std_Package is Time_Fs_Unit), Time_Type_Definition); Set_Range_Constraint (Delay_Length_Subtype_Definition, Constraint); - Set_Base_Type + Set_Parent_Type (Delay_Length_Subtype_Definition, Time_Type_Definition); Set_Type_Staticness (Delay_Length_Subtype_Definition, Time_Staticness); @@ -999,8 +985,6 @@ package body Vhdl.Std_Package is if AMS_Vhdl then Domain_Type_Type_Definition := Create_Std_Iir (Iir_Kind_Enumeration_Type_Definition); - Set_Base_Type (Domain_Type_Type_Definition, - Domain_Type_Type_Definition); Set_Enumeration_Literal_List (Domain_Type_Type_Definition, Create_Iir_Flist (3)); Set_Scalar_Size (Domain_Type_Type_Definition, Scalar_8); @@ -1119,7 +1103,7 @@ package body Vhdl.Std_Package is begin Natural_Subtype_Definition := Create_Std_Iir (Iir_Kind_Integer_Subtype_Definition); - Set_Base_Type (Natural_Subtype_Definition, Integer_Type_Definition); + Set_Parent_Type (Natural_Subtype_Definition, Integer_Type_Definition); Set_Subtype_Type_Mark (Natural_Subtype_Definition, Create_Std_Type_Mark (Integer_Subtype_Declaration)); @@ -1151,8 +1135,8 @@ package body Vhdl.Std_Package is begin Positive_Subtype_Definition := Create_Std_Iir (Iir_Kind_Integer_Subtype_Definition); - Set_Base_Type (Positive_Subtype_Definition, - Integer_Type_Definition); + Set_Parent_Type (Positive_Subtype_Definition, + Integer_Type_Definition); Set_Subtype_Type_Mark (Positive_Subtype_Definition, Create_Std_Type_Mark (Integer_Subtype_Declaration)); @@ -1188,7 +1172,6 @@ package body Vhdl.Std_Package is String_Type_Definition := Create_Std_Iir (Iir_Kind_Array_Type_Definition); - Set_Base_Type (String_Type_Definition, String_Type_Definition); Index_List := Create_Iir_Flist (1); Set_Nth_Element (Index_List, 0, Create_Std_Type_Mark (Positive_Subtype_Declaration)); @@ -1263,8 +1246,6 @@ package body Vhdl.Std_Package is if Vhdl_Std >= Vhdl_93 then File_Open_Kind_Type_Definition := Create_Std_Iir (Iir_Kind_Enumeration_Type_Definition); - Set_Base_Type (File_Open_Kind_Type_Definition, - File_Open_Kind_Type_Definition); Set_Enumeration_Literal_List (File_Open_Kind_Type_Definition, Create_Iir_Flist (3)); Set_Scalar_Size (File_Open_Kind_Type_Definition, Scalar_8); @@ -1302,8 +1283,6 @@ package body Vhdl.Std_Package is if Vhdl_Std >= Vhdl_93 then File_Open_Status_Type_Definition := Create_Std_Iir (Iir_Kind_Enumeration_Type_Definition); - Set_Base_Type (File_Open_Status_Type_Definition, - File_Open_Status_Type_Definition); Set_Enumeration_Literal_List (File_Open_Status_Type_Definition, Create_Iir_Flist (4)); Set_Scalar_Size (File_Open_Status_Type_Definition, Scalar_8); diff --git a/src/vhdl/vhdl-utils.adb b/src/vhdl/vhdl-utils.adb index 116d3dcb1..030889fc5 100644 --- a/src/vhdl/vhdl-utils.adb +++ b/src/vhdl/vhdl-utils.adb @@ -992,6 +992,41 @@ package body Vhdl.Utils is end if; end Clear_Seen_Flag; + function Get_Base_Type (Atype : Iir) return Iir + is + Res : Iir; + begin + Res := Atype; + loop + case Get_Kind (Res) is + when Iir_Kind_Access_Type_Definition + | Iir_Kind_Integer_Type_Definition + | Iir_Kind_Floating_Type_Definition + | Iir_Kind_Enumeration_Type_Definition + | Iir_Kind_Physical_Type_Definition + | Iir_Kind_Array_Type_Definition + | Iir_Kind_Record_Type_Definition + | Iir_Kind_Protected_Type_Declaration + | Iir_Kind_File_Type_Definition + | Iir_Kind_Incomplete_Type_Definition + | Iir_Kind_Interface_Type_Definition + | Iir_Kind_Wildcard_Type_Definition + | Iir_Kind_Error => + return Res; + when Iir_Kind_Access_Subtype_Definition + | Iir_Kind_Integer_Subtype_Definition + | Iir_Kind_Floating_Subtype_Definition + | Iir_Kind_Enumeration_Subtype_Definition + | Iir_Kind_Physical_Subtype_Definition + | Iir_Kind_Array_Subtype_Definition + | Iir_Kind_Record_Subtype_Definition => + Res := Get_Parent_Type (Res); + when others => + Error_Kind ("get_base_type", Res); + end case; + end loop; + end Get_Base_Type; + function Is_Anonymous_Type_Definition (Def : Iir) return Boolean is begin return Get_Type_Declarator (Def) = Null_Iir; @@ -1284,17 +1319,6 @@ package body Vhdl.Utils is end if; end Get_Denoted_Type_Mark; - function Get_Parent_Type (Subtyp : Iir) return Iir - is - Type_Mark_Name : constant Iir := Get_Subtype_Type_Mark (Subtyp); - begin - if Type_Mark_Name = Null_Iir then - return Get_Base_Type (Subtyp); - else - return Get_Type (Get_Named_Entity (Type_Mark_Name)); - end if; - end Get_Parent_Type; - function Get_Base_Element_Declaration (El : Iir) return Iir is Rec_Type : constant Iir := Get_Base_Type (Get_Parent (El)); @@ -1625,7 +1649,7 @@ package body Vhdl.Utils is begin Res := Create_Iir (Iir_Kind_Array_Subtype_Definition); Set_Location (Res, Loc); - Set_Base_Type (Res, Base_Type); + Set_Parent_Type (Res, Base_Type); Set_Element_Subtype (Res, El_Type); if Get_Kind (Arr_Type) = Iir_Kind_Array_Subtype_Definition then Set_Resolution_Indication (Res, Get_Resolution_Indication (Arr_Type)); @@ -1705,7 +1729,6 @@ package body Vhdl.Utils is begin Res := Create_Error (Orig); --Set_Expr_Staticness (Res, Locally); - Set_Base_Type (Res, Res); Set_Type_Declarator (Res, Null_Iir); Set_Resolved_Flag (Res, True); Set_Signal_Type_Flag (Res, True); diff --git a/src/vhdl/vhdl-utils.ads b/src/vhdl/vhdl-utils.ads index 6712aa0fa..5cbdc8c25 100644 --- a/src/vhdl/vhdl-utils.ads +++ b/src/vhdl/vhdl-utils.ads @@ -160,6 +160,10 @@ package Vhdl.Utils is -- Clear flag of TOP and all of its callees. procedure Clear_Seen_Flag (Top : Iir); + -- Return the base type of ATYPE. Will always return ATYPE if ATYPE is + -- a proper type (and not a subtype). + function Get_Base_Type (Atype : Iir) return Iir; + -- Return TRUE iff DEF is an anonymous type (or subtype) definition. -- Note: DEF is required to be a type (or subtype) definition. -- Note: type (and not subtype) are never anonymous. @@ -263,10 +267,6 @@ package Vhdl.Utils is -- Return the type or subtype definition of the SUBTYP type mark. function Get_Denoted_Type_Mark (Subtyp : Iir) return Iir; - -- Return the parent type, which is either the type of the type mark, or - -- the base type if SUBTYP has no type mark. - function Get_Parent_Type (Subtyp : Iir) return Iir; - -- From element declaration or element constraint EL, get the corresponding -- element declaration in the base record type. function Get_Base_Element_Declaration (El : Iir) return Iir; |