Commit 7a1991ca authored by Robert P. Goldman's avatar Robert P. Goldman
Browse files

Refined the propagation of *forcing* in TRAVERSE method.

Some introspection (and test engineering) revealed that in some
circumstances the value of the *forcing* dynamic variable could reach
either too far (upstream into dependencies) or not far enough (not into
nested modules).  This patch fixes that.
parent ccf0c67d
......@@ -1262,17 +1262,21 @@ recursive calls to traverse.")
;; in the contents of the FORCED variable, and are consumed
;; downstream (watch out for the shadowing FORCED variable
;; around the DOLIST below!)
(loop :for (required-op . deps) :in
(component-depends-on operation c)
:do (do-dep required-op deps))
(let ((*forcing* nil))
;; upstream dependencies are never forced to happen just because
;; the things that depend on them are....
(loop :for (required-op . deps) :in
(component-depends-on operation c)
:do (do-dep required-op deps)))
;; constituent bits
(let ((module-ops
(when (typep c 'module)
(let ((at-least-one nil)
(forced nil)
;; this is set based on the results of the
;; dependencies.
(must-operate forced)
;; dependencies and whether we are in the
;; context of a *forcing* call...
(must-operate (or *forcing* forced))
(error nil))
(dolist (kid (module-components c))
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment