diff options
Diffstat (limited to 'libguile/vm-i-scheme.c')
-rw-r--r-- | libguile/vm-i-scheme.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c index bcd8134e2..fc32ec5a8 100644 --- a/libguile/vm-i-scheme.c +++ b/libguile/vm-i-scheme.c @@ -486,12 +486,11 @@ VM_DEFINE_FUNCTION (159, ash, "ash", 2) if (SCM_I_INUMP (x) && SCM_I_INUMP (y)) { if (SCM_I_INUM (y) < 0) - { - /* Right shift, will be a fixnum. */ - if (SCM_I_INUM (y) > -SCM_I_FIXNUM_BIT) - RETURN (SCM_I_MAKINUM (SCM_I_INUM (x) >> -SCM_I_INUM (y))); - /* fall through */ - } + /* Right shift, will be a fixnum. */ + RETURN (SCM_I_MAKINUM + (SCM_SRS (SCM_I_INUM (x), + (-SCM_I_INUM (y) <= SCM_I_FIXNUM_BIT-1) + ? -SCM_I_INUM (y) : SCM_I_FIXNUM_BIT-1))); else /* Left shift. See comments in scm_ash. */ { |