[armedbear-devel] compiler problem

Erik Huelsmann ehuels at gmail.com
Wed Jan 6 17:04:31 UTC 2010


Hi Alan,

On Wed, Jan 6, 2010 at 5:35 AM, Alan Ruttenberg
<alanruttenberg at gmail.com> wrote:
> On Tue, Jan 5, 2010 at 5:48 PM, Alan Ruttenberg
> <alanruttenberg at gmail.com> wrote:
>> (BTW, I don't see why there would be an actual function created here -
>> should be optimized away)
>>
>
> I've had a go at implementing the optimization

That's great!

> ([funcall] (lambda(a b [&rest c]) ...) p q [r s ...]) -> (let ((a p)
> (b q) (c (list r s ...))) ...)
>
> http://svn.mumble.net:8080/svn/lsw/trunk/patches/optimize-lambda.lisp
>
> I don't know if it's in the proper place in the compiler.
> I've compiled my code in 0.18 trunk using it and I haven't run into problems.
> It triggers some bug in my old version of ABCL (problem loading a
> class file!) but I don't think it's worth investigating that so I
> disable it in that version.

I can see the error shown by the symbol-macrolet in the precompiler sources:

572 (defun precompile-lambda (form)
573   (let ((body (cddr form))
574         (precompiled-lambda-list
575            (precompile-lambda-list (cadr form)))
576         (*inline-declarations* *inline-declarations*))
577     (process-optimization-declarations body)
578     (list* 'LAMBDA precompiled-lambda-list
579            (mapcar #'precompile1 body))))


Before going on to process the lambda body statements in line 579,
precompile-lambda should establish variables from the lambda list
shadowing the symbol-macrolet...


Bye,

Erik.




More information about the armedbear-devel mailing list