diff --git a/doc/bison.texi b/doc/bison.texi index c31e851b..884a7bd8 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -10272,8 +10272,8 @@ Print the name of the directory containing skeletons and XSLT. @item -u @item --update Update the grammar file (remove duplicates, update deprecated directives, -etc.). Leaves a backup of the original file with a @code{~} appended. For -instance: +etc.) and exit (i.e., do not generate any of the output files). Leaves a +backup of the original file with a @code{~} appended. For instance: @example @group diff --git a/src/getargs.c b/src/getargs.c index a66e4c66..95572681 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -287,7 +287,7 @@ Operation modes:\n\ and exit\n\ --print-datadir output directory containing skeletons and XSLT\n\ and exit\n\ - -u, --update apply fixes to the source grammar file\n\ + -u, --update apply fixes to the source grammar file and exit\n\ -y, --yacc emulate POSIX Yacc\n\ -W, --warnings[=CATEGORY] report the warnings falling in CATEGORY\n\ -f, --feature[=FEATURE] activate miscellaneous features\n\ diff --git a/src/main.c b/src/main.c index 10a07d2e..0fbbca05 100644 --- a/src/main.c +++ b/src/main.c @@ -155,31 +155,34 @@ main (int argc, char *argv[]) print_precedence_warnings (); - /* Output file names. */ - compute_output_file_names (); - - /* Output the detailed report on the grammar. */ - if (report_flag) + if (!update_flag) { - timevar_push (tv_report); - print_results (); - timevar_pop (tv_report); - } + /* Output file names. */ + compute_output_file_names (); - /* Output the graph. */ - if (graph_flag) - { - timevar_push (tv_graph); - print_graph (); - timevar_pop (tv_graph); - } + /* Output the detailed report on the grammar. */ + if (report_flag) + { + timevar_push (tv_report); + print_results (); + timevar_pop (tv_report); + } - /* Output xml. */ - if (xml_flag) - { - timevar_push (tv_xml); - print_xml (); - timevar_pop (tv_xml); + /* Output the graph. */ + if (graph_flag) + { + timevar_push (tv_graph); + print_graph (); + timevar_pop (tv_graph); + } + + /* Output xml. */ + if (xml_flag) + { + timevar_push (tv_xml); + print_xml (); + timevar_pop (tv_xml); + } } /* Stop if there were errors, to avoid trashing previous output @@ -193,9 +196,12 @@ main (int argc, char *argv[]) timevar_pop (tv_free); /* Output the tables and the parser to ftable. In file output. */ - timevar_push (tv_parser); - output (); - timevar_pop (tv_parser); + if (!update_flag) + { + timevar_push (tv_parser); + output (); + timevar_pop (tv_parser); + } timevar_push (tv_free); nullable_free (); diff --git a/tests/input.at b/tests/input.at index 11f02ce5..8853af51 100644 --- a/tests/input.at +++ b/tests/input.at @@ -2500,7 +2500,7 @@ AT_DATA_GRAMMAR([[input.y]], %no-default_prec %no_default-prec %no_lines -%output = "foo" +%output = "output.c" %pure_parser %token_table %error-verbose @@ -2559,7 +2559,9 @@ AT_BISON_CHECK([[-ffixit input.y]], [], [], [experr]) AT_CHECK([[sed -e '/^fix-it:/d' errors-all >experr]]) AT_BISON_CHECK([[input.y]], [], [], [experr]) -# Update the input file. + +# Update the input file. Make sure we generated nothing. +AT_CHECK([rm -f output.c]) AT_CHECK([cp input.y input.y.orig]) AT_CHECK([sed -e '/fix-it/d' experr]) AT_CHECK([echo "bison: file 'input.y' was updated (backup: 'input.y~')" >>experr]) @@ -2568,6 +2570,9 @@ AT_BISON_CHECK([[--update input.y]], [], [[]], [experr]) # Check the backup. AT_CHECK([diff input.y.orig input.y~]) +# Check we did not generate any file. +AT_CHECK([test ! -f output.c]) + # Check the update. AT_CHECK([cat input.y], [], [[%code top { @@ -2588,7 +2593,7 @@ AT_CHECK([cat input.y], [], %no-default-prec %no-default-prec %no-lines -%output "foo" +%output "output.c" %pure-parser %token-table %glr-parser