diff options
| author | Paul Eggert | 2018-08-21 13:44:03 -0700 |
|---|---|---|
| committer | Paul Eggert | 2018-08-21 13:44:32 -0700 |
| commit | f18af6cd5cb7dbbf7420ec2d3efed4e202c4f0dd (patch) | |
| tree | 5f42e48e12a0ec77bd5cd5f32255a534635e89bf /lisp/calc | |
| parent | 81e7eef8224c8a99a207b7a7b9dae1d598392ef7 (diff) | |
| download | emacs-f18af6cd5cb7dbbf7420ec2d3efed4e202c4f0dd.tar.gz emacs-f18af6cd5cb7dbbf7420ec2d3efed4e202c4f0dd.zip | |
Audit use of lsh and fix glitches
I audited use of lsh in the Lisp source code, and fixed the
glitches that I found. While I was at it, I replaced uses of lsh
with ash when either will do. Replacement is OK when either
argument is known to be nonnegative, or when only the low-order
bits of the result matter, and is a (minor) win since ash is a bit
more solid than lsh nowadays, and is a bit faster.
* lisp/calc/calc-ext.el (math-check-fixnum):
Prefer most-positive-fixnum to (lsh -1 -1).
* lisp/vc/vc-hg.el (vc-hg-state-fast): When testing fixnum width,
prefer (zerop (ash most-positive-fixnum -32)) to (zerop (lsh -1
32)) (Bug#32485#11).
* lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode):
Tighten sanity-check for bytecode overflow, by checking that the
result of (ash pc -8) is nonnegative. Formerly this check was not
needed since lsh was used and the number overflowed differently.
* lisp/net/dns.el (dns-write): Fix some obvious sign typos in
shift counts. Evidently this part of the code has never been
exercised.
* lisp/progmodes/hideif.el (hif-shiftleft, hif-shiftright):
* lisp/term/common-win.el (x-setup-function-keys):
Simplify.
* admin/unidata/unidata-gen.el, admin/unidata/uvs.el:
* doc/lispref/keymaps.texi, doc/lispref/syntax.texi:
* doc/misc/calc.texi, doc/misc/cl.texi, etc/NEWS.19:
* lisp/arc-mode.el, lisp/calc/calc-bin.el, lisp/calc/calc-comb.el:
* lisp/calc/calc-ext.el, lisp/calc/calc-math.el:
* lisp/cedet/semantic/wisent/comp.el, lisp/composite.el:
* lisp/disp-table.el, lisp/dos-fns.el, lisp/edmacro.el:
* lisp/emacs-lisp/bindat.el, lisp/emacs-lisp/byte-opt.el:
* lisp/emacs-lisp/bytecomp.el, lisp/emacs-lisp/cl-extra.el:
* lisp/erc/erc-dcc.el, lisp/facemenu.el, lisp/gnus/message.el:
* lisp/gnus/nndoc.el, lisp/gnus/nnmaildir.el, lisp/image.el:
* lisp/international/ccl.el, lisp/international/fontset.el:
* lisp/international/mule-cmds.el, lisp/international/mule.el:
* lisp/json.el, lisp/mail/binhex.el, lisp/mail/rmail.el:
* lisp/mail/uudecode.el, lisp/md4.el, lisp/net/dns.el:
* lisp/net/ntlm.el, lisp/net/sasl.el, lisp/net/socks.el:
* lisp/net/tramp.el, lisp/obsolete/levents.el:
* lisp/obsolete/pgg-parse.el, lisp/org/org.el:
* lisp/org/ox-publish.el, lisp/progmodes/cc-defs.el:
* lisp/progmodes/ebnf2ps.el, lisp/progmodes/hideif.el:
* lisp/ps-bdf.el, lisp/ps-print.el, lisp/simple.el:
* lisp/tar-mode.el, lisp/term/common-win.el:
* lisp/term/tty-colors.el, lisp/term/xterm.el, lisp/vc/vc-git.el:
* lisp/vc/vc-hg.el, lisp/x-dnd.el, test/src/data-tests.el:
Prefer ash to lsh when either will do.
Diffstat (limited to 'lisp/calc')
| -rw-r--r-- | lisp/calc/calc-bin.el | 6 | ||||
| -rw-r--r-- | lisp/calc/calc-comb.el | 6 | ||||
| -rw-r--r-- | lisp/calc/calc-ext.el | 8 | ||||
| -rw-r--r-- | lisp/calc/calc-math.el | 2 |
4 files changed, 11 insertions, 11 deletions
diff --git a/lisp/calc/calc-bin.el b/lisp/calc/calc-bin.el index c05a71a2d7f..a61cecf357c 100644 --- a/lisp/calc/calc-bin.el +++ b/lisp/calc/calc-bin.el | |||
| @@ -420,7 +420,7 @@ the size of a Calc bignum digit.") | |||
| 420 | (let ((q (math-div-bignum-digit a math-bignum-digit-power-of-two))) | 420 | (let ((q (math-div-bignum-digit a math-bignum-digit-power-of-two))) |
| 421 | (if (<= w math-bignum-logb-digit-size) | 421 | (if (<= w math-bignum-logb-digit-size) |
| 422 | (list (logand (lognot (cdr q)) | 422 | (list (logand (lognot (cdr q)) |
| 423 | (1- (lsh 1 w)))) | 423 | (1- (ash 1 w)))) |
| 424 | (math-mul-bignum-digit (math-not-bignum (math-norm-bignum (car q)) | 424 | (math-mul-bignum-digit (math-not-bignum (math-norm-bignum (car q)) |
| 425 | (- w math-bignum-logb-digit-size)) | 425 | (- w math-bignum-logb-digit-size)) |
| 426 | math-bignum-digit-power-of-two | 426 | math-bignum-digit-power-of-two |
| @@ -529,7 +529,7 @@ the size of a Calc bignum digit.") | |||
| 529 | ((and (integerp a) (< a math-small-integer-size)) | 529 | ((and (integerp a) (< a math-small-integer-size)) |
| 530 | (if (> w (logb math-small-integer-size)) | 530 | (if (> w (logb math-small-integer-size)) |
| 531 | a | 531 | a |
| 532 | (logand a (1- (lsh 1 w))))) | 532 | (logand a (1- (ash 1 w))))) |
| 533 | (t | 533 | (t |
| 534 | (math-normalize | 534 | (math-normalize |
| 535 | (cons 'bigpos | 535 | (cons 'bigpos |
| @@ -542,7 +542,7 @@ the size of a Calc bignum digit.") | |||
| 542 | (let ((q (math-div-bignum-digit a math-bignum-digit-power-of-two))) | 542 | (let ((q (math-div-bignum-digit a math-bignum-digit-power-of-two))) |
| 543 | (if (<= w math-bignum-logb-digit-size) | 543 | (if (<= w math-bignum-logb-digit-size) |
| 544 | (list (logand (cdr q) | 544 | (list (logand (cdr q) |
| 545 | (1- (lsh 1 w)))) | 545 | (1- (ash 1 w)))) |
| 546 | (math-mul-bignum-digit (math-clip-bignum (math-norm-bignum (car q)) | 546 | (math-mul-bignum-digit (math-clip-bignum (math-norm-bignum (car q)) |
| 547 | (- w math-bignum-logb-digit-size)) | 547 | (- w math-bignum-logb-digit-size)) |
| 548 | math-bignum-digit-power-of-two | 548 | math-bignum-digit-power-of-two |
diff --git a/lisp/calc/calc-comb.el b/lisp/calc/calc-comb.el index 7c88230f86a..f1d3daeed93 100644 --- a/lisp/calc/calc-comb.el +++ b/lisp/calc/calc-comb.el | |||
| @@ -580,7 +580,7 @@ | |||
| 580 | ;; deduce a better value for RAND_MAX. | 580 | ;; deduce a better value for RAND_MAX. |
| 581 | (let ((i 0)) | 581 | (let ((i 0)) |
| 582 | (while (< (setq i (1+ i)) 30) | 582 | (while (< (setq i (1+ i)) 30) |
| 583 | (if (> (lsh (math-abs (random)) math-random-shift) 4095) | 583 | (if (> (ash (math-abs (random)) math-random-shift) 4095) |
| 584 | (setq math-random-shift (1- math-random-shift)))))) | 584 | (setq math-random-shift (1- math-random-shift)))))) |
| 585 | (setq math-last-RandSeed var-RandSeed | 585 | (setq math-last-RandSeed var-RandSeed |
| 586 | math-gaussian-cache nil)) | 586 | math-gaussian-cache nil)) |
| @@ -592,11 +592,11 @@ | |||
| 592 | (cdr math-random-table)) | 592 | (cdr math-random-table)) |
| 593 | math-random-ptr2 (or (cdr math-random-ptr2) | 593 | math-random-ptr2 (or (cdr math-random-ptr2) |
| 594 | (cdr math-random-table))) | 594 | (cdr math-random-table))) |
| 595 | (logand (lsh (setcar math-random-ptr1 | 595 | (logand (ash (setcar math-random-ptr1 |
| 596 | (logand (- (car math-random-ptr1) | 596 | (logand (- (car math-random-ptr1) |
| 597 | (car math-random-ptr2)) 524287)) | 597 | (car math-random-ptr2)) 524287)) |
| 598 | -6) 1023)) | 598 | -6) 1023)) |
| 599 | (logand (lsh (random) math-random-shift) 1023))) | 599 | (logand (ash (random) math-random-shift) 1023))) |
| 600 | 600 | ||
| 601 | 601 | ||
| 602 | ;;; Produce a random digit in the range 0..999. | 602 | ;;; Produce a random digit in the range 0..999. |
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el index 5feff23f72d..f983ebe414d 100644 --- a/lisp/calc/calc-ext.el +++ b/lisp/calc/calc-ext.el | |||
| @@ -2294,14 +2294,14 @@ calc-kill calc-kill-region calc-yank)))) | |||
| 2294 | (let ((a (math-trunc a))) | 2294 | (let ((a (math-trunc a))) |
| 2295 | (if (integerp a) | 2295 | (if (integerp a) |
| 2296 | a | 2296 | a |
| 2297 | (if (or (Math-lessp (lsh -1 -1) a) | 2297 | (if (or (Math-lessp most-positive-fixnum a) |
| 2298 | (Math-lessp a (- (lsh -1 -1)))) | 2298 | (Math-lessp a (- most-positive-fixnum))) |
| 2299 | (math-reject-arg a 'fixnump) | 2299 | (math-reject-arg a 'fixnump) |
| 2300 | (math-fixnum a))))) | 2300 | (math-fixnum a))))) |
| 2301 | ((and allow-inf (equal a '(var inf var-inf))) | 2301 | ((and allow-inf (equal a '(var inf var-inf))) |
| 2302 | (lsh -1 -1)) | 2302 | most-positive-fixnum) |
| 2303 | ((and allow-inf (equal a '(neg (var inf var-inf)))) | 2303 | ((and allow-inf (equal a '(neg (var inf var-inf)))) |
| 2304 | (- (lsh -1 -1))) | 2304 | (- most-positive-fixnum)) |
| 2305 | (t (math-reject-arg a 'fixnump)))) | 2305 | (t (math-reject-arg a 'fixnump)))) |
| 2306 | 2306 | ||
| 2307 | ;;; Verify that A is an integer >= 0 and return A in integer form. [I N; - x] | 2307 | ;;; Verify that A is an integer >= 0 and return A in integer form. [I N; - x] |
diff --git a/lisp/calc/calc-math.el b/lisp/calc/calc-math.el index 4b8abbf4f85..483907a325d 100644 --- a/lisp/calc/calc-math.el +++ b/lisp/calc/calc-math.el | |||
| @@ -1697,7 +1697,7 @@ If this can't be done, return NIL." | |||
| 1697 | (while (not (Math-lessp x pow)) | 1697 | (while (not (Math-lessp x pow)) |
| 1698 | (setq pows (cons pow pows) | 1698 | (setq pows (cons pow pows) |
| 1699 | pow (math-sqr pow))) | 1699 | pow (math-sqr pow))) |
| 1700 | (setq n (lsh 1 (1- (length pows))) | 1700 | (setq n (ash 1 (1- (length pows))) |
| 1701 | sum n | 1701 | sum n |
| 1702 | pow (car pows)) | 1702 | pow (car pows)) |
| 1703 | (while (and (setq pows (cdr pows)) | 1703 | (while (and (setq pows (cdr pows)) |