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:
Simon Cruanes 2022-07-20 21:40:04 -04:00
parent e1a4ce587f
commit b10aaf05f2
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4
3 changed files with 7 additions and 0 deletions

View file

@ -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);

View file

@ -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)

View file

@ -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