summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/expr.cpp2
-rw-r--r--src/parse/lex.cpp2
-rw-r--r--src/parse/token.cpp14
-rw-r--r--src/parse/token.hpp15
4 files changed, 17 insertions, 16 deletions
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp
index ff8be897..6b33b3e7 100644
--- a/src/parse/expr.cpp
+++ b/src/parse/expr.cpp
@@ -1312,7 +1312,7 @@ public:
virtual Position getPosition() const override { return m_input.getPosition(); }
virtual Token realGetToken() override {
Token tok = m_input.getToken();
- m_output.push_back( TokenTree(tok) );
+ m_output.push_back( TokenTree(tok.clone()) );
return tok;
}
diff --git a/src/parse/lex.cpp b/src/parse/lex.cpp
index 624912c6..76c8ab5d 100644
--- a/src/parse/lex.cpp
+++ b/src/parse/lex.cpp
@@ -1036,7 +1036,7 @@ Token TTStreamO::realGetToken()
if(idx == 0 && tree.is_token()) {
idx ++;
m_last_pos = tree.tok().get_pos();
- return tree.tok();
+ return mv$(tree.tok());
}
if(idx < tree.size())
diff --git a/src/parse/token.cpp b/src/parse/token.cpp
index 3c4d68ac..6e32f958 100644
--- a/src/parse/token.cpp
+++ b/src/parse/token.cpp
@@ -142,6 +142,20 @@ Token::Token(TagTakeIP, InterpolatedFragment frag)
}
}
+Token::Token(const Token& t):
+ m_type(t.m_type),
+ m_data( Data::make_None({}) ),
+ m_pos( t.m_pos )
+{
+ assert( t.m_data.tag() != Data::TAGDEAD );
+ TU_MATCH(Data, (t.m_data), (e),
+ (None, ),
+ (String, m_data = Data::make_String(e); ),
+ (Integer, m_data = Data::make_Integer(e);),
+ (Float, m_data = Data::make_Float(e);),
+ (Fragment, BUG(t.m_pos, "Attempted to copy a fragment - " << t);)
+ )
+}
Token Token::clone() const
{
Token rv(m_type);
diff --git a/src/parse/token.hpp b/src/parse/token.hpp
index d496a4b2..39d3654f 100644
--- a/src/parse/token.hpp
+++ b/src/parse/token.hpp
@@ -86,20 +86,7 @@ public:
{
t.m_type = TOK_NULL;
}
- Token(const Token& t):
- m_type(t.m_type),
- m_data( Data::make_None({}) ),
- m_pos( t.m_pos )
- {
- assert( t.m_data.tag() != Data::TAGDEAD );
- TU_MATCH(Data, (t.m_data), (e),
- (None, ),
- (String, m_data = Data::make_String(e); ),
- (Integer, m_data = Data::make_Integer(e);),
- (Float, m_data = Data::make_Float(e);),
- (Fragment, assert(!"Copied fragment");)
- )
- }
+ Token(const Token& t);
Token clone() const;
Token(enum eTokenType type);