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