[asdf-devel] ASDF traverse changed behavior?
Robert Goldman
rpgoldman at sift.info
Thu Mar 18 00:36:44 UTC 2010
On 3/17/10 Mar 17 -6:47 PM, Juan Jose Garcia-Ripoll wrote:
> On Thu, Mar 18, 2010 at 12:25 AM, Juan Jose Garcia-Ripoll
> <juanjose.garciaripoll at googlemail.com
> <mailto:juanjose.garciaripoll at googlemail.com>> wrote:
>
> On Thu, Mar 18, 2010 at 12:21 AM, Juan Jose Garcia-Ripoll
> <juanjose.garciaripoll at googlemail.com
> <mailto:juanjose.garciaripoll at googlemail.com>> wrote:
>
> Narrowing down the problem, TRAVERSE now adds the LIB-OP
> operation to all components of a system. I added a method
>
> (defmethod perform ((operation lib-op) (c component))
> nil)
>
> but this method gets overriden by a more specific one which is
> provided by asdf.lisp
>
> (defmethod perform ((operation operation) (c source-file))
> (sysdef-error
> "~@<required method PERFORM not implemented ~
> for operation ~A, component ~A~@:>"
> (class-of operation) (class-of c)))
>
> This method was the cause of all problems.
>
>
> There is obviously something awry going on here because now I
> realize that this is not more specific, but less -- lib-op <=
> operation Anyway, I will leave this for tomorrow as I am obviously
> not fit for this anymore.
>
>
> This time I leave for bed, but while looking at the screen I think I
> found the problem: packages. The two symbols, PERFORM in one and in
> another file are different. I think this has to do with the way symbols
> are interned / uninterned during the compilation phase itself. A symptom
> is that loading the sources *.lisp everything works just fine. Another
> one is that the debugger prints the offending method as #:PERFORM
Is there any chance that you could somehow have run afoul of the package
surgery at the top of asdf.lisp? I.e., could you have compiled /your/
PERFORM method into the ASDF package somehow before the package magic at
the head of asdf.lisp destroyed it?
I confess that I can't say I understand how that package surgery in the
eval-when will work. I believe it's going to be something like this:
1. compile asdf.lisp --- original ASDF package, if any, is destroyed by
ENSURE-PACKAGE
2. compile asdf-ecl.lisp
3. load asdf.fasl --- package destroyed again
4. load asdf-ecl.fasl
Is it possible that somehow the compilation of asdf-ecl is recording
some information about the package that is somehow damaged by the
package surgery?
Just a wild guess.
More information about the asdf-devel
mailing list