summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2009-09-13 15:58:30 +0000
committerChong Yidong <cyd@stupidchicken.com>2009-09-13 15:58:30 +0000
commita964f5e552c64a53fb4b5c417f1825807cdcca6f (patch)
tree8709f2b8c145118620e7c3f0efb840de37a4ccbe /lisp/emacs-lisp
parent0a3b3f9e131bc5f0cf8034326d14d7737a6162b3 (diff)
downloademacs-a964f5e552c64a53fb4b5c417f1825807cdcca6f.tar.gz
emacs-a964f5e552c64a53fb4b5c417f1825807cdcca6f.tar.bz2
emacs-a964f5e552c64a53fb4b5c417f1825807cdcca6f.zip
Synch to Eric M. Ludlam's upstream CEDET repository.
* cedet/semantic/wisent/java-tags.el: * cedet/semantic/wisent/javat-wy.el: New files. * cedet/semantic/wisent/java.el: * cedet/semantic/wisent/java-wy.el: Files removed. * cedet/semantic/java.el (semantic-java-prototype-function) (semantic-java-prototype-variable, semantic-java-prototype-type): Doc fix (java-mode::semantic-format-tag-prototype): Renamed from semantic-format-prototype-tag, which didn't match the overloadable function. * cedet/semantic/bovine/c.el (semantic-c-dereference-namespace-alias): Deal correctly with nested namespaces. Make sure type actually exists in original namespace. * cedet/semantic/lex-spp.el (semantic-lex-spp-hack-depth): New. (semantic-lex-spp-lex-text-string): Use above to enable recursion. * cedet/semantic/format.el: Whitespace cleanup. (semantic-test-all-format-tag-functions): Move to end. (semantic-format-tag-prototype, semantic-format-tag-name) (semantic-format-tag-name-default): Revert to original upstream positions. * cedet/semantic/elp.el: File removed. * cedet/semantic/analyze.el (semantic-adebug-analyze): New function, moved here from semantic/adebug. * cedet/semantic/adebug.el: Declare external semanticdb functions. (semantic-adebug-analyze, semantic-adebug-edebug-expr): Deleted. * emacs-lisp/eieio.el (eieio-unbound): Default value is now robust to recompile. * emacs-lisp/eieio-datadebug.el: Add eieio objects to the list of data debug things to recognize. * emacs-lisp/eieio-comp.el: Synch to upstream. * cedet/data-debug.el: Don't require eieio and semantic/tag. If eieio is loaded, require eieio-datadebug. (data-debug-insert-ring-button): Do not be specific about the ring contents. (data-debug-thing-alist): Remove eieio and semantic specific entries. (data-debug-add-specialized-thing): New function. * cedet/cedet.el: Update commentary. * cedet/cedet-edebug.el: Require edebug and debug.
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)
;;