let lift_expr = M.Expr.meta_expr
(* Handle a top level statement. *)
-let rec call_stmt name cleanup (_loc, stmt, sh) =
+let rec call_stmt name pre post (_loc, stmt, sh) =
let name =
match name with
| None -> let name = unique_job_name () in <:expr< $str:name$ >>
| Some name -> name in
- let cleanup = expr_of_option _loc cleanup in
+ let pre = expr_of_option _loc pre in
+ let post = expr_of_option _loc post in
match stmt with
- | `When e -> when_stmt _loc name cleanup e sh
- | `Every p -> every_stmt _loc name cleanup p sh
+ | `When e -> when_stmt _loc name pre post e sh
+ | `Every p -> every_stmt _loc name pre post p sh
(* Handle a top level "when" statement.
* e -> when expression
* Returns a top level statement (str_item) which when executed just
* adds the statement to a global list.
*)
-and when_stmt _loc name cleanup e sh =
+and when_stmt _loc name pre post e sh =
let loc = expr_of_loc _loc _loc in
let e = lift_expr _loc e in
<:str_item<
open Camlp4.PreCast
- Whenfile.add_when_job $loc$ $name$ $cleanup$ $e$ $sh$
+ Whenfile.add_when_job $loc$ $name$ $pre$ $post$ $e$ $sh$
>>
(* Handle a top level "every" statement. *)
-and every_stmt _loc name cleanup period sh =
+and every_stmt _loc name pre post period sh =
let loc = expr_of_loc _loc _loc in
<:str_item<
open Camlp4.PreCast
- Whenfile.add_every_job $loc$ $name$ $cleanup$ $period$ $sh$
+ Whenfile.add_every_job $loc$ $name$ $pre$ $post$ $period$ $sh$
>>
let () =
| [ e = period_parser -> e ]
];
- (* Cleanup function. *)
- cleanup: [
- [ "cleanup"; f = expr -> f ]
- ];
+ (* Pre and post functions. *)
+ pre: [[ "pre"; f = expr -> f ]];
+ post: [[ "post"; f = expr -> f ]];
(* Top level statements. *)
statement: [
(* "str_item" is a top level statement in an OCaml program. *)
str_item: LEVEL "top" [
- [ s = statement -> call_stmt None None s ]
+ [ s = statement -> call_stmt None None None s ]
| [ "job"; name = expr;
- cleanup = OPT cleanup;
+ pre = OPT pre;
+ post = OPT post;
s = statement ->
- call_stmt (Some name) cleanup s ]
+ call_stmt (Some name) pre post s ]
];
END