summaryrefslogtreecommitdiff
path: root/src/parse/ttstream.hpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-11-02 20:32:13 +0800
committerJohn Hodge <tpg@mutabah.net>2016-11-02 20:32:13 +0800
commitb71e1546a794843d73d28a7f66bcab50c387d83d (patch)
treef13fe8cc2a537eac0c480523d64ef3737c0fe47c /src/parse/ttstream.hpp
parent983ff1c26e15a13e6a1e0e4bb1e964ec496a4777 (diff)
downloadmrust-b71e1546a794843d73d28a7f66bcab50c387d83d.tar.gz
Parse - Refactor TTStream and TokenTree into their own files
Diffstat (limited to 'src/parse/ttstream.hpp')
-rw-r--r--src/parse/ttstream.hpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/parse/ttstream.hpp b/src/parse/ttstream.hpp
new file mode 100644
index 00000000..7b7fec4a
--- /dev/null
+++ b/src/parse/ttstream.hpp
@@ -0,0 +1,52 @@
+/*
+ * MRustC - Rust Compiler
+ * - By John Hodge (Mutabah/thePowersGang)
+ *
+ * parse/ttstrea.hpp
+ * - Token tree streams (for post-lex parsing)
+ */
+#pragma once
+
+#include "tokentree.hpp"
+#include "tokenstream.hpp"
+
+/// Borrowed TTStream
+class TTStream:
+ public TokenStream
+{
+ ::std::vector< ::std::pair<unsigned int, const TokenTree*> > m_stack;
+ const Ident::Hygiene* m_hygiene_ptr = nullptr;
+public:
+ TTStream(const TokenTree& input_tt);
+ ~TTStream();
+
+ TTStream& operator=(const TTStream& x) { m_stack = x.m_stack; return *this; }
+
+ Position getPosition() const override;
+ Ident::Hygiene getHygiene() const override;
+
+protected:
+ Token realGetToken() override;
+};
+
+/// Owned TTStream
+class TTStreamO:
+ public TokenStream
+{
+ Position m_last_pos;
+ TokenTree m_input_tt;
+ ::std::vector< ::std::pair<unsigned int, TokenTree*> > m_stack;
+public:
+ TTStreamO(TokenTree input_tt);
+ TTStreamO(TTStreamO&& x) = default;
+ ~TTStreamO();
+
+ TTStreamO& operator=(const TTStreamO& x) { m_stack = x.m_stack; return *this; }
+ TTStreamO& operator=(TTStreamO&& x) = default;
+
+ Position getPosition() const override;
+ Ident::Hygiene getHygiene() const override;
+
+protected:
+ Token realGetToken() override;
+};