From 626c17d20b25dba0e9d26dc4988809744e64e6e4 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 9 Sep 2025 17:22:07 +0900 Subject: [PATCH] mruby-compiler: complete NODE_HASH and NODE_KW_HASH migration to variable-sized nodes Remove traditional NODE_HASH and NODE_KW_HASH cases from switch statement. Inline codegen_hash logic into gen_kw_hash_var and remove unused codegen_hash function. Parser already creates variable-sized nodes exclusively, so all hash operations now route through gen_hash_var() and gen_kw_hash_var() respectively. Co-authored-by: Claude --- mrbgems/mruby-compiler/core/codegen.c | 29 +++++++-------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 50cb9ae86..f1bea38bc 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -3779,17 +3779,6 @@ gen_hash_var(codegen_scope *s, node *varnode, int val) } } -static void -codegen_hash(codegen_scope *s, node *tree, int val) -{ - int nk = gen_hash(s, tree, val, GEN_LIT_ARY_MAX); - if (val && nk >= 0) { - pop_n(nk*2); - genop_2(s, OP_HASH, cursp(), nk); - push(); - } -} - static void codegen_splat(codegen_scope *s, node *tree, int val) { @@ -5812,11 +5801,13 @@ static void gen_kw_hash_var(codegen_scope *s, node *varnode, int val) { struct mrb_ast_kw_hash_node *n = kw_hash_node(varnode); - // Create stack-allocated node structure for traditional codegen - struct mrb_ast_node stack_node; - stack_node.car = (node*)NODE_KW_HASH; - stack_node.cdr = n->args; - codegen_hash(s, &stack_node, val); + + int nk = gen_hash(s, n->args, val, GEN_LIT_ARY_MAX); + if (val && nk >= 0) { + pop_n(nk*2); + genop_2(s, OP_HASH, cursp(), nk); + push(); + } } static void @@ -5870,7 +5861,6 @@ gen_begin_var(codegen_scope *s, node *varnode, int val) struct mrb_ast_begin_node *begin = begin_node(varnode); node *body = begin->body; - /* Inline codegen_begin logic - just generate code for the body */ codegen(s, body, val); } @@ -6385,11 +6375,6 @@ codegen(codegen_scope *s, node *tree, int val) codegen_scall(s, tree, val); break; - case NODE_HASH: - case NODE_KW_HASH: - codegen_hash(s, tree, val); - break; - case NODE_SPLAT: codegen_splat(s, tree, val); break;