mirror of
https://github.com/reactos/ninja.git
synced 2025-02-23 05:02:17 +00:00
support continuation lines
This commit is contained in:
parent
5b94928d5c
commit
d379db40db
@ -101,8 +101,20 @@ bool Parser::ReadToken(string* out) {
|
||||
bool Parser::ReadToNewline(string* text, string* err) {
|
||||
token_.clear();
|
||||
while (cur_ < end_ && *cur_ != '\n') {
|
||||
text->push_back(*cur_);
|
||||
++cur_;
|
||||
if (*cur_ == '\\') {
|
||||
++cur_;
|
||||
if (cur_ >= end_)
|
||||
return Error("unexpected eof", err);
|
||||
if (!Newline(err))
|
||||
return false;
|
||||
SkipWhitespace();
|
||||
// Collapse whitespace, but make sure we get at least one space.
|
||||
if (text->size() > 0 && text->at(text->size() - 1) != ' ')
|
||||
text->push_back(' ');
|
||||
} else {
|
||||
text->push_back(*cur_);
|
||||
++cur_;
|
||||
}
|
||||
}
|
||||
return Newline(err);
|
||||
}
|
||||
|
@ -49,6 +49,22 @@ TEST(Parser, Variables) {
|
||||
EXPECT_EQ("ld -pthread -o a b c", edge->EvaluateCommand());
|
||||
}
|
||||
|
||||
TEST(Parser, Continuation) {
|
||||
State state;
|
||||
ASSERT_NO_FATAL_FAILURE(AssertParse(&state,
|
||||
"rule link\n"
|
||||
"command foo bar \\\n"
|
||||
" baz\n"
|
||||
"\n"
|
||||
"extra = \\\n"
|
||||
"xyz\n"));
|
||||
|
||||
ASSERT_EQ(1, state.rules_.size());
|
||||
Rule* rule = state.rules_.begin()->second;
|
||||
EXPECT_EQ("link", rule->name_);
|
||||
EXPECT_EQ("foo bar baz", rule->command_.unparsed());
|
||||
}
|
||||
|
||||
TEST(Parser, Errors) {
|
||||
State state;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user