aboutsummaryrefslogtreecommitdiff
path: root/src/libcmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcmd')
-rw-r--r--src/libcmd/command.cc22
1 files changed, 22 insertions, 0 deletions
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<EvalState> EvalCommand::getEvalState()
searchPath, getEvalStore(), getStore());
if (startReplOnEvalErrors)
debuggerHook = [evalState{ref<EvalState>(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)
{