virtual void printOptionValue(size_t GlobalWidth, bool Force) const = 0;
+ virtual void setDefault() = 0;
+
static void printHelpStr(StringRef HelpStr, size_t Indent,
size_t FirstLineIndentedBy);
}
}
+ template <class T, class = typename std::enable_if<
+ std::is_assignable<T&, T>::value>::type>
+ void setDefaultImpl() {
+ const OptionValue<DataType> &V = this->getDefault();
+ if (V.hasValue())
+ this->setValue(V.getValue());
+ }
+
+ template <class T, class = typename std::enable_if<
+ !std::is_assignable<T&, T>::value>::type>
+ void setDefaultImpl(...) {}
+
+ void setDefault() override { setDefaultImpl<DataType>(); }
+
void done() {
addArgument();
Parser.initialize();
void printOptionValue(size_t /*GlobalWidth*/, bool /*Force*/) const override {
}
+ void setDefault() override {}
+
void done() {
addArgument();
Parser.initialize();
void printOptionValue(size_t /*GlobalWidth*/, bool /*Force*/) const override {
}
+ void setDefault() override {}
+
void done() {
addArgument();
Parser.initialize();
void printOptionValue(size_t /*GlobalWidth*/, bool /*Force*/) const override {
}
+ void setDefault() override { AliasFor->setDefault(); }
+
ValueExpected getValueExpectedFlagDefault() const override {
return AliasFor->getValueExpectedFlag();
}
llvm::sys::fs::remove(TestDir);
}
+TEST(CommandLineTest, SetDefautValue) {
+ cl::ResetCommandLineParser();
+
+ StackOption<std::string> Opt1("opt1", cl::init("true"));
+ StackOption<bool> Opt2("opt2", cl::init(true));
+ cl::alias Alias("alias", llvm::cl::aliasopt(Opt2));
+ StackOption<int> Opt3("opt3", cl::init(3));
+
+ const char *args[] = {"prog", "-opt1=false", "-opt2", "-opt3"};
+
+ EXPECT_TRUE(
+ cl::ParseCommandLineOptions(2, args, StringRef(), &llvm::nulls()));
+
+ EXPECT_TRUE(Opt1 == "false");
+ EXPECT_TRUE(Opt2);
+ EXPECT_TRUE(Opt3 == 3);
+
+ Opt2 = false;
+ Opt3 = 1;
+
+ cl::ResetAllOptionOccurrences();
+
+ for (auto &OM : cl::getRegisteredOptions(*cl::TopLevelSubCommand)) {
+ cl::Option *O = OM.second;
+ if (O->ArgStr == "opt2") {
+ continue;
+ }
+ O->setDefault();
+ }
+
+ EXPECT_TRUE(Opt1 == "true");
+ EXPECT_TRUE(Opt2);
+ EXPECT_TRUE(Opt3 == 3);
+}
+
} // anonymous namespace