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

SETF on LDB constructs



    Date: 16 January 1982 13:35-EST
    From: David C. Plummer <DCP at MIT-MC>
    I BUGged this last year, and I just got screwed by it again:
    (macroexpand '(setf (ldb 0410 (arraycall fixnum foo 0))
			(length bar)))
    ==> ((LAMBDA (|T..120| |T..121|)
	   (SETQ |T..120| (DPB |T..121| 410 |T..120|))
	   |T..121|)
	 (ARRAYCALL FIXNUM FOO 0)
	 (LENGTH BAR))
    It appears that if the new value involves a computation, setf
    gets quite confused. 
The SETF inversion process is a murky one, especially for the 'composed'
operators like ARRAYCALL, PROGN, and LDB;  RWK knows the most about this
code, and should probably look into it (he has promised, again!, to do so.)