summaryrefslogtreecommitdiff
path: root/willow/lib/IR/DiagnosticEngine.cpp
blob: f0cc2805ebf52bbf0a53f7143c92b0b0d1d14c78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <willow/IR/DiagnosticEngine.h>

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<Location> loc)
    : engine(&eng) {
  diag.severity = severity;
  diag.location = loc;
}

} // namespace willow