aboutsummaryrefslogtreecommitdiff
path: root/proofs/proofview_monad.ml
diff options
context:
space:
mode:
authorArnaud Spiwack2014-10-30 14:50:59 +0100
committerArnaud Spiwack2014-11-01 22:43:57 +0100
commitbfa71dfcf722dfc0e1f1cd616945cc3e1da9d5ba (patch)
tree9f0e2d59404a8cf63f44b7dc7d31eb2a10286003 /proofs/proofview_monad.ml
parentd47c178be6e5dc52fedbb312fc51673623608994 (diff)
Info: do not record info trace unless needed.
Diffstat (limited to 'proofs/proofview_monad.ml')
-rw-r--r--proofs/proofview_monad.ml27
1 files changed, 20 insertions, 7 deletions
diff --git a/proofs/proofview_monad.ml b/proofs/proofview_monad.ml
index 8f494c3098..d1b255cc66 100644
--- a/proofs/proofview_monad.ml
+++ b/proofs/proofview_monad.ml
@@ -167,8 +167,8 @@ module P = struct
type s = proofview * Environ.env
- type e = unit
- (* spiwack: nothing read-only anymore but it's free so I'll leave a place holder. *)
+ (** Recording info trace (true) or not. *)
+ type e = bool
(** Status (safe/unsafe) * shelved goals * given up *)
type w = bool * Evar.t list * Evar.t list
@@ -243,15 +243,28 @@ end
(** Lens and utilies pertaining to the info trace *)
module InfoL = struct
- let update = Logical.update
+ let recording = Logical.current
+ let if_recording t =
+ let open Logical in
+ recording >>= fun r ->
+ if r then t else return ()
+
+ let record_trace t = Logical.local true t
+
+ let raw_update = Logical.update
+ let update f = if_recording (raw_update f)
let opn a = update (Trace.opn a)
let close = update Trace.close
let leaf a = update (Trace.leaf a)
let tag a t =
let open Logical in
- opn a >>
- t >>= fun a ->
- close >>
- return a
+ recording >>= fun r ->
+ if r then begin
+ raw_update (Trace.opn a) >>
+ t >>= fun a ->
+ raw_update Trace.close >>
+ return a
+ end else
+ t
end