196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//===--- ArgList.cpp - Argument List Management ---------------------------===// 296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// The LLVM Compiler Infrastructure 496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// This file is distributed under the University of Illinois Open Source 696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// License. See LICENSE.TXT for details. 796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//===----------------------------------------------------------------------===// 996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 1096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/ArgList.h" 11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/ADT/STLExtras.h" 12ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/ADT/SmallString.h" 1396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/ADT/Twine.h" 1496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/Arg.h" 1596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/Option.h" 16f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Support/Debug.h" 1796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Support/raw_ostream.h" 1896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 1996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerusing namespace llvm; 2096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerusing namespace llvm::opt; 2196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 2296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid arg_iterator::SkipToNextArg() { 2396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (; Current != Args.end(); ++Current) { 2496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Done if there are no filters. 2596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (!Id0.isValid()) 2696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer break; 2796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 2896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Otherwise require a match. 2996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const Option &O = (*Current)->getOption(); 3096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (O.matches(Id0) || 3196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (Id1.isValid() && O.matches(Id1)) || 3296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (Id2.isValid() && O.matches(Id2))) 3396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer break; 3496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 3596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 3696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 3796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid ArgList::append(Arg *A) { 3896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Args.push_back(A); 3996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 4096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 4196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid ArgList::eraseArg(OptSpecifier Id) { 42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Args.erase(std::remove_if(begin(), end(), 43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines [=](Arg *A) { return A->getOption().matches(Id); }), 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines end()); 4596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 4696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 4796a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArgNoClaim(OptSpecifier Id) const { 4896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // FIXME: Make search efficient? 4996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_reverse_iterator it = rbegin(), ie = rend(); it != ie; ++it) 5096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id)) 5196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return *it; 52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 5396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 5496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 5537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen HinesArg *ArgList::getLastArgNoClaim(OptSpecifier Id0, OptSpecifier Id1) const { 5637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines // FIXME: Make search efficient? 5737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines for (const_reverse_iterator it = rbegin(), ie = rend(); it != ie; ++it) 5837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines if ((*it)->getOption().matches(Id0) || 5937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines (*it)->getOption().matches(Id1)) 6037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return *it; 6137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return nullptr; 6237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 6337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 644c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga NainarArg *ArgList::getLastArgNoClaim(OptSpecifier Id0, OptSpecifier Id1, 654c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar OptSpecifier Id2) const { 664c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar // FIXME: Make search efficient? 674c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar for (const_reverse_iterator it = rbegin(), ie = rend(); it != ie; ++it) 684c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar if ((*it)->getOption().matches(Id0) || (*it)->getOption().matches(Id1) || 694c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar (*it)->getOption().matches(Id2)) 704c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar return *it; 714c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar return nullptr; 724c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar} 734c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 744c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga NainarArg *ArgList::getLastArgNoClaim(OptSpecifier Id0, OptSpecifier Id1, 754c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar OptSpecifier Id2, OptSpecifier Id3) const { 764c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar // FIXME: Make search efficient? 774c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar for (const_reverse_iterator it = rbegin(), ie = rend(); it != ie; ++it) 784c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar if ((*it)->getOption().matches(Id0) || (*it)->getOption().matches(Id1) || 794c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar (*it)->getOption().matches(Id2) || (*it)->getOption().matches(Id3)) 804c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar return *it; 814c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar return nullptr; 824c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar} 834c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 8496a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArg(OptSpecifier Id) const { 85dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Arg *Res = nullptr; 8696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) { 8796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id)) { 8896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res = *it; 8996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res->claim(); 9096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 9196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 9296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 9396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Res; 9496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 9596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 9696a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1) const { 97dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Arg *Res = nullptr; 9896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) { 9996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id0) || 10096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id1)) { 10196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res = *it; 10296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res->claim(); 10396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 10496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 10596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 10696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 10796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Res; 10896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 10996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 11096a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1, 11196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id2) const { 112dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Arg *Res = nullptr; 11396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) { 11496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id0) || 11596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id1) || 11696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id2)) { 11796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res = *it; 11896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res->claim(); 11996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 12096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 12196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 12296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Res; 12396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 12496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 12596a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1, 12696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id2, OptSpecifier Id3) const { 127dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Arg *Res = nullptr; 12896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) { 12996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id0) || 13096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id1) || 13196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id2) || 13296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id3)) { 13396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res = *it; 13496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res->claim(); 13596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 13696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 13796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 13896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Res; 13996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 14096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 14196a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1, 14296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id2, OptSpecifier Id3, 14396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id4) const { 144dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Arg *Res = nullptr; 14596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) { 14696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id0) || 14796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id1) || 14896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id2) || 14996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id3) || 15096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id4)) { 15196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res = *it; 15296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res->claim(); 15396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 15496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 15596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 15696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Res; 15796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 15896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 15996a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1, 16096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id2, OptSpecifier Id3, 16196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id4, OptSpecifier Id5) const { 162dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Arg *Res = nullptr; 16396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) { 16496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id0) || 16596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id1) || 16696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id2) || 16796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id3) || 16896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id4) || 16996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id5)) { 17096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res = *it; 17196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res->claim(); 17296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 17396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 17496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 17596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Res; 17696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 17796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 17896a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1, 17996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id2, OptSpecifier Id3, 18096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id4, OptSpecifier Id5, 18196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id6) const { 182dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Arg *Res = nullptr; 18396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) { 18496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id0) || 18596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id1) || 18696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id2) || 18796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id3) || 18896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id4) || 18996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id5) || 19096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id6)) { 19196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res = *it; 19296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res->claim(); 19396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 19496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 19596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 19696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Res; 19796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 19896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 19996a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1, 20096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id2, OptSpecifier Id3, 20196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id4, OptSpecifier Id5, 20296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id6, OptSpecifier Id7) const { 203dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Arg *Res = nullptr; 20496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) { 20596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if ((*it)->getOption().matches(Id0) || 20696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id1) || 20796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id2) || 20896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id3) || 20996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id4) || 21096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id5) || 21196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id6) || 21296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->getOption().matches(Id7)) { 21396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res = *it; 21496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Res->claim(); 21596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 21696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 21796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 21896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Res; 21996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 22096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 22196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerbool ArgList::hasFlag(OptSpecifier Pos, OptSpecifier Neg, bool Default) const { 22296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Arg *A = getLastArg(Pos, Neg)) 22396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return A->getOption().matches(Pos); 22496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Default; 22596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 22696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 2271ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Klecknerbool ArgList::hasFlag(OptSpecifier Pos, OptSpecifier PosAlias, OptSpecifier Neg, 2281ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner bool Default) const { 2291ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner if (Arg *A = getLastArg(Pos, PosAlias, Neg)) 2301ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner return A->getOption().matches(Pos) || A->getOption().matches(PosAlias); 2311ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner return Default; 2321ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner} 2331ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner 23496a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerStringRef ArgList::getLastArgValue(OptSpecifier Id, 23596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef Default) const { 23696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Arg *A = getLastArg(Id)) 23796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return A->getValue(); 23896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Default; 23996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 24096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 24196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerstd::vector<std::string> ArgList::getAllArgValues(OptSpecifier Id) const { 24296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer SmallVector<const char *, 16> Values; 24396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer AddAllArgValues(Values, Id); 24496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return std::vector<std::string>(Values.begin(), Values.end()); 24596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 24696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 24796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid ArgList::AddLastArg(ArgStringList &Output, OptSpecifier Id) const { 24896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Arg *A = getLastArg(Id)) { 24996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer A->claim(); 25096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer A->render(*this, Output); 25196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 25296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 25396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 2541ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Klecknervoid ArgList::AddLastArg(ArgStringList &Output, OptSpecifier Id0, 2551ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner OptSpecifier Id1) const { 2561ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner if (Arg *A = getLastArg(Id0, Id1)) { 2571ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner A->claim(); 2581ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner A->render(*this, Output); 2591ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner } 2601ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner} 2611ee21dc1e11abdc56102d0f54265af73f5468bf9Reid Kleckner 262f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid ArgList::AddAllArgs(ArgStringList &Output, 263f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar ArrayRef<OptSpecifier> Ids) const { 264f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar for (const Arg *Arg : Args) { 265f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar for (OptSpecifier Id : Ids) { 266f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar if (Arg->getOption().matches(Id)) { 267f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Arg->claim(); 268f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar Arg->render(*this, Output); 269f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar break; 270f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar } 271f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar } 272f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar } 273f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 274f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 275f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar/// This 3-opt variant of AddAllArgs could be eliminated in favor of one 276f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar/// that accepts a single specifier, given the above which accepts any number. 27796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid ArgList::AddAllArgs(ArgStringList &Output, OptSpecifier Id0, 27896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id1, OptSpecifier Id2) const { 279c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines for (auto Arg: filtered(Id0, Id1, Id2)) { 280c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Arg->claim(); 281c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Arg->render(*this, Output); 28296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 28396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 28496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 28596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid ArgList::AddAllArgValues(ArgStringList &Output, OptSpecifier Id0, 28696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OptSpecifier Id1, OptSpecifier Id2) const { 287c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines for (auto Arg : filtered(Id0, Id1, Id2)) { 288c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Arg->claim(); 289ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const auto &Values = Arg->getValues(); 290ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Output.append(Values.begin(), Values.end()); 29196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 29296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 29396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 29496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid ArgList::AddAllArgsTranslated(ArgStringList &Output, OptSpecifier Id0, 29596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const char *Translation, 29696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer bool Joined) const { 297c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines for (auto Arg: filtered(Id0)) { 298c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Arg->claim(); 29996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 30096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Joined) { 30196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Output.push_back(MakeArgString(StringRef(Translation) + 302c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Arg->getValue(0))); 30396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } else { 30496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Output.push_back(Translation); 305c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Output.push_back(Arg->getValue(0)); 30696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 30796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 30896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 30996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 31096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid ArgList::ClaimAllArgs(OptSpecifier Id0) const { 311c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines for (auto Arg : filtered(Id0)) 312c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Arg->claim(); 31396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 31496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 31596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid ArgList::ClaimAllArgs() const { 31696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (const_iterator it = begin(), ie = end(); it != ie; ++it) 31796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (!(*it)->isClaimed()) 31896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*it)->claim(); 31996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 32096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 32196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerconst char *ArgList::GetOrMakeJoinedArgString(unsigned Index, 32296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef LHS, 32396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef RHS) const { 32496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef Cur = getArgString(Index); 32596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Cur.size() == LHS.size() + RHS.size() && 32696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Cur.startswith(LHS) && Cur.endswith(RHS)) 32796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Cur.data(); 32896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 32996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return MakeArgString(LHS + RHS); 33096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 33196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 332f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid ArgList::print(raw_ostream &O) const { 333f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar for (Arg *A : *this) { 334f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar O << "* "; 335f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar A->print(O); 336f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar } 337f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 338f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 339f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarLLVM_DUMP_METHOD void ArgList::dump() const { print(dbgs()); } 340f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 34196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 34296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 343f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid InputArgList::releaseMemory() { 344f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar // An InputArgList always owns its arguments. 345f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar for (Arg *A : *this) 346f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar delete A; 347f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar} 348f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 34996a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerInputArgList::InputArgList(const char* const *ArgBegin, 35096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const char* const *ArgEnd) 35196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer : NumInputArgStrings(ArgEnd - ArgBegin) { 35296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer ArgStrings.append(ArgBegin, ArgEnd); 35396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 35496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 35596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerunsigned InputArgList::MakeIndex(StringRef String0) const { 35696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer unsigned Index = ArgStrings.size(); 35796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 35896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Tuck away so we have a reliable const char *. 359f73f80975639a7413bee66391556f7ea51f83423Reid Kleckner SynthesizedStrings.push_back(String0); 360f73f80975639a7413bee66391556f7ea51f83423Reid Kleckner ArgStrings.push_back(SynthesizedStrings.back().c_str()); 36196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 36296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Index; 36396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 36496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 36596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerunsigned InputArgList::MakeIndex(StringRef String0, 36696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef String1) const { 36796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer unsigned Index0 = MakeIndex(String0); 36896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer unsigned Index1 = MakeIndex(String1); 36996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer assert(Index0 + 1 == Index1 && "Unexpected non-consecutive indices!"); 37096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (void) Index1; 37196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Index0; 37296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 37396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 3744c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarconst char *InputArgList::MakeArgStringRef(StringRef Str) const { 37596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return getArgString(MakeIndex(Str)); 37696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 37796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 37896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 37996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 3804c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga NainarDerivedArgList::DerivedArgList(const InputArgList &BaseArgs) 3814c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar : BaseArgs(BaseArgs) {} 38296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 3834c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarconst char *DerivedArgList::MakeArgStringRef(StringRef Str) const { 38496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return BaseArgs.MakeArgString(Str); 38596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 38696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 387dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid DerivedArgList::AddSynthesizedArg(Arg *A) { 388dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SynthesizedArgs.push_back(std::unique_ptr<Arg>(A)); 389dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 390dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 39196a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *DerivedArgList::MakeFlagArg(const Arg *BaseArg, const Option Opt) const { 392c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines SynthesizedArgs.push_back( 393c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines make_unique<Arg>(Opt, MakeArgString(Opt.getPrefix() + Opt.getName()), 394c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines BaseArgs.MakeIndex(Opt.getName()), BaseArg)); 395dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return SynthesizedArgs.back().get(); 39696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 39796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 39896a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *DerivedArgList::MakePositionalArg(const Arg *BaseArg, const Option Opt, 39996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef Value) const { 40096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer unsigned Index = BaseArgs.MakeIndex(Value); 401c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines SynthesizedArgs.push_back( 402c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines make_unique<Arg>(Opt, MakeArgString(Opt.getPrefix() + Opt.getName()), 403c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Index, BaseArgs.getArgString(Index), BaseArg)); 404dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return SynthesizedArgs.back().get(); 40596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 40696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 40796a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *DerivedArgList::MakeSeparateArg(const Arg *BaseArg, const Option Opt, 40896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef Value) const { 40996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer unsigned Index = BaseArgs.MakeIndex(Opt.getName(), Value); 410c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines SynthesizedArgs.push_back( 411c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines make_unique<Arg>(Opt, MakeArgString(Opt.getPrefix() + Opt.getName()), 412c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Index, BaseArgs.getArgString(Index + 1), BaseArg)); 413dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return SynthesizedArgs.back().get(); 41496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 41596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 41696a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *DerivedArgList::MakeJoinedArg(const Arg *BaseArg, const Option Opt, 41796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef Value) const { 4180c7f116bb6950ef819323d855415b2f2b0aad987Pirama Arumuga Nainar unsigned Index = BaseArgs.MakeIndex((Opt.getName() + Value).str()); 419dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SynthesizedArgs.push_back(make_unique<Arg>( 420c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Opt, MakeArgString(Opt.getPrefix() + Opt.getName()), Index, 421c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines BaseArgs.getArgString(Index) + Opt.getName().size(), BaseArg)); 422dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return SynthesizedArgs.back().get(); 42396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 424