From 492ccefa257fccd2b76e32c92a029c65e219f52e Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 30 Sep 2025 14:05:43 +0900 Subject: [PATCH] mruby-compiler: unify loop node dump cases to reduce duplication Consolidated NODE_WHILE, NODE_UNTIL, NODE_WHILE_MOD, and NODE_UNTIL_MOD dump cases using a shared dump_loop_node label. All four loop constructs have identical structure (condition + body) and only differ in their node type names. Uses fall-through for the last case (NODE_UNTIL_MOD) to avoid unnecessary goto. This eliminates code duplication (28 lines -> 12 lines) while maintaining the same clear output format for each loop type. Co-authored-by: Claude --- mrbgems/mruby-compiler/core/parse.y | 33 ++++++----------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 8ebee8f98..6066a222c 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -8076,26 +8076,17 @@ dump_node(mrb_state *mrb, node *tree, int offset) case NODE_WHILE: printf("NODE_WHILE:\n"); - dump_prefix(offset+1, lineno); - printf("cond:\n"); - dump_node(mrb, WHILE_NODE_CONDITION(tree), offset+2); - dump_prefix(offset+1, lineno); - printf("body:\n"); - dump_node(mrb, WHILE_NODE_BODY(tree), offset+2); - break; - + goto dump_loop_node; case NODE_UNTIL: printf("NODE_UNTIL:\n"); - dump_prefix(offset+1, lineno); - printf("cond:\n"); - dump_node(mrb, UNTIL_NODE_CONDITION(tree), offset+2); - dump_prefix(offset+1, lineno); - printf("body:\n"); - dump_node(mrb, UNTIL_NODE_BODY(tree), offset+2); - break; - + goto dump_loop_node; case NODE_WHILE_MOD: printf("NODE_WHILE_MOD:\n"); + goto dump_loop_node; + case NODE_UNTIL_MOD: + printf("NODE_UNTIL_MOD:\n"); + + dump_loop_node: dump_prefix(offset+1, lineno); printf("cond:\n"); dump_node(mrb, WHILE_NODE_CONDITION(tree), offset+2); @@ -8104,16 +8095,6 @@ dump_node(mrb_state *mrb, node *tree, int offset) dump_node(mrb, WHILE_NODE_BODY(tree), offset+2); break; - case NODE_UNTIL_MOD: - printf("NODE_UNTIL_MOD:\n"); - dump_prefix(offset+1, lineno); - printf("cond:\n"); - dump_node(mrb, UNTIL_NODE_CONDITION(tree), offset+2); - dump_prefix(offset+1, lineno); - printf("body:\n"); - dump_node(mrb, UNTIL_NODE_BODY(tree), offset+2); - break; - case NODE_FOR: printf("NODE_FOR:\n"); if (FOR_NODE_VAR(tree)) {