(with-slots (ilayout vtables methods effective-methods) class
(hook-output ilayout reason sequencer)
(dolist (method methods) (hook-output method reason sequencer))
(with-slots (ilayout vtables methods effective-methods) class
(hook-output ilayout reason sequencer)
(dolist (method methods) (hook-output method reason sequencer))
(dolist (vtable vtables) (hook-output vtable reason sequencer))))
;;;--------------------------------------------------------------------------
;;; Instance structure.
(dolist (vtable vtables) (hook-output vtable reason sequencer))))
;;;--------------------------------------------------------------------------
;;; Instance structure.
(sequence-output (stream sequencer)
(((sod-slot-class slot) :islots :slots)
(pprint-logical-block (stream nil :prefix " " :suffix ";")
(sequence-output (stream sequencer)
(((sod-slot-class slot) :islots :slots)
(pprint-logical-block (stream nil :prefix " " :suffix ";")
(with-slots (class chain-head chain-tail) ichain
(when (eq class chain-tail)
(sequence-output (stream sequencer)
(with-slots (class chain-head chain-tail) ichain
(when (eq class chain-tail)
(sequence-output (stream sequencer)
(with-slots (class chain-head chain-tail) vtptr
(sequence-output (stream sequencer)
((class :ichain chain-head :slots)
(with-slots (class chain-head chain-tail) vtptr
(sequence-output (stream sequencer)
((class :ichain chain-head :slots)
(with-slots (class subclass slots) islots
(sequence-output (stream sequencer)
((subclass :ichain (sod-class-chain-head class) :slots)
(with-slots (class subclass slots) islots
(sequence-output (stream sequencer)
((subclass :ichain (sod-class-chain-head class) :slots)
(with-slots (class chain-head chain-tail) vtable
(when (eq class chain-tail)
(sequence-output (stream sequencer)
(with-slots (class chain-head chain-tail) vtable
(when (eq class chain-tail)
(sequence-output (stream sequencer)
(with-slots (class subclass chain-head chain-tail) vtmsgs
(sequence-output (stream sequencer)
((subclass :vtable chain-head :slots)
(with-slots (class subclass chain-head chain-tail) vtmsgs
(sequence-output (stream sequencer)
((subclass :vtable chain-head :slots)
(when (vtmsgs-entries vtmsgs)
(with-slots (class subclass) vtmsgs
(sequence-output (stream sequencer)
(when (vtmsgs-entries vtmsgs)
(with-slots (class subclass) vtmsgs
(sequence-output (stream sequencer)
-(defmethod hook-output progn ((entry method-entry) reason sequencer)
- (with-slots (method) entry
- (hook-output method reason sequencer)))
-
-(defmethod hook-output progn ((entry method-entry) (reason (eql 'vtmsgs))
- sequencer)
+(defmethod hook-output progn ((entry method-entry)
+ (reason (eql 'vtmsgs))
+ sequencer)
(let* ((method (method-entry-effective-method entry))
(message (effective-method-message method))
(class (effective-method-class method))
(let* ((method (method-entry-effective-method entry))
(message (effective-method-message method))
(class (effective-method-class method))
- (type (method-entry-function-type entry))
- (commented-type (commentify-function-type type)))
+ (function-type (method-entry-function-type entry))
+ (commented-type (commentify-function-type function-type))
+ (pointer-type (make-pointer-type commented-type)))
(sequence-output (stream sequencer)
((class :vtmsgs (sod-message-class message) :slots)
(pprint-logical-block (stream nil :prefix " " :suffix ";")
(sequence-output (stream sequencer)
((class :vtmsgs (sod-message-class message) :slots)
(pprint-logical-block (stream nil :prefix " " :suffix ";")
(with-slots (class chain-head metaclass meta-chain-head) cptr
(sequence-output (stream sequencer)
((class :vtable chain-head :slots)
(format stream " const ~A *~:[_class~;~:*_cls_~A~];~%"
metaclass
(with-slots (class chain-head metaclass meta-chain-head) cptr
(sequence-output (stream sequencer)
((class :vtable chain-head :slots)
(format stream " const ~A *~:[_class~;~:*_cls_~A~];~%"
metaclass
(with-slots (class chain-head) boff
(sequence-output (stream sequencer)
((class :vtable chain-head :slots)
(write-line " size_t _base;" stream)))))
(with-slots (class chain-head) boff
(sequence-output (stream sequencer)
((class :vtable chain-head :slots)
(write-line " size_t _base;" stream)))))
(with-slots (class chain-head target-head) choff
(sequence-output (stream sequencer)
((class :vtable chain-head :slots)
(with-slots (class chain-head target-head) choff
(sequence-output (stream sequencer)
((class :vtable chain-head :slots)
(with-slots (class chain-head chain-tail) vtable
(sequence-output (stream sequencer)
:constraint ((class :vtables :start)
(with-slots (class chain-head chain-tail) vtable
(sequence-output (stream sequencer)
:constraint ((class :vtables :start)
(with-slots (class chain-head metaclass meta-chain-head) cptr
(sequence-output (stream sequencer)
:constraint ((class :vtable chain-head :start)
(class :vtable chain-head :class-pointer metaclass)
(class :vtable chain-head :end))
((class :vtable chain-head :class-pointer metaclass)
(with-slots (class chain-head metaclass meta-chain-head) cptr
(sequence-output (stream sequencer)
:constraint ((class :vtable chain-head :start)
(class :vtable chain-head :class-pointer metaclass)
(class :vtable chain-head :end))
((class :vtable chain-head :class-pointer metaclass)
- (format stream " &~A__classobj.~A.~A,~%"
- (sod-class-metaclass class)
+ (format stream " /* ~21@A = */ &~A__classobj.~A.~A,~%"
+ (if (sod-class-direct-superclasses meta-chain-head)
+ (format nil "_cls_~A"
+ (sod-class-nickname meta-chain-head))
+ "_class")
+ class
(with-slots (class chain-head) boff
(sequence-output (stream sequencer)
:constraint ((class :vtable chain-head :start)
(class :vtable chain-head :base-offset)
(class :vtable chain-head :end))
((class :vtable chain-head :base-offset)
(with-slots (class chain-head) boff
(sequence-output (stream sequencer)
:constraint ((class :vtable chain-head :start)
(class :vtable chain-head :base-offset)
(class :vtable chain-head :end))
((class :vtable chain-head :base-offset)
(with-slots (class chain-head target-head) choff
(sequence-output (stream sequencer)
:constraint ((class :vtable chain-head :start)
(class :vtable chain-head :chain-offset target-head)
(class :vtable chain-head :end))
((class :vtable chain-head :chain-offset target-head)
(with-slots (class chain-head target-head) choff
(sequence-output (stream sequencer)
:constraint ((class :vtable chain-head :start)
(class :vtable chain-head :chain-offset target-head)
(class :vtable chain-head :end))
((class :vtable chain-head :chain-offset target-head)
- (format stream " SOD_OFFSETDIFF(struct ~A, ~A, ~A),~%"
+ (format stream " /* ~21@A = */ SOD_OFFSETDIFF(struct ~A, ~A, ~A),~%"
+ (format nil "_off_~A" (sod-class-nickname target-head))
(ilayout-struct-tag class)
(sod-class-nickname chain-head)
(sod-class-nickname target-head))))))
(ilayout-struct-tag class)
(sod-class-nickname chain-head)
(sod-class-nickname target-head))))))
(with-slots (class subclass chain-head) vtmsgs
(sequence-output (stream sequencer)
:constraint ((subclass :vtable chain-head :start)
(with-slots (class subclass chain-head) vtmsgs
(sequence-output (stream sequencer)
:constraint ((subclass :vtable chain-head :start)
((subclass :vtable chain-head :vtmsgs class :end)
(format stream " },~%")))))
((subclass :vtable chain-head :vtmsgs class :end)
(format stream " },~%")))))
(with-slots (method chain-head chain-tail) entry
(let* ((message (effective-method-message method))
(class (effective-method-class method))
(super (sod-message-class message)))
(sequence-output (stream sequencer)
((class :vtable chain-head :vtmsgs super :slots)
(with-slots (method chain-head chain-tail) entry
(let* ((message (effective-method-message method))
(class (effective-method-class method))
(super (sod-message-class message)))
(sequence-output (stream sequencer)
((class :vtable chain-head :vtmsgs super :slots)
(method-entry-function-name method chain-head)))))))
;;;--------------------------------------------------------------------------
;;; Filling in the class object.
(method-entry-function-name method chain-head)))))))
;;;--------------------------------------------------------------------------
;;; Filling in the class object.
(with-slots (class chain-head) ichain
(sequence-output (stream sequencer)
:constraint ((*instance-class* :object :start)
(with-slots (class chain-head) ichain
(sequence-output (stream sequencer)
:constraint ((*instance-class* :object :start)
((*instance-class* :object chain-head :ichain :end)
(format stream " } },~%")))))
((*instance-class* :object chain-head :ichain :end)
(format stream " } },~%")))))
(with-slots (class) islots
(let ((chain-head (sod-class-chain-head class)))
(sequence-output (stream sequencer)
(with-slots (class) islots
(let ((chain-head (sod-class-chain-head class)))
(sequence-output (stream sequencer)
((*instance-class* :object class :slots :end)
(format stream " },~%"))))))
((*instance-class* :object class :slots :end)
(format stream " },~%"))))))
(with-slots (class chain-head chain-tail) vtptr
(sequence-output (stream sequencer)
:constraint ((*instance-class* :object chain-head :ichain :start)
(with-slots (class chain-head chain-tail) vtptr
(sequence-output (stream sequencer)
:constraint ((*instance-class* :object chain-head :ichain :start)
(defgeneric output-class-initializer (slot instance stream)
(:method ((slot sod-class-effective-slot) (instance sod-class) stream)
(defgeneric output-class-initializer (slot instance stream)
(:method ((slot sod-class-effective-slot) (instance sod-class) stream)
- (format stream " ~A,~%" (funcall func instance))
+ (format stream " /* ~15@A = */ ~A,~%"
+ (sod-slot-name direct-slot)
+ (funcall func instance))
- (:compound (format stream " ~@<{ ~;~A~; },~:>~%"
- (sod-initializer-value-form init)))))))
+ (:compound (format stream " /* ~15@A = */ ~@<{ ~;~A~; },~:>~%"
+ (sod-slot-name direct-slot)
+ (sod-initializer-value-form init)))))))
(with-slots (class (dslot slot)) slot
(let ((instance *instance-class*)
(super (sod-slot-class dslot)))
(with-slots (class (dslot slot)) slot
(let ((instance *instance-class*)
(super (sod-slot-class dslot)))