diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index a9fe1dbd7..1d9006530 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -5945,12 +5945,8 @@ gen_undef_var(codegen_scope *s, const node *varnode, int val) { struct mrb_ast_undef_node *undef = undef_node(varnode); - // Create stack-allocated traditional node structure - node undef_node_stack; - undef_node_stack.car = undef->syms; - undef_node_stack.cdr = NULL; - - codegen_undef(s, &undef_node_stack, val); + // The syms field now contains the list directly + codegen_undef(s, undef->syms, val); } static void diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index f632a6100..d31f0c0c9 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -1825,14 +1825,14 @@ new_const(parser_state *p, mrb_sym sym) /* (:undef a...) */ static node* -new_undef(parser_state *p, mrb_sym sym) +new_undef(parser_state *p, node *syms) { size_t total_size = sizeof(struct mrb_ast_undef_node); enum mrb_ast_size_class class = size_to_class(total_size); struct mrb_ast_undef_node *undef_node = (struct mrb_ast_undef_node*) parser_alloc_var(p, total_size, class); init_var_header(&undef_node->hdr, p, NODE_UNDEF, class); - undef_node->syms = sym_to_node(sym); + undef_node->syms = syms; return cons_head((node*)NODE_VARIABLE, (node*)undef_node); } @@ -3102,7 +3102,7 @@ stmt : keyword_alias fsym {p->lstate = EXPR_FNAME;} fsym } | keyword_undef undef_list { - $$ = $2; + $$ = new_undef(p, $2); } | stmt modifier_if expr_value { @@ -3586,7 +3586,7 @@ fsym : fname undef_list : fsym { - $$ = new_undef(p, $1); + $$ = cons(sym_to_node($1), 0); } | undef_list ',' {p->lstate = EXPR_FNAME;} fsym {