aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/translate/trans-chap9.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2017-11-11 08:48:28 +0100
committerTristan Gingold <tgingold@free.fr>2017-11-11 08:48:28 +0100
commite8a21ffe5226aad4970bd1facd4a3464a4b436f1 (patch)
tree6dabc27375bc31dbd435d50a98dc223fa4145ac2 /src/vhdl/translate/trans-chap9.adb
parent9a90393e30827308ec6cd834963f5359158115a0 (diff)
downloadghdl-e8a21ffe5226aad4970bd1facd4a3464a4b436f1.tar.gz
ghdl-e8a21ffe5226aad4970bd1facd4a3464a4b436f1.tar.bz2
ghdl-e8a21ffe5226aad4970bd1facd4a3464a4b436f1.zip
Rework list implementation, use iterator.
Diffstat (limited to 'src/vhdl/translate/trans-chap9.adb')
-rw-r--r--src/vhdl/translate/trans-chap9.adb15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/vhdl/translate/trans-chap9.adb b/src/vhdl/translate/trans-chap9.adb
index 0b2d3dc2a..3948bbe0b 100644
--- a/src/vhdl/translate/trans-chap9.adb
+++ b/src/vhdl/translate/trans-chap9.adb
@@ -241,6 +241,7 @@ package body Trans.Chap9 is
Info : Ortho_Info_Acc;
Drivers : Iir_List;
+ It : List_Iterator;
Nbr_Drivers : Natural;
Sig : Iir;
begin
@@ -273,8 +274,10 @@ package body Trans.Chap9 is
Nbr_Drivers := Get_Nbr_Elements (Drivers);
Info.Process_Drivers := new Direct_Driver_Arr (1 .. Nbr_Drivers);
+ It := List_Iterate (Drivers);
for I in 1 .. Nbr_Drivers loop
- Sig := Get_Nth_Element (Drivers, I - 1);
+ pragma Assert (Is_Valid (It));
+ Sig := Get_Element (It);
Info.Process_Drivers (I) := (Sig => Sig, Var => Null_Var);
Sig := Get_Object_Prefix (Sig);
pragma Assert
@@ -288,7 +291,9 @@ package body Trans.Chap9 is
-- Do not create driver severals times.
Set_After_Drivers_Flag (Sig, True);
end if;
+ Next (It);
end loop;
+ pragma Assert (not Is_Valid (It));
Trans_Analyzes.Free_Drivers_List (Drivers);
end if;
Pop_Instance_Factory (Info.Process_Scope'Access);
@@ -1112,16 +1117,18 @@ package body Trans.Chap9 is
procedure Destroy_Types_In_List (L : Iir_List)
is
El : Iir;
+ It : List_Iterator;
begin
case L is
when Null_Iir_List
| Iir_List_All =>
return;
when others =>
- for I in Natural loop
- El := Get_Nth_Element (L, I);
- exit when El = Null_Iir;
+ It := List_Iterate (L);
+ while Is_Valid (It) loop
+ El := Get_Element (It);
Destroy_Types (El);
+ Next (It);
end loop;
end case;
end Destroy_Types_In_List;