diff options
author | Andrea Corallo <akrl@sdf.org> | 2020-11-30 23:46:48 +0100 |
---|---|---|
committer | Andrea Corallo <akrl@sdf.org> | 2020-12-01 00:09:46 +0100 |
commit | 21104e6808a4496afb8163d92c6fb4d59e3010b7 (patch) | |
tree | 217db87cd1a97e31a2bbcf792d668c7c2de2e861 /lisp/emacs-lisp | |
parent | 6523b8401519a29ca0aefaf44c3dfa36f681f64e (diff) | |
download | emacs-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.el | 12 |
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. |