aboutsummaryrefslogtreecommitdiff
path: root/build2/lexer.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-03-17 11:25:35 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-03-17 11:25:35 +0200
commit262d2b3711fefd0b82100d2aaeaf94f6d2e6ea77 (patch)
tree8887ba34cf3bd1b378683c855c9fadfc61f64063 /build2/lexer.cxx
parent120722059c8612fb13d7bf585a5593582a49220d (diff)
Make line numbers signify argument numbers in buildspec
Diffstat (limited to 'build2/lexer.cxx')
-rw-r--r--build2/lexer.cxx18
1 files changed, 16 insertions, 2 deletions
diff --git a/build2/lexer.cxx b/build2/lexer.cxx
index 5989548..d3afdb0 100644
--- a/build2/lexer.cxx
+++ b/build2/lexer.cxx
@@ -26,6 +26,7 @@ namespace build2
const char* s1 (nullptr);
const char* s2 (nullptr);
bool s (true);
+ bool n (true);
bool q (true);
if (!esc)
@@ -70,8 +71,11 @@ namespace build2
//
// 2. Recognizes comma.
//
+ // 3. Treat newline as an ordinary space.
+ //
s1 = " $(){}[],\t\n";
s2 = " ";
+ n = false;
break;
}
case lexer_mode::single_quoted:
@@ -87,7 +91,7 @@ namespace build2
default: assert (false); // Unhandled custom mode.
}
- state_.push (state {m, ps, s, q, *esc, s1, s2});
+ state_.push (state {m, ps, s, n, q, *esc, s1, s2});
}
token lexer::
@@ -585,9 +589,11 @@ namespace build2
bool r (sep_);
sep_ = false;
+ const state& s (state_.top ());
+
// In some special modes we don't skip spaces.
//
- if (!state_.top ().sep_space)
+ if (!s.sep_space)
return r;
xchar c (peek ());
@@ -605,6 +611,14 @@ namespace build2
}
case '\n':
{
+ // In some modes we treat newlines as ordinary spaces.
+ //
+ if (!s.sep_newline)
+ {
+ r = true;
+ break;
+ }
+
// Skip empty lines.
//
if (start)