// Define the kinds of options.
-class OptionKind<string name, int predecence = 0, bit sentinel = 0> {
+class OptionKind<string name, int precedence = 0, bit sentinel = 0> {
string Name = name;
// The kind precedence, kinds with lower precedence are matched first.
- int Precedence = predecence;
+ int Precedence = precedence;
// Indicate a sentinel option.
bit Sentinel = sentinel;
}
// An option which is both joined to its (first) value, and followed by its
// (second) value.
def KIND_JOINED_AND_SEPARATE : OptionKind<"JoinedAndSeparate">;
+// An option which consumes all remaining arguments if there are any.
+def KIND_REMAINING_ARGS : OptionKind<"RemainingArgs">;
// Define the option flags.
string Name = name;
string HelpText = ?;
OptionGroup Group = ?;
+ list<OptionFlag> Flags = [];
}
// Define the option class.
list<OptionFlag> Flags = [];
OptionGroup Group = ?;
Option Alias = ?;
+ list<string> AliasArgs = [];
}
// Helpers for defining options.
// Mix-ins for adding optional attributes.
class Alias<Option alias> { Option Alias = alias; }
+class AliasArgs<list<string> aliasargs> { list<string> AliasArgs = aliasargs; }
class EnumName<string name> { string EnumName = name; }
class Flags<list<OptionFlag> flags> { list<OptionFlag> Flags = flags; }
class Group<OptionGroup group> { OptionGroup Group = group; }