val (//) : string -> string -> string
(** [dir // file] concatenates directory and file. *)
+val isalpha : char -> bool
+val isalnum : char -> bool
+(** Character tests. *)
+
val filter_map : ('a -> 'b option) -> 'a list -> 'b list
(** Filter + map. *)
type whenexpr =
+ | Expr_unit (** Unit constant. *)
| Expr_bool of bool (** A boolean constant. *)
| Expr_str of string (** A string constant. *)
| Expr_int of Big_int.big_int (** An integer constant. *)
| Expr_var of string (** A variable name. *)
| Expr_and of whenexpr * whenexpr (** && *)
| Expr_or of whenexpr * whenexpr (** || *)
+ | Expr_lt of whenexpr * whenexpr (** < *)
+ | Expr_le of whenexpr * whenexpr (** <= *)
| Expr_eq of whenexpr * whenexpr (** == *)
- | Expr_not of whenexpr (** ! *)
+ | Expr_ge of whenexpr * whenexpr (** >= *)
+ | Expr_gt of whenexpr * whenexpr (** > *)
+ | Expr_not of whenexpr (** boolean not *)
+ | Expr_add of whenexpr * whenexpr (** arithmetic addition or string cat *)
+ | Expr_sub of whenexpr * whenexpr (** arithmetic subtraction *)
+ | Expr_mul of whenexpr * whenexpr (** arithmetic multiplication *)
+ | Expr_div of whenexpr * whenexpr (** arithmetic division *)
+ | Expr_mod of whenexpr * whenexpr (** arithmetic modulo *)
| Expr_changes of string (** changes var *)
+ | Expr_increases of string (** increases var *)
+ | Expr_decreases of string (** decreases var *)
+ | Expr_prev of string (** prev var *)
+ | Expr_reloaded (** reloaded () *)
(** Internal type used to represent 'when' expressions. *)
type periodexpr =
(** A shell script. *)
type variable =
+ | T_unit
| T_bool of bool
| T_string of string
| T_int of Big_int.big_int
| T_float of float
(** Typed variable (see also [whenproto.x]) *)
+val string_of_variable : variable -> string
+
val variable_of_rpc : Whenproto_aux.variable -> variable
val rpc_of_variable : variable -> Whenproto_aux.variable
type job_private
(** Private state associated with a job, used for evaluation. *)
-val no_job_private : job_private
-(* XXX any use of no_job_private is wrong XXX *)
-
type job_cond =
| When_job of whenexpr (** when ... : << >> *)
| Every_job of periodexpr (** every ... : << >> *)
job_script : shell_script;
job_private : job_private;
}
-(** A job. *)
+(** A job. Note that because of the [job_private] field, these cannot
+ be constructed directly. Use {!make_when_job} or {!make_every_job}
+ to construct one. *)
+
+val make_when_job : Camlp4.PreCast.Loc.t -> string -> whenexpr -> shell_script -> job
+(** Make a when-statement job. *)
+
+val make_every_job : Camlp4.PreCast.Loc.t -> string -> periodexpr -> shell_script -> job
+(** Make an every-statement job. *)
val expr_of_ast : Camlp4.PreCast.Ast.Loc.t -> Camlp4.PreCast.Ast.expr -> whenexpr
(** Convert OCaml AST to an expression. Since OCaml ASTs are much
val dependencies_of_job : job -> string list
(** Which variables does this job depend on? *)
-val job_evaluate : job -> variables -> bool * job
-(** Evaluate [job]'s condition in the context of the [variables], and
- return [true] iff it should be run now. Note that this returns a
- possibly-updated [job] structure.
+val job_evaluate : job -> variables -> bool -> bool * job
+(** [job_evaluate job variables onload] evaluates [job]'s condition in
+ the context of the [variables], and return [true] iff it should be
+ run now.
+
+ Note that this returns a possibly-updated [job] structure.
This is a no-op for 'every' jobs. *)