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 <noreply@anthropic.com>
This commit is contained in:
Yukihiro "Matz" Matsumoto
2025-09-30 14:05:43 +09:00
parent 75e2bb1ee0
commit 492ccefa25
+7 -26
View File
@@ -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)) {