diff options
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/comp-cstr.el | 4 | ||||
-rw-r--r-- | lisp/emacs-lisp/comp.el | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el index 28cffcf0661..57d93912d2f 100644 --- a/lisp/emacs-lisp/comp-cstr.el +++ b/lisp/emacs-lisp/comp-cstr.el @@ -154,6 +154,10 @@ Return them as multiple value." collect cstr into positives finally return (cl-values positives negatives))) +(defvar comp-cstr-one (make-comp-cstr :typeset () + :range '((1 . 1))) + "Represent the integer immediate one (1).") + ;;; Value handling. diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index 336ed39145d..6b06ac5840d 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -2651,7 +2651,9 @@ Fold the call in case." (comp-mvar-neg lval) (comp-cstr-neg cstr)))) (cl-case f (+ (comp-cstr-add lval args)) - (- (comp-cstr-sub lval args))))) + (- (comp-cstr-sub lval args)) + (1+ (comp-cstr-add lval `(,(car args) ,comp-cstr-one))) + (1- (comp-cstr-sub lval `(,(car args) ,comp-cstr-one)))))) (defun comp-fwprop-insn (insn) "Propagate within INSN." |