3-in-1 fix: an annoyance, a bug, and an inefficiency.
- ACCESSOR-SLOT-BOUNDP failed to use QUIET-FUNCALL, so compiling
(SLOT-BOUNDP my-obj 'A-SLOT) warned about nonexistence of
#'(SB-PCL::SLOT-ACCESSOR :GLOBAL A-SLOT BOUNDP).
- ACCESSOR-SET-SLOT-VALUE misused %macroexpand on OBJECT when it meant
to expand NEW-VALUE. To move NEW-VALUE leftward in evaluation order,
we care whether _it_ has side-effects, not whether OBJECT does.
Oddly enough, since this macro is typically invoked N levels deep
into lexical rebindings from SETF and other transforms, it was likely
that we could in fact elide a gensym, so it's hard to prove that this
fixes anything, but it's clearly more correct now.
- Bypass the fdefn. Just load the GF and call through that.
Since the trampoline has to load the GF anyway, prefetching helps.
Generic functions, in particular these accessor functions, are
as good as "known functions" which we allow as code header constants.
(And GFs never change their identity, so it works)