[pro] [Q] introspecting setf expanders
martin at lispworks.com
Tue Oct 9 11:29:27 UTC 2012
>>>>> On Mon, 08 Oct 2012 17:38:42 +0200, Didier Verna said:
> Pascal Costanza wrote:
> > Just guessing: If you see that the writer form is a funcall to a setf
> > function, you can then check with fboundp if such a function actually
> > exists. This is probably a bit shaky, but maybe good enough for
> > practical purposes?
> Good idea. To be more precise:
> - if the writer form is something else than (FUNCALL #'(SETF FOO) ...)
> then there is a defsetf going on (it even takes precedence over a
> potential setf function).
> - if the writer form is (FUNCALL #'(SETF FOO) ...) and that function is
> bound, then there is a setf function going on but no defsetf.
> - otherwise, there is no writer at all.
> I think this might just work.
As Pascal said, it's a bit shaky. E.g. a user could define
(defsetf foo (x) (y)
`(funcall #'(setf foo) ,y ,x))
which gives a false negative.
Also, it won't be portable, because the (FUNCALL #'(SETF FOO) ...) form isn't
required (the standard just specifies something with the same effect as it).
More information about the pro