From 4a909c142c93f43a0d1913b54bc9f7b690f172aa Mon Sep 17 00:00:00 2001 From: Guillaume Maudoux Date: Thu, 20 Oct 2022 14:25:11 +0200 Subject: [PATCH] Rollback unneeded throwFrameErrorWithTrace function --- src/libexpr/eval.cc | 44 ++++++++------------------------------------ src/libexpr/eval.hh | 13 ------------- 2 files changed, 8 insertions(+), 49 deletions(-) diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index 0febff022..0a9ac68be 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -836,37 +836,6 @@ void EvalState::runDebugRepl(const Error * error, const Env & env, const Expr & evaluator. So here are some helper functions for throwing exceptions. */ -template -void EvalState::throwFrameErrorWithTrace( - PosIdx pos, const char* format, - const std::string_view s1, const std::string_view s2, - const Symbol * sym1, const Symbol * sym2, - Value * val1, Value * val2, - PosIdx pos1, - const std::string_view s3, - const Suggestions * suggestions, - PosIdx tracePos, const std::string_view traceStr, - Env * env, Expr * expr) -{ - hintformat f(format); - if (!s1.empty()) { f = f % s1; } - if (!s2.empty()) { f = f % s2; } - if (sym1) { f = f % symbols[*sym1]; } - if (sym2) { f = f % symbols[*sym2]; } - if (val1) { f = f % showType(*val1); } - if (val2) { f = f % showType(*val2); } - if (pos1) { f = f % positions[pos1]; } - if (!s3.empty()) { f = f % s3; } - - auto e = ErrorType(ErrorInfo { - .msg = f, - .errPos = positions[pos], - .suggestions = suggestions ? *suggestions : Suggestions(), - }); - e.addTrace(positions[tracePos], traceStr, true); - debugThrow(e, env, expr); -} - template void EvalState::throwErrorWithTrace( PosIdx pos, const char* format, @@ -1533,7 +1502,7 @@ void EvalState::callFunction(Value & fun, size_t nrArgs, Value * * args, Value & auto j = args[0]->attrs->get(i.name); if (!j) { if (!i.def) { - throwFrameErrorWithTrace(lambda.pos, + throwErrorWithTrace(lambda.pos, "function '%1%' called without required argument '%2%'", (lambda.name ? std::string(symbols[lambda.name]) : "anonymous lambda"), "", &i.name, 0, 0, 0, noPos, "", 0, pos, "from call site", fun.lambda.env, &lambda); @@ -1556,7 +1525,7 @@ void EvalState::callFunction(Value & fun, size_t nrArgs, Value * * args, Value & for (auto & formal : lambda.formals->formals) formalNames.insert(symbols[formal.name]); auto suggestions = Suggestions::bestMatches(formalNames, symbols[i.name]); - throwFrameErrorWithTrace(lambda.pos, + throwErrorWithTrace(lambda.pos, "function '%1%' called with unexpected argument '%2%'", (lambda.name ? std::string(symbols[lambda.name]) : "anonymous lambda"), "", &i.name, 0, 0, 0, noPos, "", &suggestions, pos, "from call site", fun.lambda.env, &lambda); @@ -1582,9 +1551,12 @@ void EvalState::callFunction(Value & fun, size_t nrArgs, Value * * args, Value & lambda.body->eval(*this, env2, vCur); } catch (Error & e) { if (loggerSettings.showTrace.get()) { - addErrorTrace(e, lambda.pos, "while evaluating the '%s' function", - (lambda.name ? std::string(symbols[lambda.name]) : "anonymous lambda")); - if (pos) addErrorTrace(e, pos, "from call site%s", ""); + addErrorTrace(e, + lambda.pos, + "while evaluating the '%s' function", + (lambda.name ? std::string(symbols[lambda.name]) : "anonymous lambda"), + true); + if (pos) addErrorTrace(e, pos, "from call site%s", "", true); } throw; } diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index 3d72d3fe1..234b5c06b 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -312,19 +312,6 @@ public: std::string_view forceString(Value & v, PathSet & context, const PosIdx pos, std::string_view errorCtx); std::string_view forceStringNoCtx(Value & v, const PosIdx pos, std::string_view errorCtx); - template - [[gnu::noinline, gnu::noreturn]] - void throwFrameErrorWithTrace( - PosIdx pos, const char* format, - const std::string_view s1, const std::string_view s2, - const Symbol * sym1, const Symbol * sym2, - Value * val1, Value * val2, - PosIdx pos1, - const std::string_view s3, - const Suggestions * suggestions, - PosIdx tracePos, const std::string_view traceStr, - Env * env, Expr * expr); - template [[gnu::noinline, gnu::noreturn]] void throwErrorWithTrace(