From 6b199a8f0442fcaffd79e314304311a29204a8d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Mon, 9 Dec 2019 17:51:37 +0100
Subject: [PATCH] [wp/why3] fix context wrt tasks

---
 src/plugins/wp/ProverWhy3.ml | 84 ++++++++++++++++++------------------
 1 file changed, 41 insertions(+), 43 deletions(-)

diff --git a/src/plugins/wp/ProverWhy3.ml b/src/plugins/wp/ProverWhy3.ml
index e3f3b6659e4..f18f8fc0509 100644
--- a/src/plugins/wp/ProverWhy3.ml
+++ b/src/plugins/wp/ProverWhy3.ml
@@ -1311,50 +1311,48 @@ let is_trivial (t : Why3.Task.task) =
 
 let build_proof_task ?timeout ?steplimit ~prover wpo () =
   try
-    WpContext.on_context (Wpo.get_context wpo)
-      begin fun () ->
-        (* Always generate common task *)
-        let task = task_of_wpo wpo in
-        if Wp_parameters.Check.get ()
-        then Task.return VCS.checked (* Why3 tasks are type-checked *)
-        else
-        if Wp_parameters.Generate.get ()
-        then Task.return VCS.no_result (* Only generate *)
-        else
-          let drv , config , task = prover_task prover task in
-          if is_trivial task then
-            Task.return VCS.valid
-          else
-            let mode = get_mode () in
-            match mode with
-            | NoCache ->
-                call_prover ~timeout ~steplimit drv prover config task
-            | Offline ->
-                let hash = task_hash wpo drv prover task in
-                let result = get_cache_result ~mode hash |> VCS.cached in
-                if VCS.is_verdict result then incr hits else incr miss ;
+    (* Always generate common task *)
+    let context = Wpo.get_context wpo in
+    let task = WpContext.on_context context task_of_wpo wpo in
+    if Wp_parameters.Check.get ()
+    then Task.return VCS.checked (* Why3 tasks are type-checked *)
+    else
+    if Wp_parameters.Generate.get ()
+    then Task.return VCS.no_result (* Only generate *)
+    else
+      let drv , config , task = prover_task prover task in
+      if is_trivial task then
+        Task.return VCS.valid
+      else
+        let mode = get_mode () in
+        match mode with
+        | NoCache ->
+            call_prover ~timeout ~steplimit drv prover config task
+        | Offline ->
+            let hash = task_hash wpo drv prover task in
+            let result = get_cache_result ~mode hash |> VCS.cached in
+            if VCS.is_verdict result then incr hits else incr miss ;
+            Task.return result
+        | Update | Replay | Rebuild | Cleanup ->
+            let hash = task_hash wpo drv prover task in
+            let result =
+              get_cache_result ~mode hash
+              |> promote ~timeout ~steplimit |> VCS.cached in
+            if VCS.is_verdict result
+            then
+              begin
+                incr hits ;
                 Task.return result
-            | Update | Replay | Rebuild | Cleanup ->
-                let hash = task_hash wpo drv prover task in
-                let result =
-                  get_cache_result ~mode hash
-                  |> promote ~timeout ~steplimit |> VCS.cached in
-                if VCS.is_verdict result
-                then
-                  begin
-                    incr hits ;
-                    Task.return result
-                  end
-                else
-                  Task.finally
-                    (call_prover ~timeout ~steplimit drv prover config task)
-                    begin function
-                      | Task.Result result when VCS.is_verdict result ->
-                          incr miss ;
-                          set_cache_result ~mode hash prover result
-                      | _ -> ()
-                    end
-      end ()
+              end
+            else
+              Task.finally
+                (call_prover ~timeout ~steplimit drv prover config task)
+                begin function
+                  | Task.Result result when VCS.is_verdict result ->
+                      incr miss ;
+                      set_cache_result ~mode hash prover result
+                  | _ -> ()
+                end
   with exn ->
     if Wp_parameters.has_dkey dkey_api then
       Wp_parameters.fatal "[Why3 Error] %a@\n%s"
-- 
GitLab