From 32ed843e8ebafc22f61c3f166bcb4af0ce7f4fd7 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Mon, 10 Oct 2016 14:07:38 +0800 Subject: Parse - Fix a few cases where tokens were copied instead of cloned --- src/parse/token.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/parse/token.cpp') 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); -- cgit v1.2.3