Before this change, bison would accept either .tab and _tab equivalently,
whatever the current platform. Besides, it was not obeying everywhere
to the possible definition of TAB_EXT to something else than .tab.
For consistency, handle only TAB_EXT (".tab" on non DJGPP platforms).
Support for "_tab" is neither documented, nor tested.
* src/system.h (STRNCMP_LIT): New.
From Jim Meyering.
(STRPREFIX_LIT): New.
* src/files.c, src/getargs.c: Use it.
* doc/bison.texinfo: Space change.
* src/system.h (STREQ, STRNEQ): New.
* src/files.c, src/ielr.c, src/lalr.c, src/muscle-tab.c,
* src/output.c, src/print.c, src/print_graph.c,
* src/reader.c, src/scan-skel.l, src/tables.c,
* src/uniqstr.c:
Use them.
* src/scan-gram.l: Do not use streq.h, use system.h's STREQ.
* cfg.mk: The documentation is an exception.
Exit status 63 is documented for version-mismatch.
* bootstrap.conf (gnulib_modules): Remove sysexits.
* src/system.h (EX_MISMATCH): Define.
* src/parse-gram.y (version_check): Use it instead of EX_CONFIG.
Missing includes.
* tests/calc.at, tests/named-refs.at: Include assert.h.
* bootstrap.conf (gnulib_modules): Require progname.
* src/complain.c, src/getargs.c, src/getargs.h, src/main.c: Use it.
* cfg.mk (exclude): New.
Use it.
Skip lib/main.c for bindtextdomain and set_program_name.
* cfg.mk (local-checks-to-skip): No longer skip it.
* bootstrap.conf (gnulib_modules): Add sysexits.
* doc/bison.texinfo, etc/bench.pl.in, src/parse-gram.y,
* src/system.h, tests/calc.at, tests/named-refs.at: Use assert
where appropriate instead of "if (...) exit".
Use symbolic exit status elsewhere.
* src/local.mk: Put yacc related variables together.
(AUTOMAKE_OPTIONS): Move to...
* Makefile.am: here.
Remove an old Emacs mode request which disables Automake support.
* src/local.mk (YACC, AM_YFLAGS): Move to...
* Makefile.am: here, as they will be used by other local.mks.
The directory was still using a local Makefile.am because it provides
"scoped" Make variables: these examples are not meant to use the same
CPPFLAGS etc. If we were to use the same -I set, we'd pick up
gnulib's stdio.h for instance, which we do not want for these simple
examples.
Yet, as a result, the dependencies are less accurate, there is code
duplication, etc. This is especially perceptible when trying to
extract more examples from the documentation, as will be done in
forthcoming changes.
In order to make the tuning of CPPFLAGS easier, discard the predefined
-I from Automake.
* examples/calc++/Makefile.am: Rename as...
* examples/calc++/local.mk: this.
Adjust the paths which are now rooted in top_srcdir/top_builddir.
Handle BISON_CXX_WORKS here, instead of the too crude previous
approach that completely discarded the whole directory.
($(BISON)): Remove now useless bouncing recipe.
(calc___CPPFLAGS): New.
Stay away from -Ilib.
* Makefile.am, configure.ac, examples/local.mk,
* examples/calc++/test: Adjust.
* configure.ac: Pass nostdinc to Automake.
* src/local.mk, lib/local.mk (AM_CPPFLAGS): Move to...
* Makefile.am: here.
* src/local.mk, examples/calc++/Makefile.am (BISON, BISON_IN): Factor
to...
* Makefile.am: here.
* tests/local.mk: Use it.
See <http://lists.gnu.org/archive/html/bug-bison/2012-01/msg00120.html>.
Use quotearg as often as possible instead of leaving the choice of
the quotes to the translators. Use shorter messages. Factor similar
messages to a single format, to make localization easier.
* src/files.c, src/getargs.c, src/muscle-tab.c, src/reader.c
* src/scan-code.l, src/scan-gram.l, src/symtab.c:
Use quote() or quotearg_colon() on printf arguments instead of
quotes in the format string.
* data/bison.m4: Keep sync with the changes in muscle-tab.c.
* tests/skeletons.at, tests/input.at, tests/regression.at: Adjust
expected messages.
Standard output was never explicitly closed, so we could not
detect failure. Thus, bison would ignore the errors of writing
to a full file system and getting an I/O error on write, but only
for standard output, e.g., for --print-localedir, --print-datadir,
--help and some verbose output.
Now, "bison --print-datadir > /dev/full" reports the write failure:
bison: write error: No space left on device
Before, it would exit 0 with no diagnostic, implying success.
This is not an issue for "--output=-" or the other FILE-accepting
command-line options, because unlike most other GNU programs,
an output file argument of "-" is treated as the literal "./-",
rather than standard output.
* bootstrap.conf (gnulib_modules): Add closeout.
* src/main.c: Include "closeout.h".
Use atexit to ensure we close stdout.
* .gitignore: Ignore new files pulled in via gnulib-tool.
Updating to gnulib pulled in new quote and quotarg modules,
by which quoting is now done like 'this' rather than `this'.
That change induces many "make check" test failures. This change
adapts code and tests so that "make check" passes once again.
* src/scan-code.l: Quote like 'this', not like `this'.
* src/scan-gram.l: Likewise.
* src/symtab.c: Likewise.
* tests/actions.at: Adjust tests to match.
* tests/input.at: Likewise.
* tests/named-refs.at: Likewise.
* tests/output.at: Likewise.
* tests/regression.at: Likewise.
* lib/.gitignore: Regenerate.
* m4/.gitignore: Likewise.
This change was made by applying emacs' untabify function to
nearly all files in Bison's repository. Required tabs in make
files, ChangeLog, regexps, and test code were manually skipped.
Other notable exceptions and changes are listed below.
* bootstrap: Skip because we sync this with gnulib.
* data/m4sugar/foreach.m4
* data/m4sugar/m4sugar.m4: Skip because we sync these with
Autoconf.
* djgpp: Skip because I don't know how to test djgpp properly, and
this code appears to be unmaintained anyway.
* README-hacking (Hacking): Specify that tabs should be avoided
where not required.
It creates unnecessary differences between the sources that Bison
maintainers build and test (given that maintainers normally
configure with --enable-gcc-warnings) and the sources that Bison
users build. Instead, use PACIFY_CC, which doesn't. This change
fixes compiler warnings reported by Tys Lefering at
<http://lists.gnu.org/archive/html/bison-patches/2011-05/msg00004.html>.
* configure.ac: Don't AC_DEFINE lint regardless of the configure
options. This change affects imported gnulib sources, where
IF_LINT still appears and depends on lint.
* src/scan-gram.l, src/scan-skel.l: Replace uses of IF_LINT with
PACIFY_CC.
* src/system.h (IF_LINT): Remove cpp macro.
(PACIFY_CC): New cpp macro.
(cherry picked from commit 77bb73e7af)
Conflicts:
src/scan-gram.l
Since Bison 2.3b, which restored the ability of precedence
directives to assign user token numbers, doing so for user token
number 0 has produced an assertion failure.
* NEWS (2.5): Document fix.
* src/symtab.c (symbol_user_token_number_set): In the case of the
end token, don't decrement ntokens if it was never incremented.
* tests/regression.at (Token number in precedence declaration):
Extend.
(cherry picked from commit 9d6af15318)
* bootstrap.conf (gnulib_modules): Add all modules suggested by
-DGNULIB_POSIXCHECK.
* src/files.c (file_name_split)
* src/getargs.c (getargs)
* src/location.c (boundary_set_from_string)
* src/output.c (output_skeleton)
* src/parse-gram.y (prologue_declaration)
* src/scan-gram.l (handle_syncline)
* src/symtab.c (symbol_new): Use mbschr and mbsrchr instead of
strchr and strrchr. In the cases of command-line options, file
names, and thus locations, functionality may be improved. In the
case of symbol names, there should be no functional difference as
all characters are ASCII, so the intended benefit is just warning
suppression.
(cherry picked from commit d143e9c33f)
Conflicts:
src/output.c
src/parse-gram.c
src/parse-gram.h
* README-hacking (Updating a submodule): Give advice on how to
determine the versions of gnulib and autoconf to which we should
update.
(Release Procedure): Note that submodules should be updated.
* bootstrap.conf (gnulib_modules): Rename pipe to spawn-pipe as
suggested in updated gnulib NEWS.
* gnulib: Choose a stable snapshot according to advice in Bison's
README-hacking.
* po/POTFILES.in (lib/pipe.c): Rename to...
(lib/spawn-pipe.c): ... this.
* src/output.c: Update to include spawn-pipe.h.
* submodules/autoconf: Update to latest for improvement in m4.m4
that excludes M4 with buggy strstr. The only other changes to
files that we use are copyright updates.
(cherry picked from commit a898435b25)
Conflicts:
build-aux/.gitignore
Thus, conflict reports are now affected by -Werror and -Wnone
(unless %expect or %expect-rr is specified). Reported by George
Neuner at
<http://lists.gnu.org/archive/html/bug-bison/2010-08/msg00002.html>.
* NEWS (2.5): Document.
* doc/bison.texinfo (Bison Options): Document.
* src/complain.c, src/complain.h (set_warning_issued): Export
function.
* src/conflicts.c (conflicts_print): Suppress conflict report
based on -Wno-conflicts-sr and -Wno-conflicts-rr, and treat
conflicts as errors if -Werror.
* src/getargs.c (warnings_flag): Initialize with
warnings_conflicts_sr and warnings_conflicts_rr as well.
(warnings_args, warnings_types): Add entries for
warnings_conflicts_sr and warnings_conflicts_rr.
(usage): Update.
* src/getargs.h (enum warnings): Add entries for
warnings_conflicts_sr and warnings_conflicts_rr.
* tests/conflicts.at (-W versus %expect and %expect-rr): New test
group.
* tests/local.at (AT_BISON_CHECK_NO_XML): Update now that the
conflict report can produce a "warnings being treated as errors"
message. Also, check that stderr is now fully scrubbed by -Wnone
when the exit status is 0.
(cherry picked from commit 6f8bdce25d)
Reported by George Neuner at
<http://lists.gnu.org/archive/html/bug-bison/2010-08/msg00002.html>.
* NEWS (2.5): Document.
* THANKS (George Neuner): Add.
* doc/bison.texinfo (Bison Options): Document.
* src/complain.c, src/complain.h
(warn_at, warn_at_indent, warn): Suppress warning if -Wno-other.
(midrule_value_at): New warning function, similar to yacc_at in
that it's controlled by its own warning category.
* src/getargs.c (warnings_flag): Initialize to warnings_other.
(warnings_args, warnings_types): Add entry for warnings_other.
(usage): Update.
* src/getargs.h (enum warnings): Add entry for warnings_other.
* src/gram.c (grammar_rules_useless_report): If -Wno-other, then
don't print useless rules.
* src/reader.c (symbol_should_be_used): Rather than adjusting the
return value based on whether midrule value warnings are enabled,
accept a new parameter for telling the caller whether true is
being returned for a potential midrule warning.
(grammar_rule_check): Use midrule_value_at for midrule value
warnings, and continue to use warn_at for all other warnings. Let
them check whether the warnings are enabled.
* tests/local.at (AT_BISON_CHECK): Update documentation.
(AT_BISON_CHECK_NO_XML): Check that -Wnone and --warnings=none
disable all warnings exercised in the test suite.
(cherry picked from commit 8ffd7912e3)
Discussed at
<http://lists.gnu.org/archive/html/bison-patches/2010-08/msg00009.html>.
* NEWS (2.5): Document.
* src/getargs.c (flags_argmatch): Accept a new argument that
specifies what flags "all" and thus "none" affect.
(FLAGS_ARGMATCH): Update flags_argmatch invocation.
* tests/input.at (-Werror is not affected by -Wnone and -Wall):
New test group.
(cherry picked from commit dab9663283)
In `rhs[name]: "a" | "b"', do not free "name" twice.
Reported by Tys Lefering.
<http://lists.gnu.org/archive/html/bug-bison/2010-06/msg00002.html>
* src/named-ref.h, src/named-ref.c (named_ref_copy): New.
* src/parse-gram.y (current_lhs): Rename as...
(current_lhs_symbol): this.
(current_lhs): New function. Use it to free the current lhs
named reference.
* src/reader.c: Bind lhs to a copy of the current named reference.
* src/symlist.c: Rely on free (0) being valid.
* tests/named-refs.at: Test this.
(cherry picked from commit 8f462efe92)
Conflicts:
src/parse-gram.y
States that shift the error token do not have default reductions,
and GLR disables some default reductions, so "all" was a misnomer.
* doc/bison.texinfo (%define Summary): Update.
(Default Reductions): Update.
* src/print.c (print_reductions): Update.
* src/reader.c (prepare_percent_define_front_end_variables):
Update.
* src/tables.c (action_row): Update.
* tests/input.at (%define enum variables): Update.
* tests/reduce.at (%define lr.default-reductions): Update.
(cherry picked from commit d815ec4a62)
* doc/bison.texinfo (Introduction): Say that IELR(1) and canonical
LR(1) are experimental. Mention Java. Normally experimental
features probably shouldn't be mentioned in the introduction.
However, if Bison's limitations to LALR(1), C, and C++ are so
important that they should be mentioned here, then it's important
to point out that Bison is beginning to escape those limitations.
Moreover, these particular experimental features have very little
chance of being removed.
* src/getargs.c (usage): Say that IELR(1) and canonical LR(1) are
experimental.
(cherry picked from commit d89e48b3c9)
This cleans up our previous fixes for a bug whereby Bison
discarded `.field' in `$-1.field'. The previous fixes were less
restrictive about where a dash could appear in an identifier, but
the restrictions were hard to explain. That bug was reported and
this final fix was originally suggested by Paul Hilfinger. This
also fixes a remaining bug reported by Paul Eggert whereby Bison
parses `%token ID -123' as `%token ID - 123' and handles `-' as an
identifier. Now, `-' cannot be an identifier. Discussed in
threads beginning at
<http://lists.gnu.org/archive/html/bug-bison/2011-01/msg00000.html>,
<http://lists.gnu.org/archive/html/bug-bison/2011-01/msg00004.html>.
* NEWS (2.5): Update entry describing the dash extension to
grammar symbol names. Also, move that entry before the named
references entry because the latter mentions the former.
* doc/bison.texinfo (Symbol): Update documentation for symbol
names. As suggested by Paul Eggert, mention the effect of periods
and dashes on named references.
(Decl Summary): Update documentation for unquoted %define values,
which, as a side effect, can no longer start with dashes either.
* src/scan-code.l (id): Implement.
* src/scan-gram.l (id): Implement.
* tests/actions.at (Exotic Dollars): Extend test group to exercise
bug reported by Paul Hilfinger.
* tests/input.at (Symbols): Update test group, and extend to
exercise bug reported by Paul Eggert.
* tests/named-refs.at (Stray symbols in brackets): Update test
group.
($ or @ followed by . or -): Likewise.
* tests/regression.at (Invalid inputs): Likewise.
* doc/bison.texinfo (Mid-Rule Actions): Mention that periods and
dashes make symbol names less convenient for named references.
* src/scan-code.l:
(handle_action_dollar): New arg textlen. All callers changed.
(handle_action_at): Likewise. Also, args are pointers to const.
(ref_tail_fields): Remove; no longer used.
(letter): Now includes '-' and '.', since this is for Bison
identifiers.
(id): Now the simpler traditional defn, since letters now include
'-' and '.'.
(c_letter, c_id): New defns.
(ref): Use c_id for unbracketed IDs.
(<SC_RULE_ACTION>): Simplify, now that the distinction between
Bison and unbracketed IDs are now in the regular expressions.
(VARIANT_BAD_BRACKETING): Remove.
(VARIANT_NOT_VISIBLE_FROM_MIDRULE): Renumber.
(find_prefix_end): Remove, replacing with ....
(identifier_matches): New function.
(variant_add): Use it. Omit EXPLICIT_BRACKETING arg; no longer
needed. CP arg is pointer to constant. All callers changed.
(show_sub_messages): Remove args CP, EXPLICIT_BRACKETING, DOLLAR_OR_AT.
New arg TEXT. All callers changed. Do not worry about showing
trailing context.
(parse_ref): Args CP, RULE, TEXT are now pointers to const. New
arg TEXTLEN. Remove arg DOLLAR_OR_AT. All callers changed.
Simplify code now that the regular expressions capture the
restrictions.
* src/scan-gram.l (letter, id): Adjust to match scan-code.l.
* src/symlist.c (symbol_list_null): Arg is now pointer to const.
* src/symlist.h: Likewise.
* tests/named-refs.at (Misleading references): These are now caught
by the C compiler, not by Bison; that's good enough. Adjust test
to reflect this.
(Many kinds of errors, Unresolved references): Adjust expected
diagnostics to match new behavior. The same errors are caught,
though the diagnostics are not quite as fancy.
($ or @ followed by . or -): Likewise. Also, Make the grammar
unambiguous, so that diagnostics are not complicated by ambiguity
warnings.
* data/glr.c, data/yacc.c: Do not use apostrophes in '#' comments,
as they confuse xgettext, which tries to parse them as C character
constants in a preprocessor directive.
* data/yacc.c (yy_lac): Don't use printf %d format on *yyesp, as
that expression might not promote to int on some platforms.
* src/parse-gram.c, src/parse-gram.h: Regenerate.
Previously, for this special case of an invalid reference, the
usual "symbol not found in production:" was printed. However,
because the symbol name was parsed as the empty string, that
message was followed immediately by a newline instead of a symbol
name. In reality, this is a syntax error, so the reference is
invalid regardless of the symbols actually appearing in the
production. Discussed at
<http://lists.gnu.org/archive/html/bison-patches/2011-01/msg00012.html>.
* src/scan-code.l (parse_ref): Report the above case as a syntax
error. Other than that, continue to handle this case like any
other invalid reference that Bison manages to parse because
"possibly meant" messages can still be helpful to the user.
* tests/named-refs.at ($ or @ followed by . or -): New test group.
Reported by Paul Hilfinger as a side effect of named references
support at
<http://lists.gnu.org/archive/html/bug-bison/2011-01/msg00000.html>.
Suggested by Paul Eggert.
* src/scan-code.l ({letter}, {id}): Adjust lexical definitions.
* src/scan-gram.l ({letter}, {id}): Likewise.
* data/yacc.c: Rename %define variable parse.lac.es-capacity to
parse.lac.es-capacity-initial. Accept parse.lac.memory-trace
with values of "failures" (default) or "full".
(b4_declare_parser_state_variables): Add yyesa, yyes, and
yyes_capacity variables.
(YYSTACK_USE_ALLOCA): Ignore it if LAC requested.
(YYSTACK_ALLOC, YYSTACK_FREE, YYSTACK_ALLOC_MAXIMUM): Define if
LAC requested.
(YYCOPY_NEEDED): New cpp macro.
(YYCOPY): Define if LAC requested.
(yy_lac_stack_realloc): New function implementing stack
reallocations. Use YYMAXDEPTH for maximum stack size given that
the stack should never need to grow larger than the main state
stack needs to grow without LAC.
(YY_LAC_ESTABLISH): Update yy_lac invocation.
(yy_lac): Add arguments for exploratory stack memory data
recorded in the main parser. Invoke yy_lac_stack_realloc when
reallocation is necessary.
(yysyntax_error): Add the same new arguments and pass them to
yy_lac.
(yypstate_delete): Free yyes if necessary.
(yyesa, yyes, yyes_capacity): #define these to yypstate members
in the case of push parsing.
(yyparse, yypush_parse): Initialize yyes and yyes_capacity.
Update yysyntax_error invocations. At yyreturn, free yyes if
necessary.
* src/parse-gram.y: %define parse.lac full.
* tests/input.at (LAC: errors for %define): Extend for
parse.lac-memory-trace.
* tests/regression.at (LAC: Exploratory stack): Extend to check
that stack reallocs happen when expected.
(LAC: Memory exhaustion): Update to use YYMAXDEPTH and
parse.lac.es-capacity-initial.
LAC = lookahead correction. See discussion at
<http://lists.gnu.org/archive/html/bison-patches/2009-09/msg00034.html>.
However, one point there must be corrected: because of %nonassoc,
LAC is *not* always redundant for lr.type=canonical-lr.
* data/yacc.c: Accept values of "none" (default) or "full" for
parse.lac. Accept %define parse.lac.es-capacity to specify
capacity of LAC's temporary exploratory stack. It defaults to 20
and, for now, will not grow dynamically.
(b4_lac_flag, b4_lac_if): New m4 macros. Evaluate as true for
parse.lac!=none.
(YYBACKUP): Invoke YY_LAC_DISCARD.
(YY_LAC_ESTABLISH, YY_LAC_DISCARD): New cpp macros that invoke
yy_lac and track when it needs to be invoked
(yy_lac): New function that, given the current stack, determines
whether a token can eventually be shifted. Return status mimics
yyparse return status.
(yysyntax_error): Change yystate argument to yyssp so stack top
can be passed to yy_lac. If LAC is requested, build expected
token list by invoking yy_lac for every token instead of just
checking the current state for lookaheads. Return 2 if yy_lac
exhausts memory.
(yyparse, yypush_parse): Use local variable yy_lac_established and
cpp macros YY_LAC_ESTABLISH and YY_LAC_DISCARD to implement LAC.
Update yysyntax_error invocation. Add yyexhaustedlab code if LAC
is requested.
* tests/conflicts.at (%nonassoc and eof): Extend to check the
effect of each of -Dlr.type=canonical-lr and -Dparse.lac=full.
(parse.error=verbose and consistent errors): Likewise.
(LAC: %nonassoc requires splitting canonical LR states): New test
group demonstrating how LAC can fix canonical LR.
* tests/input.at (LAC: Errors for %define): New test group.
* tests/regression.at (LAC: Exploratory stack): New test group.
(LAC: Memory exhaustion): New test group.
* NEWS (2.5): Document.
* data/yacc.c (yysyntax_error): In a verbose syntax error
message while in a consistent state with a default action (which
must be an error action given that yysyntax_error is being
invoked), continue to drop the expected token list, but don't
drop the unexpected token unless there actually is no lookahead.
Moreover, handle that internally instead of returning 1 to tell
the caller to do it. With that meaning of 1 gone, renumber
return codes more usefully.
(yyparse, yypush_parse): Update yysyntax_error usage. Most
importantly, set yytoken to YYEMPTY when there's no lookahead.
* data/glr.c (yyreportSyntaxError): As in yacc.c, don't drop the
unexpected token unless there actually is no lookahead.
* data/lalr1.cc (yy::parser::parse): If there's no lookahead,
pass yyempty_ not yyla.type to yysyntax_error_.
(yy::parser::yysyntax_error_): Again, don't drop the unexpected
token unless there actually is no lookahead.
* data/lalr1.java (YYParser::parse): If there's no lookahead,
set yytoken to yyempty_ before invoking yysyntax_error.
(YYParser::yysyntax_error): Again, don't drop the unexpected
token unless there actually is no lookahead.
* tests/conflicts.at (parse.error=verbose and consistent
errors): Extend test group to further reveal how the previous
use of the simple "syntax error" message was too general. Test
yacc.c, glr.c, lalr1.cc, and lalr1.java. No longer an expected
failure.
* tests/java.at (AT_JAVA_COMPILE, AT_JAVA_PARSER_CHECK): Move
to...
* tests/local.at: ... here.
(_AT_BISON_OPTION_PUSHDEFS): Push AT_SKEL_JAVA_IF definition.
(AT_BISON_OPTION_POPDEFS): Pop it.
(AT_FULL_COMPILE): Extend to handle Java.
These are purely whitespace changes that result in ugly code
but that make the next couple of patches much easier to read.
* data/glr.c (yyreportSyntaxError): Reindent.
* data/lalr1.cc (yy::parser::yysyntax_error_): Reindent.
* data/lalr1.java (YYParser::yysyntax_error): Reindent.
* data/yacc.c (yysyntax_error): Reindent.