From: Andrea Corallo Date: Wed, 10 Apr 2024 16:15:12 +0000 (+0200) Subject: * lisp/emacs-lisp/comp-cstr.el (comp-cstr-type-p): New function. X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1a59bf4b4767ab7a893d1c665e41cc2c8fb2d221;p=emacs.git * lisp/emacs-lisp/comp-cstr.el (comp-cstr-type-p): New function. (cherry picked from commit ee03a73375796feea94bb066cff7d7de680cae32) --- diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el index d7d3b12e148..adbbaa24a99 100644 --- a/lisp/emacs-lisp/comp-cstr.el +++ b/lisp/emacs-lisp/comp-cstr.el @@ -940,6 +940,17 @@ Non memoized version of `comp-cstr-intersection-no-mem'." (null (neg cstr)) (equal (typeset cstr) '(cons))))) +(define-inline comp-cstr-type-p (cstr type) + "Return t if CSTR is certainly of type TYPE." + (if-let ((pred (get type 'cl-deftype-satisfies))) + (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))) + ;; Move to comp.el? (defsubst comp-cstr-cl-tag-p (cstr) "Return non-nil if CSTR is a CL tag."