>>>>> "mr" == Martin Rydstr|m <[EMAIL PROTECTED]> writes:
mr> Hi,
mr> I looked a little at the trace machinery announced for 19d, and
mr> I've run into some cases where it doesn't seem to work.
mr> ;; Doesn't work
mr> (defun zot1 (x)
mr> (labels ((zat (y z)
mr> (if (zerop y) z (zat (1- y) (1+ z)))))
mr> (declare (notinline zot1))
mr> (zat x 0)))
mr> ;; Doesn't work
mr> (defun zot2 (x)
mr> (labels ((zat (y z)
mr> (if (zerop y) z (zat (1- y) (1+ z)))))
mr> (+ x (zat x 0))))
mr> ;; Works
mr> (defun zot3 (x)
mr> (labels ((zat (y z)
mr> (if (zerop y) z (zat (1- y) (1+ z)))))
mr> (= (zat x 0) (zat x 0))))
Thanks for the report. I think the common theme here is that in zot1
and zot2 the zat is called in only one place and has been inlined. In
zot3, zat is not inlined.
Unfortunately, I don't know how to detect and/or fix that. Well, we
can obviously detect it since we get an error when trying to trace
those functions.
Ray