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@googlemail.com mailto:juanjose.garciaripoll@googlemail.com> wrote:
On Thu, Mar 18, 2010 at 12:21 AM, Juan Jose Garcia-Ripoll <juanjose.garciaripoll@googlemail.com <mailto:juanjose.garciaripoll@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.