2 * Copyright (c) Facebook, Inc. and its affiliates.
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the "hack" directory of this source tree.
11 exception Defer
of Relative_path.t
13 type deferment
= Relative_path.t
15 type deferments_t
= Relative_path.Set.t
19 deferments
: deferments_t
;
21 threshold_opt
: int option;
24 let state : state ref =
28 deferments
= Relative_path.Set.empty
;
33 let reset ~
(enable
: bool) ~
(threshold_opt
: int option) : unit =
38 deferments
= Relative_path.Set.empty
;
42 let increment_counter () : unit =
43 if !state.enabled
then state := { !state with counter
= !state.counter
+ 1 }
45 let raise_if_should_defer ~
(d
: Relative_path.t
) : unit =
46 match (!state.enabled
, !state.threshold_opt
) with
47 | (true, Some threshold
) when !state.counter
>= threshold
-> raise
(Defer d
)
50 let add_deferment ~
(d
: deferment
) : unit =
52 { !state with deferments
= Relative_path.Set.add
!state.deferments d
}
54 let get_deferments ~
(f
: deferment
-> 'a
) : 'a list
=
55 !state.deferments
|> Relative_path.Set.elements
|> List.map ~f