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 <noreply@anthropic.com>
This commit is contained in:
Yukihiro "Matz" Matsumoto
2025-09-26 05:25:17 +09:00
parent 7d72da2842
commit a8222fbab9
3 changed files with 18 additions and 17 deletions
+2 -1
View File
@@ -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)
+8 -8
View File
@@ -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;
+8 -8
View File
@@ -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;