diff options
author | John Hodge <tpg@mutabah.net> | 2016-11-02 19:38:45 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-11-02 19:38:45 +0800 |
commit | 983ff1c26e15a13e6a1e0e4bb1e964ec496a4777 (patch) | |
tree | bc39e1e44e63b9440dd186c2781e4ad02f82c2c5 /src/macro_rules/eval.cpp | |
parent | 739c2f5a2124e9aa4fcc01e8fc1dbfe147a37254 (diff) | |
download | mrust-983ff1c26e15a13e6a1e0e4bb1e964ec496a4777.tar.gz |
Parse - Rework hygiene (with spelling fix) for take 2
Diffstat (limited to 'src/macro_rules/eval.cpp')
-rw-r--r-- | src/macro_rules/eval.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/macro_rules/eval.cpp b/src/macro_rules/eval.cpp index 31665a25..110e8525 100644 --- a/src/macro_rules/eval.cpp +++ b/src/macro_rules/eval.cpp @@ -566,6 +566,7 @@ class MacroExpander: Token m_next_token; // used for inserting a single token into the stream ::std::unique_ptr<TTStreamO> m_ttstream; + Ident::Hygiene m_hygiene; public: MacroExpander(const MacroExpander& x) = delete; @@ -574,12 +575,14 @@ public: m_macro_filename( FMT("Macro:" << macro_name) ), m_crate_name( mv$(crate_name) ), m_mappings( mv$(mappings) ), - m_state( contents, m_mappings ) + m_state( contents, m_mappings ), + m_hygiene( Ident::Hygiene::new_scope() ) { } - virtual Position getPosition() const override; - virtual Token realGetToken() override; + Position getPosition() const override; + Ident::Hygiene getHygiene() const override; + Token realGetToken() override; }; void Macro_InitDefaults() @@ -1044,6 +1047,17 @@ Position MacroExpander::getPosition() const // TODO: Return a far better span - invocaion location? return Position(m_macro_filename, 0, m_state.top_pos()); } +Ident::Hygiene MacroExpander::getHygiene() const +{ + if( m_ttstream ) + { + return m_ttstream->getHygiene(); + } + else + { + return m_hygiene; + } +} Token MacroExpander::realGetToken() { // Use m_next_token first |