coops-utils
TOC »
- coops-utils
- Documentation
- Usage
- Argument Conventions
- Extras
- Describe
- Introspection
- 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
- Requirements
- Bugs and Limitations
- Author
- Repository
- Version history
- License
Documentation
coops extensions.
Usage
(import coops-utils)
Argument Conventions
INSTANCE is a coops-instance.
SLOT is a symbol.
INITFORM is 'SLOT OBJECT.
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!
Extras
coops usage extensions.
Usage
(import 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:
(import 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-instanceprocedure
Returns a copy of the object INSTANCE, except where an INITFORM overrides an existing SLOT value of the INSTANCE. The copy is a shallow copy that shares values with INSTANCE.
make-copy is a generic-procedure specializing the first argument.
Describe
coops object internals.
Usage
(import coops-describe)
describe-object
- describe-object INSTANCE #!optional OUT current-output-portprocedure
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.
describe-object-slot
- (describe-object-slot INSTANCE SLOT [NAME-MAXLEN 32 [OUT (current-output-port)]])procedure
Prints information about the INSTANCE's SLOT to the output-port OUT. Does not append a (newline).
NAME-MAXLEN is the maximum number of single-width characters in a slotname.
Introspection
coops predicates and read accessors.
Some TinyCLOS inspired property readers.
Usage
(import coops-introspection)
instance-of?
- instance-of? OBJECT CLASSprocedure
Is OBJECT an instance of the CLASS?
class?
- class? OBJECTprocedure
Is OBJECT an instance of the <standard-class>?
- check-class LOC OBJ #!optional ARGNAMprocedure
- error-class LOC OBJ #!optional ARGNAMprocedure
instance?
- instance? OBJECTprocedure
Is OBJECT an instance of a basic class. Neither an instance of the <standard-class> or a primitive such as boolean or vector?
primitive-instance?
- primitive-instance? OBJECTprocedure
Is OBJECT an instance of the <primitive-object> class or #t?
Note #t is the default class, without the coops-primitive-objects module.
generic?
- generic? OBJECTprocedure
Synonym for generic-procedure?.
method?
- method? OBJECTprocedure
Is OBJECT a method of a generic-procedure?
Only useful in the context of a generic-*-methods procedure result.
- check-method LOC OBJ #!optional ARGNAMprocedure
- error-method LOC OBJ #!optional ARGNAMprocedure
class-precedence-list
- class-precedence-list CLASSprocedure
Returns the superclasses of CLASS.
class-slots
- class-slots CLASSprocedure
Returns the slot names of CLASS.
class-direct-supers
- class-direct-supers CLASSprocedure
Returns the uninherited superclasses of CLASS.
class-direct-slots
- class-direct-slots CLASSprocedure
Returns the uninherited slot names of CLASS.
generic-anonymous?
- generic-anonymous? GENERICprocedure
Is GENERIC an unnamed generic-procedure.
generic-name
- generic-name GENERICprocedure
Returns the name of GENERIC. The name is #f for an anonymous generic procedure.
generic-specialized-arguments
- generic-specialized-arguments GENERICprocedure
The arguments that GENERIC is specialized upon.
generic-primary-methods
- generic-primary-methods GENERICprocedure
Returns the list of #:primary methods for GENERIC.
generic-before-methods
- generic-before-methods GENERICprocedure
Returns the list of #:before methods for GENERIC.
generic-after-methods
- generic-after-methods GENERICprocedure
Returns the list of #:after methods for GENERIC.
generic-around-methods
- generic-around-methods GENERICprocedure
Returns the list of #:around methods for GENERIC.
method-specializers
- method-specializers METHODprocedure
Returns the classes that specialize METHOD.
Throws an assertion error when slot not actually list.
method-procedure
- method-procedure METHODprocedure
Returns the procedure for METHOD.
Throws an assertion error when slot not actually procedure.
Examples
(import 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-primary-methods generic)) )
Requirements
srfi 1 srfi 13 type-checks coops
Bugs and Limitations
- The introspection API is brittle, especially the generics portion.
Suggested only for use during REPL development with coops.
Author
Repository
This egg is hosted on the CHICKEN Subversion repository:
https://anonymous@code.call-cc.org/svn/chicken-eggs/release/5/coops-utils
If you want to check out the source code repository of this egg and you are not familiar with Subversion, see this page.
Version history
- 2.3.0
- Depends on coops:1.4. Fix signatures.
- 2.2.4
- Stronger signatures. Fix closure access.
- 2.2.3
- Use format.
- 2.2.2
- Fix signatures, new test-runner.
- 2.2.1
- Use check-errors basic.
- 2.2.0
- make-copy is generic.
- 2.1.5
- Fix method?, instance? & primitive-instance?.
- 2.1.4
- make-copy uses fresh slots.
- 2.1.3
- Bug #1700.
- 2.1.2
- method-specializers & method-procedure type matches documentation.
- 2.1.1
- Fix signatures.
- 2.1.0
- describe in own module.
- 2.0.0
- CHICKEN 5 release.
License
Copyright (C) 2010-2024 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.