From 990bec78d30c5e23cd6aa83a6f98b1d4199bd8c3 Mon Sep 17 00:00:00 2001 From: Ben Burdette Date: Sat, 8 Jan 2022 15:43:04 -0700 Subject: [PATCH] clear screen and show top debug trace --- src/libcmd/command.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/libcmd/command.cc b/src/libcmd/command.cc index ed8f6d295..5848a15bf 100644 --- a/src/libcmd/command.cc +++ b/src/libcmd/command.cc @@ -77,8 +77,30 @@ ref EvalCommand::getEvalState() searchPath, getEvalStore(), getStore()); if (startReplOnEvalErrors) debuggerHook = [evalState{ref(evalState)}](const Error * error, const Env & env, const Expr & expr) { + std::cout << "\033[2J\033[1;1H"; + if (error) printError("%s\n\n" ANSI_BOLD "Starting REPL to allow you to inspect the current state of the evaluator.\n" ANSI_NORMAL, error->what()); + else + { + auto iter = evalState->debugTraces.begin(); + if (iter != evalState->debugTraces.end()) { + std::cout << "\n" << "… " << iter->hint.str() << "\n"; + + if (iter->pos.has_value() && (*iter->pos)) { + auto pos = iter->pos.value(); + std::cout << "\n"; + printAtPos(pos, std::cout); + + auto loc = getCodeLines(pos); + if (loc.has_value()) { + std::cout << "\n"; + printCodeLines(std::cout, "", pos, *loc); + std::cout << "\n"; + } + } + } + } if (expr.staticenv) {