mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
cl-generic: Signal an error when a type specializer won't work
* lisp/emacs-lisp/cl-generic.el (cl--generic--unreachable-types): New var. (cl-generic-generalizers :extra "typeof"): Use it to signal an error for those types we can't handle.
This commit is contained in:
parent
0cc4409461
commit
3e96dd4f88
1 changed files with 8 additions and 0 deletions
|
|
@ -1332,6 +1332,12 @@ These match if the argument is `eql' to VAL."
|
|||
|
||||
;;; Dispatch on "normal types".
|
||||
|
||||
(defconst cl--generic--unreachable-types
|
||||
;; FIXME: Try to make that list empty?
|
||||
'(fixnum bignum boolean keyword
|
||||
special-form subr-primitive subr-native-elisp)
|
||||
"Built-in classes on which we cannot dispatch for technical reasons.")
|
||||
|
||||
(defun cl--generic-type-specializers (tag &rest _)
|
||||
(and (symbolp tag)
|
||||
(let ((class (cl--find-class tag)))
|
||||
|
|
@ -1352,6 +1358,8 @@ This currently works for built-in types and types built on top of records."
|
|||
(and (symbolp type)
|
||||
(not (eq type t)) ;; Handled by the `t-generalizer'.
|
||||
(let ((class (cl--find-class type)))
|
||||
(when (memq type cl--generic--unreachable-types)
|
||||
(error "Dispatch on %S is currently not supported" type))
|
||||
(memq (type-of class)
|
||||
'(built-in-class cl-structure-class eieio--class)))
|
||||
(list cl--generic-typeof-generalizer))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue