summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2024-10-17 16:22:58 +0300
committerEli Zaretskii <eliz@gnu.org>2024-10-17 16:22:58 +0300
commitb9eb7f194526f654e4cc4d69f6a1632a5e92b18c (patch)
tree6fd4faab19c6bb57f07974467c7680f7dd647d9b /lisp/emacs-lisp
parent4c0d69cbff14e25fa7489804102ac416cb3590b0 (diff)
parentee265922a0df68893f4d2b23a9190f524b745b6a (diff)
downloademacs-b9eb7f194526f654e4cc4d69f6a1632a5e92b18c.tar.gz
emacs-b9eb7f194526f654e4cc4d69f6a1632a5e92b18c.tar.bz2
emacs-b9eb7f194526f654e4cc4d69f6a1632a5e92b18c.zip
Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/comp-cstr.el11
-rw-r--r--lisp/emacs-lisp/comp.el5
2 files changed, 11 insertions, 5 deletions
diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el
index 66c44f16835..3f70b42774f 100644
--- a/lisp/emacs-lisp/comp-cstr.el
+++ b/lisp/emacs-lisp/comp-cstr.el
@@ -936,6 +936,8 @@ Non memoized version of `comp-cstr-intersection-no-mem'."
(defun comp-cstr-type-p (cstr type)
"Return t if CSTR is certainly of type TYPE."
+ ;; Only basic types are valid input.
+ (cl-assert (symbolp type))
(when
(with-comp-cstr-accessors
(cl-case type
@@ -950,9 +952,12 @@ Non memoized version of `comp-cstr-intersection-no-mem'."
(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))))
+ (if (null (typeset cstr))
+ (and (valset cstr)
+ (cl-every pred (valset cstr)))
+ (when (equal (typeset cstr) `(,type))
+ ;; (valset cstr) can be nil as well.
+ (cl-every pred (valset cstr)))))
(error "Unknown predicate for type %s" type)))))
t))
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 342212f5185..f72d23fee1a 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -2851,10 +2851,11 @@ Return t if something was changed."
(call symbol-value ,(and (pred comp-cstr-cl-tag-p) mvar-tag)))
(set ,(and (pred comp-mvar-p) mvar-3)
(call memq ,(and (pred comp-mvar-p) mvar-1) ,(and (pred comp-mvar-p) mvar-2)))
- (cond-jump ,(and (pred comp-mvar-p) mvar-3) ,(pred comp-mvar-p) ,_bb1 ,bb2))
+ (cond-jump ,(and (pred comp-mvar-p) mvar-3) ,(pred comp-mvar-p) ,bb1 ,bb2))
(cl-assert (comp-cstr-imm-vld-p mvar-tag))
(when (comp-cstr-type-p mvar-tested (comp-cstr-cl-tag mvar-tag))
- (comp-log (format "Optimizing conditional branch in function: %s"
+ (comp-log (format "Optimizing conditional branch %s in function: %s"
+ bb1
(comp-func-name comp-func))
3)
(setf (car insns-seq) '(comment "optimized by comp--type-check-optim")