X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/12386a2694932857981a076536c6297f8eaa661f..97d10f8b1f631cd32ea5ac9118b253cb4142d391:/src/method-proto.lisp diff --git a/src/method-proto.lisp b/src/method-proto.lisp index 637c29e..e85f62a 100644 --- a/src/method-proto.lisp +++ b/src/method-proto.lisp @@ -290,14 +290,10 @@ ;;; Utilities. -(defvar *keyword-struct-disposition* :unset +(defvar-unbound *keyword-struct-disposition* "The current state of the keyword structure. - This can be one of four values. - - * `:unset' -- the top-level default, mostly because I can't leave it - unbound and write this documentation. Nothing that matters should see - this state. + This can be one of three values. * `:local' -- the structure itself is in a local variable `sod__kw'. This is used in the top-level effective method. @@ -432,11 +428,13 @@ :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)