debugger on autoCallFunction error

This commit is contained in:
Ben Burdette 2021-05-03 14:37:33 -06:00
parent f32c687f03
commit 2dd61411af
2 changed files with 30 additions and 10 deletions

View file

@ -79,24 +79,28 @@ ref<EvalState> EvalCommand::getEvalState()
return ref<EvalState>(evalState);
}
*/
EvalCommand::EvalCommand()
{
addFlag({
.longName = "debugger",
.description = "start an interactive environment if evaluation fails",
.handler = {&startReplOnEvalErrors, true},
});
}
// ref<EvalState> EvalCommand::getEvalState()
// {
// if (!evalState)
// evalState = std::make_shared<EvalState>(searchPath, getStore());
// return ref<EvalState>(evalState);
// }
EvalCommand::EvalCommand()
{
// std::cout << "EvalCommand::EvalCommand()" << std::endl;
addFlag({
.longName = "debugger",
.description = "start an interactive environment if evaluation fails",
.handler = {&startReplOnEvalErrors, true},
});
}
extern std::function<void(const Error & error, const std::map<std::string, Value *> & env)> debuggerHook;
ref<EvalState> EvalCommand::getEvalState()
{
std::cout << " EvalCommand::getEvalState()" << startReplOnEvalErrors << std::endl;
if (!evalState) {
evalState = std::make_shared<EvalState>(searchPath, getStore());
if (startReplOnEvalErrors)

View file

@ -1398,12 +1398,28 @@ void EvalState::autoCallFunction(Bindings & args, Value & fun, Value & res)
if (j != args.end()) {
actualArgs->attrs->push_back(*j);
} else if (!i.def) {
throwMissingArgumentError(i.pos, R"(cannot evaluate a function that has an argument without a value ('%1%')
auto error = MissingArgumentError({
.msg = hintfmt(R"(cannot evaluate a function that has an argument without a value ('%1%')
Nix attempted to evaluate a function as a top level expression; in
this case it must have its arguments supplied either by default
values, or passed explicitly with '--arg' or '--argstr'. See
https://nixos.org/manual/nix/stable/#ss-functions.)", i.name);
https://nixos.org/manual/nix/stable/#ss-functions.)", i.name),
.errPos = i.pos
});
// throwMissingArgumentError(i.pos
// , R"(cannot evaluate a function that has an argument without a value ('%1%')
// Nix attempted to evaluate a function as a top level expression; in
// this case it must have its arguments supplied either by default
// values, or passed explicitly with '--arg' or '--argstr'. See
// https://nixos.org/manual/nix/stable/#ss-functions.)", i.name);
if (debuggerHook)
debuggerHook(error, {{"fun", &fun}});
throw error;
}
}