From db022ad64849ccf072a75ea59947e4243f29ba37 Mon Sep 17 00:00:00 2001 From: Evan Martin Date: Mon, 20 Dec 2010 16:13:34 -0800 Subject: [PATCH] aggressively eval variables in build blocks --- src/ninja_jumble.cc | 2 +- src/parsers.cc | 2 +- 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) { -- 2.7.4