diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index afe5d9898..b15529770 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2672,7 +2672,7 @@ gen_hash(codegen_scope *s, node *tree, int val, int limit) mrb_bool first = TRUE; while (tree) { - if (node_to_int(tree->car->car->car) == NODE_KW_REST_ARGS) { + if (node_to_sym(tree->car->car) == MRB_OPSYM_2(s->mrb, pow)) { if (val && first) { genop_2(s, OP_HASH, cursp(), 0); push(); @@ -3208,7 +3208,7 @@ gen_hash_var(codegen_scope *s, node *varnode, int val) struct mrb_ast_node *value = pairs[i * 2 + 1]; /* Check if this is a double-splat (**kwargs) */ - if (node_to_int(key->car) == NODE_KW_REST_ARGS) { + if (node_to_sym(key) == MRB_OPSYM_2(s->mrb, pow)) { /* Flush any accumulated regular pairs first */ if (val && first && regular_pairs == 0) { /* First element is splat - create empty hash */ diff --git a/mrbgems/mruby-compiler/core/node.h b/mrbgems/mruby-compiler/core/node.h index 7c2ff3ea6..fb42c6ece 100644 --- a/mrbgems/mruby-compiler/core/node.h +++ b/mrbgems/mruby-compiler/core/node.h @@ -61,7 +61,6 @@ enum node_type { NODE_REGX, NODE_DREGX, NODE_CALLARGS, - NODE_KW_REST_ARGS, NODE_SPLAT, NODE_TO_ARY, NODE_SVALUE, diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index f7ae7afd9..91fdbf8f3 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -1429,7 +1429,7 @@ new_kw_arg(parser_state *p, mrb_sym kw, node *def_arg) static node* new_kw_rest_args(parser_state *p, mrb_sym sym) { - return cons_head((node*)NODE_KW_REST_ARGS, sym_to_node(sym)); + return sym_to_node(intern_op(pow)); /* Use ** symbol as direct marker */ } static node* @@ -8583,13 +8583,6 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) dump_recur(mrb, ((parser_heredoc_info*)tree)->doc, offset+1); break; - case NODE_KW_REST_ARGS: - if (tree) - printf("NODE_KW_REST_ARGS %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - else - printf("NODE_KW_REST_ARGS\n"); - break; - case NODE_VARIABLE: /* Handle variable-sized nodes wrapped in NODE_VARIABLE */ { diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 52bafbc5e..6485de98d 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -1491,7 +1491,7 @@ new_kw_arg(parser_state *p, mrb_sym kw, node *def_arg) static node* new_kw_rest_args(parser_state *p, mrb_sym sym) { - return cons_head((node*)NODE_KW_REST_ARGS, sym_to_node(sym)); + return sym_to_node(intern_op(pow)); /* Use ** symbol as direct marker */ } static node* @@ -15412,13 +15412,6 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) dump_recur(mrb, ((parser_heredoc_info*)tree)->doc, offset+1); break; - case NODE_KW_REST_ARGS: - if (tree) - printf("NODE_KW_REST_ARGS %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - else - printf("NODE_KW_REST_ARGS\n"); - break; - case NODE_VARIABLE: /* Handle variable-sized nodes wrapped in NODE_VARIABLE */ {