X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/blobdiff_plain/b426ab51d0598242a4c2b57d563341db66d71f7b..180bfa7ca8efeb1297a0bc3f0ff55b02b4e40f9b:/src/method-proto.lisp diff --git a/src/method-proto.lisp b/src/method-proto.lisp index 78429ef..7fd08b8 100644 --- a/src/method-proto.lisp +++ b/src/method-proto.lisp @@ -105,8 +105,10 @@ (defclass method-entry () 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 @@ -197,7 +199,9 @@ (defgeneric method-entry-slot-name (entry) (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)