[cfe-commits] r165150 - in /cfe/trunk: include/clang/Driver/Option.h lib/Driver/OptTable.cpp lib/Driver/Option.cpp

Michael J. Spencer bigcheesegs at gmail.com
Wed Oct 3 12:58:10 PDT 2012


Author: mspencer
Date: Wed Oct  3 14:58:10 2012
New Revision: 165150

URL: http://llvm.org/viewvc/llvm-project?rev=165150&view=rev
Log:
[Options] Store the owning OptTable in Option so it can construct Group and Alias.

Modified:
    cfe/trunk/include/clang/Driver/Option.h
    cfe/trunk/lib/Driver/OptTable.cpp
    cfe/trunk/lib/Driver/Option.cpp

Modified: cfe/trunk/include/clang/Driver/Option.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Option.h?rev=165150&r1=165149&r2=165150&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/Option.h (original)
+++ cfe/trunk/include/clang/Driver/Option.h Wed Oct  3 14:58:10 2012
@@ -70,23 +70,17 @@
 
   private:
     const OptTable::Info *Info;
-
-    /// Group this option is a member of, if any.
-    const Option *Group;
-
-    /// Option that this is an alias for, if any.
-    const Option *Alias;
+    const OptTable *Owner;
 
   public:
-    Option(const OptTable::Info *Info,
-           const Option *Group, const Option *Alias);
+    Option(const OptTable::Info *Info, const OptTable *Owner);
     ~Option();
 
     unsigned getID() const { return Info->ID; }
     OptionClass getKind() const { return OptionClass(Info->Kind); }
     StringRef getName() const { return Info->Name; }
-    const Option *getGroup() const { return Group; }
-    const Option *getAlias() const { return Alias; }
+    const Option *getGroup() const { return Owner->getOption(Info->GroupID); }
+    const Option *getAlias() const { return Owner->getOption(Info->AliasID); }
 
     unsigned getNumArgs() const { return Info->Param; }
 
@@ -137,6 +131,7 @@
     /// getUnaliasedOption - Return the final option this option
     /// aliases (itself, if the option has no alias).
     const Option *getUnaliasedOption() const {
+      const Option *Alias = getAlias();
       if (Alias) return Alias->getUnaliasedOption();
       return this;
     }

Modified: cfe/trunk/lib/Driver/OptTable.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/OptTable.cpp?rev=165150&r1=165149&r2=165150&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/OptTable.cpp (original)
+++ cfe/trunk/lib/Driver/OptTable.cpp Wed Oct  3 14:58:10 2012
@@ -134,13 +134,7 @@
 }
 
 Option *OptTable::CreateOption(unsigned id) const {
-  const Info &info = getInfo(id);
-  const Option *Group = getOption(info.GroupID);
-  const Option *Alias = getOption(info.AliasID);
-
-  Option *Opt = new Option(&info, Group, Alias);
-
-  return Opt;
+  return new Option(&getInfo(id), this);
 }
 
 Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index) const {

Modified: cfe/trunk/lib/Driver/Option.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Option.cpp?rev=165150&r1=165149&r2=165150&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Option.cpp (original)
+++ cfe/trunk/lib/Driver/Option.cpp Wed Oct  3 14:58:10 2012
@@ -17,14 +17,13 @@
 #include <algorithm>
 using namespace clang::driver;
 
-Option::Option(const OptTable::Info *info,
-               const Option *_Group, const Option *_Alias)
-  : Info(info), Group(_Group), Alias(_Alias) {
+Option::Option(const OptTable::Info *info, const OptTable *owner)
+  : Info(info), Owner(owner) {
 
   // Multi-level aliases are not supported, and alias options cannot
   // have groups. This just simplifies option tracking, it is not an
   // inherent limitation.
-  assert((!Alias || (!Alias->Alias && !Group)) &&
+  assert((!getAlias() || (!getAlias()->getAlias() && !getGroup())) &&
          "Multi-level aliases and aliases with groups are unsupported.");
 }
 
@@ -50,11 +49,13 @@
 
   llvm::errs() << " Name:\"" << getName() << '"';
 
+  const Option *Group = getGroup();
   if (Group) {
     llvm::errs() << " Group:";
     Group->dump();
   }
 
+  const Option *Alias = getAlias();
   if (Alias) {
     llvm::errs() << " Alias:";
     Alias->dump();
@@ -68,6 +69,7 @@
 
 bool Option::matches(OptSpecifier Opt) const {
   // Aliases are never considered in matching, look through them.
+  const Option *Alias = getAlias();
   if (Alias)
     return Alias->matches(Opt);
 
@@ -75,6 +77,7 @@
   if (getID() == Opt.getID())
     return true;
 
+  const Option *Group = getGroup();
   if (Group)
     return Group->matches(Opt);
   return false;





More information about the cfe-commits mailing list