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

Re: Compiler/GC interaction?

    Date: Wed, 29 Jan 1992 13:47 PST
    From: Rob_MacLachlan@LISP-PMAX1.SLISP.CS.CMU.EDU

    I have appended the code for DELETE, in case you are interested in the
    black magic approach to system debugging.  Or you could try a different

Reloading DELETE didn't help.  Nor did recoding the other function that
triggered the non-fatal compiler errors.  Both cause the same failure,
albeit in a different place in the file.

I haven't yet tried another machine, but intend to shortly.

    If you are interested & willing to help us track down this bug, one
    possible route would be to make an account available to William.

Due to security concerns here, I'm a bit reluctant to do that, but it
may be possible.

    Another random thought is that the problem might go into remission if some
    of the non-fatal compiler errors were fixed.

As mentioned above, this didn't work.  These errors were the result of
perfectly legal (by CLtL2, anyway) LOOP code.  LOOP falls down on UNLESS
<test> RETURN <value>, which is supposed to be legal (CLtL2 pp. 738-740,
especially the example on p. 739).

Also re LOOP, I tried the following variant of the errant function and
can't make sense of the resulting type error "LIST is not of type LIST".
Perhaps the destructuring is confusing the LOOP macro?

(defun poly-+ (&rest polys)
  (flet ((poly-+-internal (poly1 poly2)
	     (declare (list poly1 poly2))
	     (loop for (p1 . rest1) of-type (double-float . list)
		       on poly1
		   for (p2 . rest2) of-type (double-float . list)
		       on poly2
		   collect (+ p1 p2) into result
		   unless rest1 do (setf result (nconc result (copy-list rest2)))
		   unless rest2 do (setf result (nconc result (copy-list rest1)))
		   finally return result)))
      ((null (cdr polys)) (car polys))
      ((cddr polys)       (reduce #'poly-+-internal polys))
      (t                  (poly-+-internal (first polys) (second polys))))))

 -- Chuck