aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/lexer.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-10-22 16:10:38 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-11-04 09:26:34 +0200
commit132c1f2bb19c92722274c69a190c2f71b801b602 (patch)
treece141b9b866582966262d01777dbf7e9e01e324e /build2/test/script/lexer.cxx
parent31e16a7413813293e3cccb6799eaa08b7af5af4e (diff)
Add support for no-newline redirects in testscript
The no-newline operators are '<:', '>:', '<<:', and '>>:'.
Diffstat (limited to 'build2/test/script/lexer.cxx')
-rw-r--r--build2/test/script/lexer.cxx48
1 files changed, 40 insertions, 8 deletions
diff --git a/build2/test/script/lexer.cxx b/build2/test/script/lexer.cxx
index 2192f35..1b038c3 100644
--- a/build2/test/script/lexer.cxx
+++ b/build2/test/script/lexer.cxx
@@ -229,14 +229,30 @@ namespace build2
{
xchar p (peek ());
- if (p == '!' || p == '<')
+ if (p == '!' || p == ':' || p == '<')
{
get ();
- return make_token (
- p == '!' ? type::in_null : type::in_document);
+
+ switch (p)
+ {
+ case '!': return make_token (type::in_null);
+ case ':': return make_token (type::in_str_nn);
+ case '<':
+ {
+ p = peek ();
+
+ if (p == ':')
+ {
+ get ();
+ return make_token (type::in_doc_nn);
+ }
+ else
+ return make_token (type::in_doc);
+ }
+ }
}
else
- return make_token (type::in_string);
+ return make_token (type::in_str);
}
// >
@@ -245,14 +261,30 @@ namespace build2
{
xchar p (peek ());
- if (p == '!' || p == '>')
+ if (p == '!' || p == ':' || p == '>')
{
get ();
- return make_token (
- p == '!' ? type::out_null : type::out_document);
+
+ switch (p)
+ {
+ case '!': return make_token (type::out_null);
+ case ':': return make_token (type::out_str_nn);
+ case '>':
+ {
+ p = peek ();
+
+ if (p == ':')
+ {
+ get ();
+ return make_token (type::out_doc_nn);
+ }
+ else
+ return make_token (type::out_doc);
+ }
+ }
}
else
- return make_token (type::out_string);
+ return make_token (type::out_str);
}
}
}