blob: 575178acda308532b86b7bae6dbd622ad4feecce (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
/*
* 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;
protected:
Ident::Hygiene realGetHygiene() const override;
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;
const Ident::Hygiene* m_hygiene_ptr = nullptr;
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;
protected:
Ident::Hygiene realGetHygiene() const override;
Token realGetToken() override;
};
|