summaryrefslogtreecommitdiff
path: root/src/macro_rules
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-10-10 14:07:38 +0800
committerJohn Hodge <tpg@mutabah.net>2016-10-10 14:07:38 +0800
commit32ed843e8ebafc22f61c3f166bcb4af0ce7f4fd7 (patch)
tree0ad098392b603e5277dc9837ae55e5907863b72e /src/macro_rules
parent41a56d4a17132f67adb187aad3ab13a5486ee1c3 (diff)
downloadmrust-32ed843e8ebafc22f61c3f166bcb4af0ce7f4fd7.tar.gz
Parse - Fix a few cases where tokens were copied instead of cloned
Diffstat (limited to 'src/macro_rules')
-rw-r--r--src/macro_rules/eval.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/macro_rules/eval.cpp b/src/macro_rules/eval.cpp
index 109e2c43..d37f0279 100644
--- a/src/macro_rules/eval.cpp
+++ b/src/macro_rules/eval.cpp
@@ -1029,11 +1029,11 @@ Token MacroExpander::realGetToken()
while( const auto* next_ent_ptr = m_state.next_ent() )
{
const auto& ent = *next_ent_ptr;
- TU_MATCH( MacroExpansionEnt, (ent), (e),
- (Token,
+ TU_IFLET(MacroExpansionEnt, ent, Token, e,
return e;
- ),
- (NamedValue,
+ )
+ else if( ent.is_NamedValue() ) {
+ const auto& e = ent.as_NamedValue();
if( e >> 30 ) {
switch( e & 0x3FFFFFFF )
{
@@ -1081,12 +1081,14 @@ Token MacroExpander::realGetToken()
}
}
}
- ),
- (Loop,
+ }
+ else TU_IFLET(MacroExpansionEnt, ent, Loop, e,
//assert( e.joiner.tok() != TOK_NULL );
return e.joiner;
- )
)
+ else {
+ throw "";
+ }
}
DEBUG("EOF");