1c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//===- Option.h - Abstract Driver Options -----------------------*- C++ -*-===// 2c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// 3c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// The LLVM Compiler Infrastructure 4c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// 5c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// This file is distributed under the University of Illinois Open Source 6c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// License. See LICENSE.TXT for details. 7c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// 8c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//===----------------------------------------------------------------------===// 9c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 10c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#ifndef LLVM_OPTION_OPTION_H 11c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#define LLVM_OPTION_OPTION_H 12c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 13c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/ADT/SmallVector.h" 14c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/ADT/StringRef.h" 15c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/Option/OptSpecifier.h" 16c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/Option/OptTable.h" 17c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/Support/ErrorHandling.h" 18c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include <cassert> 19c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include <string> 20c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 21c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotnamespace llvm { 22c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 23c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotclass raw_ostream; 24c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 25c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotnamespace opt { 26c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 27c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotclass Arg; 28c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotclass ArgList; 29c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 30c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// ArgStringList - Type used for constructing argv lists for subprocesses. 31c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotusing ArgStringList = SmallVector<const char *, 16>; 32c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 33c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// Base flags for all options. Custom flags may be added after. 34c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotenum DriverFlag { 35c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot HelpHidden = (1 << 0), 36c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RenderAsInput = (1 << 1), 37c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RenderJoined = (1 << 2), 38c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RenderSeparate = (1 << 3) 39c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot}; 40c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 41c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// Option - Abstract representation for a single form of driver 42c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// argument. 43c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// 44c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// An Option class represents a form of option that the driver 45c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// takes, for example how many arguments the option has and how 46c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// they can be provided. Individual option instances store 47c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// additional information about what group the option is a member 48c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// of (if any), if the option is an alias, and a number of 49c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// flags. At runtime the driver parses the command line into 50c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// concrete Arg instances, each of which corresponds to a 51c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// particular Option instance. 52c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotclass Option { 53c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotpublic: 54c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot enum OptionClass { 55c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot GroupClass = 0, 56c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot InputClass, 57c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot UnknownClass, 58c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot FlagClass, 59c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot JoinedClass, 60c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot ValuesClass, 61c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot SeparateClass, 62c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RemainingArgsClass, 63c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RemainingArgsJoinedClass, 64c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot CommaJoinedClass, 65c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot MultiArgClass, 66c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot JoinedOrSeparateClass, 67c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot JoinedAndSeparateClass 68c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot }; 69c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 70c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot enum RenderStyleKind { 71c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RenderCommaJoinedStyle, 72c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RenderJoinedStyle, 73c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RenderSeparateStyle, 74c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RenderValuesStyle 75c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot }; 76c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 77c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotprotected: 78c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot const OptTable::Info *Info; 79c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot const OptTable *Owner; 80c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 81c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotpublic: 82c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot Option(const OptTable::Info *Info, const OptTable *Owner); 83c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 84c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot bool isValid() const { 85c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Info != nullptr; 86c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 87c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 88c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot unsigned getID() const { 89c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert(Info && "Must have a valid info!"); 90c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Info->ID; 91c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 92c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 93c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot OptionClass getKind() const { 94c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert(Info && "Must have a valid info!"); 95c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return OptionClass(Info->Kind); 96c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 97c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 98c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// \brief Get the name of this option without any prefix. 99c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot StringRef getName() const { 100c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert(Info && "Must have a valid info!"); 101c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Info->Name; 102c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 103c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 104c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot const Option getGroup() const { 105c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert(Info && "Must have a valid info!"); 106c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert(Owner && "Must have a valid owner!"); 107c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Owner->getOption(Info->GroupID); 108c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 109c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 110c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot const Option getAlias() const { 111c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert(Info && "Must have a valid info!"); 112c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert(Owner && "Must have a valid owner!"); 113c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Owner->getOption(Info->AliasID); 114c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 115c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 116c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// \brief Get the alias arguments as a \0 separated list. 117c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// E.g. ["foo", "bar"] would be returned as "foo\0bar\0". 118c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot const char *getAliasArgs() const { 119c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert(Info && "Must have a valid info!"); 120c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot assert((!Info->AliasArgs || Info->AliasArgs[0] != 0) && 121c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot "AliasArgs should be either 0 or non-empty."); 122c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 123c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Info->AliasArgs; 124c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 125c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 126c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// \brief Get the default prefix for this option. 127c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot StringRef getPrefix() const { 128c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot const char *Prefix = *Info->Prefixes; 129c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Prefix ? Prefix : StringRef(); 130c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 131c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 132c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// \brief Get the name of this option with the default prefix. 133c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot std::string getPrefixedName() const { 134c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot std::string Ret = getPrefix(); 135c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot Ret += getName(); 136c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Ret; 137c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 138c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 139c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot unsigned getNumArgs() const { return Info->Param; } 140c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 141c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot bool hasNoOptAsInput() const { return Info->Flags & RenderAsInput;} 142c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 143c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot RenderStyleKind getRenderStyle() const { 144c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot if (Info->Flags & RenderJoined) 145c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return RenderJoinedStyle; 146c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot if (Info->Flags & RenderSeparate) 147c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return RenderSeparateStyle; 148c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot switch (getKind()) { 149c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case GroupClass: 150c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case InputClass: 151c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case UnknownClass: 152c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return RenderValuesStyle; 153c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case JoinedClass: 154c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case JoinedAndSeparateClass: 155c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return RenderJoinedStyle; 156c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case CommaJoinedClass: 157c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return RenderCommaJoinedStyle; 158c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case FlagClass: 159c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case ValuesClass: 160c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case SeparateClass: 161c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case MultiArgClass: 162c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case JoinedOrSeparateClass: 163c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case RemainingArgsClass: 164c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot case RemainingArgsJoinedClass: 165c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return RenderSeparateStyle; 166c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 167c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot llvm_unreachable("Unexpected kind!"); 168c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 169c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 170c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// Test if this option has the flag \a Val. 171c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot bool hasFlag(unsigned Val) const { 172c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return Info->Flags & Val; 173c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 174c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 175c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// getUnaliasedOption - Return the final option this option 176c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// aliases (itself, if the option has no alias). 177c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot const Option getUnaliasedOption() const { 178c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot const Option Alias = getAlias(); 179c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot if (Alias.isValid()) return Alias.getUnaliasedOption(); 180c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return *this; 181c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 182c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 183c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// getRenderName - Return the name to use when rendering this 184c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// option. 185c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot StringRef getRenderName() const { 186c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot return getUnaliasedOption().getName(); 187c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot } 188c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 189c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// matches - Predicate for whether this option is part of the 190c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// given option (which may be a group). 191c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// 192c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// Note that matches against options which are an alias should never be 193c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// done -- aliases do not participate in matching and so such a query will 194c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// always be false. 195c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot bool matches(OptSpecifier ID) const; 196c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 197c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// accept - Potentially accept the current argument, returning a 198c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// new Arg instance, or 0 if the option does not accept this 199c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// argument (or the argument is missing values). 200c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// 201c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// If the option accepts the current argument, accept() sets 202c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// Index to the position where argument parsing should resume 203c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// (even if the argument is missing values). 204c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// 205c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// \param ArgSize The number of bytes taken up by the matched Option prefix 206c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// and name. This is used to determine where joined values 207c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot /// start. 208c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot Arg *accept(const ArgList &Args, unsigned &Index, unsigned ArgSize) const; 209c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 210c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot void print(raw_ostream &O) const; 211c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot void dump() const; 212c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot}; 213c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 214c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot} // end namespace opt 215c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 216c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot} // end namespace llvm 217c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot 218c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#endif // LLVM_OPTION_OPTION_H 219