aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/token.cxx
blob: 376a92e16cc511420be8b36d94f1590768013a3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// 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::semi:         os << q << ';'    << q; break;

        case token_type::plus:         os << q << '+'    << q; break;
        case token_type::minus:        os << q << '-'    << q; break;

        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_pass:      os << q << "<+"   << q; break;
        case token_type::in_null:      os << q << "<-"   << q; break;
        case token_type::in_str:       os << q << '<'    << q; break;
        case token_type::in_str_nn:    os << q << "<:"   << q; break;
        case token_type::in_doc:       os << q << "<<"   << q; break;
        case token_type::in_doc_nn:    os << q << "<<:"  << q; break;
        case token_type::in_file:      os << q << "<<<"  << q; break;

        case token_type::out_pass:     os << q << ">+"   << q; break;
        case token_type::out_null:     os << q << ">-"   << q; break;
        case token_type::out_str:      os << q << '>'    << q; break;
        case token_type::out_str_nn:   os << q << ">:"   << q; break;
        case token_type::out_doc:      os << q << ">>"   << q; break;
        case token_type::out_doc_nn:   os << q << ">>:"  << q; break;
        case token_type::out_file:     os << q << ">>>"  << q; break;
        case token_type::out_file_app: os << q << ">>>&" << q; break;

        default: build2::token_printer (os, t, d);
        }
      }
    }
  }
}