@@ -404,6 +404,22 @@ class CommandLineParser {
404404
405405static 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+
407423void 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//
19551971bool 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//
19731978bool 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