[Openmcl-devel] declare

slepstein at mindspring.com slepstein at mindspring.com
Thu Jun 4 21:10:48 PDT 2009

I believe in type checking, but the declare usage is puzzling me, and I think it has changed in the last 6 months or so…

What (I think) used to work and was acceptable in MCL:
(defun foo-1 (x)
    (declare (integer x y))
    (let* ((y 3))
      (+ x y)))
;Compiler warnings :
;   In FOO-1: TYPE declaration for unknown variable Y

This compiles without warnings:
(defun foo-2 (x)
    (declare (integer x))
    (let* ((y 3))
      (declare (integer y))
      (+ x y)))

But this doesn’t:
(defun foo-3 (x)
    (declare (integer x))
    (let* ((y 3))
     	 (z (+ x y)))
      (declare (integer y z))
      (+ x y z)))
Error: While compiling FOO-3 :
DECLARE not expected in (DECLARE (INTEGER Y Z))., in process Listener(6).
Nor does this:
(defun foo-4 (x)
    (let* ((y 3))
      (z (+ x y)))
  (declare (integer x  y z))
      (+ x y z))
> Error: While compiling FOO-4 :
>        DECLARE not expected in (DECLARE (INTEGER X Y Z))., in process Listener(6).

It looks as if the declare has to come early, but how does one type z?
Thanks for your help.

More information about the Openmcl-devel mailing list