From d5849b0160fffcc176d7a530341de602c93edf4a Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 10 Jul 2011 17:58:07 -0400 Subject: [PATCH] Aliases - Allowed aliases to nest up to 10 levels. --- src/Arguments.cpp | 65 ++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/src/Arguments.cpp b/src/Arguments.cpp index 1870c9506..72a53aadb 100644 --- a/src/Arguments.cpp +++ b/src/Arguments.cpp @@ -566,45 +566,52 @@ void Arguments::apply_overrides () void Arguments::resolve_aliases () { std::vector expanded; - bool something = false; + bool something; + int safety_valve = 10; - std::vector ::iterator arg; - for (arg = this->begin (); arg != this->end (); ++arg) + do { - std::map ::iterator match = - context.aliases.find (arg->_first); - - if (match != context.aliases.end ()) + something = false; + std::vector ::iterator arg; + for (arg = this->begin (); arg != this->end (); ++arg) { - context.debug (std::string ("Arguments::resolve_aliases '") - + arg->_first - + "' --> '" - + context.aliases[arg->_first] - + "'"); + std::map ::iterator match = + context.aliases.find (arg->_first); - std::vector words; - splitq (words, context.aliases[arg->_first], ' '); + if (match != context.aliases.end ()) + { + context.debug (std::string ("Arguments::resolve_aliases '") + + arg->_first + + "' --> '" + + context.aliases[arg->_first] + + "'"); - std::vector ::iterator word; - for (word = words.begin (); word != words.end (); ++word) - expanded.push_back (*word); + std::vector words; + splitq (words, context.aliases[arg->_first], ' '); - something = true; + std::vector ::iterator word; + for (word = words.begin (); word != words.end (); ++word) + expanded.push_back (*word); + + something = true; + } + else + expanded.push_back (arg->_first); } - else - expanded.push_back (arg->_first); - } - // Only overwrite if something happened. - if (something) - { - this->clear (); - std::vector ::iterator e; - for (e = expanded.begin (); e != expanded.end (); ++e) - this->push_back (Triple (*e, "", "")); + // Only overwrite if something happened. + if (something) + { + this->clear (); + std::vector ::iterator e; + for (e = expanded.begin (); e != expanded.end (); ++e) + this->push_back (Triple (*e, "", "")); - categorize (); + expanded.clear (); + categorize (); + } } + while (something && --safety_valve > 0); } ////////////////////////////////////////////////////////////////////////////////