diff options
author | John Hodge <tpg@mutabah.net> | 2016-11-02 20:32:13 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-11-02 20:32:13 +0800 |
commit | b71e1546a794843d73d28a7f66bcab50c387d83d (patch) | |
tree | f13fe8cc2a537eac0c480523d64ef3737c0fe47c /src/parse/ttstream.hpp | |
parent | 983ff1c26e15a13e6a1e0e4bb1e964ec496a4777 (diff) | |
download | mrust-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.hpp | 52 |
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; +}; |