diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-10-22 16:10:38 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-11-04 09:26:34 +0200 |
commit | 132c1f2bb19c92722274c69a190c2f71b801b602 (patch) | |
tree | ce141b9b866582966262d01777dbf7e9e01e324e /build2/test/script/lexer.cxx | |
parent | 31e16a7413813293e3cccb6799eaa08b7af5af4e (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.cxx | 48 |
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); } } } |