X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/8ea6525e3a092b76256fbed7d6edbb0a1861aee1..219458e22f163ede84daa71dfa98bab82a766954:/src/getargs.c?ds=sidebyside diff --git a/src/getargs.c b/src/getargs.c index cf5af694..7a637a20 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -1,6 +1,6 @@ /* Parse command line arguments for Bison. - Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software + Copyright (C) 1984, 1986, 1989, 1992, 2000-2013 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -46,6 +46,7 @@ bool yacc_flag; /* for -y */ bool nondeterministic_parser = false; bool glr_parser = false; +int feature_flag = feature_caret; int report_flag = report_none; int trace_flag = trace_none; @@ -195,8 +196,6 @@ ARGMATCH_VERIFY (report_args, report_types); static const char * const trace_args[] = { - /* In a series of synonyms, present the most meaningful first, so - that argmatch_valid be more readable. */ "none - no traces", "scan - grammar scanner traces", "parse - grammar parser traces", @@ -241,23 +240,22 @@ ARGMATCH_VERIFY (trace_args, trace_types); | --warnings's handling. | `------------------------*/ -static const char * const warnings_args[] = +const char * const warnings_args[] = { - /* In a series of synonyms, present the most meaningful first, so - that argmatch_valid be more readable. */ - "none - no warnings", - "midrule-values - unset or unused midrule values", - "yacc - incompatibilities with POSIX Yacc", - "conflicts-sr - S/R conflicts", - "conflicts-rr - R/R conflicts", - "deprecated - obsolete constructs", - "other - all other warnings", - "all - all of the above", - "error - warnings are errors", + "none", + "midrule-values", + "yacc", + "conflicts-sr", + "conflicts-rr", + "deprecated", + "precedence", + "other", + "all", + "error", 0 }; -static const int warnings_types[] = +const int warnings_types[] = { Wnone, Wmidrule_values, @@ -265,6 +263,7 @@ static const int warnings_types[] = Wconflicts_sr, Wconflicts_rr, Wdeprecated, + Wprecedence, Wother, Wall, Werror @@ -272,6 +271,27 @@ static const int warnings_types[] = ARGMATCH_VERIFY (warnings_args, warnings_types); +/*-----------------------. +| --feature's handling. | +`-----------------------*/ + +static const char * const feature_args[] = +{ + "none", + "caret", "diagnostics-show-caret", + "all", + 0 +}; + +static const int feature_types[] = +{ + feature_none, + feature_caret, feature_caret, + feature_all +}; + +ARGMATCH_VERIFY (feature_args, feature_types); + /*-------------------------------------------. | Display the help message and exit STATUS. | `-------------------------------------------*/ @@ -315,13 +335,13 @@ Operation modes:\n\ --print-datadir output directory containing skeletons and XSLT\n\ -y, --yacc emulate POSIX Yacc\n\ -W, --warnings[=CATEGORY] report the warnings falling in CATEGORY\n\ + -f, --feature[=FEATURE] activate miscellaneous features\n\ \n\ "), stdout); fputs (_("\ Parser:\n\ -L, --language=LANGUAGE specify the output programming language\n\ - (this is an experimental feature)\n\ -S, --skeleton=FILE specify the skeleton to use\n\ -t, --debug instrument the parser for tracing\n\ same as `-Dparse.trace'\n\ @@ -332,8 +352,8 @@ Parser:\n\ deprecated by '-Dapi.prefix=PREFIX'\n\ -l, --no-lines don't generate '#line' directives\n\ -k, --token-table include a table of token names\n\ -\n\ "), stdout); + putc ('\n', stdout); /* Keep -d and --defines separate so that ../build-aux/cross-options.pl * won't assume that -d also takes an argument. */ @@ -349,8 +369,8 @@ Output:\n\ -g, --graph[=FILE] also output a graph of the automaton\n\ -x, --xml[=FILE] also output an XML report of the automaton\n\ (the XML schema is experimental)\n\ -\n\ "), stdout); + putc ('\n', stdout); fputs (_("\ Warning categories include:\n\ @@ -359,6 +379,7 @@ Warning categories include:\n\ `conflicts-sr' S/R conflicts (enabled by default)\n\ `conflicts-rr' R/R conflicts (enabled by default)\n\ `deprecated' obsolete constructs\n\ + `precedence' useless precedence and associativity\n\ `other' all other warnings (enabled by default)\n\ `all' all the warnings\n\ `no-CATEGORY' turn off warnings in CATEGORY\n\ @@ -376,6 +397,14 @@ THINGS is a list of comma separated words that can include:\n\ `all' include all the above information\n\ `none' disable the report\n\ "), stdout); + putc ('\n', stdout); + + fputs (_("\ +FEATURE is a list of comma separated words that can include:\n\ + `caret' show errors with carets\n\ + `all' all of the above\n\ + `none' disable all of the above\n\ + "), stdout); putc ('\n', stdout); printf (_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT); @@ -486,6 +515,7 @@ static char const short_options[] = "W::" "b:" "d" + "f::" "e" "g::" "h" @@ -538,6 +568,7 @@ static struct option const long_options[] = /* Output. */ { "defines", optional_argument, 0, 'd' }, + { "feature", optional_argument, 0, 'f' }, /* Operation modes. */ { "fixed-output-files", no_argument, 0, 'y' }, @@ -572,7 +603,7 @@ command_line_location (void) { location res; /* "" is used in GCC's messages about -D. */ - boundary_set (&res.start, uniqstr_new (""), optind, -1); + boundary_set (&res.start, uniqstr_new (""), optind - 1, -1); res.end = res.start; return res; } @@ -630,6 +661,10 @@ getargs (int argc, char *argv[]) version (); exit (EXIT_SUCCESS); + case 'f': + FLAGS_ARGMATCH (feature, optarg, feature_all); + break; + case 'W': FLAGS_ARGMATCH (warnings, optarg, Wall); break;