From afd9fe2cc7f43fd036837db10e71b04410fadf9a Mon Sep 17 00:00:00 2001 From: John Hodge Date: Wed, 18 Mar 2015 14:02:00 +0800 Subject: '..' pattern, fix macro arg lookup comparison function --- src/macros.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/macros.cpp') diff --git a/src/macros.cpp b/src/macros.cpp index 3b6147e3..45175620 100644 --- a/src/macros.cpp +++ b/src/macros.cpp @@ -27,7 +27,13 @@ public: struct cmp_mk { bool operator()(const t_mapping_key& a, const t_mapping_key& b) const { - return a.first < b.first || ::std::strcmp(a.second, b.second) < 0; + if( a.first < b.first ) + return true; + if( a.first == b.first ) { + if( ::std::strcmp(a.second, b.second) < 0 ) + return true; + } + return false; } }; typedef ::std::multimap t_mappings; @@ -281,6 +287,10 @@ void Macro_HandlePattern(TTStream& lex, const MacroPatEnt& pat, unsigned int lay //GET_CHECK_TOK(tok, lex, close); GET_CHECK_TOK(tok, lex, TOK_EOF); DEBUG( rule.m_contents.size() << " rule contents bound to " << bound_tts.size() << " values - " << name ); + for( const auto& v : bound_tts ) + { + DEBUG("- " << v.first.first << "#" << v.first.second << " = [" << v.second << "]"); + } return ::std::unique_ptr( (TokenStream*)new MacroExpander(olex, rule.m_contents, bound_tts, g_crate_path_tt) ); } catch(const ParseError::Base& e) @@ -399,9 +409,11 @@ Token MacroExpander::realGetToken() { // - Name const size_t iter_idx = m_offsets.back().second; + DEBUG("m_mappings = " << m_mappings); const auto tt_i = m_mappings.equal_range( ::std::make_pair(layer, ent.name.c_str()) ); - if( tt_i.first == tt_i.second ) - throw ParseError::Generic( FMT("Cannot find mapping name: " << ent.name << " for layer " << layer) ); + if( tt_i.first == tt_i.second ) { + throw ParseError::Generic(*this, FMT("Cannot find mapping name: " << ent.name << " for layer " << layer) ); + } size_t i = 0; for( auto it = tt_i.first; it != tt_i.second; it ++ ) -- cgit v1.2.3