>>>>> "Sam" == Sam Steingold <sds@...> writes:
>> * In message <4nlm82bho9.fsf@...>
>> It's an example from the CLOCC ansi tests (that Clisp gets right, but
>> CMUCL doesn't).
>> What the shiftf is doing is setting (cdr y) to 'z, but nothing is done
>> with 'z, so this is ok. (shiftf x 'z (cdr y)) is, of course, an error
>> since you can't setf 'z to anything.
Sam> I see!
Sam> but you do not need to compute (get-setf-expansion '<expr>) to
Sam> macroexpand (shiftf .... <expr>)!
Well, that just means that I'd have to special case the last
expression in the macroexpander. Possible to do, but I rather like
just running down all of the elements and calling g-s-e.
BTW, this was one of several ways I tried when I tried to add shiftf
support with multiple values for CMUCL.
Sam> the point is that setting (quote foo) is impossible so
Sam> (get-setf-expansion ''z) does not make sense.
Sam> It might make sense to signal an error on (get-setf-expansion ''z),
Sam> but I see no reason to return anything useful there.
Well, it does make some sense instead of producing an error. You just
have to know not to try to set it. Everything else is ok.
I don't know how clisp does this for shiftf. From the output, it
seems that it doesn't call g-s-e on the last arg of shiftf, but it's
possible shiftf is massaging it into something else.