LLVM 20.0.0git
Namespaces | Macros | Functions | Variables
CommandLine.cpp File Reference
#include "llvm/Support/CommandLine.h"
#include "DebugOptions.h"
#include "llvm-c/Support.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLFunctionalExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Config/config.h"
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.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/VirtualFileSystem.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdlib>
#include <optional>
#include <string>

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 
namespace  llvm::cl
 This namespace contains all of the command line option processing machinery.
 

Macros

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

Functions

static size_t argPlusPrefixesSize (StringRef ArgName, size_t Pad=DefaultPad)
 
static SmallString< 8 > argPrefix (StringRef ArgName, size_t Pad=DefaultPad)
 
static bool isGrouping (const Option *O)
 
static bool isPrefixedOrGrouping (const Option *O)
 
template<typename T , T TrueVal, T FalseVal>
static bool parseBool (Option &O, StringRef ArgName, StringRef Arg, T &Value)
 
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.
 
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.
 
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()).
 
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.
 
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.
 
static bool isWindowsSpecialChar (char C)
 
static bool isWindowsSpecialCharInCommandName (char C)
 
static void tokenizeWindowsCommandLineImpl (StringRef Src, StringSaver &Saver, function_ref< void(StringRef)> AddToken, bool AlwaysCopy, function_ref< void()> MarkEOL, bool InitialCommandName)
 
static bool hasUTF8ByteOrderMark (ArrayRef< char > S)
 
static void ExpandBasePaths (StringRef BasePath, StringSaver &Saver, const char *&Arg)
 
static void initCommonOptions ()
 
static StringRef getValueStr (const Option &O, StringRef DefaultMsg)
 
static bool parseDouble (Option &O, StringRef Arg, double &Value)
 
static size_t getOptionPrefixesSize ()
 
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)
 
void LLVMParseCommandLineOptions (int argc, const char *const *argv, const char *Overview)
 This function parses the given arguments using the LLVM command line parser.
 

Variables

static const size_t DefaultPad = 2
 
static StringRef ArgPrefix = "-"
 
static StringRef ArgPrefixLong = "--"
 
static StringRef ArgHelpPrefix = " - "
 
static ManagedStatic< CommandLineParser > GlobalParser
 
static LLVM_REQUIRE_CONSTANT_INITIALIZATION ManagedStatic< SubCommandTopLevelSubCommand
 
static ManagedStatic< SubCommandAllSubCommands
 
static StringRef EqValue = "=<value>"
 
static StringRef EmptyOption = "<empty>"
 
static StringRef OptionPrefix = " ="
 
static const size_t MaxOptWidth = 8
 
static ManagedStatic< CommandLineCommonOptions > CommonOptions
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "commandline"

Definition at line 50 of file CommandLine.cpp.

◆ LLVM_IS_DEBUG_BUILD

#define LLVM_IS_DEBUG_BUILD   0

Definition at line 2520 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(); \
else \
outs() << "*no default*"; \
outs() << ")\n"; \
}
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
static const size_t MaxOptWidth
A raw_ostream that writes to an std::string.
Definition: raw_ostream.h:661

Definition at line 2198 of file CommandLine.cpp.

Function Documentation

◆ argPlusPrefixesSize()

static size_t argPlusPrefixesSize ( StringRef  ArgName,
size_t  Pad = DefaultPad 
)
static

◆ argPrefix()

static SmallString< 8 > argPrefix ( StringRef  ArgName,
size_t  Pad = DefaultPad 
)
static

Definition at line 112 of file CommandLine.cpp.

References ArgPrefix, ArgPrefixLong, I, llvm::cl::Prefix, and llvm::StringRef::size().

◆ 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 619 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

Definition at line 806 of file CommandLine.cpp.

References llvm::cl::OneOrMore, and llvm::cl::ZeroOrMore.

◆ ExpandBasePaths()

static void ExpandBasePaths ( StringRef  BasePath,
StringSaver Saver,
const char *&  Arg 
)
static

◆ getOptionPred()

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

◆ getOptionPrefixesSize()

static size_t getOptionPrefixesSize ( )
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 747 of file CommandLine.cpp.

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

◆ hasUTF8ByteOrderMark()

static bool hasUTF8ByteOrderMark ( ArrayRef< char S)
static

Definition at line 1114 of file CommandLine.cpp.

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

◆ initCommonOptions()

static void initCommonOptions ( )
static

◆ isGrouping()

static bool isGrouping ( const Option O)
inlinestatic

Definition at line 122 of file CommandLine.cpp.

References llvm::cl::Grouping.

Referenced by HandlePrefixedOrGroupedOption(), and isPrefixedOrGrouping().

