[asdf-devel] ASDF traverse changed behavior?

Robert Goldman rpgoldman at sift.info
Wed Mar 17 13:20:26 UTC 2010


On 3/17/10 Mar 17 -3:58 AM, Juan Jose Garcia-Ripoll wrote:
> Before, if an operation defined by me, such as LIB-OP, did not traverse
> a system, then the only operation we got was that operation applied on
> the system, as a generic object.
> 
> Now TRAVERSE not only imposes the LIB-OP operation on the system, but it
> also scans the components and imposes the operation on the components.
> 
> Why such an incompatible change? It definitely screwed up ALL of ECL's
> extensions.

TRAVERSE was modified in order to fix the problem of intra-system
dependencies from modules.  Previously, if you had a system with module
A and file B, with A depending on B, and modified B, then did a
compile-op or load-op, none of A's components would be recompiled.  This
was clearly a bug.

I'm sorry about the incompatible change, but I think you were relying on
what must have been a bug.  TRAVERSE was ALWAYS supposed to apply the
methods for children when an operation was applied to the parent.

I have a hazy recollection that there used to be a catch-all PERFORM
that was a no-op to make extending the protocol simpler, but I don't see
one in asdf.lisp now (there is one for TEST-OP).  I don't know how to
wrestle git into letting me know if this is a faulty memory on my part,
or whether there was such a method definition and it has been removed.
Anyone know how to check?

Best,
r




More information about the asdf-devel mailing list