diff options
author | Chris Lattner <sabre@nondot.org> | 2009-09-20 00:07:40 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-09-20 00:07:40 +0000 |
commit | ca2552d9f94a97acd7d37a7366a90efc4c6f7b90 (patch) | |
tree | 2cf8c677dc75e8e230ae2502984356c0f8ebfddd /llvm/lib/Support/CommandLine.cpp | |
parent | 605109d151b4f8faab0fb25371ee4c0173e1dfba (diff) | |
download | bcm5719-llvm-ca2552d9f94a97acd7d37a7366a90efc4c6f7b90.tar.gz bcm5719-llvm-ca2552d9f94a97acd7d37a7366a90efc4c6f7b90.zip |
avoid a bunch of malloc thrashing for PositinoalVals by eliminating
a std::vector and a bunch of std::string temporaries.
llvm-svn: 82341
Diffstat (limited to 'llvm/lib/Support/CommandLine.cpp')
-rw-r--r-- | llvm/lib/Support/CommandLine.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/llvm/lib/Support/CommandLine.cpp b/llvm/lib/Support/CommandLine.cpp index 445fcc78862..1d0b9acc4b5 100644 --- a/llvm/lib/Support/CommandLine.cpp +++ b/llvm/lib/Support/CommandLine.cpp @@ -181,17 +181,16 @@ static inline bool ProvideOption(Option *Handler, const char *ArgName, switch (Handler->getValueExpectedFlag()) { case ValueRequired: if (Value == 0) { // No value specified? - if (i+1 < argc) { // Steal the next argument, like for '-o filename' - Value = argv[++i]; - } else { + if (i+1 >= argc) return Handler->error("requires a value!"); - } + // Steal the next argument, like for '-o filename' + Value = argv[++i]; } break; case ValueDisallowed: if (NumAdditionalVals > 0) return Handler->error("multi-valued option specified" - " with ValueDisallowed modifier!"); + " with ValueDisallowed modifier!"); if (Value) return Handler->error("does not allow a value! '" + @@ -199,6 +198,7 @@ static inline bool ProvideOption(Option *Handler, const char *ArgName, break; case ValueOptional: break; + default: errs() << ProgramName << ": Bad ValueMask flag! CommandLine usage error:" @@ -221,7 +221,6 @@ static inline bool ProvideOption(Option *Handler, const char *ArgName, } while (NumAdditionalVals > 0) { - if (i+1 >= argc) return Handler->error("not enough values!"); Value = argv[++i]; @@ -234,10 +233,9 @@ static inline bool ProvideOption(Option *Handler, const char *ArgName, return false; } -static bool ProvidePositionalOption(Option *Handler, const std::string &Arg, - int i) { +static bool ProvidePositionalOption(Option *Handler, StringRef Arg, int i) { int Dummy = i; - return ProvideOption(Handler, Handler->ArgStr, Arg.c_str(), 0, 0, Dummy); + return ProvideOption(Handler, Handler->ArgStr, Arg.data(), 0, 0, Dummy); } @@ -483,9 +481,9 @@ void cl::ParseCommandLineOptions(int argc, char **argv, } // PositionalVals - A vector of "positional" arguments we accumulate into - // the process at the end... + // the process at the end. // - std::vector<std::pair<std::string,unsigned> > 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 |