* Change the scoping of "inherit (e) ..." in recs so that the
attributes of the rec are in scope of `e'.  This is useful in
  expressions such as
    rec {
      lib = import ./lib;
      inherit (lib) concatStrings;
    }
  It does change the semantics of expressions such as
    let x = {y = 1;}; in rec { x = {y = 2;}; inherit (x) y; }.y
  This now returns 2 instead of 1.  However, no code in Nixpkgs or
  NixOS seems to rely on the old behaviour.
			
			
This commit is contained in:
		
							parent
							
								
									d407d572fd
								
							
						
					
					
						commit
						a64bbe049e
					
				
					 3 changed files with 10 additions and 2 deletions
				
			
		|  | @ -91,12 +91,13 @@ static Expr fixAttrs(bool recursive, ATermList as) | |||
|         if (matchInherit(*i, src, names, pos)) { | ||||
|             bool fromScope = matchScope(src); | ||||
|             for (ATermIterator j(names); j; ++j) { | ||||
|                 Expr rhs = fromScope ? makeVar(*j) : makeSelect(src, *j); | ||||
|                 if (attrs.children.find(*j) != attrs.children.end())  | ||||
|                     throw ParseError(format("duplicate definition of attribute `%1%' at %2%") | ||||
|                         % showAttrPath(ATmakeList1(*j)) % showPos(pos)); | ||||
|                 Tree & t(attrs.children[*j]); | ||||
|                 t.leaf = rhs; t.pos = pos; if (recursive) t.recursive = false; | ||||
|                 t.leaf = fromScope ? makeVar(*j) : makeSelect(src, *j); | ||||
|                 t.pos = pos; | ||||
|                 if (recursive && fromScope) t.recursive = false; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										1
									
								
								tests/lang/eval-okay-scope-7.exp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests/lang/eval-okay-scope-7.exp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| Int(1) | ||||
							
								
								
									
										6
									
								
								tests/lang/eval-okay-scope-7.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tests/lang/eval-okay-scope-7.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| rec { | ||||
|   inherit (x) y; | ||||
|   x = { | ||||
|     y = 1; | ||||
|   }; | ||||
| }.y | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue