* listToAttrs: the list now should consist of {name, value} attribute
sets instead of {attr, value}.  "name" is better than "attr" because
  the *combination* of the two forms the attribute.
			
			
This commit is contained in:
		
							parent
							
								
									8a9fe6c11c
								
							
						
					
					
						commit
						27a0662828
					
				
					 1 changed files with 29 additions and 28 deletions
				
			
		|  | @ -755,15 +755,14 @@ static Expr prim_hasAttr(EvalState & state, const ATermVector & args) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* takes 
 | ||||
|  * param: list of { attr="attr"; value=value }  | ||||
|  * returns an attribute set | ||||
|  * */ | ||||
| /* Builds an attribute set from a list specifying (name, value)
 | ||||
|    pairs.  To be precise, a list [{name = "name1"; value = value1;} | ||||
|    ... {name = "nameN"; value = valueN;}] is transformed to {name1 = | ||||
|    value1; ... nameN = valueN;}. */ | ||||
| static Expr prim_listToAttrs(EvalState & state, const ATermVector & args) | ||||
| { | ||||
|     try { | ||||
|         ATermMap res = ATermMap(); | ||||
| 
 | ||||
|         ATermList list; | ||||
|         list = evalList(state, args[0]); | ||||
|         for (ATermIterator i(list); i; ++i){ | ||||
|  | @ -771,16 +770,18 @@ static Expr prim_listToAttrs(EvalState & state, const ATermVector & args) | |||
|             ATermList attrs; | ||||
|             Expr evaledExpr = evalExpr(state, *i); | ||||
|             if (matchAttrs(evaledExpr, attrs)){ | ||||
|         Expr e = evalExpr(state, makeSelect(evaledExpr, toATerm("attr"))); | ||||
|                 Expr e = evalExpr(state, makeSelect(evaledExpr, toATerm("name"))); | ||||
|                 string attr = evalStringNoCtx(state,e); | ||||
|                 Expr r = makeSelect(evaledExpr, toATerm("value")); | ||||
|                 res.set(toATerm(attr), makeAttrRHS(r, makeNoPos())); | ||||
|             } | ||||
|       else { | ||||
|         throw EvalError(format("passed list item is a %s (value: %s). Set { attr=\"name\"; value=nix expr; } expected.") % showType(evaledExpr) % showValue(evaledExpr));  | ||||
|             else | ||||
|                 throw TypeError(format("list element in `listToAttrs' is %s, expected a set { name = \"<name>\"; value = <value>; }") | ||||
|                     % showType(evaledExpr)); | ||||
|         } | ||||
|     } // for
 | ||||
|      | ||||
|         return makeAttrs(res); | ||||
|      | ||||
|     } catch (Error & e) { | ||||
|         e.addPrefix(format("in `listToAttrs':\n")); | ||||
|         throw; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue