1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-24 22:11:15 +02:00

libexpr: Add and use primOpApp getter

This commit is contained in:
Sergei Zimmerman 2025-06-12 19:51:44 +00:00
parent 441fa86e82
commit f07a9f863e
No known key found for this signature in database
GPG key ID: A9B0B557CA632325
2 changed files with 8 additions and 5 deletions

View file

@ -525,9 +525,9 @@ std::ostream & operator<<(std::ostream & output, const PrimOp & primOp)
const PrimOp * Value::primOpAppPrimOp() const const PrimOp * Value::primOpAppPrimOp() const
{ {
Value * left = payload.primOpApp.left; Value * left = primOpApp().left;
while (left && !left->isPrimOp()) { while (left && !left->isPrimOp()) {
left = left->payload.primOpApp.left; left = left->primOpApp().left;
} }
if (!left) if (!left)
@ -1702,7 +1702,7 @@ void EvalState::callFunction(Value & fun, std::span<Value *> args, Value & vRes,
Value * primOp = &vCur; Value * primOp = &vCur;
while (primOp->isPrimOpApp()) { while (primOp->isPrimOpApp()) {
argsDone++; argsDone++;
primOp = primOp->payload.primOpApp.left; primOp = primOp->primOpApp().left;
} }
assert(primOp->isPrimOp()); assert(primOp->isPrimOp());
auto arity = primOp->primOp()->arity; auto arity = primOp->primOp()->arity;
@ -1718,8 +1718,8 @@ void EvalState::callFunction(Value & fun, std::span<Value *> args, Value & vRes,
Value * vArgs[maxPrimOpArity]; Value * vArgs[maxPrimOpArity];
auto n = argsDone; auto n = argsDone;
for (Value * arg = &vCur; arg->isPrimOpApp(); arg = arg->payload.primOpApp.left) for (Value * arg = &vCur; arg->isPrimOpApp(); arg = arg->primOpApp().left)
vArgs[--n] = arg->payload.primOpApp.right; vArgs[--n] = arg->primOpApp().right;
for (size_t i = 0; i < argsLeft; ++i) for (size_t i = 0; i < argsLeft; ++i)
vArgs[argsDone + i] = args[i]; vArgs[argsDone + i] = args[i];

View file

@ -488,6 +488,9 @@ public:
ClosureThunk thunk() const ClosureThunk thunk() const
{ return payload.thunk; } { return payload.thunk; }
FunctionApplicationThunk primOpApp() const
{ return payload.primOpApp; }
}; };