]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix union of homogeneously negated input constraints
authorAndrea Corallo <akrl@sdf.org>
Wed, 2 Dec 2020 22:49:00 +0000 (23:49 +0100)
committerAndrea Corallo <akrl@sdf.org>
Sat, 5 Dec 2020 18:01:03 +0000 (19:01 +0100)
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1): Fix logic.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Add a couple of tests.

lisp/emacs-lisp/comp-cstr.el
test/lisp/emacs-lisp/comp-cstr-tests.el

index 96aa67ec9d748dd390f86a24f4c89d63a9c90818..3aad3dc2c2475ceb76ee43750621498576203dab 100644 (file)
@@ -325,6 +325,8 @@ DST is returned."
      finally
      (when (or (zerop n-pos) (zerop n-neg))
        (apply #'comp-cstr-union-homogeneous dst srcs)
+       (when (zerop n-pos)
+         (setf (neg dst) t))
        (cl-return-from comp-cstr-union-1 dst)))
 
     ;; Some are negated and some are not
index 5c119c6ba3e0f42d183bf2dc4e40a5332b1da39a..0b10b7f80a1fd4a3d3df2a333e2b5ff9daa79cb2 100644 (file)
@@ -85,7 +85,9 @@
     ((or symbol (not sequence)) . t)
     ((or vector (not sequence)) . (not sequence))
     ((or (integer 1 10) (not (integer * 5))) . (integer 1 *))
-    ((or symbol (integer 1 10) (not (integer * 5))) . (integer 1 *)))
+    ((or symbol (integer 1 10) (not (integer * 5))) . (integer 1 *))
+    ((or symbol (not (member foo))) . (not (member foo)))
+    ((or (not symbol) (not (member foo))) . (not symbol)))
   "Alist type specifier -> expected type specifier.")
 
 (defmacro comp-cstr-synthesize-tests ()