From 0f1697e7465f15590a115dedb4516568f1e30db8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 5 Aug 2016 15:36:24 +0200 Subject: Enable pair recognition in the normal and eval lexer modes We need this for the out-qualified target syntax: h{config}@./: install = false --- build2/lexer.cxx | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'build2/lexer.cxx') 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 -- cgit v1.1