blob: 46b5c41555bb74ff90333db6df33116d3c00acca [file] [log] [blame]
Daniel Dunbar1eb4e642009-03-03 05:55:11 +00001//===--- Option.cpp - Abstract Driver Options ---------------------------*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "clang/Driver/Option.h"
11#include <cassert>
12using namespace clang;
13using namespace clang::driver;
14
15Option::Option(OptionClass _Kind, const char *_Name,
16 OptionGroup *_Group, Option *_Alias)
17 : Kind(_Kind), Name(_Name), Group(_Group), Alias(_Alias) {
18
19 // Multi-level aliases are not supported, and alias options cannot
20 // have groups. This just simplifies option tracking, it is not an
21 // inherent limitation.
22 assert((!Alias || (!Alias->Alias && !Group)) &&
23 "Multi-level aliases and aliases with groups are unsupported.");
24}
25
26bool Option::matches(const Option *Opt) const {
27 // Aliases are never considered in matching.
28 if (Opt->getAlias())
29 return matches(Opt->getAlias());
30 if (Alias)
31 return Alias->matches(Opt);
32
33 if (this == Opt)
34 return true;
35
36 if (Group)
37 return Group->matches(Opt);
38 return false;
39}
40
41OptionGroup::OptionGroup(const char *Name, OptionGroup *Group)
42 : Option(Option::GroupOption, Name, Group, 0) {
43}
44
45InputOption::InputOption()
46 : Option(Option::InputOption, "<input>", 0, 0) {
47}
48
49UnknownOption::UnknownOption()
50 : Option(Option::UnknownOption, "<unknown>", 0, 0) {
51}
52
53FlagOption::FlagOption(const char *Name, OptionGroup *Group, Option *Alias)
54 : Option(Option::FlagOption, Name, Group, Alias) {
55}
56
57
58JoinedOption::JoinedOption(const char *Name, OptionGroup *Group, Option *Alias)
59 : Option(Option::JoinedOption, Name, Group, Alias) {
60}
61
62CommaJoinedOption::CommaJoinedOption(const char *Name, OptionGroup *Group,
63 Option *Alias)
64 : Option(Option::CommaJoinedOption, Name, Group, Alias) {
65}
66
67SeparateOption::SeparateOption(const char *Name, OptionGroup *Group,
68 Option *Alias)
69 : Option(Option::SeparateOption, Name, Group, Alias) {
70}
71
72MultiArgOption::MultiArgOption(const char *Name, OptionGroup *Group,
73 Option *Alias, unsigned _NumArgs)
74 : Option(Option::MultiArgOption, Name, Group, Alias), NumArgs(_NumArgs) {
75}
76
77JoinedOrSeparateOption::JoinedOrSeparateOption(const char *Name,
78 OptionGroup *Group,
79 Option *Alias)
80 : Option(Option::JoinedOrSeparateOption, Name, Group, Alias) {
81}
82
83JoinedAndSeparateOption::JoinedAndSeparateOption(const char *Name,
84 OptionGroup *Group,
85 Option *Alias)
86 : Option(Option::JoinedAndSeparateOption, Name, Group, Alias) {
87}
88
89