From 0db2648930e3b6c376a539aabe368aade83ee29a Mon Sep 17 00:00:00 2001 From: Theophile Ranquet Date: Fri, 30 Nov 2012 14:33:05 +0100 Subject: [PATCH] getargs: add support for --flags/-f Introduce -fdiagnostics-show-caret * src/getargs.c (flag_flag): New global. * src/getargs.h (flag): New enum. --- src/getargs.c | 40 ++++++++++++++++++++++++++++++++++++++-- src/getargs.h | 12 ++++++++++++ 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. * -- 2.45.2