diff options
author | Eli Zaretskii <eliz@gnu.org> | 2024-10-17 16:22:58 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2024-10-17 16:22:58 +0300 |
commit | b9eb7f194526f654e4cc4d69f6a1632a5e92b18c (patch) | |
tree | 6fd4faab19c6bb57f07974467c7680f7dd647d9b /lisp/emacs-lisp | |
parent | 4c0d69cbff14e25fa7489804102ac416cb3590b0 (diff) | |
parent | ee265922a0df68893f4d2b23a9190f524b745b6a (diff) | |
download | emacs-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.el | 11 | ||||
-rw-r--r-- | lisp/emacs-lisp/comp.el | 5 |
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") |