/* Parse command line arguments for Bison.
Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
#include "muscle_tab.h"
#include "uniqstr.h"
-bool debug_flag;
bool defines_flag;
bool graph_flag;
bool xml_flag;
-bool locations_flag;
bool no_lines_flag;
bool token_table_flag;
bool yacc_flag; /* for -y */
-bool error_verbose = false;
-
bool nondeterministic_parser = false;
bool glr_parser = false;
* \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, ",");
}
}
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\
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;
break;
case 't':
- debug_flag = true;
+ muscle_percent_define_insert ("debug", command_line_location (), "");
break;
case 'v':
break;
case LOCATIONS_OPTION:
- locations_flag = true;
+ muscle_percent_define_ensure ("locations",
+ command_line_location (), true);
break;
case PRINT_LOCALEDIR_OPTION: