;;;----- 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
(defun find-instance-slot-by-name (class super-nick slot-name)
(let ((super (find-superclass-by-nick class super-nick)))
- (find-thing-by-name "slot" super (sod-class-slots super)
+ (find-thing-by-name "instance slot" super (sod-class-slots super)
slot-name #'sod-slot-name)))
(defun find-class-slot-by-name (class super-nick slot-name)
(let* ((meta (sod-class-metaclass class))
(super (find-superclass-by-nick meta super-nick)))
- (find-thing-by-name "slot" super (sod-class-slots super)
+ (find-thing-by-name "class slot" super (sod-class-slots super)
slot-name #'sod-slot-name)))
(defun find-message-by-name (class super-nick message-name)
The root superclass is the superclass which itself has no direct
superclasses. In universes not based on the provided builtin module, the
- root class may not be our beloved SodObject; however, there must be one
+ root class may not be our beloved `SodObject'; however, there must be one
(otherwise the class graph is cyclic, which should be forbidden), and we
insist that it be unique."
;;
;; Note! This function gets called from `check-sod-class' before the
;; class's chains have been computed. Therefore we iterate over the direct
- ;; superclass's chains rather than the class's own. This misses a chain
+ ;; superclasses' chains rather than the class's own. This misses a chain
;; only in the case where the class is its own chain head. There are two
;; subcases: if there are no direct superclasses at all, then the class is
;; its own root; otherwise, it clearly can't be the root and the omission
(and (= (length message-args) (length method-args))
(every (lambda (message-arg method-arg)
(if (eq message-arg :ellipsis)
- (eq method-arg (c-type va-list))
+ (c-type-equal-p (argument-type method-arg)
+ c-type-va-list)
(c-type-equal-p (argument-type message-arg)
(argument-type method-arg))))
message-args method-args)))
(defun vtmsgs-struct-tag (class super)
(format nil "~A__vtmsgs_~A" class (sod-class-nickname super)))
+(export 'vtable-union-tag)
+(defun vtable-union-tag (class chain-head)
+ (format nil "~A__vtu_~A" class (sod-class-nickname chain-head)))
+
(export 'vtable-struct-tag)
(defun vtable-struct-tag (class chain-head)
(format nil "~A__vt_~A" class (sod-class-nickname chain-head)))
(defun vtable-name (class chain-head)
(format nil "~A__vtable_~A" class (sod-class-nickname chain-head)))
+(export 'message-macro-name)
+(defun message-macro-name (class entry)
+ (format nil "~A_~A" class (method-entry-slot-name entry)))
+
;;;----- That's all, folks --------------------------------------------------