Mercurial > emacs
changeset 21819:c98ba82f4b52
(Flsh, Fash): Handle out-of-range shift counts reasonably.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 29 Apr 1998 00:59:22 +0000 |
parents | af741167f81e |
children | 75f04f235df1 |
files | src/data.c |
diffstat | 1 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/data.c Wed Apr 29 00:28:28 1998 +0000 +++ b/src/data.c Wed Apr 29 00:59:22 1998 +0000 @@ -2481,8 +2481,12 @@ CHECK_NUMBER (value, 0); CHECK_NUMBER (count, 1); - if (XINT (count) > 0) + if (XINT (count) >= BITS_PER_EMACS_INT) + XSETINT (val, 0); + else if (XINT (count) > 0) XSETINT (val, XINT (value) << XFASTINT (count)); + else if (XINT (count) <= -BITS_PER_EMACS_INT) + XSETINT (val, XINT (value) < 0 ? -1 : 0); else XSETINT (val, XINT (value) >> -XINT (count)); return val; @@ -2500,8 +2504,12 @@ CHECK_NUMBER (value, 0); CHECK_NUMBER (count, 1); - if (XINT (count) > 0) + if (XINT (count) >= BITS_PER_EMACS_INT) + XSETINT (val, 0); + else if (XINT (count) > 0) XSETINT (val, (EMACS_UINT) XUINT (value) << XFASTINT (count)); + else if (XINT (count) <= -BITS_PER_EMACS_INT) + XSETINT (val, 0); else XSETINT (val, (EMACS_UINT) XUINT (value) >> -XINT (count)); return val;