diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y index 2ee3833f..c4afb72e 100644 --- a/src/libexpr/parser.y +++ b/src/libexpr/parser.y @@ -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; } } diff --git a/tests/lang/eval-okay-scope-7.exp b/tests/lang/eval-okay-scope-7.exp new file mode 100644 index 00000000..067d2b74 --- /dev/null +++ b/tests/lang/eval-okay-scope-7.exp @@ -0,0 +1 @@ +Int(1) diff --git a/tests/lang/eval-okay-scope-7.nix b/tests/lang/eval-okay-scope-7.nix new file mode 100644 index 00000000..4da02968 --- /dev/null +++ b/tests/lang/eval-okay-scope-7.nix @@ -0,0 +1,6 @@ +rec { + inherit (x) y; + x = { + y = 1; + }; +}.y