summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/parse/tokentree.cpp23
-rw-r--r--src/parse/tokentree.hpp4
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; }