summaryrefslogtreecommitdiff
path: root/src/parse/tokenstream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse/tokenstream.cpp')
-rw-r--r--src/parse/tokenstream.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/parse/tokenstream.cpp b/src/parse/tokenstream.cpp
index 5d9919f6..0182e548 100644
--- a/src/parse/tokenstream.cpp
+++ b/src/parse/tokenstream.cpp
@@ -38,7 +38,8 @@ Token TokenStream::getToken()
}
else if( m_lookahead.size() )
{
- Token ret = mv$( m_lookahead.front() );
+ Token ret = mv$( m_lookahead.front().first );
+ m_hygiene = m_lookahead.front().second;
m_lookahead.erase(m_lookahead.begin());
if( DEBUG_PRINT_TOKENS ) {
::std::cout << "getToken[" << typeid(*this).name() << "] - " << ret.get_pos() << "-" << ret << ::std::endl;
@@ -48,6 +49,7 @@ Token TokenStream::getToken()
else
{
Token ret = this->innerGetToken();
+ m_hygiene = this->realGetHygiene();
if( DEBUG_PRINT_TOKENS ) {
::std::cout << "getToken[" << typeid(*this).name() << "] - " << ret.get_pos() << "-" << ret << ::std::endl;
}
@@ -85,11 +87,18 @@ eTokenType TokenStream::lookahead(unsigned int i)
while( i >= m_lookahead.size() )
{
DEBUG("lookahead - read #" << m_lookahead.size());
- m_lookahead.push_back( this->innerGetToken() );
+ auto tok = this->innerGetToken();
+ auto hygiene = this->realGetHygiene();
+ m_lookahead.push_back( ::std::make_pair(mv$(tok), mv$(hygiene)) );
}
DEBUG("lookahead(" << i << ") = " << m_lookahead[i]);
- return m_lookahead[i].type();
+ return m_lookahead[i].first.type();
+}
+
+Ident::Hygiene TokenStream::getHygiene() const
+{
+ return m_hygiene;
}
ProtoSpan TokenStream::start_span() const