X-Git-Url: http://git.annexia.org/?p=whenjobs.git;a=blobdiff_plain;f=lib%2Fpa_when.ml;h=00bfd1443999cc612a5cba87af5619e4427edc2b;hp=2d82cb3cfb8a966a20c13081879d6ed748fb3f97;hb=0c9faf57f9239b0fe1c0b46353d222bb4cf5cd74;hpb=dcb2495b5a97360cfa074acbd10b1e8bde40da3e diff --git a/lib/pa_when.ml b/lib/pa_when.ml index 2d82cb3..00bfd14 100644 --- a/lib/pa_when.ml +++ b/lib/pa_when.ml @@ -88,15 +88,16 @@ module M = Ast.Meta.Make (Ast.Meta.MetaGhostLoc) 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 @@ -104,20 +105,20 @@ let rec call_stmt name cleanup (_loc, stmt, sh) = * 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 () = @@ -209,10 +210,9 @@ EXTEND Gram | [ 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: [ @@ -224,11 +224,12 @@ EXTEND Gram (* "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