Merge pull request #9933 from pennae/debugger-fix

fix debugger crashing while printing envs

(cherry picked from commit 9b8b4860913afdb7f9cb1e1e81f9a9dd192cd1c1)
Change-Id: Ica6a17e4b3e3b8b8093719f442c28be7f13be09d
This commit is contained in:
eldritch horrors 2024-03-04 08:57:44 +01:00
parent 542a19104e
commit 647d762ab5
4 changed files with 21 additions and 4 deletions

1
.gitignore vendored
View file

@ -92,6 +92,7 @@ perl/Makefile.config
/tests/functional/ca/config.nix /tests/functional/ca/config.nix
/tests/functional/dyn-drv/config.nix /tests/functional/dyn-drv/config.nix
/tests/functional/repl-result-out /tests/functional/repl-result-out
/tests/functional/debugger-test-out
/tests/functional/test-libstoreconsumer/test-libstoreconsumer /tests/functional/test-libstoreconsumer/test-libstoreconsumer
# /tests/functional/lang/ # /tests/functional/lang/

View file

@ -810,7 +810,8 @@ void printEnvBindings(const SymbolTable & st, const StaticEnv & se, const Env &
if (se.up && env.up) { if (se.up && env.up) {
std::cout << "static: "; std::cout << "static: ";
printStaticEnvBindings(st, se); printStaticEnvBindings(st, se);
printWithBindings(st, env); if (se.isWith)
printWithBindings(st, env);
std::cout << std::endl; std::cout << std::endl;
printEnvBindings(st, *se.up, *env.up, ++lvl); printEnvBindings(st, *se.up, *env.up, ++lvl);
} else { } else {
@ -822,7 +823,8 @@ void printEnvBindings(const SymbolTable & st, const StaticEnv & se, const Env &
std::cout << st[i.first] << " "; std::cout << st[i.first] << " ";
std::cout << ANSI_NORMAL; std::cout << ANSI_NORMAL;
std::cout << std::endl; 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; std::cout << std::endl;
} }
@ -844,7 +846,7 @@ void mapStaticEnvBindings(const SymbolTable & st, const StaticEnv & se, const En
if (env.up && se.up) { if (env.up && se.up) {
mapStaticEnvBindings(st, *se.up, *env.up, vm); mapStaticEnvBindings(st, *se.up, *env.up, vm);
if (!env.values[0]->isThunk()) { if (se.isWith && !env.values[0]->isThunk()) {
// add 'with' bindings. // add 'with' bindings.
Bindings::iterator j = env.values[0]->attrs->begin(); Bindings::iterator j = env.values[0]->attrs->begin();
while (j != env.values[0]->attrs->end()) { while (j != env.values[0]->attrs->end()) {

View file

@ -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

View file

@ -122,7 +122,8 @@ nix_tests = \
path-from-hash-part.sh \ path-from-hash-part.sh \
toString-path.sh \ toString-path.sh \
read-only-store.sh \ read-only-store.sh \
nested-sandboxing.sh nested-sandboxing.sh \
debugger.sh
ifeq ($(HAVE_LIBCPUID), 1) ifeq ($(HAVE_LIBCPUID), 1)
nix_tests += compute-levels.sh nix_tests += compute-levels.sh