summaryrefslogtreecommitdiff
path: root/src/macro_rules/eval.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-11-02 19:38:45 +0800
committerJohn Hodge <tpg@mutabah.net>2016-11-02 19:38:45 +0800
commit983ff1c26e15a13e6a1e0e4bb1e964ec496a4777 (patch)
treebc39e1e44e63b9440dd186c2781e4ad02f82c2c5 /src/macro_rules/eval.cpp
parent739c2f5a2124e9aa4fcc01e8fc1dbfe147a37254 (diff)
downloadmrust-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.cpp20
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