aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-10-20 12:10:25 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-11-04 09:26:33 +0200
commit55211f91fa8120ff0cb545157ad8e4cf5669c2e8 (patch)
tree2e0eaf9c73ac95a277e4e77604579b3bb7d9240f
parent41b2abbbdcc21c758fcb2f485e4e7bb6898830cf (diff)
Add support for lexing modes that treat quotes as literals
-rw-r--r--build2/lexer1
-rw-r--r--build2/lexer.cxx9
2 files changed, 6 insertions, 4 deletions
diff --git a/build2/lexer b/build2/lexer
index e9de617..df8c852 100644
--- a/build2/lexer
+++ b/build2/lexer
@@ -114,6 +114,7 @@ namespace build2
char sep_pair;
bool sep_space; // Are whitespaces separators (see skip_spaces())?
+ bool quotes; // Recognize quoted fragments.
// Word separator characters. For two-character sequence put the first
// one in sep_first and the second one in the corresponding position of
diff --git a/build2/lexer.cxx b/build2/lexer.cxx
index c84b102..8760c13 100644
--- a/build2/lexer.cxx
+++ b/build2/lexer.cxx
@@ -36,6 +36,7 @@ namespace build2
const char* s2 (nullptr);
char p ('\0');
bool s (true);
+ bool q (true);
switch (m)
{
@@ -72,7 +73,7 @@ namespace build2
default: assert (false); // Unhandled custom mode.
}
- state_.push (state {m, p, s, s1, s2});
+ state_.push (state {m, p, s, q, s1, s2});
}
token lexer::
@@ -396,10 +397,10 @@ namespace build2
}
}
- // Handle single and double quotes unless they were considered
- // separators.
+ // Handle single and double quotes if enabled for this mode and unless
+ // they were considered separators.
//
- if (!done)
+ if (st.quotes && !done)
{
switch (c)
{