summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/build.cc25
-rw-r--r--src/build.h1
2 files changed, 17 insertions, 9 deletions
diff --git a/src/build.cc b/src/build.cc
index 7b53a5d..a07d970 100644
--- a/src/build.cc
+++ b/src/build.cc
@@ -418,15 +418,22 @@ bool Plan::NodeFinished(Node* node, string* err) {
continue;
// See if the edge is now ready.
- if ((*oe)->AllInputsReady()) {
- if (want_e->second != kWantNothing) {
- ScheduleWork(want_e);
- } else {
- // We do not need to build this edge, but we might need to build one of
- // its dependents.
- if (!EdgeFinished(*oe, kEdgeSucceeded, err))
- return false;
- }
+ if (!EdgeMaybeReady(want_e, err))
+ return false;
+ }
+ return true;
+}
+
+bool Plan::EdgeMaybeReady(map<Edge*, Want>::iterator want_e, string* err) {
+ Edge* edge = want_e->first;
+ if (edge->AllInputsReady()) {
+ if (want_e->second != kWantNothing) {
+ ScheduleWork(want_e);
+ } else {
+ // We do not need to build this edge, but we might need to build one of
+ // its dependents.
+ if (!EdgeFinished(edge, kEdgeSucceeded, err))
+ return false;
}
}
return true;
diff --git a/src/build.h b/src/build.h
index 1473f11..05f8110 100644
--- a/src/build.h
+++ b/src/build.h
@@ -97,6 +97,7 @@ private:
};
void EdgeWanted(Edge* edge);
+ bool EdgeMaybeReady(map<Edge*, Want>::iterator want_e, string* err);
/// Submits a ready edge as a candidate for execution.
/// The edge may be delayed from running, for example if it's a member of a