summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorAndrea Corallo <akrl@sdf.org>2020-11-30 23:46:48 +0100
committerAndrea Corallo <akrl@sdf.org>2020-12-01 00:09:46 +0100
commit21104e6808a4496afb8163d92c6fb4d59e3010b7 (patch)
tree217db87cd1a97e31a2bbcf792d668c7c2de2e861 /lisp/emacs-lisp
parent6523b8401519a29ca0aefaf44c3dfa36f681f64e (diff)
downloademacs-21104e6808a4496afb8163d92c6fb4d59e3010b7.tar.gz
emacs-21104e6808a4496afb8163d92c6fb4d59e3010b7.tar.bz2
emacs-21104e6808a4496afb8163d92c6fb4d59e3010b7.zip
Fix `comp-mvar-symbol-p' and `comp-mvar-cons-p' (bug#44968)
* lisp/emacs-lisp/comp.el (comp-mvar-symbol-p): As all slots into a `comp-cstr' are in or fix this logic. (comp-mvar-cons-p): Likewise. * test/src/comp-tests.el (bug-44968): New testcase. * test/src/comp-test-funcs.el (comp-test-44968-f): New test function.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/comp.el12
1 files changed, 9 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 498aae183a5..13f9beb5f96 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -550,12 +550,18 @@ CFG is mutated by a pass.")
(defun comp-mvar-symbol-p (mvar)
"Return t if MVAR is certainly a symbol."
- (or (equal (comp-mvar-typeset mvar) '(symbol))
- (cl-every #'symbolp (comp-mvar-valset mvar))))
+ (and (null (comp-mvar-range mvar))
+ (or (and (null (comp-mvar-valset mvar))
+ (equal (comp-mvar-typeset mvar) '(symbol)))
+ (and (or (null (comp-mvar-typeset mvar))
+ (equal (comp-mvar-typeset mvar) '(symbol)))
+ (cl-every #'symbolp (comp-mvar-valset mvar))))))
(defsubst comp-mvar-cons-p (mvar)
"Return t if MVAR is certainly a cons."
- (equal (comp-mvar-typeset mvar) '(cons)))
+ (and (null (comp-mvar-valset mvar))
+ (null (comp-mvar-range mvar))
+ (equal (comp-mvar-typeset mvar) '(cons))))
(defun comp-mvar-type-hint-match-p (mvar type-hint)
"Match MVAR against TYPE-HINT.