3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-09-22 17:31:28 +00:00

Use C++ stringf machinery in verilog_error

This commit is contained in:
Robert O'Callahan 2025-09-12 06:13:13 +00:00
parent 733b6f0124
commit 8cd3c069d6
2 changed files with 20 additions and 31 deletions

View file

@ -32,37 +32,14 @@ USING_YOSYS_NAMESPACE
*/ */
[[noreturn]] [[noreturn]]
static void verr_at(std::string filename, int begin_line, char const *fmt, va_list ap) void VERILOG_FRONTEND::formatted_err_at_loc(Location loc, std::string str)
{ {
char buffer[1024]; YOSYS_NAMESPACE_PREFIX log_file_error(loc.begin.filename ? *(loc.begin.filename) : "UNKNOWN", loc.begin.line,
char *p = buffer; "%s\n", std::move(str));
p += vsnprintf(p, buffer + sizeof(buffer) - p, fmt, ap);
p += snprintf(p, buffer + sizeof(buffer) - p, "\n");
YOSYS_NAMESPACE_PREFIX log_file_error(filename, begin_line, "%s", buffer);
exit(1);
} }
static void vwarn_at(std::string filename, int begin_line, char const *fmt, va_list ap) void VERILOG_FRONTEND::formatted_warn_at_loc(Location loc, std::string str)
{ {
char buffer[1024]; YOSYS_NAMESPACE_PREFIX log_file_warning(loc.begin.filename ? *(loc.begin.filename) : "UNKNOWN", loc.begin.line,
char *p = buffer; "%s\n", std::move(str));
p += vsnprintf(p, buffer + sizeof(buffer) - p, fmt, ap);
p += snprintf(p, buffer + sizeof(buffer) - p, "\n");
YOSYS_NAMESPACE_PREFIX log_file_warning(filename, begin_line, "%s", buffer);
} }
[[noreturn]]
void VERILOG_FRONTEND::err_at_loc(Location loc, char const *fmt, ...)
{
va_list args;
va_start(args, fmt);
verr_at(loc.begin.filename ? *(loc.begin.filename) : "UNKNOWN", loc.begin.line, fmt, args);
}
void VERILOG_FRONTEND::warn_at_loc(Location loc, char const *fmt, ...)
{
va_list args;
va_start(args, fmt);
vwarn_at(loc.begin.filename ? *(loc.begin.filename) : "UNKNOWN", loc.begin.line, fmt, args);
va_end(args);
}

View file

@ -10,8 +10,20 @@ YOSYS_NAMESPACE_BEGIN
namespace VERILOG_FRONTEND namespace VERILOG_FRONTEND
{ {
[[noreturn]] [[noreturn]]
void err_at_loc(Location loc, char const *fmt, ...); void formatted_err_at_loc(Location loc, std::string str);
void warn_at_loc(Location loc, char const *fmt, ...); template <typename... Args>
[[noreturn]]
void err_at_loc(Location loc, FmtString<TypeIdentity<Args>...> fmt, const Args &... args)
{
formatted_err_at_loc(std::move(loc), fmt.format(args...));
}
void formatted_warn_at_loc(Location loc, std::string str);
template <typename... Args>
void warn_at_loc(Location loc, FmtString<TypeIdentity<Args>...> fmt, const Args &... args)
{
formatted_warn_at_loc(std::move(loc), fmt.format(args...));
}
}; };
YOSYS_NAMESPACE_END YOSYS_NAMESPACE_END