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 | 1eb4e64eed08837b85a375d6a953503daa844f07 (patch) | |
tree | 7819605d412cff4e48141ff4c87c869f0929f7c1 /lib/Driver/Option.cpp | |
parent | 2f3d01ee0d92f48110912b71dfe7da5158d0e4f7 (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.cpp | 89 |
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) { +} + + |