15#include "lib/compile_context.h"
16#include "lib/cstring.h"
17#include "lib/error_reporter.h"
47template <
typename... Args>
48inline void error(
const char *format, Args &&...args) {
50 auto action = context.getDefaultErrorDiagnosticAction();
51 context.errorReporter().diagnose(action,
nullptr, format,
"", std::forward<Args>(args)...);
57template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
58void error(
const int kind,
const char *format,
const T *node, Args &&...args) {
60 auto action = context.getDefaultErrorDiagnosticAction();
61 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
65template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
66void errorWithSuffix(
const int kind,
const char *format,
const char *suffix,
const T *node,
69 auto action = context.getDefaultErrorDiagnosticAction();
70 context.errorReporter().diagnose(action, kind, format, suffix, node,
71 std::forward<Args>(args)...);
75template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
77void error(
const int kind,
const char *format,
const T &node, Args &&...args) {
78 error(kind, format, &node, std::forward<Args>(args)...);
86template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
87void error(
const char *format,
const T *node, Args &&...args) {
88 error(ErrorType::LEGACY_ERROR, format, node, std::forward<Args>(args)...);
93template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
95void error(
const char *format,
const T &node, Args &&...args) {
96 error(ErrorType::LEGACY_ERROR, format, node, std::forward<Args>(args)...);
102template <
typename... Args>
103void error(
const int kind,
const char *format, Args &&...args) {
105 auto action = context.getDefaultErrorDiagnosticAction();
106 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
110#define ERROR_CHECK(e, ...) \
112 if (!(e)) ::P4::error(__VA_ARGS__); \
117template <
typename... Args>
118inline void warning(
const char *format, Args &&...args) {
120 auto action = context.getDefaultWarningDiagnosticAction();
121 context.errorReporter().diagnose(action,
nullptr, format,
"", std::forward<Args>(args)...);
126template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
127void warning(
const int kind,
const char *format,
const T *node, Args &&...args) {
129 auto action = context.getDefaultWarningDiagnosticAction();
130 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
134template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
136void warning(
const int kind,
const char *format,
const T &node, Args &&...args) {
137 ::P4::warning(kind, format, &node, std::forward<Args>(args)...);
142template <
typename... Args>
143void warning(
const int kind,
const char *format, Args &&...args) {
145 auto action = context.getDefaultWarningDiagnosticAction();
146 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
150#define WARN_CHECK(e, ...) \
152 if (!(e)) ::P4::warning(__VA_ARGS__); \
156template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
157void info(
const int kind,
const char *format,
const T *node, Args &&...args) {
159 auto action = context.getDefaultInfoDiagnosticAction();
160 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
164template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
166void info(
const int kind,
const char *format,
const T &node, Args &&...args) {
167 ::P4::info(kind, format, &node, std::forward<Args>(args)...);
172template <
typename... Args>
173void info(
const int kind,
const char *format, Args &&...args) {
175 auto action = context.getDefaultInfoDiagnosticAction();
176 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
virtual ErrorReporter & errorReporter()
Definition compile_context.cpp:59
static BaseCompileContext & get()
Definition compile_context.cpp:55
unsigned getDiagnosticCount() const
Definition error_reporter.h:174
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13
void warning(const char *format, Args &&...args)
Report a warning with the given message.
Definition lib/error.h:118
unsigned infoCount()
Definition lib/error.h:33
unsigned diagnosticCount()
Definition lib/error.h:37
unsigned warningCount()
Definition lib/error.h:28
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:66
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition lib/error.h:48
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:157
unsigned errorCount()
Definition lib/error.h:25