Skip to content

Commit 8be13c8

Browse files
committed
[NFC][Support] Create helper function to parse bool.
- Create a helper template function to parse bool, to eliminate code duplication.
1 parent 94e6786 commit 8be13c8

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

llvm/lib/Support/CommandLine.cpp

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,22 @@ class CommandLineParser {
400400
SubCommand *LookupSubCommand(StringRef Name, std::string &NearestString);
401401
};
402402

403+
template <typename T, T TrueVal, T FalseVal>
404+
bool parseBool(Option &O, StringRef ArgName, StringRef Arg, T &Value) {
405+
if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
406+
Arg == "1") {
407+
Value = TrueVal;
408+
return false;
409+
}
410+
411+
if (Arg == "false" || Arg == "FALSE" || Arg == "False" || Arg == "0") {
412+
Value = FalseVal;
413+
return false;
414+
}
415+
return O.error("'" + Arg +
416+
"' is invalid value for boolean argument! Try 0 or 1");
417+
}
418+
403419
} // namespace
404420

405421
static ManagedStatic<CommandLineParser> GlobalParser;
@@ -1954,36 +1970,14 @@ void basic_parser_impl::printOptionName(const Option &O,
19541970
//
19551971
bool parser<bool>::parse(Option &O, StringRef ArgName, StringRef Arg,
19561972
bool &Value) {
1957-
if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
1958-
Arg == "1") {
1959-
Value = true;
1960-
return false;
1961-
}
1962-
1963-
if (Arg == "false" || Arg == "FALSE" || Arg == "False" || Arg == "0") {
1964-
Value = false;
1965-
return false;
1966-
}
1967-
return O.error("'" + Arg +
1968-
"' is invalid value for boolean argument! Try 0 or 1");
1973+
return parseBool<bool, true, false>(O, ArgName, Arg, Value);
19691974
}
19701975

19711976
// parser<boolOrDefault> implementation
19721977
//
19731978
bool parser<boolOrDefault>::parse(Option &O, StringRef ArgName, StringRef Arg,
19741979
boolOrDefault &Value) {
1975-
if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
1976-
Arg == "1") {
1977-
Value = BOU_TRUE;
1978-
return false;
1979-
}
1980-
if (Arg == "false" || Arg == "FALSE" || Arg == "False" || Arg == "0") {
1981-
Value = BOU_FALSE;
1982-
return false;
1983-
}
1984-
1985-
return O.error("'" + Arg +
1986-
"' is invalid value for boolean argument! Try 0 or 1");
1980+
return parseBool<boolOrDefault, BOU_TRUE, BOU_FALSE>(O, ArgName, Arg, Value);
19871981
}
19881982

19891983
// parser<int> implementation

0 commit comments

Comments
 (0)