@@ -45,12 +45,23 @@ type stats = {
4545 s_macros_called : int ref ;
4646}
4747
48+ let rec run_callbacks handle_error r v =
49+ match ! r with
50+ | [] ->
51+ ()
52+ | l ->
53+ r := [] ;
54+ List. iter (fun f -> try f v with Error. Error err -> handle_error err) (List. rev l);
55+ run_callbacks handle_error r v
56+
4857class compiler_callbacks = object (self )
4958 val before_typer_create = ref [] ;
5059 val after_init_macros = ref [] ;
5160 val mutable after_typing = [] ;
5261 val before_save = ref [] ;
5362 val after_save = ref [] ;
63+ val before_save_only_new = ref [] ;
64+ val after_save_only_new = ref [] ;
5465 val after_filters = ref [] ;
5566 val after_generation = ref [] ;
5667 val mutable null_safety_report = [] ;
@@ -70,6 +81,12 @@ class compiler_callbacks = object(self)
7081 method add_after_save (f : unit -> unit ) : unit =
7182 after_save := f :: ! after_save
7283
84+ method add_before_save_only_new (f : module_type list -> unit ) : unit =
85+ before_save_only_new := f :: ! before_save_only_new
86+
87+ method add_after_save_only_new (f : module_type list -> unit ) : unit =
88+ after_save_only_new := f :: ! after_save_only_new
89+
7390 method add_after_filters (f : unit -> unit ) : unit =
7491 after_filters := f :: ! after_filters
7592
@@ -79,20 +96,13 @@ class compiler_callbacks = object(self)
7996 method add_null_safety_report (f : (string*pos) list -> unit ) : unit =
8097 null_safety_report < - f :: null_safety_report
8198
82- method run handle_error r =
83- match ! r with
84- | [] ->
85- ()
86- | l ->
87- r := [] ;
88- List. iter (fun f -> try f() with Error. Error err -> handle_error err) (List. rev l);
89- self#run handle_error r
90-
9199 method get_before_typer_create = before_typer_create
92100 method get_after_init_macros = after_init_macros
93101 method get_after_typing = after_typing
94102 method get_before_save = before_save
95103 method get_after_save = after_save
104+ method get_before_save_only_new = before_save_only_new
105+ method get_after_save_only_new = after_save_only_new
96106 method get_after_filters = after_filters
97107 method get_after_generation = after_generation
98108 method get_null_safety_report = null_safety_report
0 commit comments