From e5fae432e89a003fd40067bd59f4b6aa4d740022 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sun, 30 Aug 2015 10:58:38 +0100 Subject: [PATCH] src/method-impl.lisp: Handle varargs methods in `next-method-type'. --- src/method-impl.lisp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/method-impl.lisp b/src/method-impl.lisp index 49c6676..26dce5d 100644 --- a/src/method-impl.lisp +++ b/src/method-impl.lisp @@ -192,12 +192,17 @@ (slot-name (eql 'next-method-type))) (declare (ignore class)) (let* ((message (sod-method-message method)) - (type (sod-message-type message))) + (return-type (c-type-subtype (sod-message-type message))) + (msgargs (sod-message-argument-tail message)) + (arguments (if (varargs-message-p message) + (cons (make-argument *sod-master-ap* + (c-type va-list)) + (butlast msgargs)) + msgargs))) (setf (slot-value method 'next-method-type) - (c-type (fun (lisp (c-type-subtype type)) + (c-type (fun (lisp return-type) ("me" (* (class (sod-method-class method)))) - . - (c-function-arguments type)))))) + . arguments))))) (defmethod slot-unbound (class (method delegating-direct-method) -- 2.11.0