;;;----- Licensing notice ---------------------------------------------------
;;;
-;;; This file is part of the Sensble Object Design, an object system for C.
+;;; This file is part of the Sensible Object Design, an object system for C.
;;;
;;; SOD is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
(export '(effective-slot effective-slot-class
effective-slot-direct-slot effective-slot-initializer))
(defclass effective-slot ()
- ((%class :initarg :class :type sod-slot :reader effective-slot-class)
+ ((%class :initarg :class :type sod-class :reader effective-slot-class)
(slot :initarg :slot :type sod-slot :reader effective-slot-direct-slot)
(initializer :initarg :initializer :type (or sod-initializer null)
- :reader effective-slot-initializer))
+ :reader effective-slot-initializer)
+ (initargs :initarg :initargs :initform nil
+ :type list :reader effective-slot-initargs))
(:documentation
"Describes a slot and how it's meant to be initialized.
(:documentation
"Return the most specific initializer for SLOT, starting from CLASS."))
+(export 'find-slot-initargs)
+(defgeneric find-slot-initargs (class slot)
+ (:documentation
+ "Return as a list all of the initargs defined on CLASS to initialize SLOT.
+
+ The list is returned with initargs defined on more specific classes
+ first."))
+
(export 'compute-effective-slot)
(defgeneric compute-effective-slot (class slot)
(:documentation
SLOT is a direct slot defined on CLASS or one of its superclasses.
(Metaclass initializers are handled using a different mechanism.)"))
+(export 'find-class-initializer)
+(defgeneric find-class-initializer (slot class)
+ (:documentation
+ "Return an initializer value (any printable value) for a class slot SLOT.
+
+ The initializer might come either from the SLOT's defining class (which it
+ already knows), or from the instance CLASS, of which the defining class is
+ be (a superclass of) the metaclass.
+
+ This is used as part of `has-class-initializer-p' and the default output
+ hook for `effective-slot': if you override both of those then you don't
+ need to override this too."))
+
;;;--------------------------------------------------------------------------
;;; Instance layout.
;;; vtmsgs
+(export '(vtmsgs vtmsgs-class vtmsgs-subclass
+ vtmsgs-chain-head vtmsgs-chain-tail vtmsgs-entries))
(defclass vtmsgs ()
((%class :initarg :class :type sod-class :reader vtmsgs-class)
(subclass :initarg :subclass :type sod-class :reader vtmsgs-subclass)
object's metadata; but that would either require a search or we'd have to
be able work out the target chain's index in the table."))
+(export 'make-chain-offset)
(defgeneric make-chain-offset (class chain-head target-head)
(:documentation
"Return the offset from CHAIN-HEAD to TARGET-HEAD."))