From 8a10360c912bc344ea9ce7f8871a47a6e036552f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 25 Mar 2010 12:19:41 +0000 Subject: * Simplify @-patterns: only `{attrs}@name' or `name@{attrs}' are now allowed. So `name1@name2', `{attrs1}@{attrs2}' and so on are now no longer legal. This is no big loss because they were not useful anyway. This also changes the output of builtins.toXML for @-patterns slightly. --- src/libexpr/eval.cc | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'src/libexpr/eval.cc') diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index cd9c64594747..1501fc0480b2 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -85,16 +85,17 @@ static void patternMatch(EvalState & state, { ATerm name; ATermList formals; - Pattern pat1, pat2; ATermBool ellipsis; if (matchVarPat(pat, name)) subs.set(name, arg); - else if (matchAttrsPat(pat, formals, ellipsis)) { + else if (matchAttrsPat(pat, formals, ellipsis, name)) { arg = evalExpr(state, arg); + if (name != sNoAlias) subs.set(name, arg); + /* Get the actual arguments. */ ATermMap attrs; queryAllAttrs(arg, attrs); @@ -131,11 +132,6 @@ static void patternMatch(EvalState & state, % aterm2String(attrs.begin()->key)); } - else if (matchAtPat(pat, pat1, pat2)) { - patternMatch(state, pat1, arg, subs, subsRecursive); - patternMatch(state, pat2, arg, subs, subsRecursive); - } - else abort(); } @@ -425,12 +421,11 @@ Path coerceToPath(EvalState & state, Expr e, PathSet & context) Expr autoCallFunction(Expr e, const ATermMap & args) { Pattern pat; - ATerm body, pos; + ATerm body, pos, name; ATermList formals; ATermBool ellipsis; - /* !!! this should be more general */ - if (matchFunction(e, pat, body, pos) && matchAttrsPat(pat, formals, ellipsis)) { + if (matchFunction(e, pat, body, pos) && matchAttrsPat(pat, formals, ellipsis, name)) { ATermMap actualArgs(ATgetLength(formals)); for (ATermIterator i(formals); i; ++i) { -- cgit 1.4.1