From 4661282fde9f37780877fbeeb34b06b0c221e6bf Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 28 Jul 2006 16:03:28 +0000 Subject: * `nix-instantiate ... --arg NAME VALUE': allow arguments to be passed to functions from the command line. * nix-build: started removing backticks. --- src/libexpr/eval.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/libexpr/eval.cc') diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index 6c78356db8..834b15cbdf 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -287,20 +287,27 @@ static ATerm concatStrings(EvalState & state, const ATermVector & args) } -Expr autoCallFunction(Expr e) +Expr autoCallFunction(Expr e, const ATermMap & args) { ATermList formals; ATerm body, pos; + if (matchFunction(e, formals, body, pos)) { + ATermMap actualArgs(128); + for (ATermIterator i(formals); i; ++i) { - Expr name, def; ATerm values, def2; + Expr name, def, value; ATerm values, def2; if (!matchFormal(*i, name, values, def2)) abort(); - if (!matchDefaultValue(def2, def)) + if ((value = args.get(name))) + actualArgs.set(name, makeAttrRHS(value, makeNoPos())); + else if (!matchDefaultValue(def2, def)) throw TypeError(format("cannot auto-call a function that has an argument without a default value (`%1%')") % aterm2String(name)); } - e = makeCall(e, makeAttrs(ATermMap(0))); + + e = makeCall(e, makeAttrs(actualArgs)); } + return e; } -- cgit 1.4.1