[cmucl-imp] Re: COMPILE regression in Apr 2010 snapshot (?)

Raymond Toy toy.raymond at gmail.com
Tue Apr 27 16:28:53 CEST 2010


On 4/26/10 6:16 AM, Madhu wrote:
> * Raymond Toy <4BD508B2.4090006 at gmail.com> :
> Wrote on Sun, 25 Apr 2010 23:29:54 -0400:
>
> | 
> |
> | We now have:
> |
> | (PROGN
> |   (DECLAIM (SPECIAL ABC))
> |   (UNLESS (BOUNDP 'ABC)
> |     (SETQ ABC NIL))
> |   (SETF (DOCUMENTATION 'ABC 'VARIABLE) '"abc")
> |   (EVAL-WHEN (:LOAD-TOPLEVEL :EXECUTE)
> |     (SETF (INFO VARIABLE INTL:TEXTDOMAIN 'ABC) NIL))
> |   (LISP::SET-DEFVAR-SOURCE-LOCATION 'ABC (C::SOURCE-LOCATION))
> |   'ABC)
> |
> | I do not understand it, but that (setf info) causes the problem.  When
> | that is removed, cmucl behaves as it used to.  I don't understand why
> | that would cause the macro to be compiled again.
>
>
> My report may have been misleading: I do not think that macro is being
> compiled again, it just looks that way from the notes that CMUCL prints.
>
> I have not looked at the CMUCL code yet, but I my guess (without looking
> at any commits) is that this is more likely related to some source
> recording changes that may have been introduced.
>   
AFAIK, there have been no changes to source recording.

I think what is happening is that the eval-when for the (setf info) form
is causing the compiler to compile the top-level form.  It creates a
component name by looking up the source file and finds
frob-kevals-string form and uses that as the component name.  That's
what gets printed which makes it look like it's compiling
frob-keyvals-string again.  But it's really just compiling the defvar.

When the (setf (info ...)) is replaced by a (lisp::%%defvar ...) where
the new function %%defvar just calls (setf (info ...) ..), the printed
messages are much nicer.

So, I think it's not really a problem. Rather it's just a poor choice of
component name by the compiler.   So using %%defvar is a possible solution.

Ray




More information about the cmucl-imp mailing list