From 9156451652da0c82e6e03667ca00e190dd3f2441 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 2 Oct 2025 10:54:59 +0900 Subject: [PATCH] mruby-compiler: fix c++ compilation error in node_hash case add braces around node_hash case in dump_node() to fix variable initialization crossing case labels error when compiling with c++. Co-authored-by: Claude --- mrbgems/mruby-compiler/core/parse.y | 30 +++++++++++++++-------------- mrbgems/mruby-compiler/core/y.tab.c | 30 +++++++++++++++-------------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 35c020b24..636d0b35a 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -8109,21 +8109,23 @@ dump_node(mrb_state *mrb, node *tree, int offset) case NODE_HASH: printf("NODE_HASH:\n"); - node *pairs = hash_node(tree)->pairs; - while (pairs) { - dump_prefix(offset+1, lineno); - printf("key:\n"); - if (node_to_sym(pairs->car->car) == MRB_OPSYM(pow)) { - dump_prefix(offset+2, lineno); - printf("**\n"); + { + node *pairs = hash_node(tree)->pairs; + while (pairs) { + dump_prefix(offset+1, lineno); + printf("key:\n"); + if (node_to_sym(pairs->car->car) == MRB_OPSYM(pow)) { + dump_prefix(offset+2, lineno); + printf("**\n"); + } + else { + dump_node(mrb, pairs->car->car, offset+2); + } + dump_prefix(offset+1, lineno); + printf("value:\n"); + dump_node(mrb, pairs->car->cdr, offset+2); + pairs = pairs->cdr; } - else { - dump_node(mrb, pairs->car->car, offset+2); - } - dump_prefix(offset+1, lineno); - printf("value:\n"); - dump_node(mrb, pairs->car->cdr, offset+2); - pairs = pairs->cdr; } break; diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 8f5a994d0..f03517fc7 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -14938,21 +14938,23 @@ dump_node(mrb_state *mrb, node *tree, int offset) case NODE_HASH: printf("NODE_HASH:\n"); - node *pairs = hash_node(tree)->pairs; - while (pairs) { - dump_prefix(offset+1, lineno); - printf("key:\n"); - if (node_to_sym(pairs->car->car) == MRB_OPSYM(pow)) { - dump_prefix(offset+2, lineno); - printf("**\n"); + { + node *pairs = hash_node(tree)->pairs; + while (pairs) { + dump_prefix(offset+1, lineno); + printf("key:\n"); + if (node_to_sym(pairs->car->car) == MRB_OPSYM(pow)) { + dump_prefix(offset+2, lineno); + printf("**\n"); + } + else { + dump_node(mrb, pairs->car->car, offset+2); + } + dump_prefix(offset+1, lineno); + printf("value:\n"); + dump_node(mrb, pairs->car->cdr, offset+2); + pairs = pairs->cdr; } - else { - dump_node(mrb, pairs->car->car, offset+2); - } - dump_prefix(offset+1, lineno); - printf("value:\n"); - dump_node(mrb, pairs->car->cdr, offset+2); - pairs = pairs->cdr; } break;