aboutsummaryrefslogtreecommitdiff
path: root/build2/lexer.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-08-05 15:36:24 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-08-05 15:36:24 +0200
commit0f1697e7465f15590a115dedb4516568f1e30db8 (patch)
tree5cba3116dabbd227ed3f7804b44da628de8086e4 /build2/lexer.cxx
parentb7f1f4f6c23c45745c37e65c7d8bd088e0e1ae95 (diff)
Enable pair recognition in the normal and eval lexer modes
We need this for the out-qualified target syntax: h{config}@./: install = false
Diffstat (limited to 'build2/lexer.cxx')
-rw-r--r--build2/lexer.cxx22
1 files changed, 15 insertions, 7 deletions
diff --git a/build2/lexer.cxx b/build2/lexer.cxx
index 6b599fd..8124765 100644
--- a/build2/lexer.cxx
+++ b/build2/lexer.cxx
@@ -35,7 +35,6 @@ namespace build2
next_impl ()
{
lexer_mode m (state_.top ().mode);
- char ps (state_.top ().pair_separator);
// For some modes we have dedicated imlementations of next().
//
@@ -54,6 +53,12 @@ namespace build2
if (eos (c))
return token (type::eos, sep, ln, cn);
+ // Handle pair separator.
+ //
+ if ((m == lexer_mode::normal || m == lexer_mode::value) &&
+ c == state_.top ().pair_separator)
+ return token (type::pair_separator, sep, ln, cn);
+
switch (c)
{
// NOTE: remember to update name(), next_eval() if adding new
@@ -77,11 +82,6 @@ namespace build2
case ')': return token (type::rparen, sep, ln, cn);
}
- // Handle pair separator.
- //
- if (m == lexer_mode::value && c == ps)
- return token (type::pair_separator, sep, ln, cn);
-
// The following characters are not treated as special in the value mode.
//
if (m != lexer_mode::value)
@@ -133,6 +133,12 @@ namespace build2
// This mode is quite a bit like the value mode when it comes to special
// characters, except that we have some of our own.
//
+
+ // Handle pair separator.
+ //
+ if (c == state_.top ().pair_separator)
+ return token (type::pair_separator, sep, ln, cn);
+
// Note: we don't treat [ and ] as special here. Maybe can use them for
// something later.
//
@@ -224,7 +230,9 @@ namespace build2
// Handle the pair separator.
//
- if (m == lexer_mode::value && c == ps)
+ if ((m == lexer_mode::normal ||
+ m == lexer_mode::value ||
+ m == lexer_mode::eval) && c == ps)
break;
// The following characters are only special in the normal and