From b2e0f5c122b64fe31ba935f9cb5c6a397fd8f6ab Mon Sep 17 00:00:00 2001 From: John Hodge Date: Mon, 26 Sep 2016 12:01:57 +0800 Subject: Expand - Pass ownership of the input TT to macro_rules! expand --- src/parse/lex.cpp | 6 +++--- src/parse/token.cpp | 6 +++++- src/parse/tokentree.hpp | 14 ++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) (limited to 'src/parse') diff --git a/src/parse/lex.cpp b/src/parse/lex.cpp index 4a50d659..624912c6 100644 --- a/src/parse/lex.cpp +++ b/src/parse/lex.cpp @@ -1031,7 +1031,7 @@ Token TTStreamO::realGetToken() { // If current index is above TT size, go up unsigned int& idx = m_stack.back().first; - const TokenTree& tree = *( m_stack.back().second ? m_stack.back().second : &m_input_tt ); + TokenTree& tree = *( m_stack.back().second ? m_stack.back().second : &m_input_tt ); if(idx == 0 && tree.is_token()) { idx ++; @@ -1041,11 +1041,11 @@ Token TTStreamO::realGetToken() if(idx < tree.size()) { - const TokenTree& subtree = tree[idx]; + TokenTree& subtree = tree[idx]; idx ++; if( subtree.size() == 0 ) { m_last_pos = subtree.tok().get_pos(); - return subtree.tok(); + return mv$( subtree.tok() ); } else { m_stack.push_back( ::std::make_pair(0, &subtree ) ); diff --git a/src/parse/token.cpp b/src/parse/token.cpp index b261f248..c5add18a 100644 --- a/src/parse/token.cpp +++ b/src/parse/token.cpp @@ -185,8 +185,12 @@ Token Token::clone() const case TOK_INTERPOLATED_META: rv.m_data = new AST::MetaItem( reinterpret_cast(e)->clone() ); break; + case TOK_INTERPOLATED_ITEM: + TODO(m_pos, "clone interpolated item"); + //rv.m_data = new AST::Named( AST::Item( reinterpret_cast(e)->clone() ) ); + break; default: - assert(!"Token::clone() - fragment with invalid token type"); + BUG(m_pos, "Fragment with invalid token type (" << *this << ")"); break; } ) diff --git a/src/parse/tokentree.hpp b/src/parse/tokentree.hpp index 833b39dc..0856c326 100644 --- a/src/parse/tokentree.hpp +++ b/src/parse/tokentree.hpp @@ -29,12 +29,10 @@ public: unsigned int size() const { return m_subtrees.size(); } - const TokenTree& operator[](unsigned int idx) const { - return m_subtrees[idx]; - } - const Token& tok() const { - return m_tok; - } + const TokenTree& operator[](unsigned int idx) const { return m_subtrees[idx]; } + TokenTree& operator[](unsigned int idx) { return m_subtrees[idx]; } + const Token& tok() const { return m_tok; } + Token& tok() { return m_tok; } friend ::std::ostream& operator<<(::std::ostream& os, const TokenTree& tt) { if( tt.m_subtrees.size() == 0 ) @@ -74,8 +72,8 @@ class TTStreamO: public TokenStream { Position m_last_pos; - TokenTree m_input_tt; - ::std::vector< ::std::pair > m_stack; + TokenTree m_input_tt; + ::std::vector< ::std::pair > m_stack; public: TTStreamO(TokenTree input_tt); TTStreamO(TTStreamO&& x) = default; -- cgit v1.2.3