refact: TraceKind -> TracePrint

Co-authored-by: Rebecca Turner <rbt@sent.as>
This commit is contained in:
Robert Hensing 2024-03-27 16:27:06 +01:00
parent bed541b04e
commit d4fa0a84a5
3 changed files with 16 additions and 10 deletions

View file

@ -826,7 +826,7 @@ static void prim_addErrorContext(EvalState & state, const PosIdx pos, Value * *
auto message = state.coerceToString(pos, *args[0], context, auto message = state.coerceToString(pos, *args[0], context,
"while evaluating the error message passed to builtins.addErrorContext", "while evaluating the error message passed to builtins.addErrorContext",
false, false).toOwned(); false, false).toOwned();
e.addTrace(nullptr, HintFmt(message), TraceKind::Custom); e.addTrace(nullptr, HintFmt(message), TracePrint::Always);
throw; throw;
} }
} }

View file

@ -11,9 +11,9 @@
namespace nix { namespace nix {
void BaseError::addTrace(std::shared_ptr<Pos> && e, HintFmt hint, TraceKind kind) void BaseError::addTrace(std::shared_ptr<Pos> && e, HintFmt hint, TracePrint print)
{ {
err.traces.push_front(Trace { .pos = std::move(e), .hint = hint, .kind = kind }); err.traces.push_front(Trace { .pos = std::move(e), .hint = hint, .print = print });
} }
void throwExceptionSelfCheck(){ void throwExceptionSelfCheck(){
@ -388,7 +388,7 @@ std::ostream & showErrorInfo(std::ostream & out, const ErrorInfo & einfo, bool s
truncate = true; truncate = true;
} }
if (!truncate || trace.kind == TraceKind::Custom) { if (!truncate || trace.print == TracePrint::Always) {
if (tracesSeen.count(trace)) { if (tracesSeen.count(trace)) {
skippedTraces.push_back(trace); skippedTraces.push_back(trace);

View file

@ -61,16 +61,22 @@ void printCodeLines(std::ostream & out,
const Pos & errPos, const Pos & errPos,
const LinesOfCode & loc); const LinesOfCode & loc);
enum struct TraceKind { /**
Other, * When a stack frame is printed.
/** Produced by builtins.addErrorContext. Always printed. */ */
Custom, enum struct TracePrint {
/**
* The default behavior; always printed when `--show-trace` is set.
*/
Default,
/** Always printed. Produced by `builtins.addErrorContext`. */
Always,
}; };
struct Trace { struct Trace {
std::shared_ptr<Pos> pos; std::shared_ptr<Pos> pos;
HintFmt hint; HintFmt hint;
TraceKind kind = TraceKind::Other; TracePrint print = TracePrint::Default;
}; };
inline bool operator<(const Trace& lhs, const Trace& rhs); inline bool operator<(const Trace& lhs, const Trace& rhs);
@ -168,7 +174,7 @@ public:
addTrace(std::move(e), HintFmt(std::string(fs), args...)); addTrace(std::move(e), HintFmt(std::string(fs), args...));
} }
void addTrace(std::shared_ptr<Pos> && e, HintFmt hint, TraceKind kind = TraceKind::Other); void addTrace(std::shared_ptr<Pos> && e, HintFmt hint, TracePrint print = TracePrint::Default);
bool hasTrace() const { return !err.traces.empty(); } bool hasTrace() const { return !err.traces.empty(); }