summaryrefslogtreecommitdiff
path: root/src/macro_rules/eval.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-07-14 09:00:27 +0800
committerJohn Hodge <tpg@mutabah.net>2016-07-14 09:00:27 +0800
commit0383d4dc00d3e20ba45f21213fd1c2be2fc85e3e (patch)
tree5c48ce620d88b78617ffd036fa6c889b12a6c08c /src/macro_rules/eval.cpp
parente74ceca550c06f8a0c267459fbb2e365b3ddd708 (diff)
downloadmrust-0383d4dc00d3e20ba45f21213fd1c2be2fc85e3e.tar.gz
Macro Rules - Seems to be working
Diffstat (limited to 'src/macro_rules/eval.cpp')
-rw-r--r--src/macro_rules/eval.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/macro_rules/eval.cpp b/src/macro_rules/eval.cpp
index 1dda2be3..3f62b166 100644
--- a/src/macro_rules/eval.cpp
+++ b/src/macro_rules/eval.cpp
@@ -153,9 +153,24 @@ public:
auto* layer = &e.top_layer;
for(const auto iter : iterations)
{
- layer = &layer->next_layer_or_self(iter);
+ TU_MATCH(CaptureLayer, (*layer), (e),
+ (Vals,
+ return 0;
+ ),
+ (Nested,
+ layer = &e[iter];
+ )
+ )
}
- return layer->is_Vals() ? layer->as_Vals().size() : 0;
+ TU_MATCH(CaptureLayer, (*layer), (e),
+ (Vals,
+ return e.size();
+ ),
+ (Nested,
+ return e.size();
+ )
+ )
+ return 0;
}
};
@@ -409,7 +424,7 @@ bool Macro_HandlePattern(TTStream& lex, const MacroPatEnt& pat, ::std::vector<un
{
DEBUG(" - " << rule.m_param_names[i] << " = [" << bound_tts.mappings()[i] << "]");
}
- bound_tts.dump();
+ //bound_tts.dump();
DEBUG("TODO: Obtain crate name correctly, using \"\" for now");
TokenStream* ret_ptr = new MacroExpander(name, rule.m_contents, mv$(bound_tts), "");
@@ -507,6 +522,7 @@ Token MacroExpander::realGetToken()
if( this_repeats > num_repeats )
num_repeats = this_repeats;
}
+ DEBUG("Looping " << num_repeats << " times");
if( num_repeats > 0 )
{
m_offsets.push_back( {0, 0, num_repeats} );