From 168ec2b1e5ad0e4688e963d9de019557c78feed9 Mon Sep 17 00:00:00 2001 From: NAKAMURA Usaku Date: Thu, 24 Nov 2022 21:42:08 +0900 Subject: Use %printer directive for Bison 3.8 (used release flow) This is backport of fa05697e4832fbd67a4f91b9bb362471902faab3 --- parse.y | 74 +++++++++++++++++++++++++-------------------------------------- version.h | 2 +- 2 files changed, 30 insertions(+), 46 deletions(-) diff --git a/parse.y b/parse.y index 2bf825a052..dffb8b2a5c 100644 --- a/parse.y +++ b/parse.y @@ -46,7 +46,6 @@ #define YYCALLOC(nelem, size) rb_parser_calloc(p, (nelem), (size)) #define YYFREE(ptr) rb_parser_free(p, (ptr)) #define YYFPRINTF rb_parser_printf -#define YYPRINT(out, tok, val) parser_token_value_print(p, (tok), &(val)) #define YY_LOCATION_PRINT(File, loc) \ rb_parser_printf(p, "%d.%d-%d.%d", \ (loc).beg_pos.lineno, (loc).beg_pos.column,\ @@ -602,7 +601,6 @@ RUBY_SYMBOL_EXPORT_END static void error_duplicate_pattern_variable(struct parser_params *p, ID id, const YYLTYPE *loc); static void error_duplicate_pattern_key(struct parser_params *p, ID id, const YYLTYPE *loc); -static void parser_token_value_print(struct parser_params *p, enum yytokentype type, const YYSTYPE *valp); static ID formal_argument(struct parser_params*, ID); static ID shadowing_lvar(struct parser_params*,ID); static void new_bv(struct parser_params*,ID); @@ -969,6 +967,35 @@ static int looking_at_eol_p(struct parser_params *p); %expect 0 %define api.pure %define parse.error verbose +%printer { +#ifndef RIPPER + rb_parser_printf(p, "%"PRIsVALUE, rb_id2str($$)); +#else + rb_parser_printf(p, "%"PRIsVALUE, RNODE($$)->nd_rval); +#endif +} tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL tOP_ASGN +%printer { +#ifndef RIPPER + rb_parser_printf(p, "%+"PRIsVALUE, $$->nd_lit); +#else + rb_parser_printf(p, "%+"PRIsVALUE, get_value($$)); +#endif +} tINTEGER tFLOAT tRATIONAL tIMAGINARY tSTRING_CONTENT tCHAR +%printer { +#ifndef RIPPER + rb_parser_printf(p, "$%ld", $$->nd_nth); +#else + rb_parser_printf(p, "%"PRIsVALUE, $$); +#endif +} tNTH_REF +%printer { +#ifndef RIPPER + rb_parser_printf(p, "$%c", (int)$$->nd_nth); +#else + rb_parser_printf(p, "%"PRIsVALUE, $$); +#endif +} tBACK_REF + %lex-param {struct parser_params *p} %parse-param {struct parser_params *p} %initial-action @@ -10424,49 +10451,6 @@ rb_parser_set_location(struct parser_params *p, YYLTYPE *yylloc) } #endif /* !RIPPER */ -static void -parser_token_value_print(struct parser_params *p, enum yytokentype type, const YYSTYPE *valp) -{ - VALUE v; - - switch (type) { - case tIDENTIFIER: case tFID: case tGVAR: case tIVAR: - case tCONSTANT: case tCVAR: case tLABEL: case tOP_ASGN: -#ifndef RIPPER - v = rb_id2str(valp->id); -#else - v = valp->node->nd_rval; -#endif - rb_parser_printf(p, "%"PRIsVALUE, v); - break; - case tINTEGER: case tFLOAT: case tRATIONAL: case tIMAGINARY: - case tSTRING_CONTENT: case tCHAR: -#ifndef RIPPER - v = valp->node->nd_lit; -#else - v = valp->val; -#endif - rb_parser_printf(p, "%+"PRIsVALUE, v); - break; - case tNTH_REF: -#ifndef RIPPER - rb_parser_printf(p, "$%ld", valp->node->nd_nth); -#else - rb_parser_printf(p, "%"PRIsVALUE, valp->val); -#endif - break; - case tBACK_REF: -#ifndef RIPPER - rb_parser_printf(p, "$%c", (int)valp->node->nd_nth); -#else - rb_parser_printf(p, "%"PRIsVALUE, valp->val); -#endif - break; - default: - break; - } -} - static int assignable0(struct parser_params *p, ID id, const char **err) { diff --git a/version.h b/version.h index 6c826b5f0a..a529bc9d56 100644 --- a/version.h +++ b/version.h @@ -2,7 +2,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 7 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 220 +#define RUBY_PATCHLEVEL 221 #define RUBY_RELEASE_YEAR 2022 #define RUBY_RELEASE_MONTH 11 -- cgit v1.2.3