summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheophile Ranquet <ranquet@lrde.epita.fr>2012-11-30 14:33:05 +0100
committerTheophile Ranquet <ranquet@lrde.epita.fr>2012-12-05 12:10:51 +0100
commit0db2648930e3b6c376a539aabe368aade83ee29a (patch)
tree8f58273fad0de253d84856cd9fd6797fd2536afa
parenteffd30c08d3f9d936a67c6b7a9a4253915711c74 (diff)
downloadbison-0db2648930e3b6c376a539aabe368aade83ee29a.tar.gz
getargs: add support for --flags/-f
Introduce -fdiagnostics-show-caret * src/getargs.c (flag_flag): New global. * src/getargs.h (flag): New enum.
-rw-r--r--src/getargs.c40
-rw-r--r--src/getargs.h12
2 files changed, 50 insertions, 2 deletions
diff --git a/src/getargs.c b/src/getargs.c
index c480649d..1b7c6f1b 100644
--- a/src/getargs.c
+++ b/src/getargs.c
@@ -63,6 +63,7 @@ bool error_verbose = false;
bool nondeterministic_parser = false;
bool glr_parser = false;
+int feature_flag = feature_none;
int report_flag = report_none;
int trace_flag = trace_none;
int warnings_flag = warnings_conflicts_sr | warnings_conflicts_rr
@@ -257,6 +258,26 @@ 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. |
@@ -301,6 +322,7 @@ 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);
@@ -316,8 +338,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. */
@@ -333,8 +355,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\
@@ -360,6 +382,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);
@@ -469,6 +499,7 @@ static char const short_options[] =
"W::"
"b:"
"d"
+ "f::"
"e"
"g::"
"h"
@@ -521,6 +552,7 @@ static struct option const long_options[] =
/* Output. */
{ "defines", optional_argument, 0, 'd' },
+ { "flag", optional_argument, 0, 'f' },
/* Operation modes. */
{ "fixed-output-files", no_argument, 0, 'y' },
@@ -613,6 +645,10 @@ getargs (int argc, char *argv[])
version ();
exit (EXIT_SUCCESS);
+ case 'f':
+ FLAGS_ARGMATCH (flag, optarg);
+ break;
+
case 'W':
FLAGS_ARGMATCH (warnings, optarg);
break;
diff --git a/src/getargs.h b/src/getargs.h
index ef97822a..b2126fc2 100644
--- a/src/getargs.h
+++ b/src/getargs.h
@@ -130,6 +130,18 @@ enum warnings
/** What warnings are issued. */
extern int warnings_flag;
+/*-------------.
+| --features. |
+`-------------*/
+
+enum feature
+ {
+ feature_none = 0, /**< No additional feature. */
+ feature_caret = 1 << 0, /**< Enhance the output of errors with carets. */
+ feature_all = ~0 /**< All above features. */
+ };
+/** What additional features to use. */
+extern int feature_flag;
/** Process the command line arguments.
*