diff options
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/eieio-comp.el | 101 | ||||
-rw-r--r-- | lisp/emacs-lisp/eieio-datadebug.el | 4 | ||||
-rw-r--r-- | lisp/emacs-lisp/eieio.el | 13 |
3 files changed, 49 insertions, 69 deletions
diff --git a/lisp/emacs-lisp/eieio-comp.el b/lisp/emacs-lisp/eieio-comp.el index 8c75aee313a..8b21490e5b8 100644 --- a/lisp/emacs-lisp/eieio-comp.el +++ b/lisp/emacs-lisp/eieio-comp.el @@ -32,70 +32,24 @@ ;;; Code: -(eval-and-compile - (if (featurep 'xemacs) - (progn - ;; XEmacs compatibility settings. - (if (not (fboundp 'byte-compile-compiled-obj-to-list)) - (defun byte-compile-compiled-obj-to-list (moose) nil)) - (if (not (boundp 'byte-compile-outbuffer)) - (defvar byte-compile-outbuffer nil)) - (defmacro eieio-byte-compile-princ-code (code outbuffer) - `(progn (if (atom ,code) - (princ "#[" ,outbuffer) - (princ "'(" ,outbuffer)) - (let ((codelist (if (byte-code-function-p ,code) - (byte-compile-compiled-obj-to-list ,code) - (append ,code nil)))) - (while codelist - (eieio-prin1 (car codelist) ,outbuffer) - (princ " " ,outbuffer) - (setq codelist (cdr codelist)))) - (if (atom ,code) - (princ "]" ,outbuffer) - (princ ")" ,outbuffer)))) - (defun eieio-prin1 (code outbuffer) - (cond ((byte-code-function-p code) - (let ((codelist (byte-compile-compiled-obj-to-list code))) - (princ "#[" outbuffer) - (while codelist - (eieio-prin1 (car codelist) outbuffer) - (princ " " outbuffer) - (setq codelist (cdr codelist))) - (princ "]" outbuffer))) - ((vectorp code) - (let ((i 0) (ln (length code))) - (princ "[" outbuffer) - (while (< i ln) - (eieio-prin1 (aref code i) outbuffer) - (princ " " outbuffer) - (setq i (1+ i))) - (princ "]" outbuffer))) - (t (prin1 code outbuffer))))) - ;; Emacs: - (defmacro eieio-byte-compile-princ-code (code outbuffer) - (list 'prin1 code outbuffer)) - ;; Dynamically bound in byte-compile-from-buffer. - (defvar bytecomp-outbuffer) - (defvar bytecomp-filename))) - (declare-function eieio-defgeneric-form "eieio" (method doc-string)) -(defun byte-compile-defmethod-param-convert (paramlist) - "Convert method params into the params used by the defmethod thingy. -Argument PARAMLIST is the paramter list to convert." - (let ((argfix nil)) - (while paramlist - (setq argfix (cons (if (listp (car paramlist)) - (car (car paramlist)) - (car paramlist)) - argfix)) - (setq paramlist (cdr paramlist))) - (nreverse argfix))) +;; Some compatibility stuff +(eval-and-compile + (if (not (fboundp 'byte-compile-compiled-obj-to-list)) + (defun byte-compile-compiled-obj-to-list (moose) nil)) + + (if (not (boundp 'byte-compile-outbuffer)) + (defvar byte-compile-outbuffer nil)) + ) ;; This teaches the byte compiler how to do this sort of thing. (put 'defmethod 'byte-hunk-handler 'byte-compile-file-form-defmethod) +;; Variables used free: +(defvar outbuffer) +(defvar filename) + (defun byte-compile-file-form-defmethod (form) "Mumble about the method we are compiling. This function is mostly ripped from `byte-compile-file-form-defun', but @@ -126,14 +80,18 @@ that is called but rarely. Argument FORM is the body of the method." (lamparams (byte-compile-defmethod-param-convert params)) (arg1 (car params)) (class (if (listp arg1) (nth 1 arg1) nil)) - (my-outbuffer (if (featurep 'xemacs) + (my-outbuffer (if (eval-when-compile (featurep 'xemacs)) byte-compile-outbuffer - bytecomp-outbuffer))) + (condition-case nil + bytecomp-outbuffer + (error outbuffer)))) + ) (let ((name (format "%s::%s" (or class "#<generic>") meth))) (if byte-compile-verbose - ;; bytecomp-filename is from byte-compile-from-buffer. - (message "Compiling %s... (%s)" (or bytecomp-filename "") name)) - (setq byte-compile-current-form name)) ; for warnings + ;; #### filename used free + (message "Compiling %s... (%s)" (or filename "") name)) + (setq byte-compile-current-form name) ; for warnings + ) ;; Flush any pending output (byte-compile-flush-pending) ;; Byte compile the body. For the byte compiled forms, add the @@ -149,8 +107,9 @@ that is called but rarely. Argument FORM is the body of the method." (princ key my-outbuffer) (prin1 params my-outbuffer) (princ " " my-outbuffer) - (eieio-byte-compile-princ-code code my-outbuffer) - (princ "))" my-outbuffer)) + (prin1 code my-outbuffer) + (princ "))" my-outbuffer) + ) ;; Now add this function to the list of known functions. ;; Don't bother with a doc string. Not relevant here. (add-to-list 'byte-compile-function-environment @@ -165,6 +124,18 @@ that is called but rarely. Argument FORM is the body of the method." ;; nil prevents cruft from appearing in the output buffer. nil)) +(defun byte-compile-defmethod-param-convert (paramlist) + "Convert method params into the params used by the defmethod thingy. +Argument PARAMLIST is the paramter list to convert." + (let ((argfix nil)) + (while paramlist + (setq argfix (cons (if (listp (car paramlist)) + (car (car paramlist)) + (car paramlist)) + argfix)) + (setq paramlist (cdr paramlist))) + (nreverse argfix))) + (provide 'eieio-comp) ;;; eieio-comp.el ends here diff --git a/lisp/emacs-lisp/eieio-datadebug.el b/lisp/emacs-lisp/eieio-datadebug.el index f9ec56da7c1..b6c116e064d 100644 --- a/lisp/emacs-lisp/eieio-datadebug.el +++ b/lisp/emacs-lisp/eieio-datadebug.el @@ -121,6 +121,10 @@ PREBUTTONTEXT is some text between PREFIX and the object button." (setq publa (cdr publa) publd (cdr publd))) ))) +;;; Augment the Data debug thing display list. +(data-debug-add-specialized-thing (lambda (thing) (object-p thing)) + #'data-debug-insert-object-button) + ;;; DEBUG METHODS ;; ;; A generic function to run DDEBUG on an object and popup a new buffer. diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index 28af9bad419..ff7dc823430 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -36,8 +36,6 @@ ;; is the only way I seem to be able to make this stuff load properly. ;; @TODO - fix :initform to be a form, not a quoted value -;; @TODO - For API calls like `object-p', replace with something -;; that does not conflict with "object", meaning a lisp object. ;; @TODO - Prefix non-clos functions with `eieio-'. ;;; Code: @@ -53,7 +51,7 @@ (message eieio-version)) (eval-and-compile -;; Abount the above. EIEIO must process it's own code when it compiles +;; About the above. EIEIO must process it's own code when it compiles ;; itself, thus, by eval-and-compiling outselves, we solve the problem. ;; Compatibility @@ -109,7 +107,10 @@ execute a `call-next-method'. DO NOT SET THIS YOURSELF!") (defvar eieio-initializing-object nil "Set to non-nil while initializing an object.") -(defconst eieio-unbound (make-symbol "unbound") +(defconst eieio-unbound + (if (and (boundp 'eieio-unbound) (symbolp eieio-unbound)) + eieio-unbound + (make-symbol "unbound")) "Uninterned symbol representing an unbound slot in an object.") ;; This is a bootstrap for eieio-default-superclass so it has a value @@ -2744,6 +2745,10 @@ Optional argument NOESCAPE is passed to `prin1-to-string' when appropriate." '(cedet-edebug-prin1-recurse object) ) )) +;; Done in cedet/data-debug.el: +;; (eval-after-load "data-debug" +;; '(require 'eieio-datadebug)) + ;;; Interfacing with imenu in emacs lisp mode ;; (Only if the expression is defined) ;; |