From 242853f1f25320982e9ff32a8bb04cf50eab98d8 Mon Sep 17 00:00:00 2001 From: "Emil J. Tywoniak" Date: Wed, 18 Jun 2025 12:39:32 +0200 Subject: [PATCH] ast, read_verilog: refactoring --- frontends/ast/genrtlil.cc | 2 -- frontends/ast/simplify.cc | 4 ---- frontends/verilog/Makefile.inc | 3 +++ frontends/verilog/verilog_frontend.cc | 9 --------- frontends/verilog/verilog_frontend.h | 5 ----- frontends/verilog/verilog_lexer.h | 3 ++- frontends/verilog/verilog_parser.y | 11 +++++++++++ 7 files changed, 16 insertions(+), 21 deletions(-) diff --git a/frontends/ast/genrtlil.cc b/frontends/ast/genrtlil.cc index e8f964ebf..994c87da6 100644 --- a/frontends/ast/genrtlil.cc +++ b/frontends/ast/genrtlil.cc @@ -1339,8 +1339,6 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint) // be instantiated for this type of AST node. IdString type_name; - current_filename = filename; - switch (type) { // simply ignore this nodes. diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index 86c5efb6d..f4c27caf4 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -1038,8 +1038,6 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin return false; } - current_filename = filename; - // we do not look inside a task or function // (but as soon as a task or function is instantiated we process the generated AST as usual) if (type == AST_FUNCTION || type == AST_TASK) { @@ -1840,8 +1838,6 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin current_scope[it->first] = it->second; } - current_filename = filename; - if (type == AST_MODULE || type == AST_INTERFACE) current_scope.clear(); diff --git a/frontends/verilog/Makefile.inc b/frontends/verilog/Makefile.inc index 2d26f1930..cc8baf6aa 100644 --- a/frontends/verilog/Makefile.inc +++ b/frontends/verilog/Makefile.inc @@ -3,6 +3,9 @@ GENFILES += frontends/verilog/verilog_parser.tab.cc GENFILES += frontends/verilog/verilog_parser.tab.hh GENFILES += frontends/verilog/verilog_parser.output GENFILES += frontends/verilog/verilog_lexer.cc +GENFILES += frontends/verilog/location.hh +GENFILES += frontends/verilog/position.hh +GENFILES += frontends/verilog/stack.hh frontends/verilog/verilog_parser.tab.cc: frontends/verilog/verilog_parser.y $(Q) mkdir -p $(dir $@) diff --git a/frontends/verilog/verilog_frontend.cc b/frontends/verilog/verilog_frontend.cc index 4510538bc..8cb9bb3ae 100644 --- a/frontends/verilog/verilog_frontend.cc +++ b/frontends/verilog/verilog_frontend.cc @@ -787,15 +787,6 @@ void VERILOG_FRONTEND::verr_at(std::string filename, int begin_line, char const exit(1); } -[[noreturn]] -void VERILOG_FRONTEND::err_at_loc(parser::location_type loc, char const *fmt, ...) -{ - va_list args; - va_start(args, fmt); - verr_at(AST::current_filename, loc.begin.line, fmt, args); - va_end(args); -} - [[noreturn]] void VERILOG_FRONTEND::err_at_ast(AstSrcLocType loc, char const *fmt, ...) { diff --git a/frontends/verilog/verilog_frontend.h b/frontends/verilog/verilog_frontend.h index 6426f57d8..29c16c039 100644 --- a/frontends/verilog/verilog_frontend.h +++ b/frontends/verilog/verilog_frontend.h @@ -31,7 +31,6 @@ #include "kernel/yosys.h" #include "frontends/ast/ast.h" -#include "frontends/verilog/location.hh" #if ! defined(yyFlexLexerOnce) #define yyFlexLexer frontend_verilog_yyFlexLexer @@ -66,10 +65,6 @@ namespace VERILOG_FRONTEND }; [[noreturn]] - extern void verr_at(std::string filename, int begin_line, char const *fmt, va_list ap); - [[noreturn]] - extern void err_at_loc(frontend_verilog_yy::location loc, char const *fmt, ...); - [[noreturn]] extern void err_at_ast(AST::AstSrcLocType loc, char const *fmt, ...); }; diff --git a/frontends/verilog/verilog_lexer.h b/frontends/verilog/verilog_lexer.h index 7d73ae193..2c31160dd 100644 --- a/frontends/verilog/verilog_lexer.h +++ b/frontends/verilog/verilog_lexer.h @@ -8,7 +8,8 @@ YOSYS_NAMESPACE_BEGIN namespace VERILOG_FRONTEND { - // lexer input stream + [[noreturn]] + extern void verr_at(std::string filename, int begin_line, char const *fmt, va_list ap); using parser = frontend_verilog_yy::parser; class VerilogLexer : public frontend_verilog_yyFlexLexer { ParseState* extra; diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y index 7233d52b5..24a21a740 100644 --- a/frontends/verilog/verilog_parser.y +++ b/frontends/verilog/verilog_parser.y @@ -244,6 +244,17 @@ node->children.push_back(std::move(rangeNode)); } + [[noreturn]] + extern void verr_at(std::string filename, int begin_line, char const *fmt, va_list ap); + [[noreturn]] + static void err_at_loc(frontend_verilog_yy::parser::location_type loc, char const *fmt, ...) + { + va_list args; + va_start(args, fmt); + verr_at(AST::current_filename, loc.begin.line, fmt, args); + va_end(args); + } + static void checkLabelsMatch(const frontend_verilog_yy::parser::location_type& loc, const char *element, const std::string* before, const std::string *after) { if (!before && after)