]> granicus.if.org Git - clang/commitdiff
Driver: Take option ID for {Input,Unknown}Option, to drop dependency on actual options.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 19 Nov 2009 04:25:06 +0000 (04:25 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 19 Nov 2009 04:25:06 +0000 (04:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89312 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Option.h
lib/Driver/OptTable.cpp
lib/Driver/Option.cpp

index 5daeef942ebfba5f60c3831f85a911d57237dc2c..08b94b1d797ddf85c4f2cc88ded058e522b505be 100644 (file)
@@ -177,7 +177,7 @@ namespace driver {
   /// InputOption - Dummy option class for representing driver inputs.
   class InputOption : public Option {
   public:
-    InputOption();
+    InputOption(OptSpecifier ID);
 
     virtual Arg *accept(const InputArgList &Args, unsigned &Index) const;
 
@@ -190,7 +190,7 @@ namespace driver {
   /// UnknownOption - Dummy option class for represent unknown arguments.
   class UnknownOption : public Option {
   public:
-    UnknownOption();
+    UnknownOption(OptSpecifier ID);
 
     virtual Arg *accept(const InputArgList &Args, unsigned &Index) const;
 
index fae7f75f378a2d052dabe8c599664c3637a491dc..890907b2a7300da22cbd9a221874ab27cdbbcff6 100644 (file)
@@ -136,9 +136,9 @@ Option *OptTable::CreateOption(unsigned id) const {
   Option *Opt = 0;
   switch (info.Kind) {
   case Option::InputClass:
-    Opt = new InputOption(); break;
+    Opt = new InputOption(id); break;
   case Option::UnknownClass:
-    Opt = new UnknownOption(); break;
+    Opt = new UnknownOption(id); break;
   case Option::GroupClass:
     Opt = new OptionGroup(id, info.Name, Group); break;
   case Option::FlagClass:
@@ -188,7 +188,7 @@ Arg *OptTable::ParseOneArg(const InputArgList &Args, unsigned &Index) const {
     return new PositionalArg(TheInputOption, Index++);
 
   const Info *Start = OptionInfos + FirstSearchableIndex;
-  const Info *End = OptionInfos + LastOption - 1;
+  const Info *End = OptionInfos + getNumOptions();
 
   // Search for the first next option which could be a prefix.
   Start = std::lower_bound(Start, End, Str);
@@ -210,8 +210,7 @@ Arg *OptTable::ParseOneArg(const InputArgList &Args, unsigned &Index) const {
       break;
 
     // See if this option matches.
-    options::ID id = (options::ID) (Start - OptionInfos + 1);
-    if (Arg *A = getOption(id)->accept(Args, Index))
+    if (Arg *A = getOption(Start - OptionInfos + 1)->accept(Args, Index))
       return A;
 
     // Otherwise, see if this argument was missing values.
index 89e99999cfb8bb77051eee9cef241c16c7c880e4..17d00f50aa6f21e293e9d2b82ee7e4f58a54c7e9 100644 (file)
@@ -94,8 +94,8 @@ Arg *OptionGroup::accept(const InputArgList &Args, unsigned &Index) const {
   return 0;
 }
 
-InputOption::InputOption()
-  : Option(Option::InputClass, options::OPT_INPUT, "<input>", 0, 0) {
+InputOption::InputOption(OptSpecifier ID)
+  : Option(Option::InputClass, ID, "<input>", 0, 0) {
 }
 
 Arg *InputOption::accept(const InputArgList &Args, unsigned &Index) const {
@@ -103,8 +103,8 @@ Arg *InputOption::accept(const InputArgList &Args, unsigned &Index) const {
   return 0;
 }
 
-UnknownOption::UnknownOption()
-  : Option(Option::UnknownClass, options::OPT_UNKNOWN, "<unknown>", 0, 0) {
+UnknownOption::UnknownOption(OptSpecifier ID)
+  : Option(Option::UnknownClass, ID, "<unknown>", 0, 0) {
 }
 
 Arg *UnknownOption::accept(const InputArgList &Args, unsigned &Index) const {