#include namespace willow { void DiagnosticEngine::report(Diagnostic d) { if (handler) handler(std::move(d)); } DiagnosticBuilder::DiagnosticBuilder(DiagnosticBuilder &&other) noexcept : engine(std::exchange(other.engine, nullptr)), diag(std::move(other.diag)), os(std::move(other.os)) {} DiagnosticBuilder::~DiagnosticBuilder() { if (!engine) // was moved from return; diag.message += os.str(); engine->report(std::move(diag)); } DiagnosticBuilder::DiagnosticBuilder(DiagnosticEngine &eng, Severity severity, std::optional loc) : engine(&eng) { diag.severity = severity; diag.location = loc; } } // namespace willow