From: David Engster Date: Mon, 29 Jul 2013 20:26:19 +0000 (+0200) Subject: Merge with CEDET upstream (rev. 8579). X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1698^2^2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=18657165bb88252b8285c4655e907dd4fc29a0f7;p=emacs.git Merge with CEDET upstream (rev. 8579). * lisp/cedet/cedet.el (cedet-packages): Remove speedbar since its development does no longer happens in CEDET upstream but in Emacs proper. Also remove cedet-contrib and cogre since those are only in upstream. * semantic/analyze/fcn.el (semantic-analyze-type-to-name): If TYPE has a parent, return a fully qualified name. * semantic/decorate/mode.el (semantic-decoration-on-includes-p-default) (semantic-decoration-on-includes-highlight-default): Declare for byte compiler. * semantic/wisent/python.el (semantic/format): New require. * eieio.texi (top): Make clear that EIEIO is not a full CLOS implementation. (Introduction): Add further missing features. (Building Classes): Add introductory paragraph. (Wish List): Add metaclasses and EQL specialization. --- diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 50214bb364c..bef3f84c846 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,11 @@ +2013-07-29 David Engster + + * eieio.texi (top): Make clear that EIEIO is not a full CLOS + implementation. + (Introduction): Add further missing features. + (Building Classes): Add introductory paragraph. + (Wish List): Add metaclasses and EQL specialization. + 2013-07-26 Tassilo Horn * gnus.texi (Sorting the Summary Buffer): Document new defcustom diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi index b16144e98a2..c8e8fb6d2e2 100644 --- a/doc/misc/eieio.texi +++ b/doc/misc/eieio.texi @@ -46,10 +46,10 @@ modify this GNU manual.'' @comment node-name, next, previous, up @top EIEIO -@eieio{} (``Enhanced Implementation of Emacs Interpreted Objects'') is -a CLOS (Common Lisp Object System) compatibility layer for Emacs Lisp. -It provides a framework for writing object-oriented applications in -Emacs. +@eieio{} (``Enhanced Implementation of Emacs Interpreted Objects'') +provides an Object Oriented layer for Emacs Lisp, following the basic +concepts of the Common Lisp Object System (CLOS). It provides a +framework for writing object-oriented applications in Emacs. @ifnottex @insertcopying @@ -201,8 +201,6 @@ Byte compilation support of methods. @item Help system extensions for classes and methods. @item -Automatic texinfo documentation generator. -@item Several base classes for interesting tasks. @item Simple test suite. @@ -212,20 +210,31 @@ Public and private classifications for slots (extensions to CLOS) Customization support in a class (extension to CLOS) @end enumerate -Here are some CLOS features that @eieio{} presently lacks: +Here are some important CLOS features that @eieio{} presently lacks: @table @asis -@item Complete @code{defclass} tag support -All CLOS tags are currently supported, but the following are not -currently implemented correctly: -@table @code -@item :metaclass -There is only one base superclass for all @eieio{} classes, which is -the @code{eieio-default-superclass}. -@item :default-initargs +@item Method dispatch +EIEO does not support method dispatch for built-in types and multiple +arguments types. In other words, method dispatch only looks at the +first argument, and this one must be an @eieio{} type. + +@item Support for metaclasses +There is just one default metaclass, @code{eieio-default-superclass}, +and you cannot define your own. The @code{:metaclass} tag in +@code{defclass} is ignored. Also, functions like `class-of' and +`find-class', which should return instances of the metaclass, behave +differently in @eieio{} in that they return symbols or plain structures +instead. + +@item EQL specialization +EIEIO does not support it. + +@item @code{:around} method tag +This CLOS method tag is non-functional. + +@item :default-initargs in @code{defclass} Each slot has an @code{:initarg} tag, so this is not really necessary. -@end table @item Mock object initializers Each class contains a mock object used for fast initialization of @@ -233,15 +242,23 @@ instantiated objects. Using functions with side effects on object slot values can potentially cause modifications in the mock object. @eieio{} should use a deep copy but currently does not. -@item @code{:around} method tag -This CLOS method tag is non-functional. - @end table @node Building Classes @comment node-name, next, previous, up @chapter Building Classes +First off, please note that this manual cannot serve as a complete +introduction to object oriented programming and generic functions in +LISP. Although EIEIO is not a complete CLOS implementation and also +differs from CLOS in several aspects, it follows the same basic +concepts. Therefore, it is highly recommended to learn these from a +textbook or tutorial first, especially if you only know OOP from +languages like C++ or Java. If on the other hand you are already +familiar with CLOS, you should be aware that @eieio{} does not implement +the full CLOS specificiation and also differs in some other aspects +(@xref{Introduction}, and @ref{CLOS compatibility}). + A @dfn{class} is a definition for organizing data and methods together. An @eieio{} class has structures similar to the classes found in other object-oriented (OO) languages. @@ -1930,8 +1947,9 @@ Some important compatibility features that would be good to add are: @enumerate @item +Support for metaclasses and EQL specialization. +@item @code{:around} method key. - @item Method dispatch for built-in types. @item diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 1b8e4725dc1..c39a8a700ef 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,20 @@ +2013-07-29 David Engster + + * lisp/cedet/cedet.el (cedet-packages): Remove speedbar since its + development does no longer happens in CEDET upstream but in Emacs + proper. Also remove cedet-contrib and cogre since those are only + in upstream. + + * semantic/analyze/fcn.el (semantic-analyze-type-to-name): If TYPE + has a parent, return a fully qualified name. + + * semantic/decorate/mode.el + (semantic-decoration-on-includes-p-default) + (semantic-decoration-on-includes-highlight-default): Declare for + byte compiler. + + * semantic/wisent/python.el (semantic/format): New require. + 2013-07-27 Eric Ludlam * lisp/cedet/semantic/edit.el (semantic-edits-splice-remove): Wrap diff --git a/lisp/cedet/cedet.el b/lisp/cedet/cedet.el index e8720bc6624..f34442996c1 100644 --- a/lisp/cedet/cedet.el +++ b/lisp/cedet/cedet.el @@ -46,9 +46,6 @@ (semantic "2.2" nil "semantic/doc") (srecode "1.2" nil "srecode" ) (ede "1.2" nil "ede" ) - (speedbar "1.0.4" nil "speedbar" ) - (cogre "1.2" nil "cogre" ) - (cedet-contrib "1.2" "contrib" nil ) ) "Table of CEDET packages to install.") diff --git a/lisp/cedet/semantic/analyze/fcn.el b/lisp/cedet/semantic/analyze/fcn.el index 4300c89c9df..7512b7ca15a 100644 --- a/lisp/cedet/semantic/analyze/fcn.el +++ b/lisp/cedet/semantic/analyze/fcn.el @@ -165,7 +165,10 @@ SCOPE is the scope object with additional items in which to search for names." The TYPE field in a tag can be nil (return nil) or a string, or a non-positional tag." (cond ((semantic-tag-p type) - (semantic-tag-name type)) + (if (semantic-tag-named-parent type) + (semantic-analyze-unsplit-name `(,(semantic-tag-named-parent type) + ,(semantic-tag-name type))) + (semantic-tag-name type))) ((stringp type) type) ((listp type) diff --git a/lisp/cedet/semantic/decorate/mode.el b/lisp/cedet/semantic/decorate/mode.el index ba06c73936b..cc5e9d9bec2 100644 --- a/lisp/cedet/semantic/decorate/mode.el +++ b/lisp/cedet/semantic/decorate/mode.el @@ -541,6 +541,10 @@ Use a primary decoration." ;;; Decoration Modes in other files ;; +(declare-function semantic-decoration-on-includes-p-default + "semantic/decorate/include") +(declare-function semantic-decoration-on-includes-highlight-default + "semantic/decorate/include") (define-semantic-decoration-style semantic-decoration-on-includes "Highlight class members that are includes. This mode provides a nice context menu on the include statements." diff --git a/lisp/cedet/semantic/wisent/python.el b/lisp/cedet/semantic/wisent/python.el index 719868f7635..2c0ed5868ce 100644 --- a/lisp/cedet/semantic/wisent/python.el +++ b/lisp/cedet/semantic/wisent/python.el @@ -39,6 +39,7 @@ (require 'semantic/find) (require 'semantic/dep) (require 'semantic/ctxt) +(require 'semantic/format) (eval-when-compile (require 'cl))