Goops Manual (original) (raw)
Node:Class Definition Internals, Next:Customizing Class Definition, Previous:Slot Options, Up:Defining New Classes
3.2.4 Class Definition Internals
Implementation notes: define-class
expands to an expression which
- checks that it is being evaluated only at top level
- defines any accessors that are implied by the slot-definitions
- uses
class
to create the new class (see class) - checks for a previous class definition for name and, if found, handles the redefinition by invoking
class-redefinition
(see Redefining a Class).
class name (super ...) slot-definition ... . options | syntax |
---|
Return a newly created class that inherits from supers, with direct slots defined by slot-definitions and class optionsoptions. For the format of slot-definitions andoptions, see define-class.
Implementation notes: class
expands to an expression which
- processes the class and slot definition options to check that they are well-formed, to convert the
#:init-form
option to an#:init-thunk
option, to supply a default environment parameter (the current top-level environment) and to evaluate all the bits that need to be evaluated - calls
make-class
to create the class with the processed and evaluated parameters.
make-class supers slots . options | procedure |
---|
Return a newly created class that inherits from supers, with direct slots defined by slots and class options options. For the format of slots and options, see define-class, except note that for make-class
,slots and options are separate list parameters: slotshere is a list of slot definitions.
Implementation notes: make-class
- adds
<object>
to the supers list if supers is empty or if none of the classes in supers have<object>
in their class precedence list - defaults the
#:environment
,#:name
and#:metaclass
options, if they are not specified by options, to the current top-level environment, the unbound value, and(ensure-metaclasssupers)
respectively (see ensure-metaclass) - checks for duplicate classes in supers and duplicate slot names inslots, and signals an error if there are any duplicates
- calls
make
, passing the metaclass as the first parameter and all other parameters as option keywords with values.
ensure-metaclass supers env | procedure |
---|
Return a metaclass suitable for a class that inherits from the list of classes in supers. The returned metaclass is the union by inheritance of the metaclasses of the classes in supers.
In the simplest case, where all the supers are straightforward classes with metaclass <class>
, the returned metaclass is just<class>
.
For a more complex example, suppose that supers contained one class with metaclass <operator-class>
and one with metaclass<foreign-object-class>
. Then the returned metaclass would be a class that inherits from both <operator-class>
and<foreign-object-class>
.
If supers is the empty list, ensure-metaclass
returns the default GOOPS metaclass <class>
.
GOOPS keeps a list of the metaclasses created byensure-metaclass
, so that each required type of metaclass only has to be created once.
The env
parameter is ignored.
ensure-metaclass-with-supers meta-supers | procedure |
---|
ensure-metaclass-with-supers
is an internal procedure used byensure-metaclass
(see ensure-metaclass). It returns a metaclass that is the union by inheritance of the metaclasses in meta-supers.
The internals of make
, which is ultimately used to create the new class object, are described in Customizing Instance Creation, which covers the creation and initialization of instances in general.