* Pass the autoArgs to findAlongAttrPath so that "nix-instantiate
foo.nix -A attr --arg name value" will work if (name, value) is needed in the evaluation leading up to "attr".
This commit is contained in:
		
							parent
							
								
									b19cebc513
								
							
						
					
					
						commit
						9638f3f393
					
				
					 3 changed files with 11 additions and 7 deletions
				
			
		|  | @ -12,7 +12,8 @@ bool isAttrs(EvalState & state, Expr e, ATermMap & attrs) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Expr findAlongAttrPath(EvalState & state, const string & attrPath, Expr e) | Expr findAlongAttrPath(EvalState & state, const string & attrPath, | ||||||
|  |     const ATermMap & autoArgs, Expr e) | ||||||
| { | { | ||||||
|     Strings tokens = tokenizeString(attrPath, "."); |     Strings tokens = tokenizeString(attrPath, "."); | ||||||
| 
 | 
 | ||||||
|  | @ -33,7 +34,7 @@ Expr findAlongAttrPath(EvalState & state, const string & attrPath, Expr e) | ||||||
|         if (string2Int(attr, attrIndex)) apType = apIndex; |         if (string2Int(attr, attrIndex)) apType = apIndex; | ||||||
| 
 | 
 | ||||||
|         /* Evaluate the expression. */ |         /* Evaluate the expression. */ | ||||||
|         e = evalExpr(state, autoCallFunction(evalExpr(state, e), ATermMap(1))); |         e = evalExpr(state, autoCallFunction(evalExpr(state, e), autoArgs)); | ||||||
| 
 | 
 | ||||||
|         /* It should evaluate to either an attribute set or an
 |         /* It should evaluate to either an attribute set or an
 | ||||||
|            expression, according to what is specified in the |            expression, according to what is specified in the | ||||||
|  |  | ||||||
|  | @ -7,7 +7,8 @@ | ||||||
| #include "eval.hh" | #include "eval.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Expr findAlongAttrPath(EvalState & state, const string & attrPath, Expr e); | Expr findAlongAttrPath(EvalState & state, const string & attrPath, | ||||||
|  |     const ATermMap & autoArgs, Expr e); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif /* !__ATTR_PATH_H */ | #endif /* !__ATTR_PATH_H */ | ||||||
|  |  | ||||||
|  | @ -178,9 +178,10 @@ Expr strictEval(EvalState & state, Expr e) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Expr doEval(EvalState & state, string attrPath, bool parseOnly, bool strict, Expr e) | Expr doEval(EvalState & state, string attrPath, bool parseOnly, bool strict, | ||||||
|  |     const ATermMap & autoArgs, Expr e) | ||||||
| { | { | ||||||
|     e = findAlongAttrPath(state, attrPath, e); |     e = findAlongAttrPath(state, attrPath, autoArgs, e); | ||||||
|     if (!parseOnly) |     if (!parseOnly) | ||||||
|         if (strict) |         if (strict) | ||||||
|             e = strictEval(state, e); |             e = strictEval(state, e); | ||||||
|  | @ -229,6 +230,7 @@ void run(Strings args) | ||||||
|             if (i == args.end()) |             if (i == args.end()) | ||||||
|                 throw UsageError("`--arg' requires two arguments"); |                 throw UsageError("`--arg' requires two arguments"); | ||||||
|             Expr value = parseExprFromString(state, *i++, absPath(".")); |             Expr value = parseExprFromString(state, *i++, absPath(".")); | ||||||
|  |             printMsg(lvlError, format("X %1% Y %2%") % name % value); | ||||||
|             autoArgs.set(toATerm(name), value); |             autoArgs.set(toATerm(name), value); | ||||||
|         } |         } | ||||||
|         else if (arg == "--add-root") { |         else if (arg == "--add-root") { | ||||||
|  | @ -252,7 +254,7 @@ void run(Strings args) | ||||||
| 
 | 
 | ||||||
|     if (readStdin) { |     if (readStdin) { | ||||||
|         Expr e = parseStdin(state); |         Expr e = parseStdin(state); | ||||||
|         e = doEval(state, attrPath, parseOnly, strict, e); |         e = doEval(state, attrPath, parseOnly, strict, autoArgs, e); | ||||||
|         printResult(state, e, evalOnly, xmlOutput, autoArgs); |         printResult(state, e, evalOnly, xmlOutput, autoArgs); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -261,7 +263,7 @@ void run(Strings args) | ||||||
|     { |     { | ||||||
|         Path path = absPath(*i); |         Path path = absPath(*i); | ||||||
|         Expr e = parseExprFromFile(state, path); |         Expr e = parseExprFromFile(state, path); | ||||||
|         e = doEval(state, attrPath, parseOnly, strict, e); |         e = doEval(state, attrPath, parseOnly, strict, autoArgs, e); | ||||||
|         printResult(state, e, evalOnly, xmlOutput, autoArgs); |         printResult(state, e, evalOnly, xmlOutput, autoArgs); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue