24#include "lib/compile_context.h"
25#include "lib/cstring.h"
26#include "lib/error_reporter.h"
57template <
typename... Args>
58inline void error(
const char *format, Args &&...args) {
60 auto action = context.getDefaultErrorDiagnosticAction();
61 context.errorReporter().diagnose(action,
nullptr, format,
"", std::forward<Args>(args)...);
67template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
68void error(
const int kind,
const char *format,
const T *node, Args &&...args) {
70 auto action = context.getDefaultErrorDiagnosticAction();
71 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
75template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
76void errorWithSuffix(
const int kind,
const char *format,
const char *suffix,
const T *node,
79 auto action = context.getDefaultErrorDiagnosticAction();
80 context.errorReporter().diagnose(action, kind, format, suffix, node,
81 std::forward<Args>(args)...);
85template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
87void error(
const int kind,
const char *format,
const T &node, Args &&...args) {
88 error(kind, format, &node, std::forward<Args>(args)...);
96template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
97void error(
const char *format,
const T *node, Args &&...args) {
98 error(ErrorType::LEGACY_ERROR, format, node, std::forward<Args>(args)...);
103template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
105void error(
const char *format,
const T &node, Args &&...args) {
106 error(ErrorType::LEGACY_ERROR, format, node, std::forward<Args>(args)...);
112template <
typename... Args>
113void error(
const int kind,
const char *format, Args &&...args) {
115 auto action = context.getDefaultErrorDiagnosticAction();
116 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
121template <
typename... Args>
122inline void warning(
const char *format, Args &&...args) {
124 auto action = context.getDefaultWarningDiagnosticAction();
125 context.errorReporter().diagnose(action,
nullptr, format,
"", std::forward<Args>(args)...);
130template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
131void warning(
const int kind,
const char *format,
const T *node, Args &&...args) {
133 auto action = context.getDefaultWarningDiagnosticAction();
134 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
138template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
140void warning(
const int kind,
const char *format,
const T &node, Args &&...args) {
141 ::P4::warning(kind, format, &node, std::forward<Args>(args)...);
146template <
typename... Args>
147void warning(
const int kind,
const char *format, Args &&...args) {
149 auto action = context.getDefaultWarningDiagnosticAction();
150 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
154template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
155void info(
const int kind,
const char *format,
const T *node, Args &&...args) {
157 auto action = context.getDefaultInfoDiagnosticAction();
158 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
162template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
164void info(
const int kind,
const char *format,
const T &node, Args &&...args) {
165 ::P4::info(kind, format, &node, std::forward<Args>(args)...);
170template <
typename... Args>
171void info(
const int kind,
const char *format, Args &&...args) {
173 auto action = context.getDefaultInfoDiagnosticAction();
174 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
virtual ErrorReporter & errorReporter()
Definition compile_context.cpp:65
static BaseCompileContext & get()
Definition compile_context.cpp:61
unsigned getDiagnosticCount() const
Definition error_reporter.h:185
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24
void warning(const char *format, Args &&...args)
Report a warning with the given message.
Definition lib/error.h:122
unsigned infoCount()
Definition lib/error.h:42
unsigned diagnosticCount()
Definition lib/error.h:46
unsigned warningCount()
Definition lib/error.h:37
void errorWithSuffix(const int kind, const char *format, const char *suffix, const T *node, Args &&...args)
This is similar to the above method, but also has a suffix.
Definition lib/error.h:76
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition lib/error.h:58
void info(const int kind, const char *format, const T *node, Args &&...args)
Report info messages of type kind. Requires that the node argument have source info.
Definition lib/error.h:155
unsigned errorCount()
Definition lib/error.h:34