Skip to content

Commit

Permalink
fix debugger crashing while printing envs
Browse files Browse the repository at this point in the history
  • Loading branch information
pennae committed Feb 4, 2024
1 parent 49cf090 commit 5ccb06e
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ perl/Makefile.config
/tests/functional/ca/config.nix
/tests/functional/dyn-drv/config.nix
/tests/functional/repl-result-out
/tests/functional/debugger-test-out
/tests/functional/test-libstoreconsumer/test-libstoreconsumer

# /tests/functional/lang/
Expand Down
8 changes: 5 additions & 3 deletions src/libexpr/eval.cc
Original file line number Diff line number Diff line change
Expand Up @@ -744,7 +744,8 @@ void printEnvBindings(const SymbolTable & st, const StaticEnv & se, const Env &
if (se.up && env.up) {
std::cout << "static: ";
printStaticEnvBindings(st, se);
printWithBindings(st, env);
if (se.isWith)
printWithBindings(st, env);
std::cout << std::endl;
printEnvBindings(st, *se.up, *env.up, ++lvl);
} else {
Expand All @@ -756,7 +757,8 @@ void printEnvBindings(const SymbolTable & st, const StaticEnv & se, const Env &
std::cout << st[i.first] << " ";
std::cout << ANSI_NORMAL;
std::cout << std::endl;
printWithBindings(st, env); // probably nothing there for the top level.
if (se.isWith)
printWithBindings(st, env); // probably nothing there for the top level.
std::cout << std::endl;

}
Expand All @@ -778,7 +780,7 @@ void mapStaticEnvBindings(const SymbolTable & st, const StaticEnv & se, const En
if (env.up && se.up) {
mapStaticEnvBindings(st, *se.up, *env.up, vm);

if (!env.values[0]->isThunk()) {
if (se.isWith && !env.values[0]->isThunk()) {
// add 'with' bindings.
Bindings::iterator j = env.values[0]->attrs->begin();
while (j != env.values[0]->attrs->end()) {
Expand Down
13 changes: 13 additions & 0 deletions tests/functional/debugger.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
source common.sh

clearStore

# regression #9932
echo ":env" | expect 1 nix eval --debugger --expr '(_: throw "oh snap") 42'
echo ":env" | expect 1 nix eval --debugger --expr '
let x.a = 1; in
with x;
(_: builtins.seq x.a (throw "oh snap")) x.a
' >debugger-test-out
grep -P 'with: .*a' debugger-test-out
grep -P 'static: .*x' debugger-test-out
3 changes: 2 additions & 1 deletion tests/functional/local.mk
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,8 @@ nix_tests = \
toString-path.sh \
read-only-store.sh \
nested-sandboxing.sh \
impure-env.sh
impure-env.sh \
debugger.sh

ifeq ($(HAVE_LIBCPUID), 1)
nix_tests += compute-levels.sh
Expand Down

0 comments on commit 5ccb06e

Please sign in to comment.