aboutsummaryrefslogtreecommitdiffstats
path: root/src/simul/simul-vhdl_elab.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-09-23 06:42:28 +0200
committerTristan Gingold <tgingold@free.fr>2022-09-25 11:43:25 +0200
commitaf3ca558ccec3cace3277b9d2bb12eeadf39559e (patch)
treebcc6fab7ef54c2eda09ff8d0978addc49cc10ddd /src/simul/simul-vhdl_elab.adb
parent96a6ff85e12df24e9623ad8d948edbea1328d061 (diff)
downloadghdl-af3ca558ccec3cace3277b9d2bb12eeadf39559e.tar.gz
ghdl-af3ca558ccec3cace3277b9d2bb12eeadf39559e.tar.bz2
ghdl-af3ca558ccec3cace3277b9d2bb12eeadf39559e.zip
simul: reuse drivers extraction from elaboration
Diffstat (limited to 'src/simul/simul-vhdl_elab.adb')
-rw-r--r--src/simul/simul-vhdl_elab.adb10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/simul/simul-vhdl_elab.adb b/src/simul/simul-vhdl_elab.adb
index b00cba063..ae8b555ec 100644
--- a/src/simul/simul-vhdl_elab.adb
+++ b/src/simul/simul-vhdl_elab.adb
@@ -385,7 +385,7 @@ package body Simul.Vhdl_Elab is
(Inst : Synth_Instance_Acc; Proc : Node; Proc_Idx : Process_Index_Type)
is
use Synth.Vhdl_Stmts;
- Marker : Mark_Type;
+ Expr_Marker : Mark_Type;
Driver_List: Iir_List;
It : List_Iterator;
Sig : Node;
@@ -394,7 +394,8 @@ package body Simul.Vhdl_Elab is
Typ : Type_Acc;
Off : Value_Offsets;
begin
- Mark_Expr_Pool (Marker);
+ Mark_Expr_Pool (Expr_Marker);
+ Instance_Pool := Process_Pool'Access;
Driver_List := Trans_Analyzes.Extract_Drivers (Proc);
It := List_Iterate_Safe (Driver_List);
@@ -405,12 +406,15 @@ package body Simul.Vhdl_Elab is
Base := Base_Vt.Val.S;
Typ := Unshare (Typ, Global_Pool'Access);
+ Release_Expr_Pool (Expr_Marker);
+ pragma Assert (Areapools.Is_Empty (Instance_Pool.all));
+
Add_Process_Driver (Proc_Idx, Base, Off, Typ, Sig);
Next (It);
end loop;
+ Instance_Pool := null;
Trans_Analyzes.Free_Drivers_List (Driver_List);
- Release_Expr_Pool (Marker);
end Gather_Process_Drivers;
procedure Gather_Sensitivity (Inst : Synth_Instance_Acc;