From 192581e785fabe45200a1890087a8fb8c8e65cae Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 14 Dec 2020 11:36:21 +0100 Subject: [PATCH] Replace two deprecated parser generator directives There is a conflict between Flex's bison-bridge and Bison's api.prefix options. Apparently, the former was added without consulting the Bison devs and requires YYSTYPE, which is not added to the header anymore by the latter. Instead, we just provide the proper definition of yyflex() manually (as recommended by the Bison docs), so the option is not required anymore. --- src/libstrongswan/settings/settings_lexer.l | 4 ++-- src/libstrongswan/settings/settings_parser.y | 15 +++++++++++---- src/starter/parser/lexer.l | 4 ++-- src/starter/parser/parser.y | 15 +++++++++++---- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/libstrongswan/settings/settings_lexer.l b/src/libstrongswan/settings/settings_lexer.l index e8c2b9884..cd9b5ff5e 100644 --- a/src/libstrongswan/settings/settings_lexer.l +++ b/src/libstrongswan/settings/settings_lexer.l @@ -37,8 +37,8 @@ static void include_files(parser_helper_t *ctx); /* due to that disable interactive mode, which requires isatty() */ %option never-interactive -/* don't use global variables, and interact properly with bison */ -%option reentrant bison-bridge +/* don't use global variables */ +%option reentrant /* maintain the line number */ %option yylineno diff --git a/src/libstrongswan/settings/settings_parser.y b/src/libstrongswan/settings/settings_parser.y index cc1c91775..a541e6b9c 100644 --- a/src/libstrongswan/settings/settings_parser.y +++ b/src/libstrongswan/settings/settings_parser.y @@ -55,20 +55,27 @@ static void add_references(parser_helper_t *ctx, array_t *references); * Make sure to call lexer with the proper context */ #undef yylex -static int yylex(YYSTYPE *lvalp, parser_helper_t *ctx) +static int yylex(SETTINGS_PARSER_STYPE *yylval, parser_helper_t *ctx) { - return settings_parser_lex(lvalp, ctx->scanner); + return settings_parser_lex(yylval, ctx->scanner); } %} %debug /* generate verbose error messages */ -%error-verbose +%define parse.error verbose /* generate a reentrant parser */ %define api.pure /* prefix function/variable declarations */ -%name-prefix "settings_parser_" +%define api.prefix {settings_parser_} +/* make sure flex uses the right definition */ +%code provides +{ + #define YY_DECL \ + int settings_parser_lex(SETTINGS_PARSER_STYPE *yylval, void *yyscanner) + YY_DECL; +} /* interact properly with the reentrant lexer */ %lex-param {parser_helper_t *ctx} diff --git a/src/starter/parser/lexer.l b/src/starter/parser/lexer.l index 1faec953e..c856af77d 100644 --- a/src/starter/parser/lexer.l +++ b/src/starter/parser/lexer.l @@ -38,8 +38,8 @@ static void include_files(parser_helper_t *ctx); /* due to that disable interactive mode, which requires isatty() */ %option never-interactive -/* don't use global variables, and interact properly with bison */ -%option reentrant bison-bridge +/* don't use global variables */ +%option reentrant /* maintain the line number */ %option yylineno diff --git a/src/starter/parser/parser.y b/src/starter/parser/parser.y index 1371fe931..09325d975 100644 --- a/src/starter/parser/parser.y +++ b/src/starter/parser/parser.y @@ -48,20 +48,27 @@ static void conf_parser_error(parser_helper_t *ctx, const char *s); * Make sure to call lexer with the proper context */ #undef yylex -static int yylex(YYSTYPE *lvalp, parser_helper_t *ctx) +static int yylex(CONF_PARSER_STYPE *yylval, parser_helper_t *ctx) { - return conf_parser_lex(lvalp, ctx->scanner); + return conf_parser_lex(yylval, ctx->scanner); } %} %debug /* generate verbose error messages */ -%error-verbose +%define parse.error verbose /* generate a reentrant parser */ %define api.pure /* prefix function/variable declarations */ -%name-prefix "conf_parser_" +%define api.prefix {conf_parser_} +/* make sure flex uses the right definition */ +%code provides +{ + #define YY_DECL \ + int conf_parser_lex(CONF_PARSER_STYPE *yylval, void *yyscanner) + YY_DECL; +} /* interact properly with the reentrant lexer */ %lex-param {parser_helper_t *ctx}