]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-type-p): Improve last change.
authorAndrea Corallo <acorallo@gnu.org>
Wed, 10 Apr 2024 16:45:47 +0000 (18:45 +0200)
committerEshel Yaron <me@eshelyaron.com>
Wed, 10 Apr 2024 20:31:15 +0000 (22:31 +0200)
(cherry picked from commit 3eb462405e541175df99974cc06395bf191d412a)

lisp/emacs-lisp/comp-cstr.el

index adbbaa24a992170dba2b735188f08b301843e82b..8d83356f20f2665ce1610d94b7574fe387618b68 100644 (file)
@@ -940,16 +940,27 @@ Non memoized version of `comp-cstr-intersection-no-mem'."
          (null (neg cstr))
          (equal (typeset cstr) '(cons)))))
 
-(define-inline comp-cstr-type-p (cstr type)
+(defun comp-cstr-type-p (cstr type)
   "Return t if CSTR is certainly of type TYPE."
-  (if-let ((pred (get type 'cl-deftype-satisfies)))
+  (when
       (with-comp-cstr-accessors
-        (and (null (range cstr))
-             (null (neg cstr))
-             (and (or (null (typeset cstr))
-                      (equal (typeset cstr) `(,type)))
-                  (cl-every pred (valset cstr)))))
-    (error "Unknown predicate for type %s" type)))
+        (cl-case type
+          (integer
+           (if (or (valset cstr) (neg cstr))
+               nil
+             (or (equal (typeset cstr) '(integer))
+                 (and (range cstr)
+                      (or (null (typeset cstr))
+                          (equal (typeset cstr) '(integer)))))))
+          (t
+           (if-let ((pred (get type 'cl-deftype-satisfies)))
+               (and (null (range cstr))
+                    (null (neg cstr))
+                    (and (or (null (typeset cstr))
+                             (equal (typeset cstr) `(,type)))
+                         (cl-every pred (valset cstr))))
+             (error "Unknown predicate for type %s" type)))))
+    t))
 
 ;; Move to comp.el?
 (defsubst comp-cstr-cl-tag-p (cstr)