diff options
author | Evan Martin <martine@danga.com> | 2010-12-21 00:13:34 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2010-12-21 00:13:34 (GMT) |
commit | db022ad64849ccf072a75ea59947e4243f29ba37 (patch) | |
tree | 3b082b90f45934e0136610c2f5a77b9322579294 | |
parent | f2a4bac9127124563cd783a798e64dd15204d598 (diff) | |
download | Ninja-db022ad64849ccf072a75ea59947e4243f29ba37.zip Ninja-db022ad64849ccf072a75ea59947e4243f29ba37.tar.gz Ninja-db022ad64849ccf072a75ea59947e4243f29ba37.tar.bz2 |
aggressively eval variables in build blocks
-rw-r--r-- | src/ninja_jumble.cc | 2 | ||||
-rw-r--r-- | src/parsers.cc | 2 | ||||
-rw-r--r-- | src/parsers_test.cc | 10 |
3 files changed, 10 insertions, 4 deletions
diff --git a/src/ninja_jumble.cc b/src/ninja_jumble.cc index ef4eefb..b0e60b1 100644 --- a/src/ninja_jumble.cc +++ b/src/ninja_jumble.cc @@ -376,7 +376,7 @@ bool EvalString::Parse(const string& input, string* err) { } else { for (end = start; end < input.size(); ++end) { char c = input[end]; - if (!(('a' <= c && c <= 'z') || c == '_')) + if (!(('a' <= c && c <= 'z') || ('0' <= c && c <= '9') || c == '_')) break; } if (end == start) { diff --git a/src/parsers.cc b/src/parsers.cc index 4f19046..7eee93c 100644 --- a/src/parsers.cc +++ b/src/parsers.cc @@ -436,7 +436,7 @@ bool ManifestParser::ParseEdge(string* err) { env->parent_ = env_; while (tokenizer_.PeekToken() != Token::OUTDENT) { string key, val; - if (!ParseLet(&key, &val, false, err)) + if (!ParseLet(&key, &val, true, err)) return false; env->AddBinding(key, val); } diff --git a/src/parsers_test.cc b/src/parsers_test.cc index 58e40b8..6fb418d 100644 --- a/src/parsers_test.cc +++ b/src/parsers_test.cc @@ -59,13 +59,19 @@ TEST_F(ParserTest, Variables) { "with_under = -under\n" "build a: link b c\n" "nested1 = 1\n" -"nested2 = $nested1/2\n")); +"nested2 = $nested1/2\n" +"build supernested: link x\n" +" extra = $nested2/3\n")); - ASSERT_EQ(1, state.edges_.size()); + ASSERT_EQ(2, state.edges_.size()); Edge* edge = state.edges_[0]; EXPECT_EQ("ld one-letter-test -pthread -under -o a b c", edge->EvaluateCommand()); EXPECT_EQ("1/2", state.bindings_.LookupVariable("nested2")); + + edge = state.edges_[1]; + EXPECT_EQ("ld one-letter-test 1/2/3 -under -o supernested x", + edge->EvaluateCommand()); } TEST_F(ParserTest, VariableScope) { |