Make addErrorTrace variadic

This commit is contained in:
Rebecca Turner 2024-02-22 17:18:27 -08:00
parent f05c13ecc2
commit 91e89628fd
No known key found for this signature in database
2 changed files with 11 additions and 7 deletions

View File

@ -806,14 +806,16 @@ void EvalState::runDebugRepl(const Error * error, const Env & env, const Expr &
} }
} }
void EvalState::addErrorTrace(Error & e, const char * s, const std::string & s2) const template<typename... Args>
void EvalState::addErrorTrace(Error & e, const Args & ... formatArgs) const
{ {
e.addTrace(nullptr, s, s2); e.addTrace(nullptr, HintFmt(formatArgs...));
} }
void EvalState::addErrorTrace(Error & e, const PosIdx pos, const char * s, const std::string & s2) const template<typename... Args>
void EvalState::addErrorTrace(Error & e, const PosIdx pos, const Args & ... formatArgs) const
{ {
e.addTrace(positions[pos], HintFmt(s, s2)); e.addTrace(positions[pos], HintFmt(formatArgs...));
} }
template<typename... Args> template<typename... Args>
@ -1588,7 +1590,7 @@ void EvalState::callFunction(Value & fun, size_t nrArgs, Value * * args, Value &
lambda.name lambda.name
? concatStrings("'", symbols[lambda.name], "'") ? concatStrings("'", symbols[lambda.name], "'")
: "anonymous lambda"); : "anonymous lambda");
if (pos) addErrorTrace(e, pos, "from call site%s", ""); if (pos) addErrorTrace(e, pos, "from call site");
} }
throw; throw;
} }

View File

@ -432,10 +432,12 @@ public:
std::string_view forceString(Value & v, NixStringContext & context, const PosIdx pos, std::string_view errorCtx); std::string_view forceString(Value & v, NixStringContext & context, const PosIdx pos, std::string_view errorCtx);
std::string_view forceStringNoCtx(Value & v, const PosIdx pos, std::string_view errorCtx); std::string_view forceStringNoCtx(Value & v, const PosIdx pos, std::string_view errorCtx);
template<typename... Args>
[[gnu::noinline]] [[gnu::noinline]]
void addErrorTrace(Error & e, const char * s, const std::string & s2) const; void addErrorTrace(Error & e, const Args & ... formatArgs) const;
template<typename... Args>
[[gnu::noinline]] [[gnu::noinline]]
void addErrorTrace(Error & e, const PosIdx pos, const char * s, const std::string & s2) const; void addErrorTrace(Error & e, const PosIdx pos, const Args & ... formatArgs) const;
public: public:
/** /**