Ignore warnings about immutable strings.
[goaljobs.git] / pa_goal.ml
index 20df4fa..c95095c 100644 (file)
@@ -91,6 +91,8 @@ let generate_let_goal _loc (r : rec_flag) (lets : binding) =
         (* Define a goal name which the body may use. *)
         let goalname = $str:name$ in
 
+        _enter_goal goalname;
+
         (* Source location. *)
         let goalloc = $str:goalloc$ in
 
@@ -114,6 +116,7 @@ let generate_let_goal _loc (r : rec_flag) (lets : binding) =
           $body$ ;
           _call_onruns ();
           _call_onsuccesses ();
+          _leave_goal goalname;
 
           (* Avoid a compiler warning: *)
           ignore (goalname); ignore (goalloc)
@@ -123,9 +126,11 @@ let generate_let_goal _loc (r : rec_flag) (lets : binding) =
          * ordinary function exit.
          *)
         | Goal_result Goal_OK ->
+          _leave_goal goalname;
           _call_onsuccesses ();
           ()
         | exn ->
+          _leave_goal goalname;
           _call_onfails exn;
           raise exn
       >> in
@@ -155,7 +160,7 @@ let generate_let_goal _loc (r : rec_flag) (lets : binding) =
           let () = publish $str:name$ (
             function
             | [] ->
-              Goaljobs.require $lid:gname$
+              Goaljobs.require $str:name$ $lid:gname$
             | _ ->
               failwith (Printf.sprintf "goal '%s' does not take any arguments"
                           $str:name$);
@@ -174,14 +179,17 @@ let generate_require _loc expr =
   let rec rewrite = function
     | ExApp (_loc, ExId (_loc1, IdLid (_loc2, name)), right) ->
       let gname = "goal_" ^ name in
-      ExApp (_loc, ExId (_loc1, IdLid (_loc2, gname)), right)
+      ExApp (_loc, ExId (_loc1, IdLid (_loc2, gname)), right), name
+
     | ExApp (_loc, (ExApp _ as expr), right) ->
-      ExApp (_loc, rewrite expr, right)
+      let expr, name = rewrite expr in
+      ExApp (_loc, expr, right), name
+
     | _ ->
       locfail _loc "require (...) expression must contain a call to a goal"
   in
-  let expr = rewrite expr in
-  <:expr< Goaljobs.require (fun () -> $expr$) >>
+  let expr, name = rewrite expr in
+  <:expr< Goaljobs.require $str:name$ (fun () -> $expr$) >>
 
 ;;