I've finished a first pass at adding FLET support to the compiler.
The results are not exactly ideal, but now, at least, the compiler
won't just head for the hills the moment it encounters a FLET.
Now, in most situations, the local functions defined by the FLET as
well as the enclosing DEFUN will be compiled to working (albeit
suboptimal) JVM bytecode. And the compiler is smart enough to recognize
its own limitations (which, for the moment, are local functions with
keyword or optional arguments that have non-constant initforms), and,
in those situations, it will leave the code untouched so that it will
continue to run correctly in its uncompiled state.
More work is clearly needed, but the current code runs the ANSI test
suite with no unexpected failures, so it seemed like a good time to
check it in and come up for air.
I haven't done LABELS yet.
I've also added rudimentary support for (DECLAIM (NOTINLINE ...)). So
now you can put the following code in a file and COMPILE-FILE it:
(defun foo (x) (+ x x))
(declaim (notinline foo))
(defun bar (x) (foo x))
And if you subsequently redefine FOO (but not BAR) at the repl, BAR
will pick up the redefinition correctly.
The new code is in CVS.
Thanks for your support.