diff options
-rw-r--r-- | src/vhdl/translate/trans-chap3.adb | 65 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap3.ads | 2 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap6.adb | 41 |
3 files changed, 52 insertions, 56 deletions
diff --git a/src/vhdl/translate/trans-chap3.adb b/src/vhdl/translate/trans-chap3.adb index 09217025d..fb7a53aeb 100644 --- a/src/vhdl/translate/trans-chap3.adb +++ b/src/vhdl/translate/trans-chap3.adb @@ -36,7 +36,7 @@ package body Trans.Chap3 is function Create_Static_Type_Definition_Type_Range (Def : Iir) return O_Cnode; - procedure Create_Scalar_Type_Range (Def : Iir; Target : O_Lnode); + procedure Elab_Scalar_Type_Range (Def : Iir; Target : O_Lnode); -- For scalar subtypes: creates info from the base type. procedure Create_Subtype_Info_From_Type (Def : Iir; @@ -625,7 +625,7 @@ package body Trans.Chap3 is return Res; end Create_Static_Composite_Subtype_Bounds; - procedure Create_Composite_Subtype_Bounds (Def : Iir; Target : O_Lnode) + procedure Elab_Composite_Subtype_Bounds (Def : Iir; Target : O_Lnode) is Info : constant Type_Info_Acc := Get_Info (Def); Base_Type : constant Iir := Get_Base_Type (Def); @@ -684,7 +684,7 @@ package body Trans.Chap3 is El := Get_Nth_Element (El_List, I); El_Info := Get_Info (Get_Base_Element_Declaration (El)); if El_Info.Field_Bound /= O_Fnode_Null then - Create_Composite_Subtype_Bounds + Elab_Composite_Subtype_Bounds (Get_Type (El), New_Selected_Element (M2Lv (Targ), El_Info.Field_Bound)); @@ -693,21 +693,21 @@ package body Trans.Chap3 is end; when others => - Error_Kind ("create_composite_subtype_bounds", Def); + Error_Kind ("elab_composite_subtype_bounds", Def); end case; Close_Temp; - end Create_Composite_Subtype_Bounds; + end Elab_Composite_Subtype_Bounds; - procedure Create_Composite_Subtype_Bounds (Def : Iir) + procedure Elab_Composite_Subtype_Bounds (Def : Iir) is Info : constant Type_Info_Acc := Get_Info (Def); begin if not Info.S.Static_Bounds then - Create_Composite_Subtype_Bounds + Elab_Composite_Subtype_Bounds (Def, Get_Var (Info.S.Composite_Bounds)); end if; - end Create_Composite_Subtype_Bounds; + end Elab_Composite_Subtype_Bounds; -- Create a variable containing the bounds for array subtype DEF. procedure Create_Composite_Subtype_Bounds_Var @@ -720,6 +720,7 @@ package body Trans.Chap3 is if Info.S.Composite_Bounds /= Null_Var then return; end if; + Base_Info := Get_Info (Get_Base_Type (Def)); if Are_Bounds_Locally_Static (Def) then Info.S.Static_Bounds := True; @@ -739,7 +740,7 @@ package body Trans.Chap3 is Info.S.Composite_Bounds := Create_Var (Create_Var_Identifier ("STB"), Base_Info.B.Bounds_Type); if Elab_Now then - Create_Composite_Subtype_Bounds (Def); + Elab_Composite_Subtype_Bounds (Def); end if; end if; end Create_Composite_Subtype_Bounds_Var; @@ -1848,7 +1849,7 @@ package body Trans.Chap3 is --------------- -- Create a type_range structure. - procedure Create_Scalar_Type_Range (Def : Iir; Target : O_Lnode) + procedure Elab_Scalar_Type_Range (Def : Iir; Target : O_Lnode) is T_Info : constant Type_Info_Acc := Get_Info (Get_Base_Type (Def)); begin @@ -1856,7 +1857,7 @@ package body Trans.Chap3 is (Lv2M (Target, T_Info, Mode_Value, T_Info.B.Range_Type, T_Info.B.Range_Ptr_Type), Get_Range_Constraint (Def), Def); - end Create_Scalar_Type_Range; + end Elab_Scalar_Type_Range; function Create_Static_Scalar_Type_Range (Def : Iir) return O_Cnode is begin @@ -1913,7 +1914,7 @@ package body Trans.Chap3 is end case; end Create_Static_Type_Definition_Type_Range; - procedure Create_Type_Definition_Type_Range (Def : Iir) + procedure Elab_Type_Definition_Type_Range (Def : Iir) is Target : O_Lnode; Info : Type_Info_Acc; @@ -1924,12 +1925,12 @@ package body Trans.Chap3 is Info := Get_Info (Def); if not Info.S.Same_Range then Target := Get_Var (Info.S.Range_Var); - Create_Scalar_Type_Range (Def, Target); + Elab_Scalar_Type_Range (Def, Target); end if; when Iir_Kind_Array_Subtype_Definition => if Get_Constraint_State (Def) = Fully_Constrained then - Create_Composite_Subtype_Bounds (Def); + Elab_Composite_Subtype_Bounds (Def); end if; when Iir_Kind_Array_Type_Definition => @@ -1941,7 +1942,7 @@ package body Trans.Chap3 is for I in Flist_First .. Flist_Last (Index_List) loop Index := Get_Index_Type (Index_List, I); if Is_Anonymous_Type_Definition (Index) then - Create_Type_Definition_Type_Range (Index); + Elab_Type_Definition_Type_Range (Index); end if; end loop; end; @@ -1950,7 +1951,7 @@ package body Trans.Chap3 is when Iir_Kind_Record_Subtype_Definition => Info := Get_Info (Def); if Info.S.Composite_Bounds /= Null_Var then - Create_Composite_Subtype_Bounds (Def); + Elab_Composite_Subtype_Bounds (Def); end if; when Iir_Kind_Access_Type_Definition @@ -1961,9 +1962,9 @@ package body Trans.Chap3 is return; when others => - Error_Kind ("create_type_definition_type_range", Def); + Error_Kind ("elab_type_definition_type_range", Def); end case; - end Create_Type_Definition_Type_Range; + end Elab_Type_Definition_Type_Range; -- Return TRUE iff LIT is equal to the high (IS_HI=TRUE) or low -- (IS_HI=false) limit of the base type of DEF. MODE is the mode of @@ -2110,9 +2111,9 @@ package body Trans.Chap3 is end if; end Create_Subtype_Info_From_Type; - procedure Create_Type_Definition_Size_Var (Def : Iir); + procedure Elab_Type_Definition_Size_Var (Def : Iir); - procedure Create_Record_Size_Var (Def : Iir; Kind : Object_Kind_Type) + procedure Elab_Record_Size_Var (Def : Iir; Kind : Object_Kind_Type) is Info : constant Type_Info_Acc := Get_Info (Def); List : constant Iir_Flist := Get_Elements_Declaration_List (Def); @@ -2177,9 +2178,9 @@ package body Trans.Chap3 is end if; New_Assign_Stmt (Get_Var (Info.C (Kind).Size_Var), Res); Close_Temp; - end Create_Record_Size_Var; + end Elab_Record_Size_Var; - procedure Create_Array_Size_Var (Def : Iir; Kind : Object_Kind_Type) + procedure Elab_Array_Size_Var (Def : Iir; Kind : Object_Kind_Type) is Info : constant Type_Info_Acc := Get_Info (Def); El_Type : constant Iir := Get_Element_Subtype (Def); @@ -2190,9 +2191,9 @@ package body Trans.Chap3 is Get_Array_Type_Length (Def), Chap3.Get_Object_Size (T2M (El_Type, Kind), El_Type)); New_Assign_Stmt (Get_Var (Info.C (Kind).Size_Var), Res); - end Create_Array_Size_Var; + end Elab_Array_Size_Var; - procedure Create_Type_Definition_Size_Var (Def : Iir) + procedure Elab_Type_Definition_Size_Var (Def : Iir) is Info : constant Type_Info_Acc := Get_Info (Def); begin @@ -2214,13 +2215,13 @@ package body Trans.Chap3 is -- No need to create a size var, the size is known. raise Internal_Error; when Type_Mode_Complex_Record => - Create_Record_Size_Var (Def, Kind); + Elab_Record_Size_Var (Def, Kind); when Type_Mode_Complex_Array => - Create_Array_Size_Var (Def, Kind); + Elab_Array_Size_Var (Def, Kind); end case; end if; end loop; - end Create_Type_Definition_Size_Var; + end Elab_Type_Definition_Size_Var; procedure Create_Type_Range_Var (Def : Iir) is @@ -2604,6 +2605,7 @@ package body Trans.Chap3 is -- Initialize the objects related to a type (type range and type -- descriptor). procedure Elab_Type_Definition (Def : Iir); + procedure Elab_Type_Definition_Depend is new Handle_Anonymous_Subtypes (Handle_A_Subtype => Elab_Type_Definition); procedure Elab_Type_Definition (Def : Iir) is @@ -2633,8 +2635,8 @@ package body Trans.Chap3 is Elab_Type_Definition_Depend (Def); - Create_Type_Definition_Type_Range (Def); - Create_Type_Definition_Size_Var (Def); + Elab_Type_Definition_Type_Range (Def); + Elab_Type_Definition_Size_Var (Def); end Elab_Type_Definition; procedure Translate_Subtype_Indication (Def : Iir; With_Vars : Boolean) @@ -2666,8 +2668,7 @@ package body Trans.Chap3 is return; end if; Push_Identifier_Prefix_Uniq (Mark); - Chap3.Translate_Subtype_Definition - (Def, Get_Base_Type (Def), With_Vars); + Chap3.Translate_Subtype_Definition (Def, Get_Base_Type (Def), With_Vars); Pop_Identifier_Prefix (Mark); end Translate_Anonymous_Subtype_Definition; @@ -3214,7 +3215,7 @@ package body Trans.Chap3 is end if; -- Force creation of variables. Chap3.Create_Composite_Subtype_Bounds_Var (Sub_Type, True); - Chap3.Create_Type_Definition_Size_Var (Sub_Type); + Chap3.Elab_Type_Definition_Size_Var (Sub_Type); Pop_Identifier_Prefix (Mark); end Create_Array_Subtype; diff --git a/src/vhdl/translate/trans-chap3.ads b/src/vhdl/translate/trans-chap3.ads index 2adeb629d..daed65d93 100644 --- a/src/vhdl/translate/trans-chap3.ads +++ b/src/vhdl/translate/trans-chap3.ads @@ -43,7 +43,6 @@ package Trans.Chap3 is procedure Translate_Type_Subprograms (Decl : Iir; Kind : Subprg_Translate_Kind); - procedure Create_Type_Definition_Type_Range (Def : Iir); function Create_Static_Composite_Subtype_Bounds (Def : Iir) return O_Cnode; -- Same as Translate_type_definition only for std.standard.boolean and @@ -72,7 +71,6 @@ package Trans.Chap3 is procedure Translate_Anonymous_Subtype_Definition (Def : Iir; With_Vars : Boolean); - -- Translate_type_definition_Elab do 4 and 6. -- It generates code to do type elaboration. procedure Elab_Type_Declaration (Decl : Iir); procedure Elab_Subtype_Declaration (Decl : Iir_Subtype_Declaration); diff --git a/src/vhdl/translate/trans-chap6.adb b/src/vhdl/translate/trans-chap6.adb index 6cad50223..08f7de26e 100644 --- a/src/vhdl/translate/trans-chap6.adb +++ b/src/vhdl/translate/trans-chap6.adb @@ -622,12 +622,10 @@ package body Trans.Chap6 is -- The bounds of a null slice may be out of range. So DIFF cannot -- be computed by substraction. Start_If_Stmt - (If_Blk, - New_Compare_Op - (ON_Eq, - M2E (Chap3.Range_To_Length (Slice_Range)), - New_Lit (Ghdl_Index_0), - Ghdl_Bool_Type)); + (If_Blk, New_Compare_Op (ON_Eq, + M2E (Chap3.Range_To_Length (Slice_Range)), + New_Lit (Ghdl_Index_0), + Ghdl_Bool_Type)); New_Assign_Stmt (New_Obj (Unsigned_Diff), New_Lit (Ghdl_Index_0)); New_Else_Stmt (If_Blk); Diff := Create_Temp (Index_Info.Ortho_Type (Mode_Value)); @@ -636,17 +634,17 @@ package body Trans.Chap6 is if not Static_Range then Start_If_Stmt (If_Blk1, New_Compare_Op (ON_Eq, - M2E (Chap3.Range_To_Dir (Slice_Range)), - New_Lit (Ghdl_Dir_To_Node), - Ghdl_Bool_Type)); + M2E (Chap3.Range_To_Dir (Slice_Range)), + New_Lit (Ghdl_Dir_To_Node), + Ghdl_Bool_Type)); end if; if not Static_Range or else Get_Direction (Expr_Range) = Iir_To then -- Diff = slice - bounds. New_Assign_Stmt (New_Obj (Diff), New_Dyadic_Op (ON_Sub_Ov, - M2E (Chap3.Range_To_Left (Slice_Range)), - M2E (Chap3.Range_To_Left (Prefix_Range)))); + M2E (Chap3.Range_To_Left (Slice_Range)), + M2E (Chap3.Range_To_Left (Prefix_Range)))); end if; if not Static_Range then New_Else_Stmt (If_Blk1); @@ -657,8 +655,8 @@ package body Trans.Chap6 is New_Assign_Stmt (New_Obj (Diff), New_Dyadic_Op (ON_Sub_Ov, - M2E (Chap3.Range_To_Left (Prefix_Range)), - M2E (Chap3.Range_To_Left (Slice_Range)))); + M2E (Chap3.Range_To_Left (Prefix_Range)), + M2E (Chap3.Range_To_Left (Slice_Range)))); end if; if not Static_Range then Finish_If_Stmt (If_Blk1); @@ -679,14 +677,14 @@ package body Trans.Chap6 is (ON_Lt, New_Obj_Value (Diff), New_Lit (New_Signed_Literal (Index_Info.Ortho_Type (Mode_Value), - 0)), + 0)), Ghdl_Bool_Type); -- Bounds error if right of slice is after right of prefix. Err_2 := New_Compare_Op (ON_Gt, New_Dyadic_Op (ON_Add_Ov, - New_Obj_Value (Unsigned_Diff), - M2E (Chap3.Range_To_Length (Slice_Range))), + New_Obj_Value (Unsigned_Diff), + M2E (Chap3.Range_To_Length (Slice_Range))), M2E (Chap3.Range_To_Length (Prefix_Range)), Ghdl_Bool_Type); Check_Bound_Error (New_Dyadic_Op (ON_Or, Err_1, Err_2), Expr, 1); @@ -714,8 +712,7 @@ package body Trans.Chap6 is begin if Data.Is_Off then return Chap3.Slice_Base - (Prefix, Slice_Type, New_Lit (New_Unsigned_Literal - (Ghdl_Index_Type, Data.Off))); + (Prefix, Slice_Type, New_Lit (New_Index_Lit (Data.Off))); else -- Create the result (fat array) and assign the bounds field. case Slice_Info.Type_Mode is @@ -727,11 +724,11 @@ package body Trans.Chap6 is New_Value (M2Lp (Data.Slice_Range))); New_Assign_Stmt (New_Selected_Element (New_Obj (Res_D), - Slice_Info.B.Base_Field (Kind)), + Slice_Info.B.Base_Field (Kind)), M2E (Chap3.Slice_Base - (Chap3.Get_Composite_Base (Prefix), - Slice_Type, - New_Obj_Value (Data.Unsigned_Diff)))); + (Chap3.Get_Composite_Base (Prefix), + Slice_Type, + New_Obj_Value (Data.Unsigned_Diff)))); return Dv2M (Res_D, Slice_Info, Kind); when Type_Mode_Bounded_Arrays => return Chap3.Slice_Base |