LLVM  9.0.0svn
Namespaces | Macros | Functions | Variables
CommandLine.cpp File Reference
#include "llvm/Support/CommandLine.h"
#include "llvm-c/Support.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/Triple.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Config/config.h"
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/StringSaver.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdlib>
#include <map>
Include dependency graph for CommandLine.cpp:

Go to the source code of this file.

Namespaces

 llvm
 This class represents lattice values for constants.
 
 llvm::cl
 cl Namespace - This namespace contains all of the command line option processing machinery.
 

Macros

#define DEBUG_TYPE   "commandline"
 
#define PRINT_OPT_DIFF(T)
 

Functions

static size_t argPlusPrefixesSize (StringRef ArgName)
 
static StringRef argPrefix (StringRef ArgName)
 
static bool isGrouping (const Option *O)
 
static bool isPrefixedOrGrouping (const Option *O)
 
static OptionLookupNearestOption (StringRef Arg, const StringMap< Option *> &OptionsMap, std::string &NearestString)
 LookupNearestOption - Lookup the closest match to the option specified by the specified option on the command line. More...
 
static bool CommaSeparateAndAddOccurrence (Option *Handler, unsigned pos, StringRef ArgName, StringRef Value, bool MultiArg=false)
 CommaSeparateAndAddOccurrence - A wrapper around Handler->addOccurrence() that does special handling of cl::CommaSeparated options. More...
 
static bool ProvideOption (Option *Handler, StringRef ArgName, StringRef Value, int argc, const char *const *argv, int &i)
 ProvideOption - For Value, this differentiates between an empty value ("") and a null value (StringRef()). More...
 
static bool ProvidePositionalOption (Option *Handler, StringRef Arg, int i)
 
static OptiongetOptionPred (StringRef Name, size_t &Length, bool(*Pred)(const Option *), const StringMap< Option *> &OptionsMap)
 
static OptionHandlePrefixedOrGroupedOption (StringRef &Arg, StringRef &Value, bool &ErrorParsing, const StringMap< Option *> &OptionsMap)
 HandlePrefixedOrGroupedOption - The specified argument string (which started with at least one '-') does not fully match an available option. More...
 
static bool RequiresValue (const Option *O)
 
static bool EatsUnboundedNumberOfValues (const Option *O)
 
static bool isWhitespace (char C)
 
static bool isWhitespaceOrNull (char C)
 
static bool isQuote (char C)
 
static size_t parseBackslash (StringRef Src, size_t I, SmallString< 128 > &Token)
 Backslashes are interpreted in a rather complicated way in the Windows-style command line, because backslashes are used both to separate path and to escape double quote. More...
 
static bool hasUTF8ByteOrderMark (ArrayRef< char > S)
 
static bool ExpandResponseFile (StringRef FName, StringSaver &Saver, TokenizerCallback Tokenizer, SmallVectorImpl< const char *> &NewArgv, bool MarkEOLs, bool RelativeNames)
 
static StringRef getValueStr (const Option &O, StringRef DefaultMsg)
 
static bool parseDouble (Option &O, StringRef Arg, double &Value)
 
static bool shouldPrintOption (StringRef Name, StringRef Description, const Option &O)
 
static int OptNameCompare (const std::pair< const char *, Option *> *LHS, const std::pair< const char *, Option *> *RHS)
 
static int SubNameCompare (const std::pair< const char *, SubCommand *> *LHS, const std::pair< const char *, SubCommand *> *RHS)
 
static void sortOpts (StringMap< Option *> &OptMap, SmallVectorImpl< std::pair< const char *, Option *>> &Opts, bool ShowHidden)
 
static void sortSubCommands (const SmallPtrSetImpl< SubCommand *> &SubMap, SmallVectorImpl< std::pair< const char *, SubCommand *>> &Subs)
 
static HelpPrinter UncategorizedNormalPrinter (false)
 
static HelpPrinter UncategorizedHiddenPrinter (true)
 
static CategorizedHelpPrinter CategorizedNormalPrinter (false)
 
static CategorizedHelpPrinter CategorizedHiddenPrinter (true)
 
static HelpPrinterWrapper WrappedNormalPrinter (UncategorizedNormalPrinter, CategorizedNormalPrinter)
 
static HelpPrinterWrapper WrappedHiddenPrinter (UncategorizedHiddenPrinter, CategorizedHiddenPrinter)
 
void LLVMParseCommandLineOptions (int argc, const char *const *argv, const char *Overview)
 This function parses the given arguments using the LLVM command line parser. More...
 

Variables

static StringRef ArgPrefix = " -"
 
static StringRef ArgPrefixLong = " --"
 
