Merge branch 'prim_mapAttr-fix' of https://github.com/volth/nix
This commit is contained in:
		
						commit
						45bcf5416a
					
				
					 2 changed files with 3 additions and 8 deletions
				
			
		|  | @ -1076,6 +1076,8 @@ void EvalState::callPrimOp(Value & fun, Value & arg, Value & v, const Pos & pos) | |||
| 
 | ||||
| void EvalState::callFunction(Value & fun, Value & arg, Value & v, const Pos & pos) | ||||
| { | ||||
|     forceValue(fun, pos); | ||||
| 
 | ||||
|     if (fun.type == tPrimOp || fun.type == tPrimOpApp) { | ||||
|         callPrimOp(fun, arg, v, pos); | ||||
|         return; | ||||
|  | @ -1091,10 +1093,8 @@ void EvalState::callFunction(Value & fun, Value & arg, Value & v, const Pos & po | |||
|         auto & fun2 = *allocValue(); | ||||
|         fun2 = fun; | ||||
|         /* !!! Should we use the attr pos here? */ | ||||
|         forceValue(*found->value, pos); | ||||
|         Value v2; | ||||
|         callFunction(*found->value, fun2, v2, pos); | ||||
|         forceValue(v2, pos); | ||||
|         return callFunction(v2, arg, v, pos); | ||||
|       } | ||||
|     } | ||||
|  | @ -1181,7 +1181,6 @@ void EvalState::autoCallFunction(Bindings & args, Value & fun, Value & res) | |||
|     if (fun.type == tAttrs) { | ||||
|         auto found = fun.attrs->find(sFunctor); | ||||
|         if (found != fun.attrs->end()) { | ||||
|             forceValue(*found->value); | ||||
|             Value * v = allocValue(); | ||||
|             callFunction(*found->value, fun, *v, noPos); | ||||
|             forceValue(*v); | ||||
|  | @ -1565,7 +1564,6 @@ string EvalState::coerceToString(const Pos & pos, Value & v, PathSet & context, | |||
|     if (v.type == tAttrs) { | ||||
|         auto i = v.attrs->find(sToString); | ||||
|         if (i != v.attrs->end()) { | ||||
|             forceValue(*i->value, pos); | ||||
|             Value v1; | ||||
|             callFunction(*i->value, v, v1, pos); | ||||
|             return coerceToString(pos, v1, context, coerceMore, copyToStore); | ||||
|  |  | |||
|  | @ -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); | ||||
|     } | ||||
| } | ||||
|  | @ -1429,7 +1428,6 @@ static void prim_tail(EvalState & state, const Pos & pos, Value * * args, Value | |||
| /* Apply a function to every element of a list. */ | ||||
| static void prim_map(EvalState & state, const Pos & pos, Value * * args, Value & v) | ||||
| { | ||||
|     state.forceFunction(*args[0], pos); | ||||
|     state.forceList(*args[1], pos); | ||||
| 
 | ||||
|     state.mkList(v, args[1]->listSize()); | ||||
|  | @ -1558,7 +1556,6 @@ static void prim_all(EvalState & state, const Pos & pos, Value * * args, Value & | |||
| 
 | ||||
| static void prim_genList(EvalState & state, const Pos & pos, Value * * args, Value & v) | ||||
| { | ||||
|     state.forceFunction(*args[0], pos); | ||||
|     auto len = state.forceInt(*args[1], pos); | ||||
| 
 | ||||
|     if (len < 0) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue