From f0fed9dbec5f6a334ede9f7ccd3e6ceba014ab4f Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Tue, 13 May 2014 11:46:47 -0400 Subject: Consolidate muliptlication into one place --- src/vm.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index 6e30eab72..9757cf705 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1729,19 +1729,24 @@ RETRY_TRY_BLOCK: switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) { case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM): { - mrb_int x, y, z; + mrb_value z; - x = mrb_fixnum(regs[a]); - y = mrb_fixnum(regs[a+1]); - z = x * y; -#ifdef MRB_WORD_BOXING - z = (z << MRB_FIXNUM_SHIFT) / (1 << MRB_FIXNUM_SHIFT); -#endif - if (x != 0 && z/x != y) { - SET_FLT_VALUE(mrb, regs[a], (mrb_float)x * (mrb_float)y); - } - else { - SET_INT_VALUE(regs[a], z); + z = mrb_fixnum_mul(mrb, regs[a], regs[a+1]); + + switch (mrb_type(z)) { + case MRB_TT_FIXNUM: + { + SET_INT_VALUE(regs[a], mrb_fixnum(z)); + } + break; + case MRB_TT_FLOAT: + { + SET_FLT_VALUE(mrb, regs[a], mrb_float(z)); + } + break; + default: + /* cannot happen */ + break; } } break; -- cgit v1.2.3