From 32d1bc9e4e9b06bfa354cdc2aefbf3a0714cf697 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Wed, 6 Apr 2011 20:44:54 -0400 Subject: [PATCH] correctly chain Incompletes for flatMap --- tasks/Execute.scala | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tasks/Execute.scala b/tasks/Execute.scala index ba7028b6e..9844321f5 100644 --- a/tasks/Execute.scala +++ b/tasks/Execute.scala @@ -116,7 +116,7 @@ final class Execute[A[_] <: AnyRef](checkCycles: Boolean)(implicit view: NodeVie results(node) = result state(node) = Done remove( reverse, node ) foreach { dep => notifyDone(node, dep) } - callers.remove( node ).flatten.foreach { c => retire(c, result) } + callers.remove( node ).flatten.foreach { c => retire(c, callerResult(c, result)) } post { assert( done(node) ) @@ -126,6 +126,11 @@ final class Execute[A[_] <: AnyRef](checkCycles: Boolean)(implicit view: NodeVie assert( ! (callers contains node) ) } } + def callerResult[T](node: A[T], result: Result[T]): Result[T] = + result match { + case _: Value[T] => result + case Inc(i) => Inc(Incomplete(Some(node), tpe = i.tpe, causes = i :: Nil)) + } def notifyDone( node: A[_], dependent: A[_] )(implicit strategy: Strategy) {