diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2021-11-16 23:39:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-16 23:39:12 +0100 |
commit | b191213b8b4cb0628ed3a84c5f5cc4d289fe8d88 (patch) | |
tree | fbe0ea4471eba3523a29c8eaec94fca721211b01 /src | |
parent | 9a9afca712d079ac65aebed8e4c6be967904005c (diff) | |
parent | d7bae52b9d418e208593c6641bce54f6a82458f4 (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.cc | 8 |
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 |