]> git.eshelyaron.com Git - emacs.git/commitdiff
(Flsh, Fash): Handle out-of-range shift counts reasonably.
authorRichard M. Stallman <rms@gnu.org>
Wed, 29 Apr 1998 00:59:22 +0000 (00:59 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 29 Apr 1998 00:59:22 +0000 (00:59 +0000)
src/data.c

index 18354046210779805e1497bfa3f5206558a42415..eb1cbf77bbc044bb0a1e2d121f0b71e8cbe617d1 100644 (file)
@@ -2481,8 +2481,12 @@ In this case, the sign bit is duplicated.")
   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 @@ In this case,  zeros are shifted in on the left.")
   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;