mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-06 11:15:43 -05:00
wip: expose bug caused by order of event handlers
if plugin data is updated before `Th_data.on_pre_merge` is called, it never has a chance to observe the un-merged data and react accordingly. we need to ensure that all handlers see the same data before any change is made.
This commit is contained in:
parent
e1a4ce587f
commit
b10aaf05f2
3 changed files with 7 additions and 0 deletions
|
|
@ -779,6 +779,7 @@ module Make (A : ARG) : S with module A = A = struct
|
||||||
Log.debugf 1 (fun k -> k "(setup :%s)" name);
|
Log.debugf 1 (fun k -> k "(setup :%s)" name);
|
||||||
SI.on_preprocess solver (preprocess self);
|
SI.on_preprocess solver (preprocess self);
|
||||||
SI.on_cc_new_term solver (on_new_term self);
|
SI.on_cc_new_term solver (on_new_term self);
|
||||||
|
(* note: this needs to happen before we modify the plugin data *)
|
||||||
SI.on_cc_pre_merge solver (on_pre_merge self);
|
SI.on_cc_pre_merge solver (on_pre_merge self);
|
||||||
SI.on_final_check solver (on_final_check self);
|
SI.on_final_check solver (on_final_check self);
|
||||||
SI.on_model solver ~ask:(on_model_gen self);
|
SI.on_model solver ~ask:(on_model_gen self);
|
||||||
|
|
|
||||||
|
|
@ -130,6 +130,11 @@ let iter ~f t =
|
||||||
f (Array.unsafe_get t.data i)
|
f (Array.unsafe_get t.data i)
|
||||||
done
|
done
|
||||||
|
|
||||||
|
let rev_iter ~f t =
|
||||||
|
for i = size t - 1 downto 0 do
|
||||||
|
f (Array.unsafe_get t.data i)
|
||||||
|
done
|
||||||
|
|
||||||
let iteri ~f t =
|
let iteri ~f t =
|
||||||
for i = 0 to size t - 1 do
|
for i = 0 to size t - 1 do
|
||||||
f i (Array.unsafe_get t.data i)
|
f i (Array.unsafe_get t.data i)
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ val sort : 'a t -> ('a -> 'a -> int) -> unit
|
||||||
val iter : f:('a -> unit) -> 'a t -> unit
|
val iter : f:('a -> unit) -> 'a t -> unit
|
||||||
(** Iterate on elements *)
|
(** Iterate on elements *)
|
||||||
|
|
||||||
|
val rev_iter : f:('a -> unit) -> 'a t -> unit
|
||||||
val to_iter : 'a t -> 'a Iter.t
|
val to_iter : 'a t -> 'a Iter.t
|
||||||
|
|
||||||
val iteri : f:(int -> 'a -> unit) -> 'a t -> unit
|
val iteri : f:(int -> 'a -> unit) -> 'a t -> unit
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue