From a810b9bca8cd7f99a766431ca39e24c083a1fc0e Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 19 Mar 2024 13:38:05 +0900 Subject: [PATCH] mruby-compiler/codegen.c: stop too aggressive optimization; fix #6210 The old code assumes unary minus (`-@`) does not cause any side effect (including errors). Considering the code like `-nil; nil`, the assumption was too aggressive. --- mrbgems/mruby-compiler/core/codegen.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 7315832bad..552788531b 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -3366,19 +3366,14 @@ codegen(codegen_scope *s, node *tree, int val) break; default: - if (val) { - codegen(s, tree, VAL); - pop(); - push_n(2);pop_n(2); /* space for receiver&block */ - mrb_sym minus = MRB_OPSYM_2(s->mrb, minus); - if (!gen_uniop(s, minus, cursp())) { - genop_3(s, OP_SEND, cursp(), new_sym(s, minus), 0); - } - push(); - } - else { - codegen(s, tree, NOVAL); + codegen(s, tree, VAL); + pop(); + push_n(2);pop_n(2); /* space for receiver&block */ + mrb_sym minus = MRB_OPSYM_2(s->mrb, minus); + if (!gen_uniop(s, minus, cursp())) { + genop_3(s, OP_SEND, cursp(), new_sym(s, minus), 0); } + if (val) push(); break; } }