From a8222fbab95415a85400bda1407bf5de5c64f6f3 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 26 Sep 2025 05:25:17 +0900 Subject: [PATCH] mruby-compiler: improve NODE_REGX parser dump to use dump_str Replace manual pattern parsing with dump_str to properly handle both simple and dynamic regex patterns. This provides consistent output format for literal strings and interpolated expressions. Co-authored-by: Claude --- mrbgems/mruby-compiler/core/node.h | 3 ++- mrbgems/mruby-compiler/core/parse.y | 16 ++++++++-------- mrbgems/mruby-compiler/core/y.tab.c | 16 ++++++++-------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/mrbgems/mruby-compiler/core/node.h b/mrbgems/mruby-compiler/core/node.h index 06ee34cc0..93c522a8a 100644 --- a/mrbgems/mruby-compiler/core/node.h +++ b/mrbgems/mruby-compiler/core/node.h @@ -649,7 +649,8 @@ struct mrb_ast_dsym_node { #define XSTR_NODE_LIST(n) (xstr_node(n)->list) #define REGX_NODE_LIST(n) (regx_node(n)->list) -#define REGX_NODE_OPTIONS(n) (regx_node(n)->options) +#define REGX_NODE_FLAGS(n) (regx_node(n)->flags) +#define REGX_NODE_ENCODING(n) (regx_node(n)->encoding) #define HEREDOC_NODE_NAME(n) (heredoc_node(n)->name) #define DSYM_NODE_LIST(n) (dsym_node(n)->list) diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index a0bcd8b2b..cb47995eb 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -8214,16 +8214,16 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) case NODE_REGX: printf("NODE_REGX:\n"); - dump_recur(mrb, tree->car, offset+1); - dump_prefix(offset+1, lineno); - printf("tail: %s\n", (char*)tree->cdr->cdr->car); - if (tree->cdr->cdr->cdr->car) { - dump_prefix(offset+1, lineno); - printf("opt: %s\n", (char*)tree->cdr->cdr->cdr->car); + if (REGX_NODE_LIST(tree)) { + dump_str(mrb, REGX_NODE_LIST(tree), offset+1, lineno); } - if (tree->cdr->cdr->cdr->cdr) { + if (REGX_NODE_FLAGS(tree)) { dump_prefix(offset+1, lineno); - printf("enc: %s\n", (char*)tree->cdr->cdr->cdr->cdr); + printf("flags: %s\n", REGX_NODE_FLAGS(tree)); + } + if (REGX_NODE_ENCODING(tree)) { + dump_prefix(offset+1, lineno); + printf("encoding: %s\n", REGX_NODE_ENCODING(tree)); } break; diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 46db0bdfc..28ecbe7a1 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -15043,16 +15043,16 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) case NODE_REGX: printf("NODE_REGX:\n"); - dump_recur(mrb, tree->car, offset+1); - dump_prefix(offset+1, lineno); - printf("tail: %s\n", (char*)tree->cdr->cdr->car); - if (tree->cdr->cdr->cdr->car) { - dump_prefix(offset+1, lineno); - printf("opt: %s\n", (char*)tree->cdr->cdr->cdr->car); + if (REGX_NODE_LIST(tree)) { + dump_str(mrb, REGX_NODE_LIST(tree), offset+1, lineno); } - if (tree->cdr->cdr->cdr->cdr) { + if (REGX_NODE_FLAGS(tree)) { dump_prefix(offset+1, lineno); - printf("enc: %s\n", (char*)tree->cdr->cdr->cdr->cdr); + printf("flags: %s\n", REGX_NODE_FLAGS(tree)); + } + if (REGX_NODE_ENCODING(tree)) { + dump_prefix(offset+1, lineno); + printf("encoding: %s\n", REGX_NODE_ENCODING(tree)); } break;