From 2712368c3b76fcfb99d2558f84d5cb1716ea43f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Tue, 17 Jan 2023 12:07:58 +0100
Subject: [PATCH] [kernel] New hook called at each update of a property status.

---
 src/kernel_services/ast_data/property_status.ml  | 8 ++++++++
 src/kernel_services/ast_data/property_status.mli | 5 +++++
 2 files changed, 13 insertions(+)

diff --git a/src/kernel_services/ast_data/property_status.ml b/src/kernel_services/ast_data/property_status.ml
index 26eba1a5c8a..44387df98db 100644
--- a/src/kernel_services/ast_data/property_status.ml
+++ b/src/kernel_services/ast_data/property_status.ml
@@ -392,6 +392,13 @@ module Register_hook = Hook.Build (struct type t = Property.t end)
 
 let register_property_add_hook = Register_hook.extend
 
+module Status_hook = Hook.Build
+    (struct type t = emitter_with_properties * Property.t * emitted_status end)
+
+let register_status_update_hook f =
+  Status_hook.extend
+    (fun (emitter, property, status) -> f emitter property status)
+
 let rec register ppt =
   Kernel.debug ~dkey:Kernel.dkey_prop_status_reg
     "REGISTERING %a in %a"
@@ -486,6 +493,7 @@ and unsafe_emit_and_get e ~hyps ~auto ppt ?(distinct=false) s =
             add { emitter with properties = [ reach_ppt ] } s
           | _ :: _ -> Kernel.fatal "Emitter %a proves invalidity of %a under \
                                     hypotheses: unsound!" Emitter.pretty e Property.pretty ppt));
+      Status_hook.apply (emitter, ppt, s);
       s
     in
     (try
diff --git a/src/kernel_services/ast_data/property_status.mli b/src/kernel_services/ast_data/property_status.mli
index bbe2f162668..a16f5bcbfb5 100644
--- a/src/kernel_services/ast_data/property_status.mli
+++ b/src/kernel_services/ast_data/property_status.mli
@@ -138,6 +138,11 @@ val fold_on_statuses:
   Property.t ->
   'a -> 'a
 
+val register_status_update_hook:
+  (emitter_with_properties -> Property.t -> emitted_status -> unit) -> unit
+(** Registers an hook to be called each time a property status is emitted.
+    @since Frama-C+dev *)
+
 (* ************************************************************************ *)
 (** {2 Consolidated status} *)
 (* ************************************************************************ *)
-- 
GitLab