diff options
author | John Hodge <tpg@mutabah.net> | 2016-07-14 09:00:27 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-07-14 09:00:27 +0800 |
commit | 0383d4dc00d3e20ba45f21213fd1c2be2fc85e3e (patch) | |
tree | 5c48ce620d88b78617ffd036fa6c889b12a6c08c /src/macro_rules/eval.cpp | |
parent | e74ceca550c06f8a0c267459fbb2e365b3ddd708 (diff) | |
download | mrust-0383d4dc00d3e20ba45f21213fd1c2be2fc85e3e.tar.gz |
Macro Rules - Seems to be working
Diffstat (limited to 'src/macro_rules/eval.cpp')
-rw-r--r-- | src/macro_rules/eval.cpp | 22 |
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} ); |