libexpr: associate let exprs with the correct StaticEnv
static env association is from expr to its enclosing scope, but let
exprs set their association to their *inner* scope. this skips one level
of envs and will cause segfaults if the parent is a with expr.
fixes #145
Change-Id: I1d22146110f071ede21b4eed7ed34b5850ef2ef3
This commit is contained in:
parent
b3599166ad
commit
afb839a0c9
|
@ -483,7 +483,7 @@ void ExprLet::bindVars(EvalState & es, const std::shared_ptr<const StaticEnv> &
|
||||||
i.second.e->bindVars(es, i.second.chooseByKind(newEnv, env, inheritFromEnv));
|
i.second.e->bindVars(es, i.second.chooseByKind(newEnv, env, inheritFromEnv));
|
||||||
|
|
||||||
if (es.debugRepl)
|
if (es.debugRepl)
|
||||||
es.exprEnvs.insert(std::make_pair(this, newEnv));
|
es.exprEnvs.insert(std::make_pair(this, env));
|
||||||
|
|
||||||
body->bindVars(es, newEnv);
|
body->bindVars(es, newEnv);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
with { inherit ({}) invalid; };
|
||||||
|
let
|
||||||
|
x = builtins.break 1;
|
||||||
|
in
|
||||||
|
x
|
|
@ -0,0 +1,14 @@
|
||||||
|
info: breakpoint reached
|
||||||
|
|
||||||
|
debugger should not crash now, but also not show any with variables
|
||||||
|
nix-repl> :st
|
||||||
|
0: error: breakpoint reached
|
||||||
|
«none»:0
|
||||||
|
Env level 0
|
||||||
|
static: x
|
||||||
|
|
||||||
|
Env level 1
|
||||||
|
static:
|
||||||
|
|
||||||
|
Env level 2
|
||||||
|
abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true
|
|
@ -124,6 +124,7 @@ TEST_F(ReplSessionTest, repl_basic)
|
||||||
|
|
||||||
DEBUGGER_TEST(regression_9918);
|
DEBUGGER_TEST(regression_9918);
|
||||||
DEBUGGER_TEST(regression_9917);
|
DEBUGGER_TEST(regression_9917);
|
||||||
|
DEBUGGER_TEST(regression_l145);
|
||||||
DEBUGGER_TEST(stack_vars);
|
DEBUGGER_TEST(stack_vars);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue