Commit 887fa622 authored by Stefan Monnier's avatar Stefan Monnier
Browse files

* lisp/emacs-lisp/eieio-core.el: Prefer inlinable functions over macros.

(class-p, generic-p, eieio-object-p, class-abstract-p):
Make them defsubst, so as to avoid corner case problems where
the arg might be evaluated in the condition-case, or it can't be passed
to higher-order functions like `cl-some'.
parent 2a06fc15
2014-12-05 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/eieio-core.el: Prefer inlinable functions over macros.
(class-p, generic-p, eieio-object-p, class-abstract-p):
Make them defsubst, so as to avoid corner case problems where
the arg might be evaluated in the condition-case, or it can't be passed
to higher-order functions like `cl-some'.
2014-12-05 Nicolas Richard <theonewiththeevillook@yahoo.fr> 2014-12-05 Nicolas Richard <theonewiththeevillook@yahoo.fr>
   
* wid-edit.el (widget-choose): Let numeric keypad work (bug#19268) * wid-edit.el (widget-choose): Let numeric keypad work (bug#19268)
......
...@@ -206,14 +206,14 @@ Stored outright without modifications or stripping."))) ...@@ -206,14 +206,14 @@ Stored outright without modifications or stripping.")))
;; No check: If eieio gets this far, it has probably been checked already. ;; No check: If eieio gets this far, it has probably been checked already.
`(get ,class 'eieio-class-definition)) `(get ,class 'eieio-class-definition))
(defmacro class-p (class) (defsubst class-p (class)
"Return t if CLASS is a valid class vector. "Return non-nil if CLASS is a valid class vector.
CLASS is a symbol." CLASS is a symbol."
;; this new method is faster since it doesn't waste time checking lots of ;; this new method is faster since it doesn't waste time checking lots of
;; things. ;; things.
`(condition-case nil (condition-case nil
(eq (aref (class-v ,class) 0) 'defclass) (eq (aref (class-v class) 0) 'defclass)
(error nil))) (error nil)))
(defun eieio-class-name (class) "Return a Lisp like symbol name for CLASS." (defun eieio-class-name (class) "Return a Lisp like symbol name for CLASS."
(eieio--check-type class-p class) (eieio--check-type class-p class)
...@@ -237,11 +237,11 @@ CLASS is a symbol." ...@@ -237,11 +237,11 @@ CLASS is a symbol."
"Return the symbol representing the constructor of CLASS." "Return the symbol representing the constructor of CLASS."
`(eieio--class-symbol (class-v ,class))) `(eieio--class-symbol (class-v ,class)))
(defmacro generic-p (method) (defsubst generic-p (method)
"Return t if symbol METHOD is a generic function. "Return non-nil if symbol METHOD is a generic function.
Only methods have the symbol `eieio-method-obarray' as a property Only methods have the symbol `eieio-method-obarray' as a property
\(which contains a list of all bindings to that method type.)" \(which contains a list of all bindings to that method type.)"
`(and (fboundp ,method) (get ,method 'eieio-method-obarray))) (and (fboundp method) (get method 'eieio-method-obarray)))
(defun generic-primary-only-p (method) (defun generic-primary-only-p (method)
"Return t if symbol METHOD is a generic function with only primary methods. "Return t if symbol METHOD is a generic function with only primary methods.
...@@ -284,19 +284,18 @@ Methods with only primary implementations are executed in an optimized way." ...@@ -284,19 +284,18 @@ Methods with only primary implementations are executed in an optimized way."
Return nil if that option doesn't exist." Return nil if that option doesn't exist."
`(class-option-assoc (eieio--class-options (class-v ,class)) ',option)) `(class-option-assoc (eieio--class-options (class-v ,class)) ',option))
(defmacro eieio-object-p (obj) (defsubst eieio-object-p (obj)
"Return non-nil if OBJ is an EIEIO object." "Return non-nil if OBJ is an EIEIO object."
`(condition-case nil (condition-case nil
(let ((tobj ,obj)) (and (eq (aref obj 0) 'object)
(and (eq (aref tobj 0) 'object) (class-p (eieio--object-class obj)))
(class-p (eieio--object-class tobj)))) (error nil)))
(error nil)))
(defalias 'object-p 'eieio-object-p) (defalias 'object-p 'eieio-object-p)
(defmacro class-abstract-p (class) (defsubst class-abstract-p (class)
"Return non-nil if CLASS is abstract. "Return non-nil if CLASS is abstract.
Abstract classes cannot be instantiated." Abstract classes cannot be instantiated."
`(class-option ,class :abstract)) (class-option class :abstract))
(defmacro class-method-invocation-order (class) (defmacro class-method-invocation-order (class)
"Return the invocation order of CLASS. "Return the invocation order of CLASS.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment