aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/lexer.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-10-28 13:01:04 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-11-04 09:26:36 +0200
commit08ae9246421cf2b7269dc09dab2dbd5dc5d0817a (patch)
tree727dcf6be0a382a3a41f3ebf63d624ab893c786d /build2/test/script/lexer.cxx
parentfac9e22e90591b4c60d0e13c10c3abccf8c96a0f (diff)
Add tests and fixes for trailing description support
Diffstat (limited to 'build2/test/script/lexer.cxx')
-rw-r--r--build2/test/script/lexer.cxx22
1 files changed, 16 insertions, 6 deletions
diff --git a/build2/test/script/lexer.cxx b/build2/test/script/lexer.cxx
index 8b647dc..a9b7d56 100644
--- a/build2/test/script/lexer.cxx
+++ b/build2/test/script/lexer.cxx
@@ -407,20 +407,30 @@ namespace build2
token lexer::
next_description ()
{
- xchar c (get ());
+ xchar c (peek ());
+
+ if (eos (c))
+ fail (c) << "expected newline at the end of description line";
uint64_t ln (c.line), cn (c.column);
+
+ if (c == '\n')
+ {
+ get ();
+ state_.pop (); // Expire the description mode.
+ return token (type::newline, false, ln, cn, token_printer);
+ }
+
string lexeme;
// For now no line continutions though we could support them.
//
- for (; !eos (c) && c != '\n'; c = get ())
+ for (; !eos (c) && c != '\n'; c = peek ())
+ {
+ get ();
lexeme += c;
+ }
- if (eos (c))
- fail (c) << "expected newline at the end of description line";
-
- state_.pop (); // Expire the description mode.
return token (move (lexeme), false, false, ln, cn);
}