Simplify correctly (or (integer 1 1) (not (integer 1 1))) as t

* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Logic
	update.
	* test/lisp/emacs-lisp/comp-cstr-tests.el
	(comp-cstr-typespec-tests-alist): Add a test.
This commit is contained in:
Andrea Corallo 2020-12-18 17:22:05 +01:00
parent 3540b1f167
commit e0f20da6ec
2 changed files with 14 additions and 7 deletions

View file

@ -474,12 +474,17 @@ DST is returned."
(cl-nset-difference (valset neg) (valset pos)))))
;; Range propagation
(setf (range neg)
(when range
(comp-range-negation
(comp-range-union
(comp-range-negation (range neg))
(range pos)))))
(when range
;; Handle apart (or (integer 1 1) (not (integer 1 1)))
;; like cases.
(if (and (range pos) (range neg)
(equal (range pos) (range neg)))
(give-up)
(setf (range neg)
(comp-range-negation
(comp-range-union
(comp-range-negation (range neg))
(range pos))))))
(if (comp-cstr-empty-p neg)
(setf (typeset dst) (typeset pos)