[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

get-setf-method takes optional environment argument

I think we all agree (at least we seemed to last September or so) that
get-setf-method needs to tkae an optional environment argument in order
to correctly expand things.  For example
	(defmacro foo (a b) `(aref ,a ,b))

	(setf (ldb (byte 2 2) (foo (x) (y))) (z))

	  == (setf (ldb (byte 2 2) (aref (x) (y))) (z))

but, given the above defmacro is still the global definition

	(macrolet ((foo (a b) `(aref ,a 2 ,b)))	; added a 2 in the middle
	  (setf (ldb (byte 2 2) (foo (x) (y))) (z)))
should be
	 == (setf (ldb (byte 2 2) (aref (x) 2 (y))) (z)) 

but given the descipiption in CLtL it has no way to see the macrolet'd
definition of FOO, and will therefore expand incorrectly.

Did we also decide DEFINE-SETF-METHOD needs to allow an &ENVIRONMENT
argument to be able to effect this?