From 4fa24e4ff9e0617a71f4570ec194a49ca52945e9 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 2 Aug 2021 16:48:16 +0900 Subject: codegen.c: allow constant folding for negative integer modulo. --- mrbgems/mruby-compiler/core/codegen.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 65d14bcf6..467b70e1b 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -823,8 +823,11 @@ gen_binop(codegen_scope *s, mrb_sym op, uint16_t dst) if (!mrb_num_shift(s->mrb, n0, -n, &n)) return FALSE; } else if (op == MRB_OPSYM_2(s->mrb, mod)) { - if (n0 < 0 || n < 0) return FALSE; - n = n0 % n; + mrb_int n1 = n0 % n; + if ((n0 < 0) != (n < 0) && n1 != 0) { + n1 += n; + } + n = n1; } else if (op == MRB_OPSYM_2(s->mrb, and)) { n = n0 & n; -- cgit v1.2.3