diff options
author | Tristan Gingold <tgingold@free.fr> | 2017-06-09 06:09:23 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2017-06-09 06:09:23 +0200 |
commit | 6d21f84aeb96107be1405d57a6d93e6155fb1fd6 (patch) | |
tree | 631d8a93da16b35e9395fcadd4a4be461f0afbb7 /src | |
parent | 8ec8bb9835e4d895048678d2854381419c1a3175 (diff) | |
download | ghdl-6d21f84aeb96107be1405d57a6d93e6155fb1fd6.tar.gz ghdl-6d21f84aeb96107be1405d57a6d93e6155fb1fd6.tar.bz2 ghdl-6d21f84aeb96107be1405d57a6d93e6155fb1fd6.zip |
vpi: CbNextSimTime is one-shot.
Fix #281
Diffstat (limited to 'src')
-rw-r--r-- | src/grt/grt-vpi.adb | 78 |
1 files changed, 42 insertions, 36 deletions
diff --git a/src/grt/grt-vpi.adb b/src/grt/grt-vpi.adb index 5cb72f768..52a06c6d2 100644 --- a/src/grt/grt-vpi.adb +++ b/src/grt/grt-vpi.adb @@ -1315,7 +1315,7 @@ package body Grt.Vpi is Call_Callback'Access, To_Address (Res)); when cbNextSimTime => Register_Callback - (Cb_Next_Time_Step, Res.Cb_Handle, Repeat, + (Cb_Next_Time_Step, Res.Cb_Handle, Oneshot, Call_Callback'Access, To_Address (Res)); when others => dbgPut_Line ("vpi_register_cb: unknown reason"); @@ -1330,6 +1330,46 @@ package body Grt.Vpi is return Res; end vpi_register_cb; + -- int vpi_remove_cb(vpiHandle ref) + function vpi_remove_cb (Ref : vpiHandle) return Integer + is + Ref_Copy : vpiHandle; + Res : Integer; + begin + if Flag_Trace then + Trace_Start ("vpi_remove_cb ("); + Trace (Ref); + Trace (") = "); + end if; + + Res := 1; + Ref_Copy := Ref; + case Ref.Cb.Reason is + when cbValueChange => + Delete_Callback (Ref.Cb_Handle); + when cbReadWriteSynch + | cbReadOnlySynch => + Delete_Callback (Ref.Cb_Handle); + when others => + Res := 0; + Ref_Copy := null; + end case; + + if Flag_Trace then + if Ref_Copy = null then + Trace ("[not free] "); + else + Trace ("[free] "); + end if; + Trace (Res); + Trace_Newline; + end if; + + Free (Ref_Copy); + + return Res; + end vpi_remove_cb; + -- int vpi_free_object(vpiHandle ref) function vpi_free_object (aRef: vpiHandle) return integer is @@ -1342,7 +1382,7 @@ package body Grt.Vpi is Trace_Newline; end if; Ref_Copy := aRef; - Free(Ref_Copy); + Free (Ref_Copy); return 1; end vpi_free_object; @@ -1551,40 +1591,6 @@ package body Grt.Vpi is return null; end vpi_register_systf; - -- int vpi_remove_cb(vpiHandle ref) - function vpi_remove_cb (Ref : vpiHandle) return Integer - is - Ref_Copy : vpiHandle; - Res : Integer; - begin - if Flag_Trace then - Trace_Start ("vpi_remove_cb ("); - Trace (Ref); - Trace (") = "); - end if; - - Res := 1; - Ref_Copy := Ref; - case Ref.Cb.Reason is - when cbValueChange => - Delete_Callback (Ref.Cb_Handle); - when cbReadWriteSynch - | cbReadOnlySynch => - Delete_Callback (Ref.Cb_Handle); - when others => - Res := 0; - Ref_Copy := null; - end case; - Free (Ref_Copy); - - if Flag_Trace then - Trace (Res); - Trace_Newline; - end if; - - return Res; - end vpi_remove_cb; - -- missing here, see grt-cvpi.c: -- vpi_mcd_open_x -- vpi_mcd_vprintf |