Move variable checking to check_valid_variable_name function.
[whenjobs.git] / lib / whenexpr.ml
index 8ccde2c..4e46968 100644 (file)
@@ -616,3 +616,22 @@ let next_periodexpr =
     let t0 = Date.make 1970 1 1 in
     let t' = Date.add t0 (Date.Period.month months) in
     Date.to_unixfloat t'
+
+let check_valid_variable_name name =
+  (* Don't permit certain names. *)
+  if name = "JOBSERIAL" then
+    failwith "JOBSERIAL variable cannot be set";
+
+  let len = String.length name in
+  if len = 0 then
+    failwith "variable name is an empty string";
+  if name.[0] <> '_' && not (isalpha name.[0]) then
+    failwith "variable name must start with alphabetic character or underscore";
+
+  let rec loop i =
+    if i >= len then ()
+    else if name.[i] <> '_' && not (isalnum name.[i]) then
+      failwith "variable name contains non-alphanumeric non-underscore character"
+    else loop (i+1)
+  in
+  loop 1