summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/manifest_parser.cc8
-rw-r--r--src/manifest_parser_test.cc10
-rw-r--r--src/state.cc1
3 files changed, 14 insertions, 5 deletions
diff --git a/src/manifest_parser.cc b/src/manifest_parser.cc
index 388b5bc..7ee990b 100644
--- a/src/manifest_parser.cc
+++ b/src/manifest_parser.cc
@@ -298,16 +298,16 @@ bool ManifestParser::ParseEdge(string* err) {
return false;
// Bindings on edges are rare, so allocate per-edge envs only when needed.
- bool hasIdent = lexer_.PeekToken(Lexer::INDENT);
- BindingEnv* env = hasIdent ? new BindingEnv(env_) : env_;
- while (hasIdent) {
+ bool has_indent_token = lexer_.PeekToken(Lexer::INDENT);
+ BindingEnv* env = has_indent_token ? new BindingEnv(env_) : env_;
+ while (has_indent_token) {
string key;
EvalString val;
if (!ParseLet(&key, &val, err))
return false;
env->AddBinding(key, val.Evaluate(env_));
- hasIdent = lexer_.PeekToken(Lexer::INDENT);
+ has_indent_token = lexer_.PeekToken(Lexer::INDENT);
}
Edge* edge = state_->AddEdge(rule);
diff --git a/src/manifest_parser_test.cc b/src/manifest_parser_test.cc
index 6909ea9..a8f2e53 100644
--- a/src/manifest_parser_test.cc
+++ b/src/manifest_parser_test.cc
@@ -891,6 +891,16 @@ TEST_F(ParserTest, DefaultDefault) {
EXPECT_EQ("", err);
}
+TEST_F(ParserTest, DefaultDefaultCycle) {
+ ASSERT_NO_FATAL_FAILURE(AssertParse(
+"rule cat\n command = cat $in > $out\n"
+"build a: cat a\n"));
+
+ string err;
+ EXPECT_EQ(0u, state.DefaultNodes(&err).size());
+ EXPECT_EQ("could not determine root nodes of build graph", err);
+}
+
TEST_F(ParserTest, DefaultStatements) {
ASSERT_NO_FATAL_FAILURE(AssertParse(
"rule cat\n command = cat $in > $out\n"
diff --git a/src/state.cc b/src/state.cc
index 6e3e10d..1ceda45 100644
--- a/src/state.cc
+++ b/src/state.cc
@@ -187,7 +187,6 @@ vector<Node*> State::RootNodes(string* err) {
if (!edges_.empty() && root_nodes.empty())
*err = "could not determine root nodes of build graph";
- assert(edges_.empty() || !root_nodes.empty());
return root_nodes;
}