The &whole argument is bound to the form argument that
is passed to the compiler macro function. The remaining lambda-list
parameters are specified as if this form contained the function name in the
car and the actual arguments in the cdr, but if the car
of the actual form is the symbol funcall, then the destructuring of
the arguments is actually performed using its cddr instead.

The consequences of writing a compiler macro definition for a function
in the common-lisppackage are undefined; it is quite possible that in some
implementations such an attempt would override an equivalent or equally
important definition. In general, it is recommended that a programmer only
write compiler macro definitions for functions he or she personally
maintains--writing a compiler macro definition for a function maintained
elsewhere is normally considered a violation of traditional rules of modularity
and data abstraction.