diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-03-03 05:55:11 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-03 05:55:11 +0000 |
commit | b2da9339899ee2f91531880b47eb098578326390 (patch) | |
tree | 9e5f4a033c0f6666b4e6e02e802b28fa38faca0b /clang/lib/Driver/Option.cpp | |
parent | 9ad72691c308746d37c04ef299cc450faed7b188 (diff) | |
download | bcm5719-llvm-b2da9339899ee2f91531880b47eb098578326390.tar.gz bcm5719-llvm-b2da9339899ee2f91531880b47eb098578326390.zip |
Sketch Driver Option classes.
llvm-svn: 65933
Diffstat (limited to 'clang/lib/Driver/Option.cpp')
-rw-r--r-- | clang/lib/Driver/Option.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/clang/lib/Driver/Option.cpp b/clang/lib/Driver/Option.cpp new file mode 100644 index 00000000000..46b5c41555b --- /dev/null +++ b/clang/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) { +} + + |