doc/list-exports.lisp: Search for exports inside `eval-when' blocks.
[sod] / src / method-proto.lisp
index 78429ef..e87745f 100644 (file)
 
    A vtable can contain more than one entry for the same message.  Such
    entries are distinguished by their roles.  A message always has an entry
-   with the `nil role.  No other roles are currently defined, though they may
-   be introduced by extensions.
+   with the `nil role; in addition, a varargs message also has a `:valist'
+   role, which accepts a `va_list' argument in place of the variable argument
+   listNo other roles are currently defined, though they may be introduced by
+   extensions.
 
    The boundaries between a method entry and the effective method
    is (intentionally) somewhat fuzzy.  In extreme cases, the effective method
 
 (defgeneric method-entry-slot-name-by-role (entry role name)
   (:documentation "Easier implementation for `method-entry-slot-name'.")
-  (:method ((entry method-entry) (role (eql nil)) name) name))
+  (:method ((entry method-entry) (role (eql nil)) name) name)
+  (:method ((entry method-entry) (role (eql :valist)) name)
+    (format nil "~A__v" name)))
 
 (export 'effective-method-basic-argument-names)
 (defgeneric effective-method-basic-argument-names (method)
 
 ;;; Additional instructions.
 
-(export 'convert-to-ilayout)
-(definst convert-to-ilayout (stream) (class chain-head expr)
+(definst convert-to-ilayout (stream :export t) (class chain-head expr)
   (format stream "SOD_ILAYOUT(~@<~A, ~_~A, ~_~A~:>)"
          class (sod-class-nickname chain-head) expr))