diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/parse/tokentree.cpp | 23 | ||||
-rw-r--r-- | src/parse/tokentree.hpp | 4 |
2 files changed, 20 insertions, 7 deletions
diff --git a/src/parse/tokentree.cpp b/src/parse/tokentree.cpp index 25e8ad44..bb0ea9fc 100644 --- a/src/parse/tokentree.cpp +++ b/src/parse/tokentree.cpp @@ -24,19 +24,32 @@ TokenTree TokenTree::clone() const ::std::ostream& operator<<(::std::ostream& os, const TokenTree& tt) { - os << tt.m_hygiene; if( tt.m_subtrees.size() == 0 ) - return os << tt.m_tok; + { + switch(tt.m_tok.type()) + { + case TOK_IDENT: + case TOK_LIFETIME: + os << "/*" << tt.m_hygiene << "*/"; + break; + case TOK_INTERPOLATED_IDENT ... TOK_INTERPOLATED_ITEM: + os << "/*int*/"; + break; + default: + break; + } + return os << tt.m_tok.to_str(); + } else { - os << "TT(["; + os << "/*" << tt.m_hygiene << " TT*/"; + // NOTE: All TTs (except the outer tt on a macro invocation) include the grouping bool first = true; for(const auto& i : tt.m_subtrees) { if(!first) - os << ", "; + os << " "; os << i; first = false; } - os << "])"; return os; } } diff --git a/src/parse/tokentree.hpp b/src/parse/tokentree.hpp index 26e23876..3d6e63de 100644 --- a/src/parse/tokentree.hpp +++ b/src/parse/tokentree.hpp @@ -49,8 +49,8 @@ public: unsigned int size() const { return m_subtrees.size(); } - const TokenTree& operator[](unsigned int idx) const { return m_subtrees[idx]; } - TokenTree& operator[](unsigned int idx) { return m_subtrees[idx]; } + const TokenTree& operator[](unsigned int idx) const { assert(idx < m_subtrees.size()); return m_subtrees[idx]; } + TokenTree& operator[](unsigned int idx) { assert(idx < m_subtrees.size()); return m_subtrees[idx]; } const Token& tok() const { return m_tok; } Token& tok() { return m_tok; } const Ident::Hygiene& hygiene() const { return m_hygiene; } |