[llvm] r212615 - Generic: add range-adapter for option parsing.
David Blaikie
dblaikie at gmail.com
Wed Jul 9 08:29:08 PDT 2014
On Wed, Jul 9, 2014 at 6:03 AM, Tim Northover <tnorthover at apple.com> wrote:
> Author: tnorthover
> Date: Wed Jul 9 08:03:37 2014
> New Revision: 212615
>
> URL: http://llvm.org/viewvc/llvm-project?rev=212615&view=rev
> Log:
> Generic: add range-adapter for option parsing.
>
> I want to use it in lld, but while I'm here I'll update LLVM uses.
>
> Modified:
> llvm/trunk/include/llvm/Option/ArgList.h
> llvm/trunk/lib/Option/ArgList.cpp
>
> Modified: llvm/trunk/include/llvm/Option/ArgList.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Option/ArgList.h?rev=212615&r1=212614&r2=212615&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Option/ArgList.h (original)
> +++ llvm/trunk/include/llvm/Option/ArgList.h Wed Jul 9 08:03:37 2014
> @@ -150,6 +150,13 @@ public:
> return arg_iterator(Args.end(), *this);
> }
>
> + iterator_range<arg_iterator> filtered(OptSpecifier Id0 = 0U,
> + OptSpecifier Id1 = 0U,
> + OptSpecifier Id2 = 0U) const {
> + return iterator_range<arg_iterator>(filtered_begin(Id0, Id1, Id2),
> + filtered_end());
FYI: we do have a make_range function that can be used to simplify the
range expression here:
return make_range(filtered_begin(ld0, ld1, ld2), filtered_range());
if you like.
> + }
> +
> /// @}
> /// @name Arg Removal
> /// @{
>
> Modified: llvm/trunk/lib/Option/ArgList.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Option/ArgList.cpp?rev=212615&r1=212614&r2=212615&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Option/ArgList.cpp (original)
> +++ llvm/trunk/lib/Option/ArgList.cpp Wed Jul 9 08:03:37 2014
> @@ -234,44 +234,40 @@ void ArgList::AddLastArg(ArgStringList &
>
> void ArgList::AddAllArgs(ArgStringList &Output, OptSpecifier Id0,
> OptSpecifier Id1, OptSpecifier Id2) const {
> - for (arg_iterator it = filtered_begin(Id0, Id1, Id2),
> - ie = filtered_end(); it != ie; ++it) {
> - (*it)->claim();
> - (*it)->render(*this, Output);
> + for (auto Arg: filtered(Id0, Id1, Id2)) {
> + Arg->claim();
> + Arg->render(*this, Output);
> }
> }
>
> void ArgList::AddAllArgValues(ArgStringList &Output, OptSpecifier Id0,
> OptSpecifier Id1, OptSpecifier Id2) const {
> - for (arg_iterator it = filtered_begin(Id0, Id1, Id2),
> - ie = filtered_end(); it != ie; ++it) {
> - (*it)->claim();
> - for (unsigned i = 0, e = (*it)->getNumValues(); i != e; ++i)
> - Output.push_back((*it)->getValue(i));
> + for (auto Arg : filtered(Id0, Id1, Id2)) {
> + Arg->claim();
> + for (unsigned i = 0, e = Arg->getNumValues(); i != e; ++i)
> + Output.push_back(Arg->getValue(i));
> }
> }
>
> void ArgList::AddAllArgsTranslated(ArgStringList &Output, OptSpecifier Id0,
> const char *Translation,
> bool Joined) const {
> - for (arg_iterator it = filtered_begin(Id0),
> - ie = filtered_end(); it != ie; ++it) {
> - (*it)->claim();
> + for (auto Arg: filtered(Id0)) {
> + Arg->claim();
>
> if (Joined) {
> Output.push_back(MakeArgString(StringRef(Translation) +
> - (*it)->getValue(0)));
> + Arg->getValue(0)));
> } else {
> Output.push_back(Translation);
> - Output.push_back((*it)->getValue(0));
> + Output.push_back(Arg->getValue(0));
> }
> }
> }
>
> void ArgList::ClaimAllArgs(OptSpecifier Id0) const {
> - for (arg_iterator it = filtered_begin(Id0),
> - ie = filtered_end(); it != ie; ++it)
> - (*it)->claim();
> + for (auto Arg : filtered(Id0))
> + Arg->claim();
> }
>
> void ArgList::ClaimAllArgs() const {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list