X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/ed9fda3a0e2edcf4ed546e0eb9ac128865538276..6ae327f88a6be8efd02cfe4b713444f9f3ac2672:/src/env.sml diff --git a/src/env.sml b/src/env.sml index 85c29c9..91fb69d 100644 --- a/src/env.sml +++ b/src/env.sml @@ -89,6 +89,23 @@ fun two func (name1, arg1, name2, arg2) f (_, [e1, e2]) = SM.empty)) | two func _ _ (_, es) = badArgs (func, es) + +fun oneV func (name, arg) f (evs, [e]) = + (case arg e of + NONE => badArg (func, name, e) + | SOME v => (f (evs, v); + SM.empty)) + | oneV func _ _ (_, es) = badArgs (func, es) + + +fun env arg (evs, name) = + case SM.find (evs, name) of + NONE => raise Fail ("Unavailable environment variable " ^ name) + | SOME e => + case arg e of + NONE => raise Fail ("Bad format for environment variable " ^ name) + | SOME v => v + fun type_one func arg f = registerType (func, fn e => case arg e of @@ -99,8 +116,13 @@ fun action_none name f = registerAction (name, none name f) fun action_one name args f = registerAction (name, one name args f) fun action_two name args f = registerAction (name, two name args f) +fun actionV_one name args f = registerAction (name, oneV name args f) + +fun container_none name (f, g) = registerContainer (name, none name f, g) fun container_one name args (f, g) = registerContainer (name, one name args f, g) +fun containerV_one name args (f, g) = registerContainer (name, oneV name args f, g) + type env = SS.set * (typ * exp option) SM.map * SS.set val empty : env = (SS.empty, SM.empty, SS.empty)