19#ifndef LLVM_SUPPORT_COMMANDLINE_H
20#define LLVM_SUPPORT_COMMANDLINE_H
38#include <initializer_list>
72 const char *EnvVar =
nullptr,
73 bool LongOptionsUseDoubleDash =
false);
190 : Name(Name), Description(Description) {
214 : Name(Name), Description(Description) {
258 virtual bool handleOccurrence(
unsigned pos,
StringRef ArgName,
261 virtual enum ValueExpected getValueExpectedFlagDefault()
const {
266 virtual void anchor();
312 bool isPositional()
const {
return getFormattingFlag() == cl::Positional; }
313 bool isSink()
const {
return getMiscFlags() & cl::Sink; }
317 return getNumOccurrencesFlag() == cl::ConsumeAfter;
338 : NumOccurrences(0), Occurrences(OccurrencesFlag),
Value(0),
340 FullyInitialized(
false), Position(0), AdditionalVals(0) {
357 void removeArgument();
376 static void printHelpStr(
StringRef HelpStr,
size_t Indent,
377 size_t FirstLineIndentedBy);
384 static void printEnumValHelpStr(
StringRef HelpStr,
size_t Indent,
385 size_t FirstLineIndentedBy);
392 bool MultiArg =
false);
434 template <
class Opt>
void apply(Opt &O)
const { O.setInitialValue(
Init); }
441 template <
class Opt>
void apply(Opt &O)
const { O.setInitialValues(
Inits); }
461 template <
class Opt>
void apply(Opt &O)
const { O.setLocation(O,
Loc); }
485 template <
class Opt>
void apply(Opt &O)
const {
487 O.addSubCommand(*
Sub);
490 O.addSubCommand(*SC);
496template <
typename R,
typename Ty>
struct cb {
497 std::function<R(Ty)>
CB;
501 template <
typename Opt>
void apply(Opt &O)
const { O.setCallback(
CB); }
508template <
typename R,
typename C,
typename... Args>
511 using arg_type = std::tuple_element_t<0, std::tuple<Args...>>;
512 static_assert(
sizeof...(Args) == 1,
"callback function must have one and only one parameter");
513 static_assert(std::is_same_v<result_type, void>,
514 "callback return type must be void");
515 static_assert(std::is_lvalue_reference_v<arg_type> &&
516 std::is_const_v<std::remove_reference_t<arg_type>>,
517 "callback arg_type must be a const lvalue reference");
543 virtual void anchor();
550template <
class DataType,
bool isClass>
563 bool compare(
const DataType & )
const {
return false; }
589 assert(Valid &&
"invalid option value");
599 bool compare(
const DataType &V)
const {
return Valid && (
Value == V); }
611template <
class DataType>
623template <
class DataType>
654 void anchor()
override;
671 void anchor()
override;
685#define clEnumVal(ENUMVAL, DESC) \
686 llvm::cl::OptionEnumValue { #ENUMVAL, int(ENUMVAL), DESC }
687#define clEnumValN(ENUMVAL, FLAGNAME, DESC) \
688 llvm::cl::OptionEnumValue { FLAGNAME, int(ENUMVAL), DESC }
703 template <
class Opt>
void apply(Opt &O)
const {
704 for (
const auto &
Value : Values)
756 virtual size_t getOptionWidth(
const Option &O)
const;
763 virtual void printOptionInfo(
const Option &O,
size_t GlobalWidth)
const;
767 size_t GlobalWidth)
const;
773 template <
class AnyOptionValue>
776 size_t GlobalWidth)
const {
777 printGenericOptionDiff(O, V,
Default, GlobalWidth);
786 if (!Owner.hasArgStr())
787 for (
unsigned i = 0, e = getNumOptions(); i != e; ++i)
803 if (Owner.hasArgStr())
860 for (
size_t i = 0, e =
Values.size(); i != e; ++i)
862 V =
Values[i].V.getValue();
866 return O.error(
"Cannot find option named '" + ArgVal +
"'!");
910 size_t getOptionWidth(
const Option &O)
const;
915 void printOptionInfo(
const Option &O,
size_t GlobalWidth)
const;
918 void printOptionNoValue(
const Option &O,
size_t GlobalWidth)
const;
924 virtual void anchor();
928 void printOptionName(
const Option &O,
size_t GlobalWidth)
const;
963 size_t GlobalWidth)
const;
989 size_t GlobalWidth)
const;
1010 size_t GlobalWidth)
const;
1031 size_t GlobalWidth)
const;
1052 size_t GlobalWidth)
const;
1073 size_t GlobalWidth)
const;
1096 size_t GlobalWidth)
const;
1114 unsigned long long &Val);
1120 size_t GlobalWidth)
const;
1141 size_t GlobalWidth)
const;
1162 size_t GlobalWidth)
const;
1187 size_t GlobalWidth)
const;
1211 size_t GlobalWidth)
const;
1222template <
class ParserClass,
class DT>
1226 P.printOptionDiff(O, OV,
Default, GlobalWidth);
1234 P.printOptionNoValue(O, GlobalWidth);
1243 P.printOptionDiff(O, V,
Default, GlobalWidth);
1249template <
class ParserClass,
class ValDT>
1267 template <
class Opt>
static void opt(
const Mod &M, Opt &O) { M.apply(O); }
1289 O.setNumOccurrencesFlag(
N);
1308 "cl::Grouping can only apply to single character Options.");
1314template <
class Opt,
class Mod,
class... Mods>
1320template <
class Opt,
class Mod>
void apply(Opt *O,
const Mod &M) {
1329template <
class DataType,
bool ExternalStorage,
bool isClass>
1331 DataType *Location =
nullptr;
1334 void check_location()
const {
1335 assert(Location &&
"cl::location(...) not specified for a command "
1336 "line option with external storage, "
1337 "or cl::init specified before cl::location()!!");
1345 return O.error(
"cl::location(x) specified more than once!");
1351 template <
class T>
void setValue(
const T &V,
bool initial =
false) {
1376template <
class DataType>
1381 template <
class T>
void setValue(
const T &V,
bool initial =
false) {
1382 DataType::operator=(V);
1406 template <
class T>
void setValue(
const T &V,
bool initial =
false) {
1425template <
class DataType,
bool ExternalStorage =
false,
1426 class ParserClass = parser<DataType>>
1429 public opt_storage<DataType, ExternalStorage, std::is_class_v<DataType>> {
1432 bool handleOccurrence(
unsigned pos,
StringRef ArgName,
1434 typename ParserClass::parser_data_type Val =
1435 typename ParserClass::parser_data_type();
1436 if (Parser.parse(*
this, ArgName, Arg, Val))
1444 enum ValueExpected getValueExpectedFlagDefault()
const override {
1445 return Parser.getValueExpectedFlagDefault();
1449 return Parser.getExtraOptionNames(OptionNames);
1453 size_t getOptionWidth()
const override {
1454 return Parser.getOptionWidth(*
this);
1457 void printOptionInfo(
size_t GlobalWidth)
const override {
1458 Parser.printOptionInfo(*
this, GlobalWidth);
1461 void printOptionValue(
size_t GlobalWidth,
bool Force)
const override {
1463 cl::printOptionDiff<ParserClass>(*
this, Parser, this->
getValue(),
1468 void setDefault()
override {
1469 if constexpr (std::is_assignable_v<DataType &, DataType>) {
1480 Parser.initialize();
1500 this->
getValue() = std::forward<T>(Val);
1505 template <
class... Mods>
1506 explicit opt(
const Mods &... Ms)
1513 std::function<
void(
const typename ParserClass::parser_data_type &)> CB) {
1517 std::function<void(
const typename ParserClass::parser_data_type &)>
Callback =
1518 [](
const typename ParserClass::parser_data_type &) {};
1521#if !(defined(LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS) && defined(_MSC_VER))
1541 std::vector<OptionValue<DataType>>
Default =
1542 std::vector<OptionValue<DataType>>();
1543 bool DefaultAssigned =
false;
1552 return O.error(
"cl::location(x) specified more than once!");
1557 template <
class T>
void addValue(
const T &V,
bool initial =
false) {
1558 assert(Location !=
nullptr &&
1559 "cl::location(...) not specified for a command "
1560 "line option with external storage!");
1561 Location->push_back(V);
1584 std::vector<DataType> Storage;
1585 std::vector<OptionValue<DataType>> Default;
1586 bool DefaultAssigned =
false;
1589 using iterator =
typename std::vector<DataType>::iterator;
1599 using size_type =
typename std::vector<DataType>::size_type;
1603 bool empty()
const {
return Storage.empty(); }
1608 using reference =
typename std::vector<DataType>::reference;
1620 return Storage.erase(first, last);
1625 return Storage.erase(first, last);
1629 return Storage.insert(pos,
value);
1632 return Storage.insert(pos,
value);
1636 return Storage.insert(pos,
value);
1639 return Storage.insert(pos,
value);
1645 operator std::vector<DataType> &() {
return Storage; }
1648 const std::vector<DataType> *
operator&()
const {
return &Storage; }
1650 template <
class T>
void addValue(
const T &V,
bool initial =
false) {
1651 Storage.push_back(V);
1669 class ParserClass = parser<DataType>>
1671 std::vector<unsigned> Positions;
1674 enum ValueExpected getValueExpectedFlagDefault()
const override {
1675 return Parser.getValueExpectedFlagDefault();
1679 return Parser.getExtraOptionNames(OptionNames);
1682 bool handleOccurrence(
unsigned pos,
StringRef ArgName,
1684 typename ParserClass::parser_data_type Val =
1685 typename ParserClass::parser_data_type();
1690 if (Parser.parse(*
this, ArgName, Arg, Val))
1694 Positions.push_back(pos);
1700 size_t getOptionWidth()
const override {
1701 return Parser.getOptionWidth(*
this);
1704 void printOptionInfo(
size_t GlobalWidth)
const override {
1705 Parser.printOptionInfo(*
this, GlobalWidth);
1709 void printOptionValue(
size_t ,
bool )
const override {
1712 void setDefault()
override {
1721 Parser.initialize();
1732 assert(optnum < this->
size() &&
"Invalid option index");
1733 return Positions[optnum];
1744 "Cannot have two default values");
1746 for (
auto &Val : Vs)
1752 template <
class... Mods>
1760 std::function<
void(
const typename ParserClass::parser_data_type &)> CB) {
1764 std::function<void(
const typename ParserClass::parser_data_type &)>
Callback =
1765 [](
const typename ParserClass::parser_data_type &) {};
1773 template <
typename D,
typename S,
typename P>
1785 unsigned *Location =
nullptr;
1787 template <
class T>
static unsigned Bit(
const T &V) {
1788 unsigned BitPos =
static_cast<unsigned>(V);
1789 assert(BitPos <
sizeof(
unsigned) * CHAR_BIT &&
1790 "enum exceeds width of bit vector!");
1799 return O.error(
"cl::location(x) specified more than once!");
1805 assert(Location !=
nullptr &&
1806 "cl::location(...) not specified for a command "
1807 "line option with external storage!");
1808 *Location |= Bit(V);
1819 return (*Location & Bit(V)) != 0;
1829 template <
class T>
static unsigned Bit(
const T &V) {
1830 unsigned BitPos =
static_cast<unsigned>(V);
1831 assert(BitPos <
sizeof(
unsigned) * CHAR_BIT &&
1832 "enum exceeds width of bit vector!");
1837 template <
class T>
void addValue(
const T &V) { Bits |= Bit(V); }
1843 template <
class T>
bool isSet(
const T &V) {
return (Bits & Bit(V)) != 0; }
1849template <
class DataType,
class Storage =
bool,
1850 class ParserClass = parser<DataType>>
1852 std::vector<unsigned> Positions;
1855 enum ValueExpected getValueExpectedFlagDefault()
const override {
1856 return Parser.getValueExpectedFlagDefault();
1860 return Parser.getExtraOptionNames(OptionNames);
1863 bool handleOccurrence(
unsigned pos,
StringRef ArgName,
1865 typename ParserClass::parser_data_type Val =
1866 typename ParserClass::parser_data_type();
1867 if (Parser.parse(*
this, ArgName, Arg, Val))
1871 Positions.push_back(pos);
1877 size_t getOptionWidth()
const override {
1878 return Parser.getOptionWidth(*
this);
1881 void printOptionInfo(
size_t GlobalWidth)
const override {
1882 Parser.printOptionInfo(*
this, GlobalWidth);
1886 void printOptionValue(
size_t ,
bool )
const override {
1893 Parser.initialize();
1904 assert(optnum < this->
size() &&
"Invalid option index");
1905 return Positions[optnum];
1908 template <
class... Mods>
1916 std::function<
void(
const typename ParserClass::parser_data_type &)> CB) {
1920 std::function<void(
const typename ParserClass::parser_data_type &)>
Callback =
1921 [](
const typename ParserClass::parser_data_type &) {};
1931 bool handleOccurrence(
unsigned pos,
StringRef ,
1933 return AliasFor->handleOccurrence(pos, AliasFor->ArgStr, Arg);
1937 bool MultiArg =
false)
override {
1938 return AliasFor->addOccurrence(pos, AliasFor->ArgStr,
Value, MultiArg);
1942 size_t getOptionWidth()
const override;
1943 void printOptionInfo(
size_t GlobalWidth)
const override;
1946 void printOptionValue(
size_t ,
bool )
const override {
1949 void setDefault()
override { AliasFor->setDefault(); }
1951 ValueExpected getValueExpectedFlagDefault()
const override {
1952 return AliasFor->getValueExpectedFlag();
1957 error(
"cl::alias must have argument name specified!");
1959 error(
"cl::alias must have an cl::aliasopt(option) specified!");
1961 error(
"cl::alias must not have cl::sub(), aliased option's cl::sub() will be used!");
1962 Subs = AliasFor->Subs;
1963 Categories = AliasFor->Categories;
1974 error(
"cl::alias must only have one cl::aliasopt(...) specified!");
1978 template <
class... Mods>
2097 bool MarkEOLs =
false);
2115 bool MarkEOLs =
false);
2141 bool MarkEOLs =
false);
2160 bool MarkEOLs =
false);
2182 bool RelativeNames =
false;
2186 bool MarkEOLs =
false;
2189 bool InConfigFile =
false;
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the StringMap class.
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
#define LLVM_TEMPLATE_ABI
Given that RA is a live value
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Allocate memory in an ever growing pool, as if by bump-pointer.
Lightweight error class with error context and mandatory checking.
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
StringRef - Represent a constant reference to a string, i.e.
std::string str() const
str - Get the contents as an std::string.
constexpr bool empty() const
empty - Check if the string is empty.
Saves strings in the provided stable storage and returns a StringRef with a stable character pointer.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
LLVM Value Representation.
LLVM_ABI Value(Type *Ty, unsigned scid)
Contains options that control response file expansion.
ExpansionContext & setCurrentDir(StringRef X)
ExpansionContext & setVFS(vfs::FileSystem *X)
ExpansionContext & setMarkEOLs(bool X)
ExpansionContext & setSearchDirs(ArrayRef< StringRef > X)
ExpansionContext & setRelativeNames(bool X)
LLVM_ABI bool findConfigFile(StringRef FileName, SmallVectorImpl< char > &FilePath)
Looks for the specified configuration file.
LLVM_ABI Error expandResponseFiles(SmallVectorImpl< const char * > &Argv)
Expands constructs "@file" in the provided array of arguments recursively.
LLVM_ABI Error readConfigFile(StringRef CfgFile, SmallVectorImpl< const char * > &Argv)
Reads command line options from the given configuration file.
OptionCategory(StringRef const Name, StringRef const Description="")
StringRef getDescription() const
StringRef getName() const
OptionValueCopy & operator=(const OptionValueCopy &)=default
OptionValueCopy()=default
bool compare(const GenericOptionValue &V) const override
void setValue(const DataType &V)
~OptionValueCopy()=default
const DataType & getValue() const
OptionValueCopy(const OptionValueCopy &)=default
bool compare(const DataType &V) const
bool isPositional() const
virtual void getExtraOptionNames(SmallVectorImpl< StringRef > &)
void setValueExpectedFlag(enum ValueExpected Val)
void setPosition(unsigned pos)
bool isConsumeAfter() const
SmallPtrSet< SubCommand *, 1 > Subs
int getNumOccurrences() const
enum ValueExpected getValueExpectedFlag() const
void setValueStr(StringRef S)
void setNumOccurrencesFlag(enum NumOccurrencesFlag Val)
void setNumAdditionalVals(unsigned n)
void setDescription(StringRef S)
void setFormattingFlag(enum FormattingFlags V)
void setHiddenFlag(enum OptionHidden Val)
void setMiscFlag(enum MiscFlags M)
enum FormattingFlags getFormattingFlag() const
virtual void printOptionInfo(size_t GlobalWidth) const =0
enum NumOccurrencesFlag getNumOccurrencesFlag() const
SmallVector< OptionCategory *, 1 > Categories
void addSubCommand(SubCommand &S)
bool isDefaultOption() const
unsigned getMiscFlags() const
virtual void setDefault()=0
virtual void printOptionValue(size_t GlobalWidth, bool Force) const =0
virtual ~Option()=default
unsigned getNumAdditionalVals() const
Option(enum NumOccurrencesFlag OccurrencesFlag, enum OptionHidden Hidden)
enum OptionHidden getOptionHiddenFlag() const
bool error(const Twine &Message, raw_ostream &Errs)
virtual size_t getOptionWidth() const =0
unsigned getPosition() const
SubCommandGroup(std::initializer_list< SubCommand * > IL)
ArrayRef< SubCommand * > getSubCommands() const
StringRef getName() const
SubCommand(StringRef Name, StringRef Description="")
SmallVector< Option *, 4 > SinkOpts
static LLVM_ABI SubCommand & getTopLevel()
LLVM_ABI void unregisterSubCommand()
static LLVM_ABI SubCommand & getAll()
LLVM_ABI void registerSubCommand()
SmallVector< Option *, 4 > PositionalOpts
StringMap< Option * > OptionsMap
StringRef getDescription() const
ValuesClass(std::initializer_list< OptionEnumValue > Options)
alias(const alias &)=delete
void setAliasFor(Option &O)
alias & operator=(const alias &)=delete
alias(const Mods &... Ms)
enum ValueExpected getValueExpectedFlagDefault() const
void getExtraOptionNames(SmallVectorImpl< StringRef > &)
virtual StringRef getValueName() const
virtual ~basic_parser_impl()=default
basic_parser_impl(Option &)
OptionValue< DataType > OptVal
DataType parser_data_type
void addValue(const T &V)
void addValue(const T &V)
bool setLocation(Option &O, unsigned &L)
bits & operator=(const bits &)=delete
ParserClass & getParser()
unsigned getPosition(unsigned optnum) const
void setCallback(std::function< void(const typename ParserClass::parser_data_type &)> CB)
std::function< void(const typename ParserClass::parser_data_type &)> Callback
bits(const bits &)=delete
GenericOptionInfo(StringRef name, StringRef helpStr)
generic_parser_base(Option &O)
virtual StringRef getDescription(unsigned N) const =0
virtual const GenericOptionValue & getOptionValue(unsigned N) const =0
virtual unsigned getNumOptions() const =0
virtual StringRef getOption(unsigned N) const =0
void printOptionDiff(const Option &O, const AnyOptionValue &V, const AnyOptionValue &Default, size_t GlobalWidth) const
unsigned findOption(StringRef Name)
virtual ~generic_parser_base()=default
void getExtraOptionNames(SmallVectorImpl< StringRef > &OptionNames)
enum ValueExpected getValueExpectedFlagDefault() const
void push_back(DataType &&value)
typename std::vector< DataType >::const_iterator const_iterator
typename std::vector< DataType >::const_reference const_reference
const_iterator begin() const
iterator erase(const_iterator first, const_iterator last)
iterator insert(const_iterator pos, const DataType &value)
iterator erase(iterator first, iterator last)
const_reference operator[](size_type pos) const
void addValue(const T &V, bool initial=false)
void push_back(const DataType &value)
typename std::vector< DataType >::reference reference
reference operator[](size_type pos)
const std::vector< DataType > * operator&() const
iterator insert(iterator pos, const DataType &value)
typename std::vector< DataType >::size_type size_type
const_reference front() const
const_iterator end() const
iterator insert(const_iterator pos, DataType &&value)
iterator erase(iterator pos)
std::vector< DataType > * operator&()
const std::vector< OptionValue< DataType > > & getDefault() const
iterator erase(const_iterator pos)
iterator insert(iterator pos, DataType &&value)
typename std::vector< DataType >::iterator iterator
const std::vector< OptionValue< DataType > > & getDefault() const
void addValue(const T &V, bool initial=false)
bool setLocation(Option &O, StorageClass &L)
void setCallback(std::function< void(const typename ParserClass::parser_data_type &)> CB)
list(const list &)=delete
void setInitialValues(ArrayRef< DataType > Vs)
std::function< void(const typename ParserClass::parser_data_type &)> Callback
list & operator=(const list &)=delete
ParserClass & getParser()
unsigned getPosition(unsigned optnum) const
void setNumAdditionalVals(unsigned n)
OptionValue< DataType > Default
DataType operator->() const
const OptionValue< DataType > & getDefault() const
void setValue(const T &V, bool initial=false)
DataType getValue() const
void setValue(const T &V, bool initial=false)
OptionValue< DataType > Default
const DataType & getValue() const
const OptionValue< DataType > & getDefault() const
const DataType & getValue() const
bool setLocation(Option &O, DataType &L)
void setValue(const T &V, bool initial=false)
const OptionValue< DataType > & getDefault() const
ParserClass & getParser()
opt & operator=(const opt &)=delete
void setInitialValue(const DataType &V)
void setCallback(std::function< void(const typename ParserClass::parser_data_type &)> CB)
DataType & operator=(const T &Val)
DataType & operator=(T &&Val)
std::function< void(const typename ParserClass::parser_data_type &)> Callback
OptionInfo(StringRef name, DataType v, StringRef helpStr)
OptionValue< DataType > V
bool parse(Option &O, StringRef ArgName, StringRef Arg, boolOrDefault &Val)
void printOptionDiff(const Option &O, boolOrDefault V, OptVal Default, size_t GlobalWidth) const
StringRef getValueName() const override
enum ValueExpected getValueExpectedFlagDefault() const
enum ValueExpected getValueExpectedFlagDefault() const
void printOptionDiff(const Option &O, bool V, OptVal Default, size_t GlobalWidth) const
bool parse(Option &O, StringRef ArgName, StringRef Arg, bool &Val)
StringRef getValueName() const override
bool parse(Option &, StringRef, StringRef Arg, char &Value)
void printOptionDiff(const Option &O, char V, OptVal Default, size_t GlobalWidth) const
StringRef getValueName() const override
void printOptionDiff(const Option &O, double V, OptVal Default, size_t GlobalWidth) const
StringRef getValueName() const override
bool parse(Option &O, StringRef ArgName, StringRef Arg, double &Val)
bool parse(Option &O, StringRef ArgName, StringRef Arg, float &Val)
StringRef getValueName() const override
void printOptionDiff(const Option &O, float V, OptVal Default, size_t GlobalWidth) const
StringRef getValueName() const override
void printOptionDiff(const Option &O, int V, OptVal Default, size_t GlobalWidth) const
bool parse(Option &O, StringRef ArgName, StringRef Arg, int &Val)
StringRef getValueName() const override
bool parse(Option &O, StringRef ArgName, StringRef Arg, long &Val)
void printOptionDiff(const Option &O, long V, OptVal Default, size_t GlobalWidth) const
bool parse(Option &O, StringRef ArgName, StringRef Arg, long long &Val)
StringRef getValueName() const override
void printOptionDiff(const Option &O, long long V, OptVal Default, size_t GlobalWidth) const
StringRef getValueName() const override
void printOptionDiff(const Option &O, StringRef V, const OptVal &Default, size_t GlobalWidth) const
bool parse(Option &, StringRef, StringRef Arg, std::string &Value)
bool parse(Option &O, StringRef ArgName, StringRef Arg, unsigned &Val)
void printOptionDiff(const Option &O, unsigned V, OptVal Default, size_t GlobalWidth) const
StringRef getValueName() const override
StringRef getValueName() const override
void printOptionDiff(const Option &O, unsigned long V, OptVal Default, size_t GlobalWidth) const
bool parse(Option &O, StringRef ArgName, StringRef Arg, unsigned long &Val)
StringRef getValueName() const override
void printOptionDiff(const Option &O, unsigned long long V, OptVal Default, size_t GlobalWidth) const
bool parse(Option &O, StringRef ArgName, StringRef Arg, unsigned long long &Val)
DataType parser_data_type
SmallVector< OptionInfo, 8 > Values
void removeLiteralOption(StringRef Name)
Remove the specified option.
StringRef getDescription(unsigned N) const override
void addLiteralOption(StringRef Name, const DT &V, StringRef HelpStr)
Add an entry to the mapping table.
const GenericOptionValue & getOptionValue(unsigned N) const override
StringRef getOption(unsigned N) const override
bool parse(Option &O, StringRef ArgName, StringRef Arg, DataType &V)
unsigned getNumOptions() const override
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
The virtual file system interface.
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ C
The default llvm calling convention, compatible with C.
std::function< void(raw_ostream &)> VersionPrinterTy
void(*)(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv, bool MarkEOLs) TokenizerCallback
String tokenization function type.
LLVM_ABI void PrintVersionMessage()
Utility function for printing version number.
LLVM_ABI bool ExpandResponseFiles(StringSaver &Saver, TokenizerCallback Tokenizer, SmallVectorImpl< const char * > &Argv)
A convenience helper which supports the typical use case of expansion function call.
LLVM_ABI void TokenizeWindowsCommandLine(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv, bool MarkEOLs=false)
Tokenizes a string of Windows command line arguments, which may contain quotes and escaped quotes.
list_initializer< Ty > list_init(ArrayRef< Ty > Vals)
LLVM_ABI OptionCategory & getGeneralCategory()
LLVM_ABI void ResetAllOptionOccurrences()
Reset all command line options to a state that looks as if they have never appeared on the command li...
LLVM_ABI void SetVersionPrinter(VersionPrinterTy func)
===------------------------------------------------------------------—===// Override the default (LLV...
template class LLVM_TEMPLATE_ABI opt< bool >
LLVM_ABI void tokenizeConfigFile(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv, bool MarkEOLs=false)
Tokenizes content of configuration file.
LLVM_ABI StringMap< Option * > & getRegisteredOptions(SubCommand &Sub=SubCommand::getTopLevel())
Use this to get a StringMap to all registered named options (e.g.
LLVM_ABI void ResetCommandLineParser()
Reset the command line parser back to its initial state.
LLVM_ABI bool ParseCommandLineOptions(int argc, const char *const *argv, StringRef Overview="", raw_ostream *Errs=nullptr, const char *EnvVar=nullptr, bool LongOptionsUseDoubleDash=false)
LLVM_ABI void PrintOptionValues()
LLVM_ABI iterator_range< typename SmallPtrSet< SubCommand *, 4 >::iterator > getRegisteredSubcommands()
Use this to get all registered SubCommands from the provided parser.
void apply(Opt *O, const Mod &M, const Mods &... Ms)
LLVM_ABI void AddLiteralOption(Option &O, StringRef Name)
Adds a new option for parsing and provides the option it refers to.
void printOptionDiff(const Option &O, const generic_parser_base &P, const DT &V, const OptionValue< DT > &Default, size_t GlobalWidth)
LLVM_ABI void TokenizeWindowsCommandLineNoCopy(StringRef Source, StringSaver &Saver, SmallVectorImpl< StringRef > &NewArgv)
Tokenizes a Windows command line while attempting to avoid copies.
ValuesClass values(OptsTy... Options)
Helper to build a ValuesClass by forwarding a variable number of arguments as an initializer list to ...
template class LLVM_TEMPLATE_ABI basic_parser< bool >
LLVM_ABI void printBuildConfig(raw_ostream &OS)
Prints the compiler build configuration.
template class LLVM_TEMPLATE_ABI opt< unsigned >
LLVM_ABI bool ProvidePositionalOption(Option *Handler, StringRef Arg, int i)
Parses Arg into the option handler Handler.
LLVM_ABI bool expandResponseFiles(int Argc, const char *const *Argv, const char *EnvVar, SmallVectorImpl< const char * > &NewArgv)
A convenience helper which concatenates the options specified by the environment variable EnvVar and ...
template class LLVM_TEMPLATE_ABI opt< int >
initializer< Ty > init(const Ty &Val)
template class LLVM_TEMPLATE_ABI opt< char >
LLVM_ABI ArrayRef< StringRef > getCompilerBuildConfig()
An array of optional enabled settings in the LLVM build configuration, which may be of interest to co...
LocationClass< Ty > location(Ty &L)
cb< typename detail::callback_traits< F >::result_type, typename detail::callback_traits< F >::arg_type > callback(F CB)
LLVM_ABI void HideUnrelatedOptions(cl::OptionCategory &Category, SubCommand &Sub=SubCommand::getTopLevel())
Mark all options not part of this category as cl::ReallyHidden.
LLVM_ABI void AddExtraVersionPrinter(VersionPrinterTy func)
===------------------------------------------------------------------—===// Add an extra printer to u...
LLVM_ABI void PrintHelpMessage(bool Hidden=false, bool Categorized=false)
This function just prints the help message, exactly the same way as if the -help or -help-hidden opti...
LLVM_ABI void TokenizeWindowsCommandLineFull(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv, bool MarkEOLs=false)
Tokenizes a Windows full command line, including command name at the start.
LLVM_ABI void TokenizeGNUCommandLine(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv, bool MarkEOLs=false)
Tokenizes a command line that can contain escapes and quotes.
This is an optimization pass for GlobalISel generic memory operations.
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
@ Mod
The access may modify the value stored in memory.
@ Sub
Subtraction of integers.
@ Default
The result values are uniform if and only if all operands are uniform.
Implement std::hash so that hash_code can be used in STL containers.
Description of the encoding of one expression Op.
GenericOptionValue()=default
GenericOptionValue(const GenericOptionValue &)=default
GenericOptionValue & operator=(const GenericOptionValue &)=default
~GenericOptionValue()=default
virtual bool compare(const GenericOptionValue &V) const =0
void print(const Option &O, const parser< DT > &P, const DT &V, const OptionValue< DT > &Default, size_t GlobalWidth)
void print(const Option &O, const parser< ParserDT > &P, const ValDT &, const OptionValue< ValDT > &, size_t GlobalWidth)
~OptionValueBase()=default
OptionValueBase & operator=(const OptionValueBase &)=default
OptionValueBase(const OptionValueBase &)=default
OptionValueBase()=default
bool compare(const DataType &) const
const DataType & getValue() const
~OptionValueBase()=default
bool compare(const GenericOptionValue &) const override
OptionValue< DataType > WrapperType
void setValue(const DT &)
OptionValue< cl::boolOrDefault > & operator=(const cl::boolOrDefault &V)
OptionValue(const cl::boolOrDefault &V)
OptionValue< std::string > & operator=(const std::string &V)
OptionValue(const std::string &V)
OptionValue(const DataType &V)
OptionValue< DataType > & operator=(const DT &V)
void apply(alias &A) const
static void opt(MiscFlags MF, Option &O)
static void opt(NumOccurrencesFlag N, Option &O)
static void opt(OptionHidden OH, Option &O)
static void opt(StringRef Str, Opt &O)
static void opt(ValueExpected VE, Option &O)
static void opt(StringRef Str, Opt &O)
static void opt(StringRef Str, Opt &O)
static void opt(const Mod &M, Opt &O)
OptionCategory & Category
cb(std::function< R(Ty)> CB)
void apply(Option &O) const
std::tuple_element_t< 0, std::tuple< Args... > > arg_type
initializer(const Ty &Val)
list_initializer(ArrayRef< Ty > Vals)
void apply(list< D, S, P > &L) const
void apply(Option &O) const
value_desc(StringRef Str)