Remove AllowInverse: it leaks memory and is not the right

abstraction for CommandLine.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68588 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-04-08 03:43:51 +00:00
parent 4da69c77cf
commit 00a7b52385
3 changed files with 2 additions and 42 deletions

View File

@ -1447,17 +1447,6 @@ unrecognized option strings to it as values instead of signaling an
error. As with <b><tt>cl::CommaSeparated</tt></b></a>, this modifier
only makes sense with a <a href="#cl::list">cl::list</a> option.</li>
<li><a name="cl::AllowInverse">The <b><tt>cl::AllowInverse</tt></b></a>
modifier can be used on options that have the form <tt>-fopt</tt> to
automatically create a corresponding
<tt>-fno-opt</tt> option. The <tt>f</tt> can be any single
character, and the <tt>opt</tt> can be any one or more characters.
The value of the created option is the logical complement of the value
that would have been used if the base form of the option was used.
This modifier only makes sense with an option that uses
a <a href="#boolparser">bool parser</a>.</li>
</ul>
<p>So far, these are the only three miscellaneous option modifiers.</p>
@ -1755,11 +1744,7 @@ for any data type.</li>
<li><a name="boolparser">The <b><tt>parser&lt;bool&gt;</tt> specialization</b></a>
is used to convert boolean strings to a boolean value. Currently accepted
strings are "<tt>true</tt>", "<tt>TRUE</tt>", "<tt>True</tt>", "<tt>1</tt>",
"<tt>false</tt>", "<tt>FALSE</tt>", "<tt>False</tt>", and "<tt>0</tt>". The
<b><tt>cl::AllowInverse</tt></b> modifier can be used on an option of the form
<tt>-fopt</tt> that uses the <tt>parser&lt;bool&gt;</tt> specialization
to create a corresponding option with the form <tt>-fno-opt</tt>. See
<a href="#cl::AllowInverse"><tt>cl::AllowInverse</tt></a> for details.</li>
"<tt>false</tt>", "<tt>FALSE</tt>", "<tt>False</tt>", and "<tt>0</tt>".</li>
<li><a name="boolOrDefaultparser">The <b><tt>parser&lt;boolOrDefault&gt;</tt>
specialization</b></a> is used for cases where the value is boolean,

View File

@ -127,8 +127,7 @@ enum MiscFlags { // Miscellaneous flags to adjust argument
CommaSeparated = 0x200, // Should this cl::list split between commas?
PositionalEatsArgs = 0x400, // Should this positional cl::list eat -args?
Sink = 0x800, // Should this cl::list eat all unknown options?
AllowInverse = 0x1000, // Can this option take a -Xno- form?
MiscMask = 0x1E00 // Union of the above flags.
MiscMask = 0xE00 // Union of the above flags.
};
@ -538,17 +537,14 @@ struct basic_parser : public basic_parser_impl {
//
template<>
class parser<bool> : public basic_parser<bool> {
bool IsInvertible; // Should we synthesize a -xno- style option?
const char *ArgStr;
public:
void getExtraOptionNames(std::vector<const char*> &OptionNames);
// parse - Return true on error.
bool parse(Option &O, const char *ArgName, const std::string &Arg, bool &Val);
template <class Opt>
void initialize(Opt &O) {
IsInvertible = (O.getMiscFlags() & llvm::cl::AllowInverse);
ArgStr = O.ArgStr;
}

View File

@ -872,30 +872,9 @@ bool parser<bool>::parse(Option &O, const char *ArgName,
return O.error(": '" + Arg +
"' is invalid value for boolean argument! Try 0 or 1");
}
if (IsInvertible && strncmp(ArgName+1, "no-", 3) == 0)
Value = !Value;
return false;
}
void parser<bool>::getExtraOptionNames(std::vector<const char*> &OptionNames) {
if (!IsInvertible)
return;
char *s = new char [strlen(ArgStr) + 3 + 1];
s[0] = ArgStr[0];
if (strncmp(ArgStr+1, "no-", 3) == 0)
strcpy(&s[1], &ArgStr[4]);
else {
s[1] = 'n';
s[2] = 'o';
s[3] = '-';
strcpy(&s[4], ArgStr+1);
}
OptionNames.push_back(s);
}
// parser<boolOrDefault> implementation
//
bool parser<boolOrDefault>::parse(Option &O, const char *ArgName,