From: Mark Wooding Date: Sun, 26 Mar 2017 14:16:18 +0000 (+0100) Subject: src/method-proto.lisp (make-trampoline): Ignore unused keyword pointers. X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/commitdiff_plain/f2ed4293acc558f54f33a04e6bc707edb5a40c03 src/method-proto.lisp (make-trampoline): Ignore unused keyword pointers. If we're not going to need a keyword pointer (because the applicable methods have no keyword arguments) then ignore it explicitly. (We can't just omit the arguments, because direct-method functions may have to work as part of an effective method which /does/ have keyword arguments -- maybe even downstream -- and the trampoline functions must have the same signature either way.) --- diff --git a/src/method-proto.lisp b/src/method-proto.lisp index 637c29e..6f8dc02 100644 --- a/src/method-proto.lisp +++ b/src/method-proto.lisp @@ -432,11 +432,13 @@ (defun make-trampoline (codegen super body) :pointer :null))) (codegen-push codegen) (ensure-ilayout-var codegen super) - (when (and (keyword-message-p message) - (not (eq *keyword-struct-disposition* :null))) - (let ((tag (effective-method-keyword-struct-tag method))) - (ensure-var codegen *sod-keywords* (c-type (* (struct tag :const))) - *sod-key-pointer*))) + (when (keyword-message-p message) + (if (eq *keyword-struct-disposition* :null) + (deliver-call codegen :void "SOD__IGNORE" *sod-key-pointer*) + (let ((tag (effective-method-keyword-struct-tag method))) + (ensure-var codegen *sod-keywords* + (c-type (* (struct tag :const))) + *sod-key-pointer*)))) (funcall body (codegen-target codegen)) (codegen-pop-function codegen (temporary-function) (c-type (fun (lisp return-type)