aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/data.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/data.c b/src/data.c
index 18354046210..eb1cbf77bbc 100644
--- a/src/data.c
+++ b/src/data.c
@@ -2481,8 +2481,12 @@ In this case, the sign bit is duplicated.")
2481 CHECK_NUMBER (value, 0); 2481 CHECK_NUMBER (value, 0);
2482 CHECK_NUMBER (count, 1); 2482 CHECK_NUMBER (count, 1);
2483 2483
2484 if (XINT (count) > 0) 2484 if (XINT (count) >= BITS_PER_EMACS_INT)
2485 XSETINT (val, 0);
2486 else if (XINT (count) > 0)
2485 XSETINT (val, XINT (value) << XFASTINT (count)); 2487 XSETINT (val, XINT (value) << XFASTINT (count));
2488 else if (XINT (count) <= -BITS_PER_EMACS_INT)
2489 XSETINT (val, XINT (value) < 0 ? -1 : 0);
2486 else 2490 else
2487 XSETINT (val, XINT (value) >> -XINT (count)); 2491 XSETINT (val, XINT (value) >> -XINT (count));
2488 return val; 2492 return val;
@@ -2500,8 +2504,12 @@ In this case, zeros are shifted in on the left.")
2500 CHECK_NUMBER (value, 0); 2504 CHECK_NUMBER (value, 0);
2501 CHECK_NUMBER (count, 1); 2505 CHECK_NUMBER (count, 1);
2502 2506
2503 if (XINT (count) > 0) 2507 if (XINT (count) >= BITS_PER_EMACS_INT)
2508 XSETINT (val, 0);
2509 else if (XINT (count) > 0)
2504 XSETINT (val, (EMACS_UINT) XUINT (value) << XFASTINT (count)); 2510 XSETINT (val, (EMACS_UINT) XUINT (value) << XFASTINT (count));
2511 else if (XINT (count) <= -BITS_PER_EMACS_INT)
2512 XSETINT (val, 0);
2505 else 2513 else
2506 XSETINT (val, (EMACS_UINT) XUINT (value) >> -XINT (count)); 2514 XSETINT (val, (EMACS_UINT) XUINT (value) >> -XINT (count));
2507 return val; 2515 return val;