[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CLOS equivalent of Which-operations
- To: info-mcl@cambridge.apple.COM, ELIOT@cs.umass.EDU
- Subject: Re: CLOS equivalent of Which-operations
- From: bill@cambridge.apple.com (Bill St. Clair)
- Date: Thu, 25 Feb 1993 08:18:42 -0600
At 21:02 2/24/93 -0500, ELIOT@cs.umass.EDU wrote:
>:which-operations was a nice to to figure out what kinds of things
>a flavor could do, but I have not been able to map from classes
>or instances to the methods that operate on them. Has anyone built
>some nice tools for this or figured out what the meta class specs
>provide for this need?
>
>At least apropos works on generic-functions where it did not
>work on flavor-methods, but it seems there should be some better
>indexing possible.
>
>Comments?
>
>Chris Eliot
SPECIALIZER-DIRECT-METHODS & SPECIALIZER-DIRECT-GENERIC-FUNCTIONS will
get you from a class to the methods or generic functions that are
specialized on it. CLASS-PRECEDENCE-LIST returns a list of all
superclasses, direct or indirect of a class. CLASS-OF will get you from
an instance to its class. The first three are documented on pp. 610,613-614
of the MCL 2.0 reference manual (Appendix A, Implementation Notes).
CLASS-OF is documented in CLtL2. Because the class->method mapping is
not cached by default, the first invocation of SPECIALIZER-DIRECT-METHODS
or SPECIALIZER-DIRECT-GENERIC-FUNCTIONS will be slower than subsequent ones.
? (pprint
(specializer-direct-generic-functions
(find-class 'stream)))
(#<STANDARD-GENERIC-FUNCTION INSPECTOR::DECLARE-STREAM-FONT-INFO #x1C9FE0E>
#<STANDARD-GENERIC-FUNCTION INSPECTOR::DECLARE-STREAM-FONT-CODES #x1C9FBA6>
#<STANDARD-GENERIC-FUNCTION INSPECTOR::CALL-WITH-PRESERVED-STREAM-FONT #x1C8499E>
#<STANDARD-GENERIC-FUNCTION STREAM-PEEK #x1C21EAE>
#<STANDARD-GENERIC-FUNCTION WINDOW-FILENAME #x1B1561E>
#<STANDARD-GENERIC-FUNCTION WRITE-INTERNAL-1 #x1AFD156>
#<STANDARD-GENERIC-FUNCTION STREAM-ELEMENT-TYPE #x1AEF436>
#<STANDARD-GENERIC-FUNCTION STREAM-READ #x1AEC38E>
#<STANDARD-GENERIC-FUNCTION STREAM-COLUMN #x1AEA56E>
#<STANDARD-GENERIC-FUNCTION STREAM-RUBOUT-HANDLER #x1AEA06E>
#<STANDARD-GENERIC-FUNCTION STREAM-FILENAME #x1AE9FB6>
#<STANDARD-GENERIC-FUNCTION STREAM-ABORT #x1AE9EDE>
#<STANDARD-GENERIC-FUNCTION INTERACTIVE-STREAM-P #x1AE9C36>
#<STANDARD-GENERIC-FUNCTION STREAM-LINE-LENGTH #x1AE9B76>
#<STANDARD-GENERIC-FUNCTION STREAM-CLOSE #x1AE999E>
#<STANDARD-GENERIC-FUNCTION STREAM-EOFP #x1AE980E>
#<STANDARD-GENERIC-FUNCTION STREAM-READ-STRING #x1AE967E>
#<STANDARD-GENERIC-FUNCTION STREAM-UNTYI #x1AE944E>
#<STANDARD-GENERIC-FUNCTION STREAM-READER #x1AE91E6>
#<STANDARD-GENERIC-FUNCTION STREAM-WRITE-STRING #x1AE8FB6>
#<STANDARD-GENERIC-FUNCTION STREAM-WRITER #x1AE8CAE>
#<STANDARD-GENERIC-FUNCTION STREAM-TYO #x1AE8B3E>
#<STANDARD-GENERIC-FUNCTION STREAM-DIRECTION #x1AE868E>)
? (pprint
(specializer-direct-methods
(find-class 'stream)))
(#<STANDARD-READER-METHOD STREAM-DIRECTION (STREAM)>
#<STANDARD-METHOD STREAM-TYO (STREAM T)>
#<STANDARD-METHOD STREAM-WRITER (STREAM)>
#<STANDARD-METHOD STREAM-WRITE-STRING (STREAM T T T)>
#<STANDARD-METHOD STREAM-READER (STREAM)>
#<STANDARD-METHOD STREAM-UNTYI (STREAM T)>
#<STANDARD-METHOD STREAM-READ-STRING (STREAM T T T T)>
#<STANDARD-METHOD STREAM-EOFP (STREAM)>
#<STANDARD-METHOD STREAM-CLOSE (STREAM)>
#<STANDARD-METHOD STREAM-LINE-LENGTH (STREAM)>
#<STANDARD-METHOD INTERACTIVE-STREAM-P (STREAM)>
#<STANDARD-METHOD STREAM-ABORT (STREAM)>
#<STANDARD-METHOD STREAM-FILENAME (STREAM)>
#<STANDARD-METHOD STREAM-RUBOUT-HANDLER (STREAM T)>
#<STANDARD-METHOD STREAM-COLUMN (STREAM)>
#<STANDARD-METHOD STREAM-READ (STREAM T T)>
#<STANDARD-METHOD STREAM-ELEMENT-TYPE (STREAM)>
#<STANDARD-METHOD WRITE-INTERNAL-1 (STREAM T T T)>
#<STANDARD-METHOD WINDOW-FILENAME (STREAM)>
#<STANDARD-METHOD STREAM-PEEK (STREAM)>
#<STANDARD-METHOD INSPECTOR::CALL-WITH-PRESERVED-STREAM-FONT (STREAM T)>
#<STANDARD-METHOD INSPECTOR::DECLARE-STREAM-FONT-CODES (STREAM T)>
#<STANDARD-METHOD INSPECTOR::DECLARE-STREAM-FONT-INFO (STREAM T T T T)>)
? (class-of (front-window))
#<STANDARD-CLASS LISTENER>
? (pprint (class-precedence-list *))
(#<STANDARD-CLASS LISTENER> #<STANDARD-CLASS FRED-WINDOW>
#<STANDARD-CLASS FRED-MIXIN> #<STANDARD-CLASS WINDOW> #<STANDARD-CLASS VIEW>
#<STANDARD-CLASS SIMPLE-VIEW> #<STANDARD-CLASS OUTPUT-STREAM>
#<STANDARD-CLASS INPUT-STREAM> #<STANDARD-CLASS STREAM>
#<STANDARD-CLASS INSTANCE-INITIALIZE-MIXIN> #<STANDARD-CLASS STANDARD-OBJECT>
#<BUILT-IN-CLASS T>)
?