mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-compiler: remove old NODE_REGX and consolidate with NODE_DREGX
Remove the original NODE_REGX node type and related infrastructure, then rename NODE_DREGX to NODE_REGX to consolidate regex handling under a single node type. Changes based on git diff: - Remove original mrb_ast_regx_node structure with pattern fields - Remove gen_regx_var() function handling literal regex patterns - Remove NODE_REGX case from codegen and parser dump - Rename NODE_DREGX to NODE_REGX for dynamic regex expressions - Update all related functions and structure references Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -4694,48 +4694,6 @@ gen_str_var(codegen_scope *s, node *varnode, int val)
|
||||
gen_string(s, list, val);
|
||||
}
|
||||
|
||||
static void
|
||||
gen_regx_var(codegen_scope *s, node *varnode, int val)
|
||||
{
|
||||
if (val) {
|
||||
struct mrb_ast_regx_node *regx_n = regx_node(varnode->car);
|
||||
const char *p1 = REGX_NODE_PATTERN(regx_n);
|
||||
const char *p2 = REGX_NODE_FLAGS(regx_n);
|
||||
const char *p3 = REGX_NODE_ENCODING(regx_n);
|
||||
int sym = new_sym(s, mrb_intern_lit(s->mrb, REGEXP_CLASS));
|
||||
int off = new_lit_cstr(s, p1);
|
||||
int argc = 1;
|
||||
|
||||
genop_1(s, OP_OCLASS, cursp());
|
||||
genop_2(s, OP_GETMCNST, cursp(), sym);
|
||||
push();
|
||||
genop_2(s, OP_STRING, cursp(), off);
|
||||
push();
|
||||
if (p2 || p3) {
|
||||
if (p2) { /* opt */
|
||||
off = new_lit_cstr(s, p2);
|
||||
genop_2(s, OP_STRING, cursp(), off);
|
||||
}
|
||||
else {
|
||||
genop_1(s, OP_LOADNIL, cursp());
|
||||
}
|
||||
push();
|
||||
argc++;
|
||||
if (p3) { /* enc */
|
||||
off = new_lit_str(s, p3, 1);
|
||||
genop_2(s, OP_STRING, cursp(), off);
|
||||
push();
|
||||
argc++;
|
||||
}
|
||||
}
|
||||
push(); /* space for a block */
|
||||
pop_n(argc+2);
|
||||
sym = new_sym(s, MRB_SYM_2(s->mrb, compile));
|
||||
genop_3(s, OP_SEND, cursp(), sym, argc);
|
||||
push();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gen_dot2_var(codegen_scope *s, node *varnode, int val)
|
||||
{
|
||||
@@ -5019,9 +4977,9 @@ gen_xstr_var(codegen_scope *s, node *varnode, int val)
|
||||
}
|
||||
|
||||
static void
|
||||
gen_dregx_var(codegen_scope *s, node *varnode, int val)
|
||||
gen_regx_var(codegen_scope *s, node *varnode, int val)
|
||||
{
|
||||
struct mrb_ast_dregx_node *n = dregx_node(varnode);
|
||||
struct mrb_ast_regx_node *n = regx_node(varnode);
|
||||
|
||||
if (val) {
|
||||
int sym = new_sym(s, mrb_intern_lit(s->mrb, REGEXP_CLASS));
|
||||
@@ -5656,10 +5614,6 @@ codegen(codegen_scope *s, node *tree, int val)
|
||||
gen_str_var(s, tree, val);
|
||||
break;
|
||||
|
||||
case NODE_REGX:
|
||||
gen_regx_var(s, tree, val);
|
||||
break;
|
||||
|
||||
case NODE_DOT2:
|
||||
gen_dot2_var(s, tree, val);
|
||||
break;
|
||||
@@ -5728,8 +5682,8 @@ codegen(codegen_scope *s, node *tree, int val)
|
||||
gen_xstr_var(s, tree, val);
|
||||
break;
|
||||
|
||||
case NODE_DREGX:
|
||||
gen_dregx_var(s, tree, val);
|
||||
case NODE_REGX:
|
||||
gen_regx_var(s, tree, val);
|
||||
break;
|
||||
|
||||
case NODE_HEREDOC:
|
||||
|
||||
@@ -58,7 +58,6 @@ enum node_type {
|
||||
NODE_STR,
|
||||
NODE_XSTR,
|
||||
NODE_REGX,
|
||||
NODE_DREGX,
|
||||
NODE_SPLAT,
|
||||
NODE_TO_ARY,
|
||||
NODE_SVALUE,
|
||||
@@ -465,14 +464,6 @@ struct mrb_ast_super_node {
|
||||
|
||||
/* Variable-sized literal node structures */
|
||||
|
||||
struct mrb_ast_regx_node {
|
||||
struct mrb_ast_var_header header;
|
||||
const char *pattern;
|
||||
int pattern_len;
|
||||
const char *flags;
|
||||
const char *encoding;
|
||||
};
|
||||
|
||||
struct mrb_ast_dot2_node {
|
||||
struct mrb_ast_var_header header;
|
||||
struct mrb_ast_node *left;
|
||||
@@ -491,7 +482,6 @@ struct mrb_ast_float_node {
|
||||
};
|
||||
|
||||
/* Literal node casting macros */
|
||||
#define regx_node(n) ((struct mrb_ast_regx_node*)(n))
|
||||
#define dot2_node(n) ((struct mrb_ast_dot2_node*)(n))
|
||||
#define dot3_node(n) ((struct mrb_ast_dot3_node*)(n))
|
||||
#define float_node(n) ((struct mrb_ast_float_node*)(n))
|
||||
@@ -499,10 +489,6 @@ struct mrb_ast_float_node {
|
||||
/* Literal node value access macros */
|
||||
#define STR_NODE_LIST(n) (str_node(n)->list)
|
||||
|
||||
#define REGX_NODE_PATTERN(n) (regx_node(n)->pattern)
|
||||
#define REGX_NODE_FLAGS(n) (regx_node(n)->flags)
|
||||
#define REGX_NODE_ENCODING(n) (regx_node(n)->encoding)
|
||||
|
||||
#define DOT2_NODE_LEFT(n) (dot2_node(n)->left)
|
||||
#define DOT2_NODE_RIGHT(n) (dot2_node(n)->right)
|
||||
|
||||
@@ -639,14 +625,13 @@ struct mrb_ast_xstr_node {
|
||||
struct mrb_ast_node *list;
|
||||
};
|
||||
|
||||
struct mrb_ast_dregx_node {
|
||||
struct mrb_ast_regx_node {
|
||||
struct mrb_ast_var_header header;
|
||||
struct mrb_ast_node *list;
|
||||
const char *flags;
|
||||
const char *encoding;
|
||||
};
|
||||
|
||||
|
||||
struct mrb_ast_heredoc_node {
|
||||
struct mrb_ast_var_header header;
|
||||
struct mrb_parser_heredoc_info info;
|
||||
@@ -658,13 +643,13 @@ struct mrb_ast_dsym_node {
|
||||
};
|
||||
|
||||
#define xstr_node(n) ((struct mrb_ast_xstr_node*)(n))
|
||||
#define dregx_node(n) ((struct mrb_ast_dregx_node*)(n))
|
||||
#define regx_node(n) ((struct mrb_ast_regx_node*)(n))
|
||||
#define heredoc_node(n) ((struct mrb_ast_heredoc_node*)(n))
|
||||
#define dsym_node(n) ((struct mrb_ast_dsym_node*)(n))
|
||||
|
||||
#define XSTR_NODE_LIST(n) (xstr_node(n)->list)
|
||||
#define DREGX_NODE_LIST(n) (dregx_node(n)->list)
|
||||
#define DREGX_NODE_OPTIONS(n) (dregx_node(n)->options)
|
||||
#define REGX_NODE_LIST(n) (regx_node(n)->list)
|
||||
#define REGX_NODE_OPTIONS(n) (regx_node(n)->options)
|
||||
#define HEREDOC_NODE_NAME(n) (heredoc_node(n)->name)
|
||||
#define DSYM_NODE_LIST(n) (dsym_node(n)->list)
|
||||
|
||||
|
||||
@@ -1482,12 +1482,12 @@ new_dsym(parser_state *p, node *a)
|
||||
return (node*)n;
|
||||
}
|
||||
|
||||
/* (:dregx . (list . (flags . encoding))) */
|
||||
/* (:regx . (list . (flags . encoding))) */
|
||||
static node*
|
||||
new_dregx(parser_state *p, node *list, const char *flags, const char *encoding)
|
||||
new_regx(parser_state *p, node *list, const char *flags, const char *encoding)
|
||||
{
|
||||
struct mrb_ast_dregx_node *n = (struct mrb_ast_dregx_node*)parser_palloc(p, sizeof(struct mrb_ast_dregx_node));
|
||||
init_var_header(&n->header, p, NODE_DREGX);
|
||||
struct mrb_ast_regx_node *n = (struct mrb_ast_regx_node*)parser_palloc(p, sizeof(struct mrb_ast_regx_node));
|
||||
init_var_header(&n->header, p, NODE_REGX);
|
||||
n->list = list;
|
||||
n->flags = flags;
|
||||
n->encoding = encoding;
|
||||
@@ -1893,7 +1893,7 @@ prohibit_literals(parser_state *p, node *n)
|
||||
case NODE_INT:
|
||||
case NODE_STR:
|
||||
case NODE_XSTR:
|
||||
case NODE_DREGX:
|
||||
case NODE_REGX:
|
||||
case NODE_MATCH:
|
||||
case NODE_FLOAT:
|
||||
case NODE_ARRAY:
|
||||
@@ -3870,7 +3870,7 @@ regexp : tREGEXP_BEG tREGEXP
|
||||
const char *encoding = (const char*)data->cdr->cdr;
|
||||
/* Use data->car directly as pattern_list: (len . pattern) */
|
||||
node *pattern_list = cons(data->car, (node*)NULL);
|
||||
$$ = new_dregx(p, pattern_list, flags, encoding);
|
||||
$$ = new_regx(p, pattern_list, flags, encoding);
|
||||
}
|
||||
| tREGEXP_BEG string_rep tREGEXP
|
||||
{
|
||||
@@ -3879,7 +3879,7 @@ regexp : tREGEXP_BEG tREGEXP
|
||||
const char *encoding = (const char*)data->cdr->cdr;
|
||||
/* Append the pattern from $3->car to the string list $2 */
|
||||
node *complete_list = push($2, data->car);
|
||||
$$ = new_dregx(p, complete_list, flags, encoding);
|
||||
$$ = new_regx(p, complete_list, flags, encoding);
|
||||
}
|
||||
;
|
||||
|
||||
@@ -8213,19 +8213,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
|
||||
break;
|
||||
|
||||
case NODE_REGX:
|
||||
printf("NODE_REGX /%s/\n", (char*)tree->car);
|
||||
if (tree->cdr->car) {
|
||||
dump_prefix(offset+1, lineno);
|
||||
printf("opt: %s\n", (char*)tree->cdr->car);
|
||||
}
|
||||
if (tree->cdr->cdr) {
|
||||
dump_prefix(offset+1, lineno);
|
||||
printf("enc: %s\n", (char*)tree->cdr->cdr);
|
||||
}
|
||||
break;
|
||||
|
||||
case NODE_DREGX:
|
||||
printf("NODE_DREGX:\n");
|
||||
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);
|
||||
|
||||
@@ -1544,12 +1544,12 @@ new_dsym(parser_state *p, node *a)
|
||||
return (node*)n;
|
||||
}
|
||||
|
||||
/* (:dregx . (list . (flags . encoding))) */
|
||||
/* (:regx . (list . (flags . encoding))) */
|
||||
static node*
|
||||
new_dregx(parser_state *p, node *list, const char *flags, const char *encoding)
|
||||
new_regx(parser_state *p, node *list, const char *flags, const char *encoding)
|
||||
{
|
||||
struct mrb_ast_dregx_node *n = (struct mrb_ast_dregx_node*)parser_palloc(p, sizeof(struct mrb_ast_dregx_node));
|
||||
init_var_header(&n->header, p, NODE_DREGX);
|
||||
struct mrb_ast_regx_node *n = (struct mrb_ast_regx_node*)parser_palloc(p, sizeof(struct mrb_ast_regx_node));
|
||||
init_var_header(&n->header, p, NODE_REGX);
|
||||
n->list = list;
|
||||
n->flags = flags;
|
||||
n->encoding = encoding;
|
||||
@@ -1955,7 +1955,7 @@ prohibit_literals(parser_state *p, node *n)
|
||||
case NODE_INT:
|
||||
case NODE_STR:
|
||||
case NODE_XSTR:
|
||||
case NODE_DREGX:
|
||||
case NODE_REGX:
|
||||
case NODE_MATCH:
|
||||
case NODE_FLOAT:
|
||||
case NODE_ARRAY:
|
||||
@@ -10152,7 +10152,7 @@ yyreduce:
|
||||
const char *encoding = (const char*)data->cdr->cdr;
|
||||
/* Use data->car directly as pattern_list: (len . pattern) */
|
||||
node *pattern_list = cons(data->car, (node*)NULL);
|
||||
(yyval.nd) = new_dregx(p, pattern_list, flags, encoding);
|
||||
(yyval.nd) = new_regx(p, pattern_list, flags, encoding);
|
||||
}
|
||||
#line 10158 "mrbgems/mruby-compiler/core/y.tab.c"
|
||||
break;
|
||||
@@ -10165,7 +10165,7 @@ yyreduce:
|
||||
const char *encoding = (const char*)data->cdr->cdr;
|
||||
/* Append the pattern from $3->car to the string list $2 */
|
||||
node *complete_list = push((yyvsp[-1].nd), data->car);
|
||||
(yyval.nd) = new_dregx(p, complete_list, flags, encoding);
|
||||
(yyval.nd) = new_regx(p, complete_list, flags, encoding);
|
||||
}
|
||||
#line 10171 "mrbgems/mruby-compiler/core/y.tab.c"
|
||||
break;
|
||||
@@ -15042,19 +15042,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
|
||||
break;
|
||||
|
||||
case NODE_REGX:
|
||||
printf("NODE_REGX /%s/\n", (char*)tree->car);
|
||||
if (tree->cdr->car) {
|
||||
dump_prefix(offset+1, lineno);
|
||||
printf("opt: %s\n", (char*)tree->cdr->car);
|
||||
}
|
||||
if (tree->cdr->cdr) {
|
||||
dump_prefix(offset+1, lineno);
|
||||
printf("enc: %s\n", (char*)tree->cdr->cdr);
|
||||
}
|
||||
break;
|
||||
|
||||
case NODE_DREGX:
|
||||
printf("NODE_DREGX:\n");
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user