diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-03-04 21:53:04 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-04 21:53:04 +0000 |
commit | a59194cd10ecb821f92877aff2d9c9a6fc2b47d3 (patch) | |
tree | aaad047f8e408e9f7e04af7a4e1b8b05f5e530ff /clang/lib | |
parent | 07e85f3fc593b7c1be31ea23c6bdf3241380cef3 (diff) | |
download | bcm5719-llvm-a59194cd10ecb821f92877aff2d9c9a6fc2b47d3.tar.gz bcm5719-llvm-a59194cd10ecb821f92877aff2d9c9a6fc2b47d3.zip |
Driver: Option's need to know their ID.
- Also, add Input and Unknown opts to OptTable.
llvm-svn: 66079
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Driver/OptTable.cpp | 29 | ||||
-rw-r--r-- | clang/lib/Driver/Option.cpp | 52 |
2 files changed, 46 insertions, 35 deletions
diff --git a/clang/lib/Driver/OptTable.cpp b/clang/lib/Driver/OptTable.cpp index 335d7720bfa..070c12e154f 100644 --- a/clang/lib/Driver/OptTable.cpp +++ b/clang/lib/Driver/OptTable.cpp @@ -26,6 +26,11 @@ struct Info { }; static Info OptionInfos[] = { + // The InputOption info + { Option::InputClass, "<input>", 0, 0, "", 0 }, + // The UnknownOption info + { Option::UnknownClass, "<unknown>", 0, 0, "", 0 }, + #define OPTION(ID, KIND, NAME, GROUP, ALIAS, FLAGS, PARAM) \ { Option::KIND##Class, NAME, GROUP, ALIAS, FLAGS, PARAM }, #include "clang/Driver/Options.def" @@ -55,7 +60,7 @@ const char *OptTable::getOptionName(options::ID id) const { } const Option *OptTable::getOption(options::ID id) const { - if (id == 0) + if (id == NotOption) return 0; assert((unsigned) (id - 1) < numOptions && "Invalid ID."); @@ -75,24 +80,26 @@ Option *OptTable::constructOption(options::ID id) const { Option *Opt = 0; switch (info.Kind) { - default: - assert(0 && "Invalid option kind."); + case Option::InputClass: + Opt = new InputOption(); break; + case Option::UnknownClass: + Opt = new UnknownOption(); break; case Option::GroupClass: - Opt = new OptionGroup(info.Name, Group); break; + Opt = new OptionGroup(id, info.Name, Group); break; case Option::FlagClass: - Opt = new FlagOption(info.Name, Group, Alias); break; + Opt = new FlagOption(id, info.Name, Group, Alias); break; case Option::JoinedClass: - Opt = new JoinedOption(info.Name, Group, Alias); break; + Opt = new JoinedOption(id, info.Name, Group, Alias); break; case Option::SeparateClass: - Opt = new SeparateOption(info.Name, Group, Alias); break; + Opt = new SeparateOption(id, info.Name, Group, Alias); break; case Option::CommaJoinedClass: - Opt = new CommaJoinedOption(info.Name, Group, Alias); break; + Opt = new CommaJoinedOption(id, info.Name, Group, Alias); break; case Option::MultiArgClass: - Opt = new MultiArgOption(info.Name, Group, Alias, info.Param); break; + Opt = new MultiArgOption(id, info.Name, Group, Alias, info.Param); break; case Option::JoinedOrSeparateClass: - Opt = new JoinedOrSeparateOption(info.Name, Group, Alias); break; + Opt = new JoinedOrSeparateOption(id, info.Name, Group, Alias); break; case Option::JoinedAndSeparateClass: - Opt = new JoinedAndSeparateOption(info.Name, Group, Alias); break; + Opt = new JoinedAndSeparateOption(id, info.Name, Group, Alias); break; } for (const char *s = info.Flags; *s; ++s) { diff --git a/clang/lib/Driver/Option.cpp b/clang/lib/Driver/Option.cpp index 368f004b602..583650f63ba 100644 --- a/clang/lib/Driver/Option.cpp +++ b/clang/lib/Driver/Option.cpp @@ -13,9 +13,9 @@ using namespace clang; using namespace clang::driver; -Option::Option(OptionClass _Kind, const char *_Name, +Option::Option(OptionClass _Kind, options::ID _ID, const char *_Name, const OptionGroup *_Group, const Option *_Alias) - : Kind(_Kind), Name(_Name), Group(_Group), Alias(_Alias), + : Kind(_Kind), ID(_ID), Name(_Name), Group(_Group), Alias(_Alias), Unsupported(false), LinkerInput(false), NoOptAsInput(false), ForceSeparateRender(false), ForceJoinedRender(false) { @@ -82,8 +82,9 @@ bool Option::matches(const Option *Opt) const { return false; } -OptionGroup::OptionGroup(const char *Name, const OptionGroup *Group) - : Option(Option::GroupClass, Name, Group, 0) { +OptionGroup::OptionGroup(options::ID ID, const char *Name, + const OptionGroup *Group) + : Option(Option::GroupClass, ID, Name, Group, 0) { } Arg *OptionGroup::accept(const ArgList &Args, unsigned &Index) const { @@ -92,7 +93,7 @@ Arg *OptionGroup::accept(const ArgList &Args, unsigned &Index) const { } InputOption::InputOption() - : Option(Option::InputClass, "<input>", 0, 0) { + : Option(Option::InputClass, options::InputOpt, "<input>", 0, 0) { } Arg *InputOption::accept(const ArgList &Args, unsigned &Index) const { @@ -101,7 +102,7 @@ Arg *InputOption::accept(const ArgList &Args, unsigned &Index) const { } UnknownOption::UnknownOption() - : Option(Option::UnknownClass, "<unknown>", 0, 0) { + : Option(Option::UnknownClass, options::UnknownOpt, "<unknown>", 0, 0) { } Arg *UnknownOption::accept(const ArgList &Args, unsigned &Index) const { @@ -109,9 +110,9 @@ Arg *UnknownOption::accept(const ArgList &Args, unsigned &Index) const { return 0; } -FlagOption::FlagOption(const char *Name, const OptionGroup *Group, - const Option *Alias) - : Option(Option::FlagClass, Name, Group, Alias) { +FlagOption::FlagOption(options::ID ID, const char *Name, + const OptionGroup *Group, const Option *Alias) + : Option(Option::FlagClass, ID, Name, Group, Alias) { } Arg *FlagOption::accept(const ArgList &Args, unsigned &Index) const { @@ -119,9 +120,9 @@ Arg *FlagOption::accept(const ArgList &Args, unsigned &Index) const { return 0; } -JoinedOption::JoinedOption(const char *Name, const OptionGroup *Group, - const Option *Alias) - : Option(Option::JoinedClass, Name, Group, Alias) { +JoinedOption::JoinedOption(options::ID ID, const char *Name, + const OptionGroup *Group, const Option *Alias) + : Option(Option::JoinedClass, ID, Name, Group, Alias) { } Arg *JoinedOption::accept(const ArgList &Args, unsigned &Index) const { @@ -129,9 +130,10 @@ Arg *JoinedOption::accept(const ArgList &Args, unsigned &Index) const { return 0; } -CommaJoinedOption::CommaJoinedOption(const char *Name, const OptionGroup *Group, +CommaJoinedOption::CommaJoinedOption(options::ID ID, const char *Name, + const OptionGroup *Group, const Option *Alias) - : Option(Option::CommaJoinedClass, Name, Group, Alias) { + : Option(Option::CommaJoinedClass, ID, Name, Group, Alias) { } Arg *CommaJoinedOption::accept(const ArgList &Args, unsigned &Index) const { @@ -139,9 +141,9 @@ Arg *CommaJoinedOption::accept(const ArgList &Args, unsigned &Index) const { return 0; } -SeparateOption::SeparateOption(const char *Name, const OptionGroup *Group, - const Option *Alias) - : Option(Option::SeparateClass, Name, Group, Alias) { +SeparateOption::SeparateOption(options::ID ID, const char *Name, + const OptionGroup *Group, const Option *Alias) + : Option(Option::SeparateClass, ID, Name, Group, Alias) { } Arg *SeparateOption::accept(const ArgList &Args, unsigned &Index) const { @@ -149,9 +151,10 @@ Arg *SeparateOption::accept(const ArgList &Args, unsigned &Index) const { return 0; } -MultiArgOption::MultiArgOption(const char *Name, const OptionGroup *Group, - const Option *Alias, unsigned _NumArgs) - : Option(Option::MultiArgClass, Name, Group, Alias), NumArgs(_NumArgs) { +MultiArgOption::MultiArgOption(options::ID ID, const char *Name, + const OptionGroup *Group, const Option *Alias, + unsigned _NumArgs) + : Option(Option::MultiArgClass, ID, Name, Group, Alias), NumArgs(_NumArgs) { } Arg *MultiArgOption::accept(const ArgList &Args, unsigned &Index) const { @@ -159,10 +162,10 @@ Arg *MultiArgOption::accept(const ArgList &Args, unsigned &Index) const { return 0; } -JoinedOrSeparateOption::JoinedOrSeparateOption(const char *Name, +JoinedOrSeparateOption::JoinedOrSeparateOption(options::ID ID, const char *Name, const OptionGroup *Group, const Option *Alias) - : Option(Option::JoinedOrSeparateClass, Name, Group, Alias) { + : Option(Option::JoinedOrSeparateClass, ID, Name, Group, Alias) { } Arg *JoinedOrSeparateOption::accept(const ArgList &Args, unsigned &Index) const { @@ -170,10 +173,11 @@ Arg *JoinedOrSeparateOption::accept(const ArgList &Args, unsigned &Index) const return 0; } -JoinedAndSeparateOption::JoinedAndSeparateOption(const char *Name, +JoinedAndSeparateOption::JoinedAndSeparateOption(options::ID ID, + const char *Name, const OptionGroup *Group, const Option *Alias) - : Option(Option::JoinedAndSeparateClass, Name, Group, Alias) { + : Option(Option::JoinedAndSeparateClass, ID, Name, Group, Alias) { } Arg *JoinedAndSeparateOption::accept(const ArgList &Args, unsigned &Index) const { |