From 2ae3a9f3e560be989c0b8b38be4ef1eb6cd648cf Mon Sep 17 00:00:00 2001 From: ppedrot Date: Tue, 6 Aug 2013 11:34:34 +0000 Subject: Added more flags choice in desambiguating printer. The code is parametric on the list of possible flags. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16665 85f007b7-540e-0410-9357-904b9bb8a0f7 --- lib/flags.ml | 11 +++++++++++ lib/flags.mli | 3 +++ 2 files changed, 14 insertions(+) (limited to 'lib') diff --git a/lib/flags.ml b/lib/flags.ml index af40e946e9..06c52e4b26 100644 --- a/lib/flags.ml +++ b/lib/flags.ml @@ -14,6 +14,17 @@ let with_option o f x = let () = o := old in raise reraise +let with_options ol f x = + let vl = List.map (!) ol in + let () = List.iter (fun r -> r := true) ol in + try + let r = f x in + let () = List.iter2 (:=) ol vl in r + with reraise -> + let reraise = Backtrace.add_backtrace reraise in + let () = List.iter2 (:=) ol vl in + raise reraise + let without_option o f x = let old = !o in o:=false; try let r = f x in o := old; r diff --git a/lib/flags.mli b/lib/flags.mli index 9dbe2c68c1..14b9f26bcc 100644 --- a/lib/flags.mli +++ b/lib/flags.mli @@ -64,6 +64,9 @@ val if_warn : ('a -> unit) -> 'a -> unit use [with_option o (f x y) z]) *) val with_option : bool ref -> ('a -> 'b) -> 'a -> 'b +(** As [with_option], but on several flags. *) +val with_options : bool ref list -> ('a -> 'b) -> 'a -> 'b + (** Temporarily deactivate an option *) val without_option : bool ref -> ('a -> 'b) -> 'a -> 'b -- cgit v1.2.3