aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2021-11-16 23:39:12 +0100
committerGitHub <noreply@github.com>2021-11-16 23:39:12 +0100
commitb191213b8b4cb0628ed3a84c5f5cc4d289fe8d88 (patch)
treefbe0ea4471eba3523a29c8eaec94fca721211b01 /src
parent9a9afca712d079ac65aebed8e4c6be967904005c (diff)
parentd7bae52b9d418e208593c6641bce54f6a82458f4 (diff)
Merge pull request #5578 from edolstra/call-functor
Call functors with both arguments at once
Diffstat (limited to 'src')
-rw-r--r--src/libexpr/eval.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 615f020e4..f1ff3a6e0 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -1406,13 +1406,15 @@ void EvalState::callFunction(Value & fun, size_t nrArgs, Value * * args, Value &
}
else if (vCur.type() == nAttrs && (functor = vCur.attrs->get(sFunctor))) {
- /* 'vCur" may be allocated on the stack of the calling
+ /* 'vCur' may be allocated on the stack of the calling
function, but for functors we may keep a reference, so
heap-allocate a copy and use that instead. */
- Value * args2[] = {allocValue()};
+ Value * args2[] = {allocValue(), args[0]};
*args2[0] = vCur;
/* !!! Should we use the attr pos here? */
- callFunction(*functor->value, 1, args2, vCur, pos);
+ callFunction(*functor->value, 2, args2, vCur, pos);
+ nrArgs--;
+ args++;
}
else