Recent changes (in 2.7) introduced a dependency on both FILE and
fprintf, which are "available" only in %debug mode. This was to
define yy_location_print_, which is used only in %debug mode by the
parser, but massively used by the test suite to output the locations
in yyerror.
Break this dependency: the test suite should define its own routines
to display the locations. Eventually Bison will provide the user with
a means to display locations, but not yet.
* data/c.m4 (b4_yy_location_print_define): Use YYFPRINTF instead of
fprintf directly.
* data/yacc.c (b4_yy_location_print_define): Invoke it only in %debug
mode, so that stdio.h is included (needed for FILE*), and YYFPRINTF
is defined.
* tests/local.at (AT_YYERROR_DECLARE, AT_YYERROR_DEFINE): Declare
and define location_print and LOCATION_PRINT.
* tests/actions.at, tests/existing.at, tests/glr-regression.at,
* tests/input.at, tests/named-refs.at, tests/regression.at: Adjust
to use them.
Fix the expected line numbers (as the prologue's length has changed).
* src/getargs.c (feature_flag): Here.
* tests/local.at (AT_BISON_CHECK_, AT_BISON_CHECK_NO_XML): Deactivate carets
for the testsuite, by default.
* tests/input.at: Adjust the locations for command line definitions.
Unput was no longer used since a POSIX-compatiblity issue with Flex 2.5.31,
which has been adressed in newer versions of Flex. See this discussion:
<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00029.html>
This partially reverts commit aa4180418f.
* src/scan-gram.l (unexpected_end): Here.
* tests/input.at: Adjust for new order of error reports.
* tests/input.at: Rename some AT_SETUP to avoid that
AT_SETUP_STRIP thinks they contain %define directives.
("%define" backward compatibility): Merge tests together
to speed up the test suite, and to make maintenance easier
(multiple AT_CHECK means multiple runs of the test suite to
be sure to have updated all the error messages).
Check the "%define variant" is properly obsoleted.
Instead of
warning: deprecated %define variable name: 'namespace', use 'api.namespace' [-Wdeprecated]
display (in -fno-caret mode):
warning: deprecated directive: '%define namespace foo', use '%define api.namespace foo' [-Wdeprecated]
and (in -fcaret mode):
warning: deprecated directive, use '%define api.namespace toto' [-Wdeprecated]
%define namespace toto
^^^^^^^^^
This is in preparation of cases where not only the variable is
renamed, but the values are too:
warning: deprecated directive: '%define variant', use '%define api.value.type variant' [-Wdeprecated]
* src/muscle-tab.c (define_directive): New.
(muscle_percent_variable_update): Take the value as argument, and use it
in the diagnostics.
Loop with a pointer instead of an index.
* tests/input.at (%define backward compatibility): Adjust.
* origin/maint:
news: prepare for forthcoming release
doc: explain how mid-rule actions are translated
error: use better locations for unused midrule values
doc: various minor improvements and fixes
tests: ignore more useless compiler warnings
tests: be robust to C being compiled with a C++11 compiler
build: beware of Clang++ not supporting POSIXLY_CORRECT
maint: post-release administrivia
version 2.6.90
build: fix syntax-check error.
cpp: simplify the Flex version checking macro
news: improve the carets example and fix a typo
cpp: improve the Flex version checking macro
carets: improve the code
maint: update news
build: keep -Wmissing-declarations and -Wmissing-prototypes for modern GCCs
build: drop -Wcast-qual
gnulib: update
Conflicts:
NEWS
doc/Makefile.am
doc/bison.texi
gnulib
src/reader.c
tests/actions.at
tests/atlocal.in
tests/input.at
On
%%
exp: {;} {$$;} { $$ = $1; }
instead of reporting (with -fcaret -Wmidrule-value)
midrule.y:2.6-8: warning: unset value: $$ [-Wmidrule-values]
exp: {;} {$$;} { $$ = $1; }
^^^
midrule.y:2.6-27: warning: unused value: $2 [-Wmidrule-values]
exp: {;} {$$;} { $$ = $1; }
^^^^^^^^^^^^^^^^^^^^^^
report
midrule.y:2.6-8: warning: unset value: $$
exp: {;} {$$;} { $$ = $1; }
^^^
midrule.y:2.10-14: warning: unused value: $2
exp: {;} {$$;} { $$ = $1; }
^^^^^
* src/reader.c (grammar_rule_check): When warning about the value of a
midrule action, use the location of the midrule action instead of the
location of the rule.
the location of the part of the rule.
* tests/actions.at (Default %printer and %destructor for mid-rule values):
Adjust expectations
* tests/input.at (Unused values with default %destructor): Ditto.
(AT_CHECK_UNUSED_VALUES): Ditto.
And use -fcaret.
* origin/maint:
misc: pacify the Tiny C Compiler
cpp: make the check of Flex version portable
misc: require getline
c++: support wide strings for file names
doc: document carets
tests: enhance existing tests with carets
errors: show carets
getargs: add support for --flags/-f
Conflicts:
doc/bison.texi
m4/.gitignore
src/complain.c
src/flex-scanner.h
src/getargs.c
src/getargs.h
src/gram.c
src/main.c
tests/headers.at
* tests/actions.at: Unset value.
* tests/conflicts.at: Rule useless due to conflicts.
* tests/input.at: Missing terminator, unexpected end of file, command line
redefinition of variable.
* tests/named-refs.at: Many errors.
* tests/reduce.at: Useless nonterminals and rules.
* tests/regression.at: Large token.
* origin/maint:
yacc.c: always initialize yylloc
scanner: issue a single error for groups of invalid characters
tests: formatting changes
doc: one of the fixes for an ambiguous grammar was ambiguous too
doc: fix the dangling else with precedence directives
doc: prefer "token" to TOKEN
doc: formatting changes
scanner: use explicit "ignore" statements
Conflicts:
src/scan-gram.l
* TODO: Address the issue, so remove it.
* data/bison.m4: Use b4_error with [[note]] rather than a complain_at
for context information.
* src/complain.c (complain_args): Take an additional argument, an
indentation pointer, to allow the dispatching of context information.
* src/complain.h (complain_args): Adjust prototype.
* src/scan-skel.l (at_directive_perform): Recognize the new @note mark.
* tests/input.at: Adjust.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
This is the continuation of the work on the readability of errors
context.
* src/symtab.c (user_token_number_redeclaration): Use
complain_at_indent to output with increased indentation level.
* tests/input:at: Apply this change.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
This line doesn't add any meaningful information anymore, the appended
[-Werror=CATEGORY] is enough. It is actually more insightful, as it
allows to distinguish warnings treated as errors from those that
aren't. This line is also removed by gcc 4.8.
* src/complain.c (set_warnings_issued): The only action left was
checking if the error bit corresponding to the warning issued was set,
and that function was only called once. Therefore, remove it, and do
its job directly in the caller...
(complains): here.
* src/complains.h: Adjust.
* tests/input.at: Adjust.
* NEWS: Document this change.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
The prefix of warnings treated as errors is now "error: ". Also, their
suffix now reflects the changes in the Werror option format.
An output for -Werror=other used to be:
bison: warnings being treated as errors
input.y:1.1: warning: stray ',' treated as white space [-Wother]
It is now:
bison: warnings being treated as errors
input.y:1.1: error: stray ',' treated as white space [-Werror=other]
The line "warnings being treated as errors" no longer adds any info,
it will be removed in a forthcoming change.
* NEWS: Add entry "Enhancement of the -Werror"
* doc/bison.texi: Move the warnings-as-error to a new bullet.
* src/complain.c (complains): Refactor, change the prefix of warnings
that are treated as errors.
(warnings_print_categories): Support for [-Werror=CATEGORY] display
* src/getargc.c (getargs): -y implies -Werror=yacc
* tests/input.at: Update expected --yacc output for coherence.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
This improves readability. This is also what gcc does.
* NEWS: Document this change.
* src/complain.c (complain_at): Prefix all errors with "error: ".
(complain_at_indent, warn_at_indent): Do not prefix the context
information of errors, which are basically just indented errors.
* tests/conflicts.at, tests/glr-regression.at, tests/input.at,
tests/named-refs.at, tests/output.at, tests/push.at,
tests/regression.at, tests/skeletons.at: Apply this change.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
This is the continuation of the work on the readability of errors
context.
For example, what used to be:
input.y:1.9-29: invalid value for %define variable 'foo' : 'bar'
input.y:1.9-29: accepted value: 'most'
is now:
input.y:1.9-29: invalid value for %define variable 'foo' : 'bar'
input.y:1.9-29: accepted value: 'most'
* src/muscle-tab.c (muscle_percent_define_check_values): Use
complain_at_indent to output with increased indentation level.
* tests/input:at: Apply this change.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
This is the continuation of the work on the readability of errors
context.
For example, what used to be:
input.y:2.9-11: %define variable 'var' redefined
input.y:1.9-11: previous definition
is now:
input.y:2.9-11: %define variable 'var' redefined
input.y:1.9-11: previous definition
* src/muscle-tab.c (muscle_percent_define_insert): Use
complain_at_indent to output with increased indentation level.
* tests/input.at: Apply this change.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
This is the continuation of the work on the readability of errors
context.
For example, what used to be:
input.y:5.10-24: %printer redeclaration for <field2>
input.y:3.11-25: previous declaration
is now:
input.y:5.10-24: %printer redeclaration for <field2>
input.y:3.11-25: previous declaration
* NEWS: Document this change.
* src/symtab.c (symbol_redeclaration, semantic_type_redeclaration,
user_token_number_redeclaration, default_tagged_destructor_set,
default_tagless_destructor_set, default_tagged_printer_set,
default_tagless_printer_set): Use complain_at_indent to
output with increased indentation level.
* tests/input.at: Apply this change.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
* src/symtab.c (symbol_check_defined): Undeclared symbols are only
a warning.
* tests/input.at (Undeclared symbols used for a printer or destructor):
Rename as...
(Undefined symbols): this, and check this case.
* NEWS: Doc it.
* origin/maint: (29 commits)
regen
synclines: remove spurious empty line
also support $<foo>$ in the %initial-action
skeletons: b4_dollar_pushdef and popdef to simpify complex definitions
regen
printer/destructor: translate only once
factor the handling of m4 escaping
news: schedule the removal of the ";" hack
style changes in the scanners
regen
support $<tag>$ in printers and destructors
scan-code: factor the handling of the type in $<TYPE>$
muscles: fix another occurrence of unescaped type name
glr.cc: fix the handling of yydebug
gnulib: update
formatting changes
tests: fix an assertion
tests: adjust to GCC 4.8, which displays caret errors
be sure to properly escape type names
obstack_quote: escape and quote for M4
muscles: shuffle responsabilities
muscles: make private functions static
muscles: rename private functions/macros
obstack_escape: escape M4 characters
remove dead macro
maint: style changes
doc: avoid problems with case insensitive file systems
configure: fix botched quoting
news: fix typo.
Conflicts:
NEWS
data/c.m4
data/glr.cc
data/lalr1.cc
examples/rpcalc/local.mk
src/muscle-tab.h
src/output.c
src/parse-gram.c
src/parse-gram.h
src/parse-gram.y
src/scan-code.l
src/symlist.c
src/symlist.h
src/symtab.h
tests/calc.at
Currently "%printer {...} a b c d e f" translates the {...} six times.
Not only is this bad for time and space, it also issues six times the
same warnings.
* src/symlist.h, src/symlist.c (symbol_list_destructor_set)
(symbol_list_printer_set): Take the action as code_props instead of
const char *.
* src/parse-gram.y: Translate these actions here.
* src/scan-code.h: Comment change.
* tests/input.at: Check that warnings are issued only once.
The conversion from @ to @@ and so forth is coded is too many
different places. Factor, a bit.
* src/scan-code.l: Instead of duplicating the logic of obstack_escape,
use it.
It sure is less efficient, but the cost is negligible.
This allows to factor rules that are alike.
And to factor some start-condition clauses.
* tests/input.at (Stray $ or @): New.
* NEWS: Document it.
* src/output.c (quoted_output): Split into...
(quoted_output, string_output): these.
Use the former when outputting a type_name.
* tests/input.at: Check this case.
* src/symtab.h: Comment changes.
* src/scan-code.l: Use obstack_quote when passing type_name to m4.
* tests/input.at (Code injection): New.
* NEWS: Document it.
Thanks to Paul Eggert for the wording.
Currently they are treated in separated variables, contrary to other
<TYPE> code_props. This duplicates code (and messages for translators)
uselessly, as demonstrated by the fact that thanks to this patch, now
useless <*> and <> code_props are reported like the others.
* src/parse-gram.y (generic_symlist_item): Treat "<*>" and "<>" as regular
type tags.
* src/symlist.h, src/symlist.c (symbol_list_default_tagged_new)
(symbol_list_default_tagless_new,SYMLIST_DEFAULT_TAGGED)
(SYMLIST_DEFAULT_TAGLESS): Remove.
* src/symtab.h, src/symtab.c (default_tagged_code_props)
(default_tagless_code_props, default_tagged_code_props_set)
(default_tagless_code_props_set): Remove.
(symbol_code_props_get): Default to <*> or <>'s code_props.
* tests/actions.at: Complete expected errors: there are new warnings.
* tests/input.at: Likewise.
(Useless printers or destructors): Extend.