Hi, 

I'm trying to convert a Greenspun's 10th language into Common Lisp.  In 
cases such as the following, Python produces both a note (for the
unreachable code,) and a warning (for the bad arg to truncate during
constant folding.)

(defun foo3 ()
  (let ((s "FOO"))
    (typecase s
      (double-float 
       (format t "a double: ~A~%" (truncate s)))
      (t (format t "other: ~A~%" s)))))

My questions:

1) Should the compiler really be emitting warnings/errors in code it can
prove is unreachable?  I think not, but am willing to revise my opinion.

2)  Is there a way to locally suppress the warning?  I've got millions
of cases like this, and post-processing the output doesn't seem to be
the right thing.

3)  Is there a construct or hook/how hard would it be to hack the type
inferencer to support something like:

(defmacro op++ (x)
  "Give me inline code for doubles if x is definitely a double,
   else punt."
  (if (inferable-type x 'double-float)
    `(incf x)
    `(adhoc-incf x)))

4) Section 5.3.5 of the CMUCL doc confuses me. I don't see how that
ecase statement can work.

Any illumination is appreciated,
Thanks,
Michael Naunton






Reply via email to