+ ;; Special case for compiler-macros: if car of
+ ;; the form is FUNCALL skip over it for
+ ;; destructuring, pretending cdr of the form is
+ ;; the actual form.
+ (when (eq context 'define-compiler-macro)
+ (push-let-binding
+ arg-list-name
+ arg-list-name
+ t
+ `(not (and (listp ,arg-list-name)
+ (eq 'funcall (car ,arg-list-name))))
+ `(setf ,arg-list-name (cdr ,arg-list-name))))