mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
Running clang-format on CommandLine.h and CommandLine.cpp.
No functional changes, I'm just going to be doing a lot of work in these files and it would be helpful if they had more current LLVM style. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225817 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -44,7 +44,8 @@ using namespace cl;
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Template instantiations and anchors.
|
||||
//
|
||||
namespace llvm { namespace cl {
|
||||
namespace llvm {
|
||||
namespace cl {
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<bool>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<boolOrDefault>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<int>);
|
||||
@@ -60,7 +61,8 @@ TEMPLATE_INSTANTIATION(class opt<int>);
|
||||
TEMPLATE_INSTANTIATION(class opt<std::string>);
|
||||
TEMPLATE_INSTANTIATION(class opt<char>);
|
||||
TEMPLATE_INSTANTIATION(class opt<bool>);
|
||||
} } // end namespace llvm::cl
|
||||
}
|
||||
} // end namespace llvm::cl
|
||||
|
||||
// Pin the vtables to this file.
|
||||
void GenericOptionValue::anchor() {}
|
||||
@@ -87,19 +89,16 @@ static char ProgramName[80] = "<premain>";
|
||||
static const char *ProgramOverview = nullptr;
|
||||
|
||||
// This collects additional help to be printed.
|
||||
static ManagedStatic<std::vector<const char*> > MoreHelp;
|
||||
static ManagedStatic<std::vector<const char *>> MoreHelp;
|
||||
|
||||
extrahelp::extrahelp(const char *Help)
|
||||
: morehelp(Help) {
|
||||
extrahelp::extrahelp(const char *Help) : morehelp(Help) {
|
||||
MoreHelp->push_back(Help);
|
||||
}
|
||||
|
||||
static bool OptionListChanged = false;
|
||||
|
||||
// MarkOptionsChanged - Internal helper function.
|
||||
void cl::MarkOptionsChanged() {
|
||||
OptionListChanged = true;
|
||||
}
|
||||
void cl::MarkOptionsChanged() { OptionListChanged = true; }
|
||||
|
||||
/// RegisteredOptionList - This is the list of the command line options that
|
||||
/// have statically constructed themselves.
|
||||
@@ -127,7 +126,7 @@ void Option::removeArgument() {
|
||||
}
|
||||
|
||||
// This collects the different option categories that have been registered.
|
||||
typedef SmallPtrSet<OptionCategory*,16> OptionCatSet;
|
||||
typedef SmallPtrSet<OptionCategory *, 16> OptionCatSet;
|
||||
static ManagedStatic<OptionCatSet> RegisteredOptionCategories;
|
||||
|
||||
// Initialise the general option category.
|
||||
@@ -138,7 +137,8 @@ void OptionCategory::registerCategory() {
|
||||
RegisteredOptionCategories->end(),
|
||||
[this](const OptionCategory *Category) {
|
||||
return getName() == Category->getName();
|
||||
}) == 0 && "Duplicate option categories");
|
||||
}) == 0 &&
|
||||
"Duplicate option categories");
|
||||
|
||||
RegisteredOptionCategories->insert(this);
|
||||
}
|
||||
@@ -149,11 +149,11 @@ void OptionCategory::registerCategory() {
|
||||
|
||||
/// GetOptionInfo - Scan the list of registered options, turning them into data
|
||||
/// structures that are easier to handle.
|
||||
static void GetOptionInfo(SmallVectorImpl<Option*> &PositionalOpts,
|
||||
SmallVectorImpl<Option*> &SinkOpts,
|
||||
StringMap<Option*> &OptionsMap) {
|
||||
static void GetOptionInfo(SmallVectorImpl<Option *> &PositionalOpts,
|
||||
SmallVectorImpl<Option *> &SinkOpts,
|
||||
StringMap<Option *> &OptionsMap) {
|
||||
bool HadErrors = false;
|
||||
SmallVector<const char*, 16> OptionNames;
|
||||
SmallVector<const char *, 16> OptionNames;
|
||||
Option *CAOpt = nullptr; // The ConsumeAfter option if it exists.
|
||||
for (Option *O = RegisteredOptionList; O; O = O->getNextRegisteredOption()) {
|
||||
// If this option wants to handle multiple option names, get the full set.
|
||||
@@ -201,31 +201,32 @@ static void GetOptionInfo(SmallVectorImpl<Option*> &PositionalOpts,
|
||||
report_fatal_error("inconsistency in registered CommandLine options");
|
||||
}
|
||||
|
||||
|
||||
/// LookupOption - Lookup 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.
|
||||
static Option *LookupOption(StringRef &Arg, StringRef &Value,
|
||||
const StringMap<Option*> &OptionsMap) {
|
||||
const StringMap<Option *> &OptionsMap) {
|
||||
// Reject all dashes.
|
||||
if (Arg.empty()) return nullptr;
|
||||
if (Arg.empty())
|
||||
return nullptr;
|
||||
|
||||
size_t EqualPos = Arg.find('=');
|
||||
|
||||
// If we have an equals sign, remember the value.
|
||||
if (EqualPos == StringRef::npos) {
|
||||
// Look up the option.
|
||||
StringMap<Option*>::const_iterator I = OptionsMap.find(Arg);
|
||||
StringMap<Option *>::const_iterator I = OptionsMap.find(Arg);
|
||||
return I != OptionsMap.end() ? I->second : nullptr;
|
||||
}
|
||||
|
||||
// If the argument before the = is a valid option name, we match. If not,
|
||||
// return Arg unmolested.
|
||||
StringMap<Option*>::const_iterator I =
|
||||
StringMap<Option *>::const_iterator I =
|
||||
OptionsMap.find(Arg.substr(0, EqualPos));
|
||||
if (I == OptionsMap.end()) return nullptr;
|
||||
if (I == OptionsMap.end())
|
||||
return nullptr;
|
||||
|
||||
Value = Arg.substr(EqualPos+1);
|
||||
Value = Arg.substr(EqualPos + 1);
|
||||
Arg = Arg.substr(0, EqualPos);
|
||||
return I->second;
|
||||
}
|
||||
@@ -235,10 +236,11 @@ static Option *LookupOption(StringRef &Arg, StringRef &Value,
|
||||
/// (after an equal sign) return that as well. This assumes that leading dashes
|
||||
/// have already been stripped.
|
||||
static Option *LookupNearestOption(StringRef Arg,
|
||||
const StringMap<Option*> &OptionsMap,
|
||||
const StringMap<Option *> &OptionsMap,
|
||||
std::string &NearestString) {
|
||||
// Reject all dashes.
|
||||
if (Arg.empty()) return nullptr;
|
||||
if (Arg.empty())
|
||||
return nullptr;
|
||||
|
||||
// Split on any equal sign.
|
||||
std::pair<StringRef, StringRef> SplitArg = Arg.split('=');
|
||||
@@ -248,10 +250,11 @@ static Option *LookupNearestOption(StringRef Arg,
|
||||
// Find the closest match.
|
||||
Option *Best = nullptr;
|
||||
unsigned BestDistance = 0;
|
||||
for (StringMap<Option*>::const_iterator it = OptionsMap.begin(),
|
||||
ie = OptionsMap.end(); it != ie; ++it) {
|
||||
for (StringMap<Option *>::const_iterator it = OptionsMap.begin(),
|
||||
ie = OptionsMap.end();
|
||||
it != ie; ++it) {
|
||||
Option *O = it->second;
|
||||
SmallVector<const char*, 16> OptionNames;
|
||||
SmallVector<const char *, 16> OptionNames;
|
||||
O->getExtraOptionNames(OptionNames);
|
||||
if (O->ArgStr[0])
|
||||
OptionNames.push_back(O->ArgStr);
|
||||
@@ -292,8 +295,8 @@ static bool CommaSeparateAndAddOccurrence(Option *Handler, unsigned pos,
|
||||
if (Handler->addOccurrence(pos, ArgName, Val.substr(0, Pos), MultiArg))
|
||||
return true;
|
||||
// Erase the portion before the comma, AND the comma.
|
||||
Val = Val.substr(Pos+1);
|
||||
Value.substr(Pos+1); // Increment the original value pointer as well.
|
||||
Val = Val.substr(Pos + 1);
|
||||
Value.substr(Pos + 1); // Increment the original value pointer as well.
|
||||
// Check for another comma.
|
||||
Pos = Val.find(',');
|
||||
}
|
||||
@@ -320,7 +323,7 @@ static inline bool ProvideOption(Option *Handler, StringRef ArgName,
|
||||
switch (Handler->getValueExpectedFlag()) {
|
||||
case ValueRequired:
|
||||
if (!Value.data()) { // No value specified?
|
||||
if (i+1 >= argc)
|
||||
if (i + 1 >= argc)
|
||||
return Handler->error("requires a value!");
|
||||
// Steal the next argument, like for '-o filename'
|
||||
assert(argv && "null check");
|
||||
@@ -333,8 +336,8 @@ static inline bool ProvideOption(Option *Handler, StringRef ArgName,
|
||||
" with ValueDisallowed modifier!");
|
||||
|
||||
if (Value.data())
|
||||
return Handler->error("does not allow a value! '" +
|
||||
Twine(Value) + "' specified.");
|
||||
return Handler->error("does not allow a value! '" + Twine(Value) +
|
||||
"' specified.");
|
||||
break;
|
||||
case ValueOptional:
|
||||
break;
|
||||
@@ -355,7 +358,7 @@ static inline bool ProvideOption(Option *Handler, StringRef ArgName,
|
||||
}
|
||||
|
||||
while (NumAdditionalVals > 0) {
|
||||
if (i+1 >= argc)
|
||||
if (i + 1 >= argc)
|
||||
return Handler->error("not enough values!");
|
||||
assert(argv && "null check");
|
||||
Value = argv[++i];
|
||||
@@ -373,7 +376,6 @@ static bool ProvidePositionalOption(Option *Handler, StringRef Arg, int i) {
|
||||
return ProvideOption(Handler, Handler->ArgStr, Arg, 0, nullptr, Dummy);
|
||||
}
|
||||
|
||||
|
||||
// Option predicates...
|
||||
static inline bool isGrouping(const Option *O) {
|
||||
return O->getFormattingFlag() == cl::Grouping;
|
||||
@@ -389,16 +391,16 @@ static inline bool isPrefixedOrGrouping(const Option *O) {
|
||||
// otherwise return null.
|
||||
//
|
||||
static Option *getOptionPred(StringRef Name, size_t &Length,
|
||||
bool (*Pred)(const Option*),
|
||||
const StringMap<Option*> &OptionsMap) {
|
||||
bool (*Pred)(const Option *),
|
||||
const StringMap<Option *> &OptionsMap) {
|
||||
|
||||
StringMap<Option*>::const_iterator OMI = OptionsMap.find(Name);
|
||||
StringMap<Option *>::const_iterator OMI = OptionsMap.find(Name);
|
||||
|
||||
// Loop while we haven't found an option and Name still has at least two
|
||||
// characters in it (so that the next iteration will not be the empty
|
||||
// string.
|
||||
while (OMI == OptionsMap.end() && Name.size() > 1) {
|
||||
Name = Name.substr(0, Name.size()-1); // Chop off the last character.
|
||||
Name = Name.substr(0, Name.size() - 1); // Chop off the last character.
|
||||
OMI = OptionsMap.find(Name);
|
||||
}
|
||||
|
||||
@@ -413,15 +415,18 @@ static Option *getOptionPred(StringRef Name, size_t &Length,
|
||||
/// 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.
|
||||
static Option *HandlePrefixedOrGroupedOption(StringRef &Arg, StringRef &Value,
|
||||
static Option *
|
||||
HandlePrefixedOrGroupedOption(StringRef &Arg, StringRef &Value,
|
||||
bool &ErrorParsing,
|
||||
const StringMap<Option*> &OptionsMap) {
|
||||
if (Arg.size() == 1) return nullptr;
|
||||
const StringMap<Option *> &OptionsMap) {
|
||||
if (Arg.size() == 1)
|
||||
return nullptr;
|
||||
|
||||
// Do the lookup!
|
||||
size_t Length = 0;
|
||||
Option *PGOpt = getOptionPred(Arg, Length, isPrefixedOrGrouping, OptionsMap);
|
||||
if (!PGOpt) return nullptr;
|
||||
if (!PGOpt)
|
||||
return nullptr;
|
||||
|
||||
// If the option is a prefixed option, then the value is simply the
|
||||
// rest of the name... so fall through to later processing, by
|
||||
@@ -447,8 +452,8 @@ static Option *HandlePrefixedOrGroupedOption(StringRef &Arg, StringRef &Value,
|
||||
assert(PGOpt->getValueExpectedFlag() != cl::ValueRequired &&
|
||||
"Option can not be cl::Grouping AND cl::ValueRequired!");
|
||||
int Dummy = 0;
|
||||
ErrorParsing |= ProvideOption(PGOpt, OneArgName,
|
||||
StringRef(), 0, nullptr, Dummy);
|
||||
ErrorParsing |=
|
||||
ProvideOption(PGOpt, OneArgName, StringRef(), 0, nullptr, Dummy);
|
||||
|
||||
// Get the next grouping option.
|
||||
PGOpt = getOptionPred(Arg, Length, isGrouping, OptionsMap);
|
||||
@@ -458,8 +463,6 @@ static Option *HandlePrefixedOrGroupedOption(StringRef &Arg, StringRef &Value,
|
||||
return PGOpt;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static bool RequiresValue(const Option *O) {
|
||||
return O->getNumOccurrencesFlag() == cl::Required ||
|
||||
O->getNumOccurrencesFlag() == cl::OneOrMore;
|
||||
@@ -470,17 +473,11 @@ static bool EatsUnboundedNumberOfValues(const Option *O) {
|
||||
O->getNumOccurrencesFlag() == cl::OneOrMore;
|
||||
}
|
||||
|
||||
static bool isWhitespace(char C) {
|
||||
return strchr(" \t\n\r\f\v", C);
|
||||
}
|
||||
static bool isWhitespace(char C) { return strchr(" \t\n\r\f\v", C); }
|
||||
|
||||
static bool isQuote(char C) {
|
||||
return C == '\"' || C == '\'';
|
||||
}
|
||||
static bool isQuote(char C) { return C == '\"' || C == '\''; }
|
||||
|
||||
static bool isGNUSpecial(char C) {
|
||||
return strchr("\\\"\' ", C);
|
||||
}
|
||||
static bool isGNUSpecial(char C) { return strchr("\\\"\' ", C); }
|
||||
|
||||
void cl::TokenizeGNUCommandLine(StringRef Src, StringSaver &Saver,
|
||||
SmallVectorImpl<const char *> &NewArgv,
|
||||
@@ -495,7 +492,8 @@ void cl::TokenizeGNUCommandLine(StringRef Src, StringSaver &Saver,
|
||||
NewArgv.push_back(nullptr);
|
||||
++I;
|
||||
}
|
||||
if (I == E) break;
|
||||
if (I == E)
|
||||
break;
|
||||
}
|
||||
|
||||
// Backslashes can escape backslashes, spaces, and other quotes. Otherwise
|
||||
@@ -516,7 +514,8 @@ void cl::TokenizeGNUCommandLine(StringRef Src, StringSaver &Saver,
|
||||
Token.push_back(Src[I]);
|
||||
++I;
|
||||
}
|
||||
if (I == E) break;
|
||||
if (I == E)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -691,7 +690,7 @@ bool cl::ExpandResponseFiles(StringSaver &Saver, TokenizerCallback Tokenizer,
|
||||
bool AllExpanded = true;
|
||||
|
||||
// Don't cache Argv.size() because it can change.
|
||||
for (unsigned I = 0; I != Argv.size(); ) {
|
||||
for (unsigned I = 0; I != Argv.size();) {
|
||||
const char *Arg = Argv[I];
|
||||
// Check if it is an EOL marker
|
||||
if (Arg == nullptr) {
|
||||
@@ -728,12 +727,13 @@ bool cl::ExpandResponseFiles(StringSaver &Saver, TokenizerCallback Tokenizer,
|
||||
}
|
||||
|
||||
namespace {
|
||||
class StrDupSaver : public StringSaver {
|
||||
std::vector<char*> Dups;
|
||||
public:
|
||||
class StrDupSaver : public StringSaver {
|
||||
std::vector<char *> Dups;
|
||||
|
||||
public:
|
||||
~StrDupSaver() {
|
||||
for (std::vector<char *>::iterator I = Dups.begin(), E = Dups.end();
|
||||
I != E; ++I) {
|
||||
for (std::vector<char *>::iterator I = Dups.begin(), E = Dups.end(); I != E;
|
||||
++I) {
|
||||
char *Dup = *I;
|
||||
free(Dup);
|
||||
}
|
||||
@@ -743,7 +743,7 @@ namespace {
|
||||
Dups.push_back(Dup);
|
||||
return Dup;
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
/// ParseEnvironmentOptions - An alternative entry point to the
|
||||
@@ -775,16 +775,15 @@ void cl::ParseEnvironmentOptions(const char *progName, const char *envVar,
|
||||
ParseCommandLineOptions(newArgc, &newArgv[0], Overview);
|
||||
}
|
||||
|
||||
void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
void cl::ParseCommandLineOptions(int argc, const char *const *argv,
|
||||
const char *Overview) {
|
||||
// Process all registered options.
|
||||
SmallVector<Option*, 4> PositionalOpts;
|
||||
SmallVector<Option*, 4> SinkOpts;
|
||||
StringMap<Option*> Opts;
|
||||
SmallVector<Option *, 4> PositionalOpts;
|
||||
SmallVector<Option *, 4> SinkOpts;
|
||||
StringMap<Option *> Opts;
|
||||
GetOptionInfo(PositionalOpts, SinkOpts, Opts);
|
||||
|
||||
assert((!Opts.empty() || !PositionalOpts.empty()) &&
|
||||
"No options specified!");
|
||||
assert((!Opts.empty() || !PositionalOpts.empty()) && "No options specified!");
|
||||
|
||||
// Expand response files.
|
||||
SmallVector<const char *, 20> newArgv;
|
||||
@@ -820,8 +819,8 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
|
||||
// Calculate how many positional values are _required_.
|
||||
bool UnboundedFound = false;
|
||||
for (size_t i = ConsumeAfterOpt ? 1 : 0, e = PositionalOpts.size();
|
||||
i != e; ++i) {
|
||||
for (size_t i = ConsumeAfterOpt ? 1 : 0, e = PositionalOpts.size(); i != e;
|
||||
++i) {
|
||||
Option *Opt = PositionalOpts[i];
|
||||
if (RequiresValue(Opt))
|
||||
++NumPositionalRequired;
|
||||
@@ -829,8 +828,8 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
// ConsumeAfter cannot be combined with "optional" positional options
|
||||
// unless there is only one positional argument...
|
||||
if (PositionalOpts.size() > 2)
|
||||
ErrorParsing |=
|
||||
Opt->error("error - this positional option will never be matched, "
|
||||
ErrorParsing |= Opt->error(
|
||||
"error - this positional option will never be matched, "
|
||||
"because it does not Require a value, and a "
|
||||
"cl::ConsumeAfter option is active!");
|
||||
} else if (UnboundedFound && !Opt->ArgStr[0]) {
|
||||
@@ -851,7 +850,7 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
// PositionalVals - A vector of "positional" arguments we accumulate into
|
||||
// the process at the end.
|
||||
//
|
||||
SmallVector<std::pair<StringRef,unsigned>, 4> PositionalVals;
|
||||
SmallVector<std::pair<StringRef, unsigned>, 4> PositionalVals;
|
||||
|
||||
// If the program has named positional arguments, and the name has been run
|
||||
// across, keep track of which positional argument was named. Otherwise put
|
||||
@@ -890,14 +889,14 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
}
|
||||
|
||||
if (!PositionalOpts.empty()) {
|
||||
PositionalVals.push_back(std::make_pair(argv[i],i));
|
||||
PositionalVals.push_back(std::make_pair(argv[i], i));
|
||||
|
||||
// All of the positional arguments have been fulfulled, give the rest to
|
||||
// the consume after option... if it's specified...
|
||||
//
|
||||
if (PositionalVals.size() >= NumPositionalRequired && ConsumeAfterOpt) {
|
||||
for (++i; i < argc; ++i)
|
||||
PositionalVals.push_back(std::make_pair(argv[i],i));
|
||||
PositionalVals.push_back(std::make_pair(argv[i], i));
|
||||
break; // Handle outside of the argument processing loop...
|
||||
}
|
||||
|
||||
@@ -913,7 +912,7 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
// If there is a positional argument eating options, check to see if this
|
||||
// option is another positional argument. If so, treat it as an argument,
|
||||
// otherwise feed it to the eating positional.
|
||||
ArgName = argv[i]+1;
|
||||
ArgName = argv[i] + 1;
|
||||
// Eat leading dashes.
|
||||
while (!ArgName.empty() && ArgName[0] == '-')
|
||||
ArgName = ArgName.substr(1);
|
||||
@@ -925,7 +924,7 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
}
|
||||
|
||||
} else { // We start with a '-', must be an argument.
|
||||
ArgName = argv[i]+1;
|
||||
ArgName = argv[i] + 1;
|
||||
// Eat leading dashes.
|
||||
while (!ArgName.empty() && ArgName[0] == '-')
|
||||
ArgName = ArgName.substr(1);
|
||||
@@ -934,31 +933,32 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
|
||||
// Check to see if this "option" is really a prefixed or grouped argument.
|
||||
if (!Handler)
|
||||
Handler = HandlePrefixedOrGroupedOption(ArgName, Value,
|
||||
ErrorParsing, Opts);
|
||||
Handler =
|
||||
HandlePrefixedOrGroupedOption(ArgName, Value, ErrorParsing, Opts);
|
||||
|
||||
// Otherwise, look for the closest available option to report to the user
|
||||
// in the upcoming error.
|
||||
if (!Handler && SinkOpts.empty())
|
||||
NearestHandler = LookupNearestOption(ArgName, Opts,
|
||||
NearestHandlerString);
|
||||
NearestHandler =
|
||||
LookupNearestOption(ArgName, Opts, NearestHandlerString);
|
||||
}
|
||||
|
||||
if (!Handler) {
|
||||
if (SinkOpts.empty()) {
|
||||
errs() << ProgramName << ": Unknown command line argument '"
|
||||
<< argv[i] << "'. Try: '" << argv[0] << " -help'\n";
|
||||
errs() << ProgramName << ": Unknown command line argument '" << argv[i]
|
||||
<< "'. Try: '" << argv[0] << " -help'\n";
|
||||
|
||||
if (NearestHandler) {
|
||||
// If we know a near match, report it as well.
|
||||
errs() << ProgramName << ": Did you mean '-"
|
||||
<< NearestHandlerString << "'?\n";
|
||||
errs() << ProgramName << ": Did you mean '-" << NearestHandlerString
|
||||
<< "'?\n";
|
||||
}
|
||||
|
||||
ErrorParsing = true;
|
||||
} else {
|
||||
for (SmallVectorImpl<Option*>::iterator I = SinkOpts.begin(),
|
||||
E = SinkOpts.end(); I != E ; ++I)
|
||||
for (SmallVectorImpl<Option *>::iterator I = SinkOpts.begin(),
|
||||
E = SinkOpts.end();
|
||||
I != E; ++I)
|
||||
(*I)->addOccurrence(i, "", argv[i]);
|
||||
}
|
||||
continue;
|
||||
@@ -982,8 +982,7 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
ErrorParsing = true;
|
||||
} else if (!HasUnlimitedPositionals &&
|
||||
PositionalVals.size() > PositionalOpts.size()) {
|
||||
errs() << ProgramName
|
||||
<< ": Too many positional arguments specified!\n"
|
||||
errs() << ProgramName << ": Too many positional arguments specified!\n"
|
||||
<< "Can specify at most " << PositionalOpts.size()
|
||||
<< " positional arguments: See: " << argv[0] << " -help\n";
|
||||
ErrorParsing = true;
|
||||
@@ -1004,7 +1003,7 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
// option even _WANTS_ any more.
|
||||
//
|
||||
bool Done = PositionalOpts[i]->getNumOccurrencesFlag() == cl::Required;
|
||||
while (NumVals-ValNo > NumPositionalRequired && !Done) {
|
||||
while (NumVals - ValNo > NumPositionalRequired && !Done) {
|
||||
switch (PositionalOpts[i]->getNumOccurrencesFlag()) {
|
||||
case cl::Optional:
|
||||
Done = true; // Optional arguments want _at most_ one value
|
||||
@@ -1048,8 +1047,8 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
// Handle over all of the rest of the arguments to the
|
||||
// cl::ConsumeAfter command line option...
|
||||
for (; ValNo != PositionalVals.size(); ++ValNo)
|
||||
ErrorParsing |= ProvidePositionalOption(ConsumeAfterOpt,
|
||||
PositionalVals[ValNo].first,
|
||||
ErrorParsing |=
|
||||
ProvidePositionalOption(ConsumeAfterOpt, PositionalVals[ValNo].first,
|
||||
PositionalVals[ValNo].second);
|
||||
}
|
||||
|
||||
@@ -1072,10 +1071,8 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
// Note that if ReadResponseFiles == true, this must be done before the
|
||||
// memory allocated for the expanded command line is free()d below.
|
||||
DEBUG(dbgs() << "Args: ";
|
||||
for (int i = 0; i < argc; ++i)
|
||||
dbgs() << argv[i] << ' ';
|
||||
dbgs() << '\n';
|
||||
);
|
||||
for (int i = 0; i < argc; ++i) dbgs() << argv[i] << ' ';
|
||||
dbgs() << '\n';);
|
||||
|
||||
// Free all of the memory allocated to the map. Command line options may only
|
||||
// be processed once!
|
||||
@@ -1084,7 +1081,8 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
MoreHelp->clear();
|
||||
|
||||
// If we had an error processing our arguments, don't let the program execute
|
||||
if (ErrorParsing) exit(1);
|
||||
if (ErrorParsing)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@@ -1092,7 +1090,8 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
|
||||
//
|
||||
|
||||
bool Option::error(const Twine &Message, StringRef ArgName) {
|
||||
if (!ArgName.data()) ArgName = ArgStr;
|
||||
if (!ArgName.data())
|
||||
ArgName = ArgStr;
|
||||
if (ArgName.empty())
|
||||
errs() << HelpStr; // Be nice for positional arguments
|
||||
else
|
||||
@@ -1102,8 +1101,8 @@ bool Option::error(const Twine &Message, StringRef ArgName) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Option::addOccurrence(unsigned pos, StringRef ArgName,
|
||||
StringRef Value, bool MultiArg) {
|
||||
bool Option::addOccurrence(unsigned pos, StringRef ArgName, StringRef Value,
|
||||
bool MultiArg) {
|
||||
if (!MultiArg)
|
||||
NumOccurrences++; // Increment the number of times we have been seen
|
||||
|
||||
@@ -1118,18 +1117,19 @@ bool Option::addOccurrence(unsigned pos, StringRef ArgName,
|
||||
// Fall through
|
||||
case OneOrMore:
|
||||
case ZeroOrMore:
|
||||
case ConsumeAfter: break;
|
||||
case ConsumeAfter:
|
||||
break;
|
||||
}
|
||||
|
||||
return handleOccurrence(pos, ArgName, Value);
|
||||
}
|
||||
|
||||
|
||||
// getValueStr - Get the value description string, using "DefaultMsg" if nothing
|
||||
// has been specified yet.
|
||||
//
|
||||
static const char *getValueStr(const Option &O, const char *DefaultMsg) {
|
||||
if (O.ValueStr[0] == 0) return DefaultMsg;
|
||||
if (O.ValueStr[0] == 0)
|
||||
return DefaultMsg;
|
||||
return O.ValueStr;
|
||||
}
|
||||
|
||||
@@ -1138,9 +1138,7 @@ static const char *getValueStr(const Option &O, const char *DefaultMsg) {
|
||||
//
|
||||
|
||||
// Return the width of the option tag for printing...
|
||||
size_t alias::getOptionWidth() const {
|
||||
return std::strlen(ArgStr)+6;
|
||||
}
|
||||
size_t alias::getOptionWidth() const { return std::strlen(ArgStr) + 6; }
|
||||
|
||||
static void printHelpStr(StringRef HelpStr, size_t Indent,
|
||||
size_t FirstLineIndentedBy) {
|
||||
@@ -1169,7 +1167,7 @@ void alias::printOptionInfo(size_t GlobalWidth) const {
|
||||
size_t basic_parser_impl::getOptionWidth(const Option &O) const {
|
||||
size_t Len = std::strlen(O.ArgStr);
|
||||
if (const char *ValName = getValueName())
|
||||
Len += std::strlen(getValueStr(O, ValName))+3;
|
||||
Len += std::strlen(getValueStr(O, ValName)) + 3;
|
||||
|
||||
return Len + 6;
|
||||
}
|
||||
@@ -1190,14 +1188,13 @@ void basic_parser_impl::printOptionInfo(const Option &O,
|
||||
void basic_parser_impl::printOptionName(const Option &O,
|
||||
size_t GlobalWidth) const {
|
||||
outs() << " -" << O.ArgStr;
|
||||
outs().indent(GlobalWidth-std::strlen(O.ArgStr));
|
||||
outs().indent(GlobalWidth - std::strlen(O.ArgStr));
|
||||
}
|
||||
|
||||
|
||||
// parser<bool> implementation
|
||||
//
|
||||
bool parser<bool>::parse(Option &O, StringRef ArgName,
|
||||
StringRef Arg, bool &Value) {
|
||||
bool parser<bool>::parse(Option &O, StringRef ArgName, StringRef Arg,
|
||||
bool &Value) {
|
||||
if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
|
||||
Arg == "1") {
|
||||
Value = true;
|
||||
@@ -1214,8 +1211,8 @@ bool parser<bool>::parse(Option &O, StringRef ArgName,
|
||||
|
||||
// parser<boolOrDefault> implementation
|
||||
//
|
||||
bool parser<boolOrDefault>::parse(Option &O, StringRef ArgName,
|
||||
StringRef Arg, boolOrDefault &Value) {
|
||||
bool parser<boolOrDefault>::parse(Option &O, StringRef ArgName, StringRef Arg,
|
||||
boolOrDefault &Value) {
|
||||
if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
|
||||
Arg == "1") {
|
||||
Value = BOU_TRUE;
|
||||
@@ -1232,8 +1229,8 @@ bool parser<boolOrDefault>::parse(Option &O, StringRef ArgName,
|
||||
|
||||
// parser<int> implementation
|
||||
//
|
||||
bool parser<int>::parse(Option &O, StringRef ArgName,
|
||||
StringRef Arg, int &Value) {
|
||||
bool parser<int>::parse(Option &O, StringRef ArgName, StringRef Arg,
|
||||
int &Value) {
|
||||
if (Arg.getAsInteger(0, Value))
|
||||
return O.error("'" + Arg + "' value invalid for integer argument!");
|
||||
return false;
|
||||
@@ -1241,8 +1238,8 @@ bool parser<int>::parse(Option &O, StringRef ArgName,
|
||||
|
||||
// parser<unsigned> implementation
|
||||
//
|
||||
bool parser<unsigned>::parse(Option &O, StringRef ArgName,
|
||||
StringRef Arg, unsigned &Value) {
|
||||
bool parser<unsigned>::parse(Option &O, StringRef ArgName, StringRef Arg,
|
||||
unsigned &Value) {
|
||||
|
||||
if (Arg.getAsInteger(0, Value))
|
||||
return O.error("'" + Arg + "' value invalid for uint argument!");
|
||||
@@ -1252,7 +1249,8 @@ bool parser<unsigned>::parse(Option &O, StringRef ArgName,
|
||||
// parser<unsigned long long> implementation
|
||||
//
|
||||
bool parser<unsigned long long>::parse(Option &O, StringRef ArgName,
|
||||
StringRef Arg, unsigned long long &Value){
|
||||
StringRef Arg,
|
||||
unsigned long long &Value) {
|
||||
|
||||
if (Arg.getAsInteger(0, Value))
|
||||
return O.error("'" + Arg + "' value invalid for uint argument!");
|
||||
@@ -1271,13 +1269,13 @@ static bool parseDouble(Option &O, StringRef Arg, double &Value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool parser<double>::parse(Option &O, StringRef ArgName,
|
||||
StringRef Arg, double &Val) {
|
||||
bool parser<double>::parse(Option &O, StringRef ArgName, StringRef Arg,
|
||||
double &Val) {
|
||||
return parseDouble(O, Arg, Val);
|
||||
}
|
||||
|
||||
bool parser<float>::parse(Option &O, StringRef ArgName,
|
||||
StringRef Arg, float &Val) {
|
||||
bool parser<float>::parse(Option &O, StringRef ArgName, StringRef Arg,
|
||||
float &Val) {
|
||||
double dVal;
|
||||
if (parseDouble(O, Arg, dVal))
|
||||
return true;
|
||||
@@ -1285,8 +1283,6 @@ bool parser<float>::parse(Option &O, StringRef ArgName,
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// generic_parser_base implementation
|
||||
//
|
||||
|
||||
@@ -1303,18 +1299,17 @@ unsigned generic_parser_base::findOption(const char *Name) {
|
||||
return e;
|
||||
}
|
||||
|
||||
|
||||
// Return the width of the option tag for printing...
|
||||
size_t generic_parser_base::getOptionWidth(const Option &O) const {
|
||||
if (O.hasArgStr()) {
|
||||
size_t Size = std::strlen(O.ArgStr)+6;
|
||||
size_t Size = std::strlen(O.ArgStr) + 6;
|
||||
for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
|
||||
Size = std::max(Size, std::strlen(getOption(i))+8);
|
||||
Size = std::max(Size, std::strlen(getOption(i)) + 8);
|
||||
return Size;
|
||||
} else {
|
||||
size_t BaseSize = 0;
|
||||
for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
|
||||
BaseSize = std::max(BaseSize, std::strlen(getOption(i))+8);
|
||||
BaseSize = std::max(BaseSize, std::strlen(getOption(i)) + 8);
|
||||
return BaseSize;
|
||||
}
|
||||
}
|
||||
@@ -1329,7 +1324,7 @@ void generic_parser_base::printOptionInfo(const Option &O,
|
||||
printHelpStr(O.HelpStr, GlobalWidth, std::strlen(O.ArgStr) + 6);
|
||||
|
||||
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
|
||||
size_t NumSpaces = GlobalWidth-strlen(getOption(i))-8;
|
||||
size_t NumSpaces = GlobalWidth - strlen(getOption(i)) - 8;
|
||||
outs() << " =" << getOption(i);
|
||||
outs().indent(NumSpaces) << " - " << getDescription(i) << '\n';
|
||||
}
|
||||
@@ -1349,12 +1344,11 @@ static const size_t MaxOptWidth = 8; // arbitrary spacing for printOptionDiff
|
||||
// printGenericOptionDiff - Print the value of this option and it's default.
|
||||
//
|
||||
// "Generic" options have each value mapped to a name.
|
||||
void generic_parser_base::
|
||||
printGenericOptionDiff(const Option &O, const GenericOptionValue &Value,
|
||||
const GenericOptionValue &Default,
|
||||
size_t GlobalWidth) const {
|
||||
void generic_parser_base::printGenericOptionDiff(
|
||||
const Option &O, const GenericOptionValue &Value,
|
||||
const GenericOptionValue &Default, size_t GlobalWidth) const {
|
||||
outs() << " -" << O.ArgStr;
|
||||
outs().indent(GlobalWidth-std::strlen(O.ArgStr));
|
||||
outs().indent(GlobalWidth - std::strlen(O.ArgStr));
|
||||
|
||||
unsigned NumOpts = getNumOptions();
|
||||
for (unsigned i = 0; i != NumOpts; ++i) {
|
||||
@@ -1380,8 +1374,7 @@ printGenericOptionDiff(const Option &O, const GenericOptionValue &Value,
|
||||
// printOptionDiff - Specializations for printing basic value types.
|
||||
//
|
||||
#define PRINT_OPT_DIFF(T) \
|
||||
void parser<T>:: \
|
||||
printOptionDiff(const Option &O, T V, OptionValue<T> D, \
|
||||
void parser<T>::printOptionDiff(const Option &O, T V, OptionValue<T> D, \
|
||||
size_t GlobalWidth) const { \
|
||||
printOptionName(O, GlobalWidth); \
|
||||
std::string Str; \
|
||||
@@ -1390,14 +1383,15 @@ printGenericOptionDiff(const Option &O, const GenericOptionValue &Value,
|
||||
SS << V; \
|
||||
} \
|
||||
outs() << "= " << Str; \
|
||||
size_t NumSpaces = MaxOptWidth > Str.size() ? MaxOptWidth - Str.size() : 0;\
|
||||
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"; \
|
||||
} \
|
||||
}
|
||||
|
||||
PRINT_OPT_DIFF(bool)
|
||||
PRINT_OPT_DIFF(boolOrDefault)
|
||||
@@ -1408,8 +1402,8 @@ PRINT_OPT_DIFF(double)
|
||||
PRINT_OPT_DIFF(float)
|
||||
PRINT_OPT_DIFF(char)
|
||||
|
||||
void parser<std::string>::
|
||||
printOptionDiff(const Option &O, StringRef V, OptionValue<std::string> D,
|
||||
void parser<std::string>::printOptionDiff(const Option &O, StringRef V,
|
||||
OptionValue<std::string> D,
|
||||
size_t GlobalWidth) const {
|
||||
printOptionName(O, GlobalWidth);
|
||||
outs() << "= " << V;
|
||||
@@ -1423,8 +1417,8 @@ printOptionDiff(const Option &O, StringRef V, OptionValue<std::string> D,
|
||||
}
|
||||
|
||||
// Print a placeholder for options that don't yet support printOptionDiff().
|
||||
void basic_parser_impl::
|
||||
printOptionNoValue(const Option &O, size_t GlobalWidth) const {
|
||||
void basic_parser_impl::printOptionNoValue(const Option &O,
|
||||
size_t GlobalWidth) const {
|
||||
printOptionName(O, GlobalWidth);
|
||||
outs() << "= *cannot print option value*\n";
|
||||
}
|
||||
@@ -1434,19 +1428,18 @@ printOptionNoValue(const Option &O, size_t GlobalWidth) const {
|
||||
//
|
||||
|
||||
static int OptNameCompare(const void *LHS, const void *RHS) {
|
||||
typedef std::pair<const char *, Option*> pair_ty;
|
||||
typedef std::pair<const char *, Option *> pair_ty;
|
||||
|
||||
return strcmp(((const pair_ty*)LHS)->first, ((const pair_ty*)RHS)->first);
|
||||
return strcmp(((const pair_ty *)LHS)->first, ((const pair_ty *)RHS)->first);
|
||||
}
|
||||
|
||||
// Copy Options into a vector so we can sort them as we like.
|
||||
static void
|
||||
sortOpts(StringMap<Option*> &OptMap,
|
||||
SmallVectorImpl< std::pair<const char *, Option*> > &Opts,
|
||||
static void sortOpts(StringMap<Option *> &OptMap,
|
||||
SmallVectorImpl<std::pair<const char *, Option *>> &Opts,
|
||||
bool ShowHidden) {
|
||||
SmallPtrSet<Option*, 128> OptionSet; // Duplicate option detection.
|
||||
SmallPtrSet<Option *, 128> OptionSet; // Duplicate option detection.
|
||||
|
||||
for (StringMap<Option*>::iterator I = OptMap.begin(), E = OptMap.end();
|
||||
for (StringMap<Option *>::iterator I = OptMap.begin(), E = OptMap.end();
|
||||
I != E; ++I) {
|
||||
// Ignore really-hidden options.
|
||||
if (I->second->getOptionHiddenFlag() == ReallyHidden)
|
||||
@@ -1460,8 +1453,8 @@ sortOpts(StringMap<Option*> &OptMap,
|
||||
if (!OptionSet.insert(I->second).second)
|
||||
continue;
|
||||
|
||||
Opts.push_back(std::pair<const char *, Option*>(I->getKey().data(),
|
||||
I->second));
|
||||
Opts.push_back(
|
||||
std::pair<const char *, Option *>(I->getKey().data(), I->second));
|
||||
}
|
||||
|
||||
// Sort the options list alphabetically.
|
||||
@@ -1473,7 +1466,8 @@ namespace {
|
||||
class HelpPrinter {
|
||||
protected:
|
||||
const bool ShowHidden;
|
||||
typedef SmallVector<std::pair<const char *, Option*>,128> StrOptionPairVector;
|
||||
typedef SmallVector<std::pair<const char *, Option *>, 128>
|
||||
StrOptionPairVector;
|
||||
// Print the options. Opts is assumed to be alphabetically sorted.
|
||||
virtual void printOptions(StrOptionPairVector &Opts, size_t MaxArgLen) {
|
||||
for (size_t i = 0, e = Opts.size(); i != e; ++i)
|
||||
@@ -1486,12 +1480,13 @@ public:
|
||||
|
||||
// Invoke the printer.
|
||||
void operator=(bool Value) {
|
||||
if (Value == false) return;
|
||||
if (Value == false)
|
||||
return;
|
||||
|
||||
// Get all the options.
|
||||
SmallVector<Option*, 4> PositionalOpts;
|
||||
SmallVector<Option*, 4> SinkOpts;
|
||||
StringMap<Option*> OptMap;
|
||||
SmallVector<Option *, 4> PositionalOpts;
|
||||
SmallVector<Option *, 4> SinkOpts;
|
||||
StringMap<Option *> OptMap;
|
||||
GetOptionInfo(PositionalOpts, SinkOpts, OptMap);
|
||||
|
||||
StrOptionPairVector Opts;
|
||||
@@ -1515,7 +1510,8 @@ public:
|
||||
}
|
||||
|
||||
// Print the consume after option info if it exists...
|
||||
if (CAOpt) outs() << " " << CAOpt->HelpStr;
|
||||
if (CAOpt)
|
||||
outs() << " " << CAOpt->HelpStr;
|
||||
|
||||
outs() << "\n\n";
|
||||
|
||||
@@ -1551,12 +1547,12 @@ public:
|
||||
}
|
||||
|
||||
// Make sure we inherit our base class's operator=()
|
||||
using HelpPrinter::operator= ;
|
||||
using HelpPrinter::operator=;
|
||||
|
||||
protected:
|
||||
void printOptions(StrOptionPairVector &Opts, size_t MaxArgLen) override {
|
||||
std::vector<OptionCategory *> SortedCategories;
|
||||
std::map<OptionCategory *, std::vector<Option *> > CategorizedOptions;
|
||||
std::map<OptionCategory *, std::vector<Option *>> CategorizedOptions;
|
||||
|
||||
// Collect registered option categories into vector in preparation for
|
||||
// sorting.
|
||||
@@ -1633,9 +1629,9 @@ private:
|
||||
|
||||
public:
|
||||
explicit HelpPrinterWrapper(HelpPrinter &UncategorizedPrinter,
|
||||
CategorizedHelpPrinter &CategorizedPrinter) :
|
||||
UncategorizedPrinter(UncategorizedPrinter),
|
||||
CategorizedPrinter(CategorizedPrinter) { }
|
||||
CategorizedHelpPrinter &CategorizedPrinter)
|
||||
: UncategorizedPrinter(UncategorizedPrinter),
|
||||
CategorizedPrinter(CategorizedPrinter) {}
|
||||
|
||||
// Invoke the printer.
|
||||
void operator=(bool Value);
|
||||
@@ -1650,7 +1646,6 @@ static HelpPrinter UncategorizedHiddenPrinter(true);
|
||||
static CategorizedHelpPrinter CategorizedNormalPrinter(false);
|
||||
static CategorizedHelpPrinter CategorizedHiddenPrinter(true);
|
||||
|
||||
|
||||
// Declare HelpPrinter wrappers that will decide whether or not to invoke
|
||||
// a categorizing help printer
|
||||
static HelpPrinterWrapper WrappedNormalPrinter(UncategorizedNormalPrinter,
|
||||
@@ -1661,38 +1656,36 @@ static HelpPrinterWrapper WrappedHiddenPrinter(UncategorizedHiddenPrinter,
|
||||
// Define uncategorized help printers.
|
||||
// -help-list is hidden by default because if Option categories are being used
|
||||
// then -help behaves the same as -help-list.
|
||||
static cl::opt<HelpPrinter, true, parser<bool> >
|
||||
HLOp("help-list",
|
||||
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);
|
||||
|
||||
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);
|
||||
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);
|
||||
|
||||
// Define uncategorized/categorized help printers. These printers change their
|
||||
// behaviour at runtime depending on whether one or more Option categories have
|
||||
// been declared.
|
||||
static cl::opt<HelpPrinterWrapper, true, parser<bool> >
|
||||
HOp("help", cl::desc("Display available options (-help-hidden for more)"),
|
||||
static cl::opt<HelpPrinterWrapper, true, parser<bool>>
|
||||
HOp("help", cl::desc("Display available options (-help-hidden for more)"),
|
||||
cl::location(WrappedNormalPrinter), cl::ValueDisallowed);
|
||||
|
||||
static cl::opt<HelpPrinterWrapper, true, parser<bool> >
|
||||
HHOp("help-hidden", cl::desc("Display all available options"),
|
||||
static cl::opt<HelpPrinterWrapper, true, parser<bool>>
|
||||
HHOp("help-hidden", cl::desc("Display all available options"),
|
||||
cl::location(WrappedHiddenPrinter), cl::Hidden, cl::ValueDisallowed);
|
||||
|
||||
|
||||
|
||||
static cl::opt<bool>
|
||||
PrintOptions("print-options",
|
||||
static cl::opt<bool> PrintOptions(
|
||||
"print-options",
|
||||
cl::desc("Print non-default options after command line parsing"),
|
||||
cl::Hidden, cl::init(false));
|
||||
|
||||
static cl::opt<bool>
|
||||
PrintAllOptions("print-all-options",
|
||||
cl::desc("Print all option values after command line parsing"),
|
||||
cl::Hidden, cl::init(false));
|
||||
static cl::opt<bool> PrintAllOptions(
|
||||
"print-all-options",
|
||||
cl::desc("Print all option values after command line parsing"), cl::Hidden,
|
||||
cl::init(false));
|
||||
|
||||
void HelpPrinterWrapper::operator=(bool Value) {
|
||||
if (Value == false)
|
||||
@@ -1707,23 +1700,23 @@ void HelpPrinterWrapper::operator=(bool Value) {
|
||||
HLOp.setHiddenFlag(NotHidden);
|
||||
|
||||
CategorizedPrinter = true; // Invoke categorized printer
|
||||
}
|
||||
else
|
||||
} else
|
||||
UncategorizedPrinter = true; // Invoke uncategorized printer
|
||||
}
|
||||
|
||||
// Print the value of each option.
|
||||
void cl::PrintOptionValues() {
|
||||
if (!PrintOptions && !PrintAllOptions) return;
|
||||
if (!PrintOptions && !PrintAllOptions)
|
||||
return;
|
||||
|
||||
// Get all the options.
|
||||
SmallVector<Option*, 4> PositionalOpts;
|
||||
SmallVector<Option*, 4> SinkOpts;
|
||||
StringMap<Option*> OptMap;
|
||||
SmallVector<Option *, 4> PositionalOpts;
|
||||
SmallVector<Option *, 4> SinkOpts;
|
||||
StringMap<Option *> OptMap;
|
||||
GetOptionInfo(PositionalOpts, SinkOpts, OptMap);
|
||||
|
||||
SmallVector<std::pair<const char *, Option*>, 128> Opts;
|
||||
sortOpts(OptMap, Opts, /*ShowHidden*/true);
|
||||
SmallVector<std::pair<const char *, Option *>, 128> Opts;
|
||||
sortOpts(OptMap, Opts, /*ShowHidden*/ true);
|
||||
|
||||
// Compute the maximum argument length...
|
||||
size_t MaxArgLen = 0;
|
||||
@@ -1736,7 +1729,7 @@ void cl::PrintOptionValues() {
|
||||
|
||||
static void (*OverrideVersionPrinter)() = nullptr;
|
||||
|
||||
static std::vector<void (*)()>* ExtraVersionPrinters = nullptr;
|
||||
static std::vector<void (*)()> *ExtraVersionPrinters = nullptr;
|
||||
|
||||
namespace {
|
||||
class VersionPrinter {
|
||||
@@ -1758,7 +1751,8 @@ public:
|
||||
OS << " with assertions";
|
||||
#endif
|
||||
std::string CPU = sys::getHostCPUName();
|
||||
if (CPU == "generic") CPU = "(unknown)";
|
||||
if (CPU == "generic")
|
||||
CPU = "(unknown)";
|
||||
OS << ".\n"
|
||||
#if (ENABLE_TIMESTAMPS == 1)
|
||||
<< " Built " << __DATE__ << " (" << __TIME__ << ").\n"
|
||||
@@ -1767,7 +1761,8 @@ public:
|
||||
<< " Host CPU: " << CPU << '\n';
|
||||
}
|
||||
void operator=(bool OptionWasSpecified) {
|
||||
if (!OptionWasSpecified) return;
|
||||
if (!OptionWasSpecified)
|
||||
return;
|
||||
|
||||
if (OverrideVersionPrinter != nullptr) {
|
||||
(*OverrideVersionPrinter)();
|
||||
@@ -1790,12 +1785,11 @@ public:
|
||||
};
|
||||
} // End anonymous namespace
|
||||
|
||||
|
||||
// Define the --version option that prints out the LLVM version for the tool
|
||||
static VersionPrinter VersionPrinterInstance;
|
||||
|
||||
static cl::opt<VersionPrinter, true, parser<bool> >
|
||||
VersOp("version", cl::desc("Display the version of this program"),
|
||||
static cl::opt<VersionPrinter, true, parser<bool>>
|
||||
VersOp("version", cl::desc("Display the version of this program"),
|
||||
cl::location(VersionPrinterInstance), cl::ValueDisallowed);
|
||||
|
||||
// Utility function for printing the help message.
|
||||
@@ -1818,13 +1812,9 @@ void cl::PrintHelpMessage(bool Hidden, bool Categorized) {
|
||||
}
|
||||
|
||||
/// Utility function for printing version number.
|
||||
void cl::PrintVersionMessage() {
|
||||
VersionPrinterInstance.print();
|
||||
}
|
||||
void cl::PrintVersionMessage() { VersionPrinterInstance.print(); }
|
||||
|
||||
void cl::SetVersionPrinter(void (*func)()) {
|
||||
OverrideVersionPrinter = func;
|
||||
}
|
||||
void cl::SetVersionPrinter(void (*func)()) { OverrideVersionPrinter = func; }
|
||||
|
||||
void cl::AddExtraVersionPrinter(void (*func)()) {
|
||||
if (!ExtraVersionPrinters)
|
||||
@@ -1833,11 +1823,10 @@ void cl::AddExtraVersionPrinter(void (*func)()) {
|
||||
ExtraVersionPrinters->push_back(func);
|
||||
}
|
||||
|
||||
void cl::getRegisteredOptions(StringMap<Option*> &Map)
|
||||
{
|
||||
void cl::getRegisteredOptions(StringMap<Option *> &Map) {
|
||||
// Get all the options.
|
||||
SmallVector<Option*, 4> PositionalOpts; //NOT USED
|
||||
SmallVector<Option*, 4> SinkOpts; //NOT USED
|
||||
SmallVector<Option *, 4> PositionalOpts; // NOT USED
|
||||
SmallVector<Option *, 4> SinkOpts; // NOT USED
|
||||
assert(Map.size() == 0 && "StringMap must be empty");
|
||||
GetOptionInfo(PositionalOpts, SinkOpts, Map);
|
||||
return;
|
||||
|
Reference in New Issue
Block a user