static StringRef ArgHelpPrefix = " - "
 
static ManagedStatic< CommandLineParser > GlobalParser
 
static StringRef EqValue = "=<value>"
 
static StringRef EmptyOption = "<empty>"
 
static StringRef OptionPrefix = " ="
 
static size_t OptionPrefixesSize = OptionPrefix.size() + ArgHelpPrefix.size()
 
static const size_t MaxOptWidth = 8
 
static cl::OptionCategory GenericCategory ("Generic Options")
 
static cl::opt< HelpPrinter, true, parser< bool > > HLOp ("help-list", cl::desc("Display list of available options (--help-list-hidden for more)"), cl::location(UncategorizedNormalPrinter), cl::Hidden, cl::ValueDisallowed, cl::cat(GenericCategory), cl::sub(*AllSubCommands))
 
static cl::opt< HelpPrinter, true, parser< bool > > HLHOp ("help-list-hidden", cl::desc("Display list of all available options"), cl::location(UncategorizedHiddenPrinter), cl::Hidden, cl::ValueDisallowed, cl::cat(GenericCategory), cl::sub(*AllSubCommands))
 
static cl::opt< HelpPrinterWrapper, true, parser< bool > > HOp ("help", cl::desc("Display available options (--help-hidden for more)"), cl::location(WrappedNormalPrinter), cl::ValueDisallowed, cl::cat(GenericCategory), cl::sub(*AllSubCommands))
 
static cl::alias HOpA ("h", cl::desc("Alias for --help"), cl::aliasopt(HOp), cl::DefaultOption)
 
static cl::opt< HelpPrinterWrapper, true, parser< bool > > HHOp ("help-hidden", cl::desc("Display all available options"), cl::location(WrappedHiddenPrinter), cl::Hidden, cl::ValueDisallowed, cl::cat(GenericCategory), cl::sub(*AllSubCommands))
 
static cl::opt< boolPrintOptions ("print-options", cl::desc("Print non-default options after command line parsing"), cl::Hidden, cl::init(false), cl::cat(GenericCategory), cl::sub(*AllSubCommands))
 
static cl::opt< boolPrintAllOptions ("print-all-options", cl::desc("Print all option values after command line parsing"), cl::Hidden, cl::init(false), cl::cat(GenericCategory), cl::sub(*AllSubCommands))
 
static VersionPrinterTy OverrideVersionPrinter = nullptr
 
static std::vector< VersionPrinterTy > * ExtraVersionPrinters = nullptr
 
static VersionPrinter VersionPrinterInstance
 
static cl::opt< VersionPrinter, true, parser< bool > > VersOp ("version", cl::desc("Display the version of this program"), cl::location(VersionPrinterInstance), cl::ValueDisallowed, cl::cat(GenericCategory))
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "commandline"

Definition at line 46 of file CommandLine.cpp.

◆ PRINT_OPT_DIFF

#define PRINT_OPT_DIFF (   T)
Value:
size_t GlobalWidth) const { \
printOptionName(O, GlobalWidth); \
std::string Str; \
{ \
raw_string_ostream SS(Str); \
SS << V; \
} \
outs() << "= " << Str; \
size_t NumSpaces = \
MaxOptWidth > Str.size() ? MaxOptWidth - Str.size() : 0; \
outs().indent(NumSpaces) << " (default: "; \
if (D.hasValue()) \
outs() << D.getValue(); \
outs() << "*no default*"; \
outs() << ")\n"; \
}
static const size_t MaxOptWidth
void printOptionDiff(const Option &O, const generic_parser_base &P, const DT &V, const OptionValue< DT > &Default, size_t GlobalWidth)
Definition: CommandLine.h:1125
raw_ostream & outs()
This returns a reference to a raw_ostream for standard output.
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")

Definition at line 1946 of file CommandLine.cpp.

Function Documentation

◆ argPlusPrefixesSize()

static size_t argPlusPrefixesSize ( StringRef  ArgName)
static

◆ argPrefix()

static StringRef argPrefix ( StringRef  ArgName)
static

Definition at line 102 of file CommandLine.cpp.

References ArgPrefixLong, and llvm::StringRef::size().

Referenced by isPrefixedOrGrouping().

◆ CategorizedHiddenPrinter()

static CategorizedHelpPrinter CategorizedHiddenPrinter ( true  )
static

Referenced by sortSubCommands().

◆ CategorizedNormalPrinter()

static CategorizedHelpPrinter CategorizedNormalPrinter ( false  )
static

Referenced by sortSubCommands().

◆ CommaSeparateAndAddOccurrence()

