summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ninja_jumble.cc2
-rw-r--r--src/parsers.cc2
-rw-r--r--src/parsers_test.cc10
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) {