aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/token.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-11-04 08:17:40 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-11-04 09:26:02 +0200
commitd4be6965ed8d5cacb79776fa892b763548e3d070 (patch)
tree92ced4c32404740692501f40c5f9ec36d598c6c0 /build2/test/script/token.cxx
parent8caa111ec27dc21973b764d9892e7100f4bd2628 (diff)
Handle printing of extended tokens (testscript)
Diffstat (limited to 'build2/test/script/token.cxx')
-rw-r--r--build2/test/script/token.cxx42
1 files changed, 42 insertions, 0 deletions
diff --git a/build2/test/script/token.cxx b/build2/test/script/token.cxx
new file mode 100644
index 0000000..bfff25a
--- /dev/null
+++ b/build2/test/script/token.cxx
@@ -0,0 +1,42 @@
+// file : build2/test/script/token.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#include <build2/test/script/token>
+
+using namespace std;
+
+namespace build2
+{
+ namespace test
+ {
+ namespace script
+ {
+ void
+ token_printer (ostream& os, const token& t, bool d)
+ {
+ // Only quote non-name tokens for diagnostics.
+ //
+ const char* q (d ? "'" : "");
+
+ switch (t.type)
+ {
+ case token_type::pipe: os << q << '|' << q; break;
+ case token_type::clean: os << q << '&' << q; break;
+ case token_type::log_and: os << q << "&&" << q; break;
+ case token_type::log_or: os << q << "||" << q; break;
+
+ case token_type::in_null: os << q << "<!" << q; break;
+ case token_type::in_string: os << q << '<' << q; break;
+ case token_type::in_document: os << q << "<<" << q; break;
+
+ case token_type::out_null: os << q << "<!" << q; break;
+ case token_type::out_string: os << q << '<' << q; break;
+ case token_type::out_document: os << q << "<<" << q; break;
+
+ default: build2::token_printer (os, t, d);
+ }
+ }
+ }
+ }
+}