diff options
author | John Hodge <tpg@ucc.asn.au> | 2018-06-03 14:57:05 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2018-06-03 14:57:05 +0800 |
commit | bf8f8b4b4a9fe273451be59f68acafbe61968b83 (patch) | |
tree | 82993550cb3c88de0edbd55d79e4ea8e8cefffac /src/parse/token.hpp | |
parent | 39b3cf53798683e496804f8322da2254b10850f4 (diff) | |
parent | a7fb27789a2b34543851d207120e2c0001ee9c27 (diff) | |
download | mrust-bf8f8b4b4a9fe273451be59f68acafbe61968b83.tar.gz |
Merge branch 'master' of https://github.com/thepowersgang/mrustc
Diffstat (limited to 'src/parse/token.hpp')
-rw-r--r-- | src/parse/token.hpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/parse/token.hpp b/src/parse/token.hpp index 0ef8f009..3605679b 100644 --- a/src/parse/token.hpp +++ b/src/parse/token.hpp @@ -9,9 +9,9 @@ #include <rc_string.hpp> #include <tagged_union.hpp> -#include <serialise.hpp> #include "../coretypes.hpp" #include <ident.hpp> +#include <memory> enum eTokenType { @@ -47,7 +47,7 @@ namespace AST { class Pattern; class Path; class ExprNode; - class MetaItem; + class Attribute; class Item; template<typename T> @@ -56,9 +56,11 @@ namespace AST { class InterpolatedFragment; -class Token: - public Serialisable +class Token { + friend class HirSerialiser; + friend class HirDeserialiser; + TAGGED_UNION(Data, None, (None, struct {}), (String, ::std::string), @@ -77,6 +79,12 @@ class Token: Data m_data; Position m_pos; + Token(enum eTokenType t, Data d, Position p): + m_type(t), + m_data( ::std::move(d) ), + m_pos( ::std::move(p) ) + { + } public: virtual ~Token(); Token(); @@ -115,7 +123,7 @@ public: TypeRef& frag_type() { assert(m_type == TOK_INTERPOLATED_TYPE); return *reinterpret_cast<TypeRef*>( m_data.as_Fragment() ); } AST::Path& frag_path() { assert(m_type == TOK_INTERPOLATED_PATH); return *reinterpret_cast<AST::Path*>( m_data.as_Fragment() ); } AST::Pattern& frag_pattern() { assert(m_type == TOK_INTERPOLATED_PATTERN); return *reinterpret_cast<AST::Pattern*>( m_data.as_Fragment() ); } - AST::MetaItem& frag_meta() { assert(m_type == TOK_INTERPOLATED_META); return *reinterpret_cast<AST::MetaItem*>( m_data.as_Fragment() ); } + AST::Attribute& frag_meta() { assert(m_type == TOK_INTERPOLATED_META); return *reinterpret_cast<AST::Attribute*>( m_data.as_Fragment() ); } ::std::unique_ptr<AST::ExprNode> take_frag_node(); ::AST::Named<AST::Item> take_frag_item(); @@ -141,8 +149,6 @@ public: static const char* typestr(enum eTokenType type); static eTokenType typefromstr(const ::std::string& s); - SERIALISABLE_PROTOTYPES(); - friend ::std::ostream& operator<<(::std::ostream& os, const Token& tok); }; extern ::std::ostream& operator<<(::std::ostream& os, const Token& tok); |