prim_mapAttrs: `f' must be evaluated lazily to avoid infinite recursion
This commit is contained in:
@@ -1359,7 +1359,6 @@ static void prim_functionArgs(EvalState & state, const Pos & pos, Value * * args
|
||||
/* Apply a function to every element of an attribute set. */
|
||||
static void prim_mapAttrs(EvalState & state, const Pos & pos, Value * * args, Value & v)
|
||||
{
|
||||
state.forceFunction(*args[0], pos);
|
||||
state.forceAttrs(*args[1], pos);
|
||||
|
||||
state.mkAttrs(v, args[1]->attrs->size());
|
||||
@@ -1368,7 +1367,7 @@ static void prim_mapAttrs(EvalState & state, const Pos & pos, Value * * args, Va
|
||||
Value * vName = state.allocValue();
|
||||
Value * vFun2 = state.allocValue();
|
||||
mkString(*vName, i.name);
|
||||
state.callFunction(*args[0], *vName, *vFun2, pos);
|
||||
mkApp(*vFun2, *args[0], *vName);
|
||||
mkApp(*state.allocAttr(v, i.name), *vFun2, *i.value);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user