◆ isPrefixedOrGrouping()

static bool isPrefixedOrGrouping ( const Option O)
inlinestatic

Definition at line 125 of file CommandLine.cpp.

References llvm::cl::AlwaysPrefix, isGrouping(), and llvm::cl::Prefix.

Referenced by HandlePrefixedOrGroupedOption().

◆ isQuote()

static bool isQuote ( char  C)
static

Definition at line 819 of file CommandLine.cpp.

References llvm::CallingConv::C.

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

◆ isWhitespace()

static bool isWhitespace ( char  C)
static

◆ isWhitespaceOrNull()

static bool isWhitespaceOrNull ( char  C)
static

◆ isWindowsSpecialChar()

static bool isWindowsSpecialChar ( char  C)
static

Definition at line 923 of file CommandLine.cpp.

References llvm::CallingConv::C, and isWhitespaceOrNull().

Referenced by tokenizeWindowsCommandLineImpl().

◆ isWindowsSpecialCharInCommandName()

static bool isWindowsSpecialCharInCommandName ( char  C)
static

Definition at line 926 of file CommandLine.cpp.

References llvm::CallingConv::C, and isWhitespaceOrNull().

Referenced by tokenizeWindowsCommandLineImpl().

◆ 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 570 of file CommandLine.cpp.

References llvm::StringMap< ValueTy, AllocatorTy >::begin(), llvm::StringRef::edit_distance(), llvm::StringRef::empty(), llvm::StringMap< ValueTy, AllocatorTy >::end(), LHS, Name, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::cl::ReallyHidden, RHS, llvm::StringRef::split(), and llvm::cl::ValueDisallowed.

◆ OptNameCompare()

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

Definition at line 2255 of file CommandLine.cpp.

References LHS, and RHS.

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 899 of file CommandLine.cpp.

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

Referenced by tokenizeWindowsCommandLineImpl().

◆ parseBool()

template<typename T , T TrueVal, T FalseVal>
static bool parseBool ( Option O,
StringRef  ArgName,
StringRef  Arg,
T Value 
)
static

Definition at line 408 of file CommandLine.cpp.

◆ parseDouble()

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

Definition at line 2043 of file CommandLine.cpp.

◆ 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 647 of file CommandLine.cpp.

References llvm::cl::AlwaysPrefix, assert(), CommaSeparateAndAddOccurrence(), 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(), and llvm::cl::ProvidePositionalOption().

◆ RequiresValue()

static bool RequiresValue ( const Option O)
static

Definition at line 801 of file CommandLine.cpp.

References llvm::cl::OneOrMore, and llvm::cl::Required.

◆ 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

Definition at line 2294 of file CommandLine.cpp.

References llvm::array_pod_sort(), and SubNameCompare().

◆ SubNameCompare()

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

Definition at line 2260 of file CommandLine.cpp.

References LHS, and RHS.

Referenced by sortSubCommands().

◆ tokenizeWindowsCommandLineImpl()

static void tokenizeWindowsCommandLineImpl ( StringRef  Src,
StringSaver Saver,
function_ref< void(StringRef)>  AddToken,
bool  AlwaysCopy,
function_ref< void()>  MarkEOL,
bool  InitialCommandName 
)
inlinestatic

Variable Documentation

◆ AllSubCommands

ManagedStatic<SubCommand> AllSubCommands
static

Definition at line 477 of file CommandLine.cpp.

Referenced by llvm::cl::SubCommand::getAll().

◆ ArgHelpPrefix

StringRef ArgHelpPrefix = " - "
static

◆ ArgPrefix

StringRef ArgPrefix = "-"
static

Definition at line 101 of file CommandLine.cpp.

Referenced by argPlusPrefixesSize(), and argPrefix().

◆ ArgPrefixLong

StringRef ArgPrefixLong = "--"
static

Definition at line 102 of file CommandLine.cpp.

Referenced by argPlusPrefixesSize(), and argPrefix().

◆ CommonOptions

ManagedStatic<CommandLineCommonOptions> CommonOptions
static

◆ DefaultPad

const size_t DefaultPad = 2
static

Definition at line 99 of file CommandLine.cpp.

◆ EmptyOption

StringRef EmptyOption = "<empty>"
static

◆ EqValue

StringRef EqValue = "=<value>"
static

◆ GlobalParser

ManagedStatic<CommandLineParser> GlobalParser
static

◆ MaxOptWidth

const size_t MaxOptWidth = 8
static

◆ OptionPrefix

StringRef OptionPrefix = " ="
static

◆ TopLevelSubCommand

Definition at line 474 of file CommandLine.cpp.

Referenced by llvm::cl::SubCommand::getTopLevel().