diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 44e9c9ea5..a49630dc8 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -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: diff --git a/mrbgems/mruby-compiler/core/node.h b/mrbgems/mruby-compiler/core/node.h index 2c04f6751..06ee34cc0 100644 --- a/mrbgems/mruby-compiler/core/node.h +++ b/mrbgems/mruby-compiler/core/node.h @@ -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) diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 4e10bdbcb..a0bcd8b2b 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -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); diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index bd0f0f418..46db0bdfc 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -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);