Add opposite_of and inverse_opt to support -fno- style options. This

is necessary for eventual gcc commmand line compatibility.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63384 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Mike Stump
2009-01-30 08:19:46 +00:00
parent e0ffc92508
commit d6f175b3ec
2 changed files with 54 additions and 1 deletions

View File

@@ -302,6 +302,12 @@ struct LocationClass {
template<class Ty>
LocationClass<Ty> location(Ty &L) { return LocationClass<Ty>(L); }
// opposite_of - Allow the user to specify which other option this
// option is the opposite of.
//
template<class Ty>
LocationClass<bool> opposite_of(Ty &O) { return location(O.getValue()); }
//===----------------------------------------------------------------------===//
// Enum valued command line option
@@ -576,6 +582,30 @@ public:
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<boolOrDefault>);
//--------------------------------------------------
// parser<boolInverse>
class boolInverse { };
template<>
class parser<boolInverse> : public basic_parser<bool> {
public:
typedef bool parser_data_type;
// parse - Return true on error.
bool parse(Option &O, const char *ArgName, const std::string &Arg,
bool &Val);
enum ValueExpected getValueExpectedFlagDefault() const {
return ValueOptional;
}
// getValueName - Do not print =<value> at all.
virtual const char *getValueName() const { return 0; }
// An out-of-line virtual method to provide a 'home' for this class.
virtual void anchor();
};
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<bool>);
//--------------------------------------------------
// parser<int>
//
@@ -917,6 +947,9 @@ EXTERN_TEMPLATE_INSTANTIATION(class opt<int>);
EXTERN_TEMPLATE_INSTANTIATION(class opt<std::string>);
EXTERN_TEMPLATE_INSTANTIATION(class opt<bool>);
class boolInverse;
typedef opt<bool, true, parser<boolInverse> > inverse_opt;
//===----------------------------------------------------------------------===//
// list_storage class