From 675a5744faa81c43cbb005f031dbbf43e28b756a Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Wed, 25 Jun 2025 10:15:51 +1200 Subject: [PATCH] Changes for bison < 3.6 Includes fix for double quoted tokens in syntax errors. --- frontends/verilog/verilog_lexer.h | 2 +- frontends/verilog/verilog_lexer.l | 2 +- frontends/verilog/verilog_parser.y | 11 +++++++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/frontends/verilog/verilog_lexer.h b/frontends/verilog/verilog_lexer.h index b7885181c..39dccb459 100644 --- a/frontends/verilog/verilog_lexer.h +++ b/frontends/verilog/verilog_lexer.h @@ -25,7 +25,7 @@ namespace VERILOG_FRONTEND { // get rid of override virtual function warning using FlexLexer::yylex; parser::symbol_type terminate() { - return parser::make_FRONTEND_VERILOG_YYEOF(out_loc); + return parser::symbol_type(0, std::move(out_loc)); } private: std::shared_ptr current_filename; diff --git a/frontends/verilog/verilog_lexer.l b/frontends/verilog/verilog_lexer.l index 8e6e022b1..ae042c3d7 100644 --- a/frontends/verilog/verilog_lexer.l +++ b/frontends/verilog/verilog_lexer.l @@ -149,7 +149,7 @@ parser::symbol_type char_tok(char c, parser::location_type loc) { case 'p': return parser::make_TOK_p(loc); case 'x': return parser::make_TOK_x(loc); case 'z': return parser::make_TOK_z(loc); - case 0: return parser::make_FRONTEND_VERILOG_YYEOF(loc); + case 0: return parser::symbol_type(0, std::move(loc)); default: return parser::make_ch_t(c, loc); } diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y index 7ccf404f7..2e1d744b6 100644 --- a/frontends/verilog/verilog_parser.y +++ b/frontends/verilog/verilog_parser.y @@ -428,7 +428,14 @@ void frontend_verilog_yy::parser::error(const frontend_verilog_yy::parser::location_type& loc, const std::string& msg) { - err_at_loc(loc, "%s", msg.c_str()); + std::string new_msg(msg); + size_t pos = new_msg.find("\"'"); + if (pos != std::string::npos) + new_msg.replace(pos, 2, "'"); + pos = new_msg.find("'\""); + if (pos != std::string::npos) + new_msg.replace(pos, 2, "'"); + err_at_loc(loc, "%s", new_msg.c_str()); } // end unqual } @@ -589,7 +596,7 @@ %precedence OP_CAST %precedence UNARY_OPS -%define parse.error detailed +%define parse.error verbose %define parse.lac full %precedence FAKE_THEN