aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Burdette <bburdette@protonmail.com>2022-07-11 10:47:09 -0600
committerBen Burdette <bburdette@protonmail.com>2022-07-11 10:47:09 -0600
commita3629ab0ccd40a4492ac99424d84b3649df8b057 (patch)
tree602225a6682ab82ba6116364bf9b4dd60ac6030f
parent6ac8200ff5d21d7c4464b4b3a2d3716fa4b942fd (diff)
move ignore-try to EvalSettings
-rw-r--r--src/libcmd/command.cc9
-rw-r--r--src/libexpr/eval.cc1
-rw-r--r--src/libexpr/eval.hh8
-rw-r--r--src/libexpr/primops.cc2
4 files changed, 8 insertions, 12 deletions
diff --git a/src/libcmd/command.cc b/src/libcmd/command.cc
index 940fd5b23..14bb27936 100644
--- a/src/libcmd/command.cc
+++ b/src/libcmd/command.cc
@@ -91,12 +91,6 @@ EvalCommand::EvalCommand()
.description = "start an interactive environment if evaluation fails",
.handler = {&startReplOnEvalErrors, true},
});
-
- addFlag({
- .longName = "ignore-try",
- .description = "ignore exceptions in try clauses during debug",
- .handler = {&ignoreExceptionsDuringTry, true},
- });
}
EvalCommand::~EvalCommand()
@@ -128,9 +122,6 @@ ref<EvalState> EvalCommand::getEvalState()
if (startReplOnEvalErrors) {
evalState->debugRepl = &runRepl;
};
- if (ignoreExceptionsDuringTry) {
- evalState->ignoreTry = ignoreExceptionsDuringTry;
- };
}
return ref<EvalState>(evalState);
}
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 956c4b474..f485e2fed 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -467,7 +467,6 @@ EvalState::EvalState(
, debugRepl(nullptr)
, debugStop(false)
, debugQuit(false)
- , ignoreTry(false)
, trylevel(0)
, regexCache(makeRegexCache())
#if HAVE_BOEHMGC
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index 9aff77042..b8903c06c 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -130,7 +130,6 @@ public:
void (* debugRepl)(ref<EvalState> es, const ValMap & extraEnv);
bool debugStop;
bool debugQuit;
- bool ignoreTry;
int trylevel;
std::list<DebugTrace> debugTraces;
std::map<const Expr*, const std::shared_ptr<const StaticEnv>> exprEnvs;
@@ -648,6 +647,13 @@ struct EvalSettings : Config
Setting<bool> useEvalCache{this, true, "eval-cache",
"Whether to use the flake evaluation cache."};
+
+ Setting<bool> ignoreExceptionsDuringTry{this, false, "ignore-try",
+ R"(
+ If set to true, ignore exceptions inside 'tryEval' calls when evaluating nix expressions in
+ debug mode (using the --debugger flag). By default the debugger will pause on all exceptions.
+ )"};
+
};
extern EvalSettings evalSettings;
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 3a07e43a7..2201ca0c4 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -856,7 +856,7 @@ static void prim_tryEval(EvalState & state, const PosIdx pos, Value * * args, Va
MaintainCount trylevel(state.trylevel);
void (* savedDebugRepl)(ref<EvalState> es, const ValMap & extraEnv) = nullptr;
- if (state.debugRepl && state.ignoreTry)
+ if (state.debugRepl && evalSettings.ignoreExceptionsDuringTry)
{
/* to prevent starting the repl from exceptions withing a tryEval, null it. */
savedDebugRepl = state.debugRepl;