src/method-impl.lisp: Argument name list should only contain names.
[sod] / src / method-impl.lisp
index 49c6676..86fd4cd 100644 (file)
                         (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)
           (varargs-prologue ()
             (ensure-var codegen *sod-master-ap* (c-type va-list))
             (emit-inst codegen
-                       (make-va-start-inst *sod-master-ap* parm-n)))
+                       (make-va-start-inst *sod-master-ap*
+                                           (argument-name parm-n))))
           (varargs-epilogue ()
             (emit-inst codegen (make-va-end-inst *sod-master-ap*)))
           (finish-entry (tail)