Driver: Fix arg_iterator typing to reflect that it is really an iterator over Arg*s.

llvm-svn: 105838
This commit is contained in:
Daniel Dunbar 2010-06-11 22:00:13 +00:00
parent 70883c32ec
commit a442fd5da6
5 changed files with 55 additions and 51 deletions

View File

@ -52,9 +52,9 @@ namespace driver {
void SkipToNextArg();
public:
typedef const Arg* value_type;
typedef const Arg* reference;
typedef const Arg* pointer;
typedef Arg * const * value_type;
typedef Arg * const & reference;
typedef Arg * const * pointer;
typedef std::forward_iterator_tag iterator_category;
typedef std::ptrdiff_t difference_type;
@ -67,7 +67,7 @@ namespace driver {
operator const Arg*() { return *Current; }
reference operator*() const { return *Current; }
pointer operator->() const { return *Current; }
pointer operator->() const { return Current; }
arg_iterator &operator++() {
++Current;

View File

@ -147,8 +147,8 @@ 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);
(*it)->claim();
(*it)->render(*this, Output);
}
}
@ -156,9 +156,9 @@ 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(*this, i));
(*it)->claim();
for (unsigned i = 0, e = (*it)->getNumValues(); i != e; ++i)
Output.push_back((*it)->getValue(*this, i));
}
}
@ -167,14 +167,14 @@ void ArgList::AddAllArgsTranslated(ArgStringList &Output, OptSpecifier Id0,
bool Joined) const {
for (arg_iterator it = filtered_begin(Id0),
ie = filtered_end(); it != ie; ++it) {
it->claim();
(*it)->claim();
if (Joined) {
Output.push_back(MakeArgString(llvm::StringRef(Translation) +
it->getValue(*this, 0)));
(*it)->getValue(*this, 0)));
} else {
Output.push_back(Translation);
Output.push_back(it->getValue(*this, 0));
Output.push_back((*it)->getValue(*this, 0));
}
}
}
@ -182,7 +182,7 @@ void ArgList::AddAllArgsTranslated(ArgStringList &Output, OptSpecifier Id0,
void ArgList::ClaimAllArgs(OptSpecifier Id0) const {
for (arg_iterator it = filtered_begin(Id0),
ie = filtered_end(); it != ie; ++it)
it->claim();
(*it)->claim();
}
const char *ArgList::MakeArgString(const llvm::Twine &T) const {

View File

@ -157,18 +157,18 @@ void Clang::AddPreprocessingOptions(const Driver &D,
for (arg_iterator it = Args.filtered_begin(options::OPT_MT,
options::OPT_MQ),
ie = Args.filtered_end(); it != ie; ++it) {
const Arg *A = *it;
A->claim();
it->claim();
if (it->getOption().matches(options::OPT_MQ)) {
if (A->getOption().matches(options::OPT_MQ)) {
CmdArgs.push_back("-MT");
llvm::SmallString<128> Quoted;
QuoteTarget(it->getValue(Args), Quoted);
QuoteTarget(A->getValue(Args), Quoted);
CmdArgs.push_back(Args.MakeArgString(Quoted));
// -MT flag - no change
} else {
it->render(Args, CmdArgs);
A->render(Args, CmdArgs);
}
}
@ -639,8 +639,8 @@ void Clang::AddX86TargetArgs(const ArgList &Args,
for (arg_iterator it = Args.filtered_begin(options::OPT_m_x86_Features_Group),
ie = Args.filtered_end(); it != ie; ++it) {
llvm::StringRef Name = it->getOption().getName();
it->claim();
llvm::StringRef Name = (*it)->getOption().getName();
(*it)->claim();
// Skip over "-m".
assert(Name.startswith("-m") && "Invalid feature name.");
@ -1428,14 +1428,14 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddAllArgValues(CmdArgs, options::OPT_Xclang);
for (arg_iterator it = Args.filtered_begin(options::OPT_mllvm),
ie = Args.filtered_end(); it != ie; ++it) {
it->claim();
(*it)->claim();
// We translate this by hand to the -cc1 argument, since nightly test uses
// it and developers have been trained to spell it with -mllvm.
if (llvm::StringRef(it->getValue(Args, 0)) == "-disable-llvm-optzns")
if (llvm::StringRef((*it)->getValue(Args, 0)) == "-disable-llvm-optzns")
CmdArgs.push_back("-disable-llvm-optzns");
else
it->render(Args, CmdArgs);
(*it)->render(Args, CmdArgs);
}
if (Output.getType() == types::TY_Dependencies) {
@ -1492,8 +1492,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// we are allowing compilation to continue.
for (arg_iterator it = Args.filtered_begin(options::OPT_pg),
ie = Args.filtered_end(); it != ie; ++it) {
it->claim();
D.Diag(clang::diag::warn_drv_clang_unsupported) << it->getAsString(Args);
(*it)->claim();
D.Diag(clang::diag::warn_drv_clang_unsupported) << (*it)->getAsString(Args);
}
// Claim some arguments which clang supports automatically.
@ -1860,10 +1860,10 @@ void darwin::CC1::AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
for (arg_iterator it = Args.filtered_begin(options::OPT_f_Group,
options::OPT_fsyntax_only),
ie = Args.filtered_end(); it != ie; ++it) {
if (!it->getOption().matches(options::OPT_fbuiltin_strcat) &&
!it->getOption().matches(options::OPT_fbuiltin_strcpy)) {
it->claim();
it->render(Args, CmdArgs);
if (!(*it)->getOption().matches(options::OPT_fbuiltin_strcat) &&
!(*it)->getOption().matches(options::OPT_fbuiltin_strcpy)) {
(*it)->claim();
(*it)->render(Args, CmdArgs);
}
}
} else

View File

@ -1092,33 +1092,34 @@ static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args) {
// Add -I... and -F... options in order.
for (arg_iterator it = Args.filtered_begin(OPT_I, OPT_F),
ie = Args.filtered_end(); it != ie; ++it)
Opts.AddPath(it->getValue(Args), frontend::Angled, true,
/*IsFramework=*/ it->getOption().matches(OPT_F));
Opts.AddPath((*it)->getValue(Args), frontend::Angled, true,
/*IsFramework=*/ (*it)->getOption().matches(OPT_F));
// Add -iprefix/-iwith-prefix/-iwithprefixbefore options.
llvm::StringRef Prefix = ""; // FIXME: This isn't the correct default prefix.
for (arg_iterator it = Args.filtered_begin(OPT_iprefix, OPT_iwithprefix,
OPT_iwithprefixbefore),
ie = Args.filtered_end(); it != ie; ++it) {
if (it->getOption().matches(OPT_iprefix))
Prefix = it->getValue(Args);
else if (it->getOption().matches(OPT_iwithprefix))
Opts.AddPath(Prefix.str() + it->getValue(Args),
const Arg *A = *it;
if (A->getOption().matches(OPT_iprefix))
Prefix = A->getValue(Args);
else if (A->getOption().matches(OPT_iwithprefix))
Opts.AddPath(Prefix.str() + A->getValue(Args),
frontend::System, false, false);
else
Opts.AddPath(Prefix.str() + it->getValue(Args),
Opts.AddPath(Prefix.str() + A->getValue(Args),
frontend::Angled, false, false);
}
for (arg_iterator it = Args.filtered_begin(OPT_idirafter),
ie = Args.filtered_end(); it != ie; ++it)
Opts.AddPath(it->getValue(Args), frontend::After, true, false);
Opts.AddPath((*it)->getValue(Args), frontend::After, true, false);
for (arg_iterator it = Args.filtered_begin(OPT_iquote),
ie = Args.filtered_end(); it != ie; ++it)
Opts.AddPath(it->getValue(Args), frontend::Quoted, true, false);
Opts.AddPath((*it)->getValue(Args), frontend::Quoted, true, false);
for (arg_iterator it = Args.filtered_begin(OPT_isystem),
ie = Args.filtered_end(); it != ie; ++it)
Opts.AddPath(it->getValue(Args), frontend::System, true, false);
Opts.AddPath((*it)->getValue(Args), frontend::System, true, false);
// FIXME: Need options for the various environment variables!
}
@ -1325,10 +1326,10 @@ static void ParsePreprocessorArgs(PreprocessorOptions &Opts, ArgList &Args,
// Add macros from the command line.
for (arg_iterator it = Args.filtered_begin(OPT_D, OPT_U),
ie = Args.filtered_end(); it != ie; ++it) {
if (it->getOption().matches(OPT_D))
Opts.addMacroDef(it->getValue(Args));
if ((*it)->getOption().matches(OPT_D))
Opts.addMacroDef((*it)->getValue(Args));
else
Opts.addMacroUndef(it->getValue(Args));
Opts.addMacroUndef((*it)->getValue(Args));
}
Opts.MacroIncludes = Args.getAllArgValues(OPT_imacros);
@ -1337,16 +1338,17 @@ static void ParsePreprocessorArgs(PreprocessorOptions &Opts, ArgList &Args,
for (arg_iterator it = Args.filtered_begin(OPT_include, OPT_include_pch,
OPT_include_pth),
ie = Args.filtered_end(); it != ie; ++it) {
const Arg *A = *it;
// PCH is handled specially, we need to extra the original include path.
if (it->getOption().matches(OPT_include_pch)) {
if (A->getOption().matches(OPT_include_pch)) {
std::string OriginalFile =
PCHReader::getOriginalSourceFile(it->getValue(Args), Diags);
PCHReader::getOriginalSourceFile(A->getValue(Args), Diags);
if (OriginalFile.empty())
continue;
Opts.Includes.push_back(OriginalFile);
} else
Opts.Includes.push_back(it->getValue(Args));
Opts.Includes.push_back(A->getValue(Args));
}
// Include 'altivec.h' if -faltivec option present
@ -1355,11 +1357,12 @@ static void ParsePreprocessorArgs(PreprocessorOptions &Opts, ArgList &Args,
for (arg_iterator it = Args.filtered_begin(OPT_remap_file),
ie = Args.filtered_end(); it != ie; ++it) {
const Arg *A = *it;
std::pair<llvm::StringRef,llvm::StringRef> Split =
llvm::StringRef(it->getValue(Args)).split(';');
llvm::StringRef(A->getValue(Args)).split(';');
if (Split.second.empty()) {
Diags.Report(diag::err_drv_invalid_remap_file) << it->getAsString(Args);
Diags.Report(diag::err_drv_invalid_remap_file) << A->getAsString(Args);
continue;
}
@ -1414,7 +1417,7 @@ void CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
// Issue errors on unknown arguments.
for (arg_iterator it = Args->filtered_begin(OPT_UNKNOWN),
ie = Args->filtered_end(); it != ie; ++it)
Diags.Report(diag::err_drv_unknown_argument) << it->getAsString(*Args);
Diags.Report(diag::err_drv_unknown_argument) << (*it)->getAsString(*Args);
ParseAnalyzerArgs(Res.getAnalyzerOpts(), *Args, Diags);
ParseCodeGenArgs(Res.getCodeGenOpts(), *Args, Diags);

View File

@ -136,7 +136,7 @@ void AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
// Issue errors on unknown arguments.
for (arg_iterator it = Args->filtered_begin(cc1asoptions::OPT_UNKNOWN),
ie = Args->filtered_end(); it != ie; ++it)
Diags.Report(diag::err_drv_unknown_argument) << it->getAsString(*Args);
Diags.Report(diag::err_drv_unknown_argument) << (*it) ->getAsString(*Args);
// Construct the invocation.
@ -154,10 +154,11 @@ void AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
bool First = true;
for (arg_iterator it = Args->filtered_begin(OPT_INPUT),
ie = Args->filtered_end(); it != ie; ++it, First=false) {
const Arg *A = it;
if (First)
Opts.InputFile = it->getValue(*Args);
Opts.InputFile = A->getValue(*Args);
else
Diags.Report(diag::err_drv_unknown_argument) << it->getAsString(*Args);
Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(*Args);
}
}
Opts.LLVMArgs = Args->getAllArgValues(OPT_mllvm);