diff options
Diffstat (limited to 'src/parse/interpolated_fragment.hpp')
-rw-r--r-- | src/parse/interpolated_fragment.hpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/parse/interpolated_fragment.hpp b/src/parse/interpolated_fragment.hpp new file mode 100644 index 00000000..40aa764a --- /dev/null +++ b/src/parse/interpolated_fragment.hpp @@ -0,0 +1,49 @@ +/* + */ +#pragma once + +#include <cassert> + +class TypeRef; +class TokenTree; +namespace AST { + class Pattern; + class Path; + class ExprNode; + class MetaItem; +}; + +class InterpolatedFragment +{ +public: + enum Type + { + TT, + PAT, + PATH, + TYPE, + + EXPR, + STMT, + BLOCK, + + META, + } m_type; + + void* m_ptr; + + InterpolatedFragment(InterpolatedFragment&& ); + InterpolatedFragment& operator=(InterpolatedFragment&& ); + //InterpolatedFragment(const InterpolatedFragment& ); + InterpolatedFragment(TokenTree ); + InterpolatedFragment(::AST::Pattern); + InterpolatedFragment(::AST::Path); + InterpolatedFragment(::TypeRef); + InterpolatedFragment(::AST::MetaItem ); + ~InterpolatedFragment(); + InterpolatedFragment(Type , ::AST::ExprNode*); + + TokenTree& as_tt() { assert(m_type == TT); return *reinterpret_cast<TokenTree*>(m_ptr); } + + friend ::std::ostream& operator<<(::std::ostream& os, const InterpolatedFragment& x); +}; |