summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/eieio-comp.el101
-rw-r--r--lisp/emacs-lisp/eieio-datadebug.el4
-rw-r--r--lisp/emacs-lisp/eieio.el13
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)
;;