diff options
author | Michael J. Spencer <bigcheesegs@gmail.com> | 2012-10-19 22:36:40 +0000 |
---|---|---|
committer | Michael J. Spencer <bigcheesegs@gmail.com> | 2012-10-19 22:36:40 +0000 |
commit | fc790901d2e39e618b14582b7ba54adec19e2113 (patch) | |
tree | fceea50e2b026ef8a1db42ed5a77475a1cb7d291 /clang/lib/Driver/OptTable.cpp | |
parent | 1d19a2f25313d7f46bf725b1c8c29a586b490901 (diff) | |
download | bcm5719-llvm-fc790901d2e39e618b14582b7ba54adec19e2113.tar.gz bcm5719-llvm-fc790901d2e39e618b14582b7ba54adec19e2113.zip |
[Options] make Option a value type.
llvm-svn: 166347
Diffstat (limited to 'clang/lib/Driver/OptTable.cpp')
-rw-r--r-- | clang/lib/Driver/OptTable.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/clang/lib/Driver/OptTable.cpp b/clang/lib/Driver/OptTable.cpp index e108106fa7e..a1c5ecd8e60 100644 --- a/clang/lib/Driver/OptTable.cpp +++ b/clang/lib/Driver/OptTable.cpp @@ -11,6 +11,7 @@ #include "clang/Driver/Arg.h" #include "clang/Driver/ArgList.h" #include "clang/Driver/Option.h" +#include "clang/Driver/Options.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/ErrorHandling.h" #include <algorithm> @@ -78,23 +79,24 @@ OptSpecifier::OptSpecifier(const Option *Opt) : ID(Opt->getID()) {} // OptTable::OptTable(const Info *_OptionInfos, unsigned _NumOptionInfos) - : OptionInfos(_OptionInfos), NumOptionInfos(_NumOptionInfos), - Options(new Option*[NumOptionInfos]), - TheInputOption(0), TheUnknownOption(0), FirstSearchableIndex(0) + : OptionInfos(_OptionInfos), + NumOptionInfos(_NumOptionInfos), + TheInputOptionID(0), + TheUnknownOptionID(0), + FirstSearchableIndex(0) { // Explicitly zero initialize the error to work around a bug in array // value-initialization on MinGW with gcc 4.3.5. - memset(Options, 0, sizeof(*Options) * NumOptionInfos); // Find start of normal options. for (unsigned i = 0, e = getNumOptions(); i != e; ++i) { unsigned Kind = getInfo(i + 1).Kind; if (Kind == Option::InputClass) { - assert(!TheInputOption && "Cannot have multiple input options!"); - TheInputOption = getOption(i + 1); + assert(!TheInputOptionID && "Cannot have multiple input options!"); + TheInputOptionID = getInfo(i + 1).ID; } else if (Kind == Option::UnknownClass) { - assert(!TheUnknownOption && "Cannot have multiple input options!"); - TheUnknownOption = getOption(i + 1); + assert(!TheUnknownOptionID && "Cannot have multiple unknown options!"); + TheUnknownOptionID = getInfo(i + 1).ID; } else if (Kind != Option::GroupClass) { FirstSearchableIndex = i; break; @@ -115,8 +117,8 @@ OptTable::OptTable(const Info *_OptionInfos, unsigned _NumOptionInfos) // Check that options are in order. for (unsigned i = FirstSearchableIndex+1, e = getNumOptions(); i != e; ++i) { if (!(getInfo(i) < getInfo(i + 1))) { - getOption(i)->dump(); - getOption(i + 1)->dump(); + getOption(i).dump(); + getOption(i + 1).dump(); llvm_unreachable("Options are not in order!"); } } @@ -124,17 +126,18 @@ OptTable::OptTable(const Info *_OptionInfos, unsigned _NumOptionInfos) } OptTable::~OptTable() { - for (unsigned i = 0, e = getNumOptions(); i != e; ++i) - delete Options[i]; - delete[] Options; } -bool OptTable::isOptionHelpHidden(OptSpecifier id) const { - return getInfo(id).Flags & options::HelpHidden; +const Option OptTable::getOption(OptSpecifier Opt) const { + unsigned id = Opt.getID(); + if (id == 0) + return Option(0, 0); + assert((unsigned) (id - 1) < getNumOptions() && "Invalid ID."); + return Option(&getInfo(id), this); } -Option *OptTable::CreateOption(unsigned id) const { - return new Option(&getInfo(id), this); +bool OptTable::isOptionHelpHidden(OptSpecifier id) const { + return getInfo(id).Flags & options::HelpHidden; } Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index) const { @@ -143,7 +146,7 @@ Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index) const { // Anything that doesn't start with '-' is an input, as is '-' itself. if (Str[0] != '-' || Str[1] == '\0') - return new Arg(TheInputOption, Index++, Str); + return new Arg(getOption(TheInputOptionID), Index++, Str); const Info *Start = OptionInfos + FirstSearchableIndex; const Info *End = OptionInfos + getNumOptions(); @@ -169,7 +172,7 @@ Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index) const { break; // See if this option matches. - if (Arg *A = getOption(Start - OptionInfos + 1)->accept(Args, Index)) + if (Arg *A = getOption(Start - OptionInfos + 1).accept(Args, Index)) return A; // Otherwise, see if this argument was missing values. @@ -177,7 +180,7 @@ Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index) const { return 0; } - return new Arg(TheUnknownOption, Index++, Str); + return new Arg(getOption(TheUnknownOptionID), Index++, Str); } InputArgList *OptTable::ParseArgs(const char* const *ArgBegin, |