From 132c1f2bb19c92722274c69a190c2f71b801b602 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sat, 22 Oct 2016 16:10:38 +0200 Subject: Add support for no-newline redirects in testscript The no-newline operators are '<:', '>:', '<<:', and '>>:'. --- build2/test/script/lexer.cxx | 48 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) (limited to 'build2/test/script/lexer.cxx') 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); } } } -- cgit v1.1