summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-08-07 11:24:57 -0400
committerBrad King <brad.king@kitware.com>2019-04-18 08:21:44 -0400
commit083a9e2e7af813571444e33fad5f0f373bce7e3f (patch)
tree9f22771d45526d579e6307a5e914414ee90b7194
parent64acb1a22b1001df96a4dfb7f36c16d7f56df392 (diff)
downloadninja-083a9e2e7af813571444e33fad5f0f373bce7e3f.tar.gz
Factor out output edge ready check from Plan::NodeFinished
Move the logic to a new Plan::EdgeMaybeReady method so it can be re-used elsewhere.
-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