Skip to content

Commit 136e5f4

Browse files
authored
[NFC][Support] Create helper function to parse bool (#102818)
Create a helper template function to parse bool, to eliminate code duplication.
1 parent b4b0c02 commit 136e5f4

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
@@ -404,6 +404,22 @@ class CommandLineParser {
404404

405405
static ManagedStatic<CommandLineParser> GlobalParser;
406406

407+
template <typename T, T TrueVal, T FalseVal>
408+
static bool parseBool(Option &O, StringRef ArgName, StringRef Arg, T &Value) {
409+
if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
410+
Arg == "1") {
411+
Value = TrueVal;
412+
return false;
413+
}
414+
415+
if (Arg == "false" || Arg == "FALSE" || Arg == "False" || Arg == "0") {
416+
Value = FalseVal;
417+
return false;
418+
}
419+
return O.error("'" + Arg +
420+
"' is invalid value for boolean argument! Try 0 or 1");
421+
}
422+
407423
void cl::AddLiteralOption(Option &O, StringRef Name) {
408424
GlobalParser->addLiteralOption(O, Name);
409425
}
@@ -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)