diff options
Diffstat (limited to 'src/libexpr/nixexpr.cc')
-rw-r--r-- | src/libexpr/nixexpr.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libexpr/nixexpr.cc b/src/libexpr/nixexpr.cc index 46cbb48ac5..ab4fa6cba3 100644 --- a/src/libexpr/nixexpr.cc +++ b/src/libexpr/nixexpr.cc @@ -264,6 +264,18 @@ void ExprLet::bindVars(const StaticEnv & env) void ExprWith::bindVars(const StaticEnv & env) { + /* Does this `with' have an enclosing `with'? If so, record its + level so that we can copy the attributes of the enclosing + `with'. */ + const StaticEnv * curEnv; + unsigned int level; + prevWith = -1; + for (curEnv = &env, level = 0; curEnv; curEnv = curEnv->up, level++) + if (curEnv->isWith) { + prevWith = level; + break; + } + attrs->bindVars(env); StaticEnv newEnv(true, &env); body->bindVars(newEnv); |