coops-utils
- UNMAINTAINED *
TOC »
- coops-utils
- Documentation
- Extras
- Introspection
- Argument Conventions
- Usage
- instance-of?
- class?
- instance?
- primitive-instance?
- generic?
- method?
- class-precedence-list
- class-slots
- class-direct-supers
- class-direct-slots
- generic-anonymous?
- generic-name
- generic-specialized-arguments
- generic-primary-methods
- generic-before-methods
- generic-after-methods
- generic-around-methods
- method-specializers
- method-procedure
- Examples
- Notes
- Requirements
- Bugs and Limitations
- Author
- Version history
- License
Documentation
Some coops stuff.
Extras
Miscellaneous coops extensions.
Argument Conventions
INSTANCE is a coops-instance.
SLOT is a symbol.
INITFORM is 'SLOT OBJECT.
Usage
(require-extension coops-extras)
slot@
The slot accessor recursion.
- (slot@ INSTANCE SLOT ...) => * syntax
Returns the slot value of the N'th named slot from INSTANCE.
- (slot@ INSTANCE SLOT ... [= OBJECT]) syntax
Sets the slot value of the N'th named slot of INSTANCE to OBJECT.
Example:
(use coops coops-extras) ; Needlessly complex for example (define-class <first> () (next)) (define-class <second> (<first>) ()) (define-class <third> (<second>) ()) (define 1st (make <first> 'next (make <second> 'next (make <third> 'next "the end")))) (slot@ 1st next next next) ;=> "the end" (slot@ 1st next next next = "still the end") (slot@ 1st next next next) ;=> "still the end"
(From '@' macro by Dan Muresan.)
make/copy
- (make/copy INSTANCE [INITFORM ...]) => coops-instance procedure
Returns a copy of the object INSTANCE except where an INITFORM overrides an existing SLOT value of the INSTANCE.
describe-object
- (describe-object INSTANCE [OUT (current-output-port)]) procedure
Prints information about the INSTANCE to the output-port OUT.
describe-object is a generic-procedure specializing the first argument.
A more detailed print-object for use in a REPL.
Introspection
Some TInyCLOS inspired property readers.
Argument Conventions
Provides predicates and read accessors for coops objects.
OBJECT is a Scheme object.
CLASS is a coops class.
GENERIC is a coops generic-procedure.
METHOD is a coops generic-procedure method. Do not apply any but the supplied API to instances of this type!
Usage
(require-extension coops-introspection)
instance-of?
- (instance-of? OBJECT CLASS) => boolean procedure
Is OBJECT an instance of the CLASS>?
class?
- (class? OBJECT) => boolean procedure
Is OBJECT an instance of the <standard-class>?
- (check-class LOC OBJ [ARGNAM]) => * procedure
- (error-class LOC OBJ [ARGNAM]) procedure
instance?
- (instance? OBJECT) => boolean procedure
Is OBJECT not an instance of the <standard-class>?
- (check-instance LOC OBJ [ARGNAM]) => * procedure
- (error-instance LOC OBJ [ARGNAM]) procedure
primitive-instance?
- (primitive-instance? OBJECT) => boolean procedure
- (primitive? OBJECT) => boolean procedure
Is OBJECT an instance of the <primitive-object> class?
generic?
- (generic? OBJECT) => boolean procedure
Synonym for generic-procedure?.
- (check-generic LOC OBJ [ARGNAM]) => * procedure
- (error-generic LOC OBJ [ARGNAM]) procedure
method?
- (method? OBJECT) => boolean procedure
Is OBJECT a method of a generic-procedure?
- (check-method LOC OBJ [ARGNAM]) => * procedure
- (error-method LOC OBJ [ARGNAM]) procedure
class-precedence-list
- (class-precedence-list CLASS) => (list-of class) procedure
- (class-cpl CLASS) => (list-of class) procedure
- (class-supers CLASS) => (list-of class) procedure
Returns the superclasses of CLASS.
class-slots
- (class-slots CLASS) => (list-of symbol) procedure
Returns the slot names of CLASS.
class-direct-supers
- (class-direct-supers CLASS) => (list-of class) procedure
Returns the uninherited superclasses of CLASS.
class-direct-slots
- (class-direct-slots CLASS) => (list-of symbol) procedure
Returns the uninherited slot names of CLASS.
generic-anonymous?
- (generic-anonymous? GENERIC) => boolean procedure
Is GENERIC an unnamed generic-procedure.
generic-name
- (generic-name GENERIC) => (union #f symbol) procedure
Returns the name of GENERIC. The name is #f for an anonymous generic procedure.
generic-specialized-arguments
- (generic-specialized-arguments GENERIC) => (list-of symbol) procedure
The arguments that GENERIC is specialized upon.
generic-primary-methods
- (generic-primary-methods GENERIC) => (list-of method) procedure
- (generic-methods GENERIC) => (list-of method) procedure
Returns the list of primary: methods for GENERIC.
generic-before-methods
- (generic-before-methods GENERIC) => (list-of method) procedure
Returns the list ofbefore: methods for GENERIC.
generic-after-methods
- (generic-after-methods GENERIC) => (list-of method) procedure
Returns the list of after: methods for GENERIC.
generic-around-methods
- (generic-around-methods GENERIC) => (list-of method) procedure
Returns the list of around: methods for GENERIC.
method-specializers
- (method-specializers METHOD) => (list-of class) procedure
Returns the classes that specialize METHOD.
method-procedure
- (method-procedure METHOD) => procedure procedure
Returns the procedure for METHOD.
Examples
(use coops coops-introspection)
(define (print-methods generic)
(for-each
(lambda (m)
(print
(generic-name generic)
" specialized by " (method-specializers m)
" as " (method-procedure m)))
(generic-methods generic)) )Notes
- The introspection API is not for use in production code.
While useful it relies on knowledge of the internals of the coops implementation and Chicken. It is very brittle, especially the generics portion.
Suggested only for use during REPL development with coops.
Requirements
Bugs and Limitations
Author
Version history
- 0.0.3
- * UNMAINTAINED *
- 0.0.2
- 0.0.1
License
Copyright (C) 2010 Kon Lovett. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED ASIS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.