[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