diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-03-12 01:34:20 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-12 01:34:20 +0000 |
commit | cf0dd156e7b9d6a70b7290f5af9646859631bd9a (patch) | |
tree | bab5bd2d0e25d20b0fd728de7a8ed620538a873a | |
parent | d377522ba694e52128b419c98dabae7086ccf9c6 (diff) |
Driver: Add Option::getId and Option::matches taking an option
identifier; we will want to use the latter in situations where we just
want to check for a match, but not load options unnecessarily.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66757 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Driver/Option.h | 2 | ||||
-rw-r--r-- | lib/Driver/Option.cpp | 16 |
2 files changed, 18 insertions, 0 deletions
diff --git a/include/clang/Driver/Option.h b/include/clang/Driver/Option.h index 546f9561d8..3a4177afa6 100644 --- a/include/clang/Driver/Option.h +++ b/include/clang/Driver/Option.h @@ -88,6 +88,7 @@ namespace driver { public: virtual ~Option(); + options::ID getId() const { return ID; } OptionClass getKind() const { return Kind; } const char *getName() const { return Name; } const OptionGroup *getGroup() const { return Group; } @@ -124,6 +125,7 @@ namespace driver { /// matches - Predicate for whether this option is part of the /// given option (which may be a group). bool matches(const Option *Opt) const; + bool matches(options::ID Id) const; /// accept - Potentially accept the current argument, returning a /// new Arg instance, or 0 if the option does not accept this diff --git a/lib/Driver/Option.cpp b/lib/Driver/Option.cpp index f92e7aab26..7a74d34a86 100644 --- a/lib/Driver/Option.cpp +++ b/lib/Driver/Option.cpp @@ -86,6 +86,22 @@ bool Option::matches(const Option *Opt) const { return false; } +bool Option::matches(options::ID Id) const { + // FIXME: Decide what to do here; we should either pull out the + // handling of alias on the option for Id from the other matches, or + // find some other solution (which hopefully doesn't require using + // the option table). + if (Alias) + return Alias->matches(Id); + + if (ID == Id) + return true; + + if (Group) + return Group->matches(Id); + return false; +} + OptionGroup::OptionGroup(options::ID ID, const char *Name, const OptionGroup *Group) : Option(Option::GroupClass, ID, Name, Group, 0) { |