From d5faeeab1d2115c02a330ac9c95d63ba225faabc Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 10 Jun 2020 10:00:55 +0200 Subject: Handle special variable names in base lexer via mode data --- libbuild2/lexer.cxx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'libbuild2/lexer.cxx') diff --git a/libbuild2/lexer.cxx b/libbuild2/lexer.cxx index e50ec16..2f2ace4 100644 --- a/libbuild2/lexer.cxx +++ b/libbuild2/lexer.cxx @@ -741,7 +741,19 @@ namespace build2 // else if (m == lexer_mode::variable) { - if (c != '_' && !(lexeme.empty () ? alpha (c) : alnum (c))) + bool first (lexeme.empty ()); + + // Handle special variable names, if any. + // + if (first && + st.data != 0 && + strchr (reinterpret_cast (st.data), c) != nullptr) + { + get (); + lexeme += c; + done = true; + } + else if (c != '_' && !(first ? alpha (c) : alnum (c))) { if (c != '.') done = true; -- cgit v1.1