diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-03-17 11:25:35 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-03-17 11:25:35 +0200 |
commit | 262d2b3711fefd0b82100d2aaeaf94f6d2e6ea77 (patch) | |
tree | 8887ba34cf3bd1b378683c855c9fadfc61f64063 /build2/lexer.cxx | |
parent | 120722059c8612fb13d7bf585a5593582a49220d (diff) |
Make line numbers signify argument numbers in buildspec
Diffstat (limited to 'build2/lexer.cxx')
-rw-r--r-- | build2/lexer.cxx | 18 |
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) |