* \param keys array of valid subarguments.
* \param values array of corresponding (int) values.
* \param flags the flags to update
- * \param args colon separated list of effective subarguments to decode.
+ * \param args comma separated list of effective subarguments to decode.
* If 0, then activate all the flags.
*
- * The special value 0 resets the flags to 0.
+ * If VALUE != 0 then KEY sets flags and no-KEY clears them.
+ * If VALUE == 0 then KEY clears all flags and no-KEY sets all flags.
+ * Thus no-none = all and no-all = none.
*/
static void
flags_argmatch (const char *option,
args = strtok (args, ",");
while (args)
{
- int value = XARGMATCH (option, args, keys, values);
+ int no = strncmp (args, "no-", 3) == 0 ? 3 : 0;
+ int value = XARGMATCH (option, args + no, keys, values);
if (value == 0)
- *flags = 0;
+ if (no)
+ *flags = ~0;
+ else
+ *flags = 0;
else
- *flags |= value;
+ if (no)
+ *flags &= ~value;
+ else
+ *flags |= value;
args = strtok (NULL, ",");
}
}
"grammar - reading, reducing the grammar",
"resource - memory consumption (where available)",
"sets - grammar sets: firsts, nullable etc.",
+ "muscles - m4 definitions passed to the skeleton",
"tools - m4 invocation",
"m4 - m4 traces",
"skeleton - skeleton postprocessing",
trace_grammar,
trace_resource,
trace_sets,
+ trace_muscles,
trace_tools,
trace_m4,
trace_skeleton,
program_name);
else
{
+ /* For ../build-aux/cross-options.pl to work, use the format:
+ ^ -S, --long[=ARGS] (whitespace)
+ A --long option is required.
+ Otherwise, add exceptions to ../build-aux/cross-options.pl. */
+
printf (_("Usage: %s [OPTION]... FILE\n"), program_name);
fputs (_("\
Generate LALR(1) and GLR parsers.\n\
/* Build a location for the current command line argument. */
static
location
-command_line_location()
+command_line_location (void)
{
location res;
/* "<command line>" is used in GCC's messages about -D. */
char* value = strchr (optarg, '=');
if (value)
*value++ = 0;
- else
- value = "";
- muscle_percent_define_insert (name, command_line_location (), value);
+ muscle_percent_define_insert (name, command_line_location (),
+ value ? value : "");
}
break;