aboutsummaryrefslogtreecommitdiff
path: root/lib/Driver/Option.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-03 05:55:11 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-03 05:55:11 +0000
commit1eb4e64eed08837b85a375d6a953503daa844f07 (patch)
tree7819605d412cff4e48141ff4c87c869f0929f7c1 /lib/Driver/Option.cpp
parent2f3d01ee0d92f48110912b71dfe7da5158d0e4f7 (diff)
Sketch Driver Option classes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65933 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Option.cpp')
-rw-r--r--lib/Driver/Option.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/lib/Driver/Option.cpp b/lib/Driver/Option.cpp
new file mode 100644
index 0000000000..46b5c41555
--- /dev/null
+++ b/lib/Driver/Option.cpp
@@ -0,0 +1,89 @@
+//===--- Option.cpp - Abstract Driver Options ---------------------------*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Driver/Option.h"
+#include <cassert>
+using namespace clang;
+using namespace clang::driver;
+
+Option::Option(OptionClass _Kind, const char *_Name,
+ OptionGroup *_Group, Option *_Alias)
+ : Kind(_Kind), Name(_Name), Group(_Group), Alias(_Alias) {
+
+ // 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)) &&
+ "Multi-level aliases and aliases with groups are unsupported.");
+}
+
+bool Option::matches(const Option *Opt) const {
+ // Aliases are never considered in matching.
+ if (Opt->getAlias())
+ return matches(Opt->getAlias());
+ if (Alias)
+ return Alias->matches(Opt);
+
+ if (this == Opt)
+ return true;
+
+ if (Group)
+ return Group->matches(Opt);
+ return false;
+}
+
+OptionGroup::OptionGroup(const char *Name, OptionGroup *Group)
+ : Option(Option::GroupOption, Name, Group, 0) {
+}
+
+InputOption::InputOption()
+ : Option(Option::InputOption, "<input>", 0, 0) {
+}
+
+UnknownOption::UnknownOption()
+ : Option(Option::UnknownOption, "<unknown>", 0, 0) {
+}
+
+FlagOption::FlagOption(const char *Name, OptionGroup *Group, Option *Alias)
+ : Option(Option::FlagOption, Name, Group, Alias) {
+}
+
+
+JoinedOption::JoinedOption(const char *Name, OptionGroup *Group, Option *Alias)
+ : Option(Option::JoinedOption, Name, Group, Alias) {
+}
+
+CommaJoinedOption::CommaJoinedOption(const char *Name, OptionGroup *Group,
+ Option *Alias)
+ : Option(Option::CommaJoinedOption, Name, Group, Alias) {
+}
+
+SeparateOption::SeparateOption(const char *Name, OptionGroup *Group,
+ Option *Alias)
+ : Option(Option::SeparateOption, Name, Group, Alias) {
+}
+
+MultiArgOption::MultiArgOption(const char *Name, OptionGroup *Group,
+ Option *Alias, unsigned _NumArgs)
+ : Option(Option::MultiArgOption, Name, Group, Alias), NumArgs(_NumArgs) {
+}
+
+JoinedOrSeparateOption::JoinedOrSeparateOption(const char *Name,
+ OptionGroup *Group,
+ Option *Alias)
+ : Option(Option::JoinedOrSeparateOption, Name, Group, Alias) {
+}
+
+JoinedAndSeparateOption::JoinedAndSeparateOption(const char *Name,
+ OptionGroup *Group,
+ Option *Alias)
+ : Option(Option::JoinedAndSeparateOption, Name, Group, Alias) {
+}
+
+