From b1ef48980ddd082a90ed39aa5914af45e53059e6 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 6 Jan 2025 09:47:58 +0100 Subject: [PATCH] flex code modernization: Replace YY_EXTRA_TYPE define with flex option Replace #define YY_EXTRA_TYPE with %option extra-type. The latter is the way recommended by the flex manual (available since flex 2.5.34). Reviewed-by: Heikki Linnakangas Discussion: https://www.postgresql.org/message-id/flat/eb6faeac-2a8a-4b69-9189-c33c520e5b7b@eisentraut.org --- src/backend/parser/scan.l | 7 +------ src/backend/replication/repl_scanner.l | 2 +- src/backend/replication/syncrep_scanner.l | 2 +- src/backend/utils/adt/jsonpath_scan.l | 2 +- src/bin/psql/psqlscanslash.l | 12 ++++++------ src/fe_utils/psqlscan.l | 12 ++++++------ 6 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index 1d5dfe8312..8031a78b90 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -89,12 +89,6 @@ const uint16 ScanKeywordTokens[] = { */ #define YYSTYPE core_YYSTYPE -/* - * Set the type of yyextra. All state variables used by the scanner should - * be in yyextra, *not* statically allocated. - */ -#define YY_EXTRA_TYPE core_yy_extra_type * - /* * Each call to yylex must set yylloc to the location of the found token * (expressed as a byte offset from the start of the input text). @@ -161,6 +155,7 @@ extern void core_yyset_column(int column_no, yyscan_t yyscanner); %option noyyfree %option warn %option prefix="core_yy" +%option extra-type="core_yy_extra_type *" /* * OK, here is a short description of lex/flex rules behavior. diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l index 0d1ac2d238..de10cb5abd 100644 --- a/src/backend/replication/repl_scanner.l +++ b/src/backend/replication/repl_scanner.l @@ -46,7 +46,6 @@ struct replication_yy_extra_type /* Work area for collecting literals */ StringInfoData litbuf; }; -#define YY_EXTRA_TYPE struct replication_yy_extra_type * static void startlit(yyscan_t yyscanner); static char *litbufdup(yyscan_t yyscanner); @@ -70,6 +69,7 @@ static void addlitchar(unsigned char ychar, yyscan_t yyscanner); %option noyyfree %option warn %option prefix="replication_yy" +%option extra-type="struct replication_yy_extra_type *" /* * Exclusive states: diff --git a/src/backend/replication/syncrep_scanner.l b/src/backend/replication/syncrep_scanner.l index 4db6732995..05e5fdecf1 100644 --- a/src/backend/replication/syncrep_scanner.l +++ b/src/backend/replication/syncrep_scanner.l @@ -41,7 +41,6 @@ struct syncrep_yy_extra_type { StringInfoData xdbuf; }; -#define YY_EXTRA_TYPE struct syncrep_yy_extra_type * /* LCOV_EXCL_START */ @@ -60,6 +59,7 @@ struct syncrep_yy_extra_type %option noyyfree %option warn %option prefix="syncrep_yy" +%option extra-type="struct syncrep_yy_extra_type *" /* * delimited identifiers (double-quoted identifiers) diff --git a/src/backend/utils/adt/jsonpath_scan.l b/src/backend/utils/adt/jsonpath_scan.l index 2efc33f954..c7aab83eeb 100644 --- a/src/backend/utils/adt/jsonpath_scan.l +++ b/src/backend/utils/adt/jsonpath_scan.l @@ -34,7 +34,6 @@ struct jsonpath_yy_extra_type { JsonPathString scanstring; }; -#define YY_EXTRA_TYPE struct jsonpath_yy_extra_type * static void addstring(bool init, char *s, int l, yyscan_t yyscanner); static void addchar(bool init, char c, yyscan_t yyscanner); @@ -64,6 +63,7 @@ fprintf_to_ereport(const char *fmt, const char *msg) %option noyywrap %option warn %option prefix="jsonpath_yy" +%option extra-type="struct jsonpath_yy_extra_type *" %option reentrant %option bison-bridge %option noyyalloc diff --git a/src/bin/psql/psqlscanslash.l b/src/bin/psql/psqlscanslash.l index 35fde05661..f76b7722ac 100644 --- a/src/bin/psql/psqlscanslash.l +++ b/src/bin/psql/psqlscanslash.l @@ -38,12 +38,6 @@ */ typedef int YYSTYPE; -/* - * Set the type of yyextra; we use it as a pointer back to the containing - * PsqlScanState. - */ -#define YY_EXTRA_TYPE PsqlScanState - /* * These variables do not need to be saved across calls. Yeah, it's a bit * of a hack, but putting them into PsqlScanStateData would be klugy too. @@ -88,6 +82,12 @@ extern void slash_yyset_column(int column_no, yyscan_t yyscanner); %option warn %option prefix="slash_yy" +/* + * Set the type of yyextra; we use it as a pointer back to the containing + * PsqlScanState. + */ +%option extra-type="PsqlScanState" + /* * OK, here is a short description of lex/flex rules behavior. * The longest pattern which matches an input string is always chosen. diff --git a/src/fe_utils/psqlscan.l b/src/fe_utils/psqlscan.l index bdea4c4305..e1cb726f32 100644 --- a/src/fe_utils/psqlscan.l +++ b/src/fe_utils/psqlscan.l @@ -52,12 +52,6 @@ */ typedef int YYSTYPE; -/* - * Set the type of yyextra; we use it as a pointer back to the containing - * PsqlScanState. - */ -#define YY_EXTRA_TYPE PsqlScanState - /* Return values from yylex() */ #define LEXRES_EOL 0 /* end of input */ @@ -89,6 +83,12 @@ extern void psql_yyset_column(int column_no, yyscan_t yyscanner); %option warn %option prefix="psql_yy" +/* + * Set the type of yyextra; we use it as a pointer back to the containing + * PsqlScanState. + */ +%option extra-type="PsqlScanState" + /* * All of the following definitions and rules should exactly match * src/backend/parser/scan.l so far as the flex patterns are concerned. -- 2.39.5