>>>>> "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


Reply via email to