diff options
author | Tristan Gingold <tgingold@free.fr> | 2021-09-18 07:28:22 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2021-09-18 07:28:22 +0200 |
commit | 968de84e5b389ee4b1f08c4ca4fb8492c387ee32 (patch) | |
tree | 3764b687c35ddc1195c022ecb0128a5950e75b95 /src/vhdl/translate/trans-chap8.adb | |
parent | 1bff7434e2d2ace4da920b721ef989ad54974898 (diff) | |
download | ghdl-968de84e5b389ee4b1f08c4ca4fb8492c387ee32.tar.gz ghdl-968de84e5b389ee4b1f08c4ca4fb8492c387ee32.tar.bz2 ghdl-968de84e5b389ee4b1f08c4ca4fb8492c387ee32.zip |
trans-chap8.adb: refactoring and clean-up. For #1514
Diffstat (limited to 'src/vhdl/translate/trans-chap8.adb')
-rw-r--r-- | src/vhdl/translate/trans-chap8.adb | 51 |
1 files changed, 12 insertions, 39 deletions
diff --git a/src/vhdl/translate/trans-chap8.adb b/src/vhdl/translate/trans-chap8.adb index 35ff258cb..61da10c1d 100644 --- a/src/vhdl/translate/trans-chap8.adb +++ b/src/vhdl/translate/trans-chap8.adb @@ -401,69 +401,42 @@ package body Trans.Chap8 is end Translate_If_Statement; -- Inc or dec ITERATOR according to DIR. - procedure Gen_Update_Iterator_Common (Val : Unsigned_64; - Itype : Iir; - V : out O_Enode) + procedure Gen_Update_Iterator (Iterator : Var_Type; + Dir : Direction_Type; + Itype : Iir) is Base_Type : constant Iir := Get_Base_Type (Itype); + Op : ON_Op_Kind; + V : O_Enode; begin case Get_Kind (Base_Type) is when Iir_Kind_Integer_Type_Definition => V := New_Lit (New_Signed_Literal - (Get_Ortho_Type (Base_Type, Mode_Value), Integer_64 (Val))); + (Get_Ortho_Type (Base_Type, Mode_Value), 1)); when Iir_Kind_Enumeration_Type_Definition => declare List : constant Iir_Flist := Get_Enumeration_Literal_List (Base_Type); begin -- FIXME: what about type E is ('T') ?? - if Natural (Val) > Get_Nbr_Elements (List) then + if Get_Nbr_Elements (List) = 1 then raise Internal_Error; end if; - V := New_Lit - (Get_Ortho_Literal (Get_Nth_Element (List, Natural (Val)))); + V := New_Lit (Get_Ortho_Literal (Get_Nth_Element (List, 1))); end; when others => Error_Kind ("gen_update_iterator", Base_Type); end case; - end Gen_Update_Iterator_Common; - procedure Gen_Update_Iterator (Iterator : O_Dnode; - Dir : Direction_Type; - Val : Unsigned_64; - Itype : Iir) - is - Op : ON_Op_Kind; - V : O_Enode; - begin case Dir is when Dir_To => Op := ON_Add_Ov; when Dir_Downto => Op := ON_Sub_Ov; end case; - Gen_Update_Iterator_Common (Val, Itype, V); - New_Assign_Stmt (New_Obj (Iterator), - New_Dyadic_Op (Op, New_Obj_Value (Iterator), V)); - end Gen_Update_Iterator; - procedure Gen_Update_Iterator (Iterator : Var_Type; - Dir : Direction_Type; - Val : Unsigned_64; - Itype : Iir) - is - Op : ON_Op_Kind; - V : O_Enode; - begin - case Dir is - when Dir_To => - Op := ON_Add_Ov; - when Dir_Downto => - Op := ON_Sub_Ov; - end case; - Gen_Update_Iterator_Common (Val, Itype, V); New_Assign_Stmt (Get_Var (Iterator), New_Dyadic_Op (Op, New_Value (Get_Var (Iterator)), V)); end Gen_Update_Iterator; @@ -658,10 +631,10 @@ package body Trans.Chap8 is if Deep_Rng /= Null_Iir then if Get_Direction (Deep_Rng) = Dir_To xor Deep_Reverse then Gen_Update_Iterator (It_Info.Iterator_Var, - Dir_To, 1, Iter_Base_Type); + Dir_To, Iter_Base_Type); else Gen_Update_Iterator (It_Info.Iterator_Var, - Dir_Downto, 1, Iter_Base_Type); + Dir_Downto, Iter_Base_Type); end if; else Start_If_Stmt @@ -671,10 +644,10 @@ package body Trans.Chap8 is New_Lit (Ghdl_Dir_To_Node), Ghdl_Bool_Type)); Gen_Update_Iterator (It_Info.Iterator_Var, - Dir_To, 1, Iter_Base_Type); + Dir_To, Iter_Base_Type); New_Else_Stmt (If_Blk1); Gen_Update_Iterator (It_Info.Iterator_Var, - Dir_Downto, 1, Iter_Base_Type); + Dir_Downto, Iter_Base_Type); Finish_If_Stmt (If_Blk1); end if; end Update_For_Loop; |