summaryrefslogtreecommitdiff
path: root/src/parse/interpolated_fragment.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse/interpolated_fragment.hpp')
-rw-r--r--src/parse/interpolated_fragment.hpp49
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);
+};