X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/4b8e5c0347115ff30841f1d1e71afe59ecb6c82c..2c6153373f927d948a74b283ebb16330af8ee49a:/src/class-layout-proto.lisp diff --git a/src/class-layout-proto.lisp b/src/class-layout-proto.lisp index 684fb32..5c755a3 100644 --- a/src/class-layout-proto.lisp +++ b/src/class-layout-proto.lisp @@ -7,7 +7,7 @@ ;;;----- 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 @@ -31,10 +31,12 @@ (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. @@ -50,6 +52,14 @@ (: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 @@ -58,6 +68,19 @@ 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. @@ -151,6 +174,8 @@ ;;; 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) @@ -254,6 +279,7 @@ 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."))