static bool CommaSeparateAndAddOccurrence ( Option Handler,
unsigned  pos,
StringRef  ArgName,
StringRef  Value,
bool  MultiArg = false 
)
static

CommaSeparateAndAddOccurrence - A wrapper around Handler->addOccurrence() that does special handling of cl::CommaSeparated options.

Definition at line 607 of file CommandLine.cpp.

References llvm::cl::Option::addOccurrence(), llvm::cl::CommaSeparated, llvm::StringRef::find(), llvm::cl::Option::getMiscFlags(), llvm::StringRef::npos, and llvm::StringRef::substr().

Referenced by ProvideOption().

◆ EatsUnboundedNumberOfValues()

static bool EatsUnboundedNumberOfValues ( const Option O)
static

◆ ExpandResponseFile()

static bool ExpandResponseFile ( StringRef  FName,
StringSaver Saver,
TokenizerCallback  Tokenizer,
SmallVectorImpl< const char *> &  NewArgv,
bool  MarkEOLs,
bool  RelativeNames 
)
static

◆ getOptionPred()

static Option* getOptionPred ( StringRef  Name,
size_t &  Length,
bool(*)(const Option *)  Pred,
const StringMap< Option *> &  OptionsMap 
)
static

◆ getValueStr()

static StringRef getValueStr ( const Option O,
StringRef  DefaultMsg 
)
static

◆ HandlePrefixedOrGroupedOption()

static Option* HandlePrefixedOrGroupedOption ( StringRef Arg,
StringRef Value,
bool ErrorParsing,
const StringMap< Option *> &  OptionsMap 
)
static

HandlePrefixedOrGroupedOption - The specified argument string (which started with at least one '-') does not fully match an available option.

Check to see if this is a prefix or grouped option. If so, split arg into output an Arg/Value pair and return the Option to parse it with.

Definition at line 735 of file CommandLine.cpp.

References llvm::cl::AlwaysPrefix, assert(), llvm::StringMap< ValueTy, AllocatorTy >::count(), llvm::NVPTXISD::Dummy, llvm::StringRef::empty(), llvm::cl::Option::error(), llvm::StringMap< ValueTy, AllocatorTy >::find(), llvm::cl::Option::getFormattingFlag(), getOptionPred(), llvm::cl::Option::getValueExpectedFlag(), isGrouping(), isPrefixedOrGrouping(), llvm::cl::Prefix, ProvideOption(), llvm::StringRef::size(), llvm::StringRef::substr(), and llvm::cl::ValueRequired.

Referenced by llvm::cl::ResetAllOptionOccurrences().

◆ hasUTF8ByteOrderMark()

static bool hasUTF8ByteOrderMark ( ArrayRef< char S)
static

Definition at line 1036 of file CommandLine.cpp.

References llvm::ArrayRef< T >::size().

Referenced by ExpandResponseFile().

◆ isGrouping()

static bool isGrouping ( const Option O)
inlinestatic

◆ isPrefixedOrGrouping()

static bool isPrefixedOrGrouping ( const Option O)
inlinestatic

◆ isQuote()

static bool isQuote ( char  C)
static

Definition at line 807 of file CommandLine.cpp.

Referenced by llvm::cl::TokenizeGNUCommandLine().

◆ isWhitespace()

static bool isWhitespace ( char  C)
static

◆ isWhitespaceOrNull()

static bool isWhitespaceOrNull ( char  C)
static

Definition at line 803 of file CommandLine.cpp.

References isWhitespace().

Referenced by llvm::cl::TokenizeWindowsCommandLine().

◆ LLVMParseCommandLineOptions()

void LLVMParseCommandLineOptions ( int  argc,
const char *const argv,
const char Overview 
)

This function parses the given arguments using the LLVM command line parser.

Note that the only stable thing about this function is its signature; you cannot rely on any particular set of command line arguments being interpreted the same way across LLVM versions.

See also
llvm::cl::ParseCommandLineOptions()

Definition at line 2491 of file CommandLine.cpp.

References llvm::nulls(), and llvm::cl::ParseCommandLineOptions().

◆ LookupNearestOption()

static Option* LookupNearestOption ( StringRef  Arg,
const StringMap< Option *> &  OptionsMap,
std::string &  NearestString 
)
static

LookupNearestOption - Lookup the closest match to the option specified by the specified option on the command line.

If there is a value specified (after an equal sign) return that as well. This assumes that leading dashes have already been stripped.

Definition at line 562 of file CommandLine.cpp.

References Arg, llvm::cl::Option::ArgStr, llvm::StringMap< ValueTy, AllocatorTy >::begin(), llvm::StringRef::edit_distance(), llvm::StringRef::empty(), llvm::StringMap< ValueTy, AllocatorTy >::end(), llvm::cl::Option::getExtraOptionNames(), llvm::cl::Option::getValueExpectedFlag(), llvm::cl::Option::hasArgStr(), llvm::RISCVFenceField::O, llvm::SmallVectorTemplateBase< T >::push_back(), llvm::StringRef::split(), and llvm::cl::ValueDisallowed.

Referenced by llvm::cl::ResetAllOptionOccurrences().

◆ OptNameCompare()

static int OptNameCompare ( const std::pair< const char *, Option *> *  LHS,
const std::pair< const char *, Option *> *  RHS 
)
static

Definition at line 2001 of file CommandLine.cpp.

Referenced by sortOpts().

◆ parseBackslash()

static size_t parseBackslash ( StringRef  Src,
size_t  I,
SmallString< 128 > &  Token 
)
static

Backslashes are interpreted in a rather complicated way in the Windows-style command line, because backslashes are used both to separate path and to escape double quote.

This method consumes runs of backslashes as well as the following double quote if it's escaped.

  • If an even number of backslashes is followed by a double quote, one backslash is output for every pair of backslashes, and the last double quote remains unconsumed. The double quote will later be interpreted as the start or end of a quoted string in the main loop outside of this function.
  • If an odd number of backslashes is followed by a double quote, one backslash is output for every pair of backslashes, and a double quote is output for the last pair of backslash-double quote. The double quote is consumed in this case.
  • Otherwise, backslashes are interpreted literally.

Definition at line 887 of file CommandLine.cpp.

References llvm::SmallString< InternalLen >::append(), E, I, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::StringRef::size().

Referenced by llvm::cl::TokenizeWindowsCommandLine().

◆ parseDouble()

static bool parseDouble ( Option O,
StringRef  Arg,
double &  Value 
)
static

◆ ProvideOption()

static bool ProvideOption ( Option Handler,
StringRef  ArgName,
StringRef  Value,
int  argc,
const char *const argv,
int &  i 
)
inlinestatic

ProvideOption - For Value, this differentiates between an empty value ("") and a null value (StringRef()).

The later is accepted for arguments that don't allow a value (-foo) the former is rejected (-foo=).

Definition at line 635 of file CommandLine.cpp.

References llvm::cl::AlwaysPrefix, assert(), CommaSeparateAndAddOccurrence(), llvm::StringRef::data(), llvm::cl::Option::error(), llvm::cl::Option::getFormattingFlag(), llvm::cl::Option::getNumAdditionalVals(), llvm::cl::Option::getValueExpectedFlag(), llvm::cl::ValueDisallowed, llvm::cl::ValueOptional, and llvm::cl::ValueRequired.

Referenced by HandlePrefixedOrGroupedOption(), ProvidePositionalOption(), and llvm::cl::ResetAllOptionOccurrences().

◆ ProvidePositionalOption()

static bool ProvidePositionalOption ( Option Handler,
StringRef  Arg,
int  i 
)
static

◆ RequiresValue()

static bool RequiresValue ( const Option O)
static

◆ shouldPrintOption()

static bool shouldPrintOption ( StringRef  Name,
StringRef  Description,
const Option O 
)
static

◆ sortOpts()

static void sortOpts ( StringMap< Option *> &  OptMap,
SmallVectorImpl< std::pair< const char *, Option *>> &  Opts,
bool  ShowHidden 
)
static

◆ sortSubCommands()

static void sortSubCommands ( const SmallPtrSetImpl< SubCommand *> &  SubMap,
SmallVectorImpl< std::pair< const char *, SubCommand *>> &  Subs 
)
static

◆ SubNameCompare()

static int SubNameCompare ( const std::pair< const char *, SubCommand *> *  LHS,
const std::pair< const char *, SubCommand *> *  RHS 
)
static

Definition at line 2006 of file CommandLine.cpp.

Referenced by sortSubCommands().

◆ UncategorizedHiddenPrinter()

static HelpPrinter UncategorizedHiddenPrinter ( true  )
static

Referenced by sortSubCommands().

◆ UncategorizedNormalPrinter()

static HelpPrinter UncategorizedNormalPrinter ( false  )
static

Referenced by sortSubCommands().

◆ WrappedHiddenPrinter()

static HelpPrinterWrapper WrappedHiddenPrinter ( UncategorizedHiddenPrinter  ,
CategorizedHiddenPrinter   
)
static

Referenced by sortSubCommands().

◆ WrappedNormalPrinter()

static HelpPrinterWrapper WrappedNormalPrinter ( UncategorizedNormalPrinter  ,
CategorizedNormalPrinter   
)
static

Referenced by sortSubCommands().

Variable Documentation

◆ ArgHelpPrefix

StringRef ArgHelpPrefix = " - "
static

Definition at line 93 of file CommandLine.cpp.

◆ ArgPrefix

StringRef ArgPrefix = " -"
static

Definition at line 91 of file CommandLine.cpp.

◆ ArgPrefixLong

StringRef ArgPrefixLong = " --"
static

Definition at line 92 of file CommandLine.cpp.

Referenced by argPrefix().

◆ EmptyOption

StringRef EmptyOption = "<empty>"
static

Definition at line 1830 of file CommandLine.cpp.

Referenced by llvm::cl::generic_parser_base::printOptionInfo().

◆ EqValue

StringRef EqValue = "=<value>"
static

Definition at line 1829 of file CommandLine.cpp.

Referenced by llvm::cl::generic_parser_base::printOptionInfo().

◆ ExtraVersionPrinters

std::vector<VersionPrinterTy>* ExtraVersionPrinters = nullptr
static

Definition at line 2364 of file CommandLine.cpp.

◆ GenericCategory

cl::OptionCategory GenericCategory("Generic Options")
static

◆ GlobalParser

ManagedStatic<CommandLineParser> GlobalParser
static

Definition at line 420 of file CommandLine.cpp.

◆ HHOp

cl::opt<HelpPrinterWrapper, true, parser<bool> > HHOp("help-hidden", cl::desc("Display all available options"), cl::location(WrappedHiddenPrinter), cl::Hidden, cl::ValueDisallowed, cl::cat(GenericCategory), cl::sub(*AllSubCommands))
static

Referenced by sortSubCommands().

◆ HLHOp

cl::opt<HelpPrinter, true, parser<bool> > HLHOp("help-list-hidden", cl::desc("Display list of all available options"), cl::location(UncategorizedHiddenPrinter), cl::Hidden, cl::ValueDisallowed, cl::cat(GenericCategory), cl::sub(*AllSubCommands))
static

Referenced by sortSubCommands().

◆ HLOp

cl::opt<HelpPrinter, true, parser<bool> > HLOp("help-list", cl::desc("Display list of available options (--help-list-hidden for more)"), cl::location(UncategorizedNormalPrinter), cl::Hidden, cl::ValueDisallowed, cl::cat(GenericCategory), cl::sub(*AllSubCommands))
static

Referenced by sortSubCommands().

◆ HOp

cl::opt<HelpPrinterWrapper, true, parser<bool> > HOp("help", cl::desc("Display available options (--help-hidden for more)"), cl::location(WrappedNormalPrinter), cl::ValueDisallowed, cl::cat(GenericCategory), cl::sub(*AllSubCommands))
static

◆ HOpA

cl::alias HOpA("h", cl::desc("Alias for --help"), cl::aliasopt(HOp), cl::DefaultOption)
static

Referenced by sortSubCommands().

◆ MaxOptWidth

const size_t MaxOptWidth = 8
static

Definition at line 1912 of file CommandLine.cpp.

◆ OptionPrefix

StringRef OptionPrefix = " ="
static

Definition at line 1831 of file CommandLine.cpp.

◆ OptionPrefixesSize

size_t OptionPrefixesSize = OptionPrefix.size() + ArgHelpPrefix.size()
static

Definition at line 1832 of file CommandLine.cpp.

Referenced by llvm::cl::generic_parser_base::printOptionInfo().

◆ OverrideVersionPrinter

VersionPrinterTy OverrideVersionPrinter = nullptr
static

Definition at line 2362 of file CommandLine.cpp.

◆ PrintAllOptions

cl::opt<bool> PrintAllOptions("print-all-options", cl::desc("Print all option values after command line parsing"), cl::Hidden, cl::init(false), cl::cat(GenericCategory), cl::sub(*AllSubCommands))
static

Referenced by sortSubCommands().

◆ PrintOptions

cl::opt<bool> PrintOptions("print-options", cl::desc("Print non-default options after command line parsing"), cl::Hidden, cl::init(false), cl::cat(GenericCategory), cl::sub(*AllSubCommands))
static

Referenced by sortSubCommands().

◆ VersionPrinterInstance

VersionPrinter VersionPrinterInstance
static

Definition at line 2423 of file CommandLine.cpp.

◆ VersOp

cl::opt<VersionPrinter, true, parser<bool> > VersOp("version", cl::desc("Display the version of this program"), cl::location(VersionPrinterInstance), cl::ValueDisallowed, cl::cat(GenericCategory))
static