summaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2024-03-26 13:14:15 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2024-03-26 13:14:15 -0400
commit004f2493a542dd0b804a30e97fc612884ca440f4 (patch)
tree3c20c07a1328e344ff90e3cceb8b96c32cd28a0f /etc
parent351d98535dc10f8338b8a418e331cc0af488087b (diff)
downloademacs-004f2493a542dd0b804a30e97fc612884ca440f4.tar.gz
cl-preloaded.el: Fix the type lattice
We generally want types to form not just a DAG but a lattice. If objects can be both `keyword` and `symbol-with-pos`, this means there should be a more precise type describing this intersection. If we ever find the need for such a refinement, we could add such a `keyword-with-pos` type, but here I took the simpler route of treating `keyword` not as a proper built-in type but as a second-class type like `natnum`. While fixing this problem, also fix the problem we had where `functionp` was not quite adequate to characterize objects of type `function`, by introducing a new predicate `cl-functionp` for that. * lisp/emacs-lisp/cl-preloaded.el (cl-functionp): New function. (function): Use it. (keyword): Don't declare it as a built-in type. (user-ptrp): Remove redundant declaration. * lisp/emacs-lisp/cl-generic.el (cl--generic--unreachable-types): Delete constant. (cl-generic-generalizers): Remove corresponding test. * lisp/emacs-lisp/cl-macs.el (cl-deftype-satisfies): Add entry for `keyword` type. * lisp/emacs-lisp/comp.el (comp-known-predicates): Fix type for negative result of `characterp`. Remove duplicate `numberp` entry. Fix types for `keywordp` now that `keyword` is not a built-in type any more. * test/src/data-tests.el (data-tests--cl-type-of): Add a few cases. Remove workaround for `function`.
Diffstat (limited to 'etc')
-rw-r--r--etc/NEWS8
1 files changed, 5 insertions, 3 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 73af6ab773e..25c4efa590f 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1700,9 +1700,11 @@ This function is like 'type-of' except that it sometimes returns
a more precise type. For example, for nil and t it returns 'null'
and 'boolean' respectively, instead of just 'symbol'.
-** New function `primitive-function-p`.
-This is like `subr-primitive-p` except that it returns t only if the
-argument is a function rather than a special-form.
+** New functions `primitive-function-p` and `cl-functionp`.
+`primitive-function-p` is like `subr-primitive-p` except that it returns
+t only if the argument is a function rather than a special-form,
+and `cl-functionp` is like `functionp` except it return nil
+for lists and symbols.
** Built-in types have now corresponding classes.
At the Lisp level, this means that things like (cl-find-class 'integer)