]> git.saurik.com Git - bison.git/blobdiff - ChangeLog
2007-10-17 Wojciech Polak <polak@gnu.org>
[bison.git] / ChangeLog
index d622a99ce7e246e9ad97f7b1de84056eed5b4c83..3aae3d6a8df12d92c0f8dd22d03b88de41688d8f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2007-10-17  Wojciech Polak  <polak@gnu.org>
+
+       * src/print-xml.c (print_grammar): Renamed
+       <terminal> and <nonterminal> attributes:
+       "type" to "number" and "symbol" to "name".
+       * data/xslt/xml2text.xsl (xsl:template match="terminal"):
+       Use new attribute names.
+       (xsl:template match="nonterminal"): Likewise.
+       * data/xslt/xml2xhtml.xsl: Likewise.
+
+2007-10-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * doc/bison.texinfo (Bison Options): Add entry for --print-datadir.
+       (Option Cross Key): Likewise.
+
+       * src/print-xml.c (print_core): Don't print a reduction's lookahead set
+       next to an item whose dot is not at the end of the RHS even if it
+       happens to be associated with the same rule.
+       * src/print.c (print_core): Likewise.
+       * tests/conflicts.at (Unresolved SR Conflicts): Update output.
+       (Resolved SR Conflicts): Update output.
+       * tests/regression.at (Extra lookahead sets in report): New test case.
+
+2007-10-11  Wojciech Polak  <polak@gnu.org>
+
+       * src/print-xml.c (print_core): Remove item set
+       redundancy.
+       * data/xslt/bison.xsl (bison:ruleNumber): New key.
+       Improve processing time. Suggested by Joel E. Denny.
+       * data/xslt/xml2dot.xsl (xsl:template name="escape"):
+       Write xsl:param "required" attribute as comment.
+       * data/xslt/xml2text.xsl (xsl:template match="item"): New.
+       (xsl:template match="rule"): Support new reduced itemset.
+       (xsl:template match="point"): Remove.
+       * data/xslt/xml2xhtml.xsl: Likewise.
+
+2007-10-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * src/getargs.c (version): Update copyright year.
+
+2007-10-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Make xml2dot.xsl and --graph produce the same output.
+       * data/xslt/xml2dot.xsl (xsl:template match="rule"): Use a `&#10;'
+       instead of a `\n'.  That is, don't add escapes yet or they'll be doubly
+       escaped later.
+       (xsl:template name="output-node"): Use the new escape template instead
+       of the string-replace template directly.
+       (xsl:template name="output-edge"): Likewise.
+       (xsl:template name="escape"): New, escapes backslashes and newlines in
+       addition to quotation marks.
+       * src/graphviz.c (start_graph, output_node, output_edge): Add
+       whitespace to output for legibility.
+
+       Make xml2text.xsl and --report produce the same output, and remove the
+       XML "conflicts" element since a conflict summary is easily extracted
+       from the automaton.
+       * data/xslt/bison.xsl: New.
+       (xsl:template match="state" mode="bison:count-conflicts): New.
+       * data/xslt/xml2text.xsl: Import bison.xsl.
+       (xsl:template match="bison-xml-report"): Instead of styling the
+       "conflicts" element, style the "automaton" element with mode
+       "conflicts".  Unlike the former, the latter lists S/R and R/R
+       conflicts for a state on the same line.
+       (xsl:template match="conflicts"): Remove.
+       (xsl:template match="conflict"): Remove.
+       (xsl:template match="terminal"): Line-wrap the list of rules in which
+       the terminal is used.
+       (xsl:template match="nonterminal"): Likewise for nonterminals.
+       (xsl:template match="automaton" mode="conflicts"): New.
+       (xsl:template match="state" mode="conflicts"): New.
+       (xsl:template name="line-wrap"): New.
+       (xsl:template name="ws-search"): New.
+       * data/xslt/xml2xhtml.xsl: Import bison.xsl.
+       (xsl:template match="bison-xml-report"): Instead of styling the
+       "conflicts" element, style the "automaton" element with mode
+       "conflicts."
+       (xsl:template match="conflicts"): Remove.
+       (xsl:template match="conflict"): Remove.
+       (xsl:template match="automaton" mode="conflicts"): New.
+       (xsl:template match="state" mode="conflicts): New.
+       * src/conflicts.c (conflicts_output_xml): Remove.
+       * src/conflicts.h (conflicts_output_xml): Remove prototype.
+       * src/print-xml.c (print_xml): Don't invoke conflicts_output_xml.
+       * src/print.c (print_grammar): Consistently wrap at the 66th column so
+       the corresponding XSLT is easier.  Also, never wrap between a word and
+       the comma that follows it.
+
+2007-10-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Improve C++ namespace support.  Discussed starting at
+       <http://lists.gnu.org/archive/html/help-bison/2007-09/msg00016.html>.
+       * data/c++.m4: (b4_namespace_ref, b4_namespace_open,
+       b4_namespace_close): New macros that interpret the %define variable
+       "namespace" so its value can contain "::" to indicate nested
+       namespaces.
+       * data/glr.cc (b4_namespace): Don't define, and replace all uses with
+       the above macros.
+       * data/lalr1.cc (b4_namespace): Likewise.
+       * data/location.cc (b4_namespace): Likewise.
+       * doc/bison.texinfo (Decl Summary): Move `%define push_pull' entry
+       inside a new table in the general %define entry.  Document `%define
+       namespace' there as well.  Point the %name-prefix entry to it since it
+       explains it more completely in the case of C++.
+       (C++ Bison Interface): Mention `%define namespace' instead of
+       %name-prefix.
+       (Table of Symbols): Remove the `%define push_pull' entry.  The %define
+       entry suffices.
+       * tests/c++.at (Relative namespace references): New test case.
+       (Absolute namespace references): New test case.
+       (Syntactically invalid namespace references): New test case.
+       * tests/input.at (C++ namespace reference errors): New test case.
+
+2007-10-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Add syncline support and location accessor to internal %define
+       interfaces.
+       * data/bison.m4 (b4_percent_define_get_loc): New.
+       (b4_percent_define_get_syncline): New.
+       (b4_percent_define_flag_if): Use b4_percent_define_get_loc.
+       (b4_percent_define_default): Record defining location as line 1 rather
+       than 0 for the sake of synchronizing #line's, and define
+       b4_percent_define_syncline(VARIABLE).
+       (b4_percent_define_check_values): Use b4_percent_define_get_loc.
+       * src/muscle_tab.c (muscle_syncline_grow): New.
+       (muscle_code_grow): Use muscle_syncline_grow.
+       (muscle_percent_define_insert): Use muscle_percent_define_get_loc, and
+       define b4_percent_define_syncline(VARIABLE).
+       (muscle_percent_define_get_loc): New.
+       (muscle_percent_define_get_syncline): New.
+       (muscle_percent_define_flag_if): Use muscle_percent_define_get_loc, and
+       remove some unused variables.
+       (muscle_percent_define_default): Record defining location as line 1
+       rather than 0 for the sake of synchronizing #line's, and define
+       b4_percent_define_syncline(VARIABLE).
+       (muscle_percent_define_check_values): Use
+       muscle_percent_define_get_loc.
+       * src/muscle_tab.h (muscle_percent_define_get_loc): Prototype.
+       (muscle_percent_define_get_syncline): Prototype.
+       * tests/skeletons.at (%define Boolean variables: invalid skeleton
+       defaults): Update output for location change.
+       (Complaining during macro argument expansion): Extend to test
+       b4_percent_define_get_loc and b4_percent_define_get_syncline errors.
+
+2007-10-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Fix some error-reporting macro bugs.
+       * data/bison.m4 (b4_cat): New.
+       (b4_error, b4_error_at): Use b4_cat to send error directives directly
+       to stdout so they don't become arguments to other macros.  Update
+       comments and add examples.
+       (b4_warn, b4_warn_at, b4_complain, b4_complain_at): Update comments and
+       add examples.
+       (b4_fatal, b4_fatal_at): Likewise, and invoke m4_exit(1) immediately
+       after printing the error directive so that M4 doesn't report subsequent
+       problems that are induced by this problem.
+       * src/scan-skel.l: Recognize @` digraph outside of directive arguments
+       instead of just in them.  Recognize @\n in both places.  Both expand to
+       the empty string.  Needed by b4_cat.
+       * tests/skeletons.at (Complaining during macro argument expansion):
+       New test case.
+       (Fatal errors make M4 exit immediately): New test case.
+
+2007-10-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Implement --print-datadir.
+       * src/getargs.c (usage): Mention.
+       (PRINT_DATADIR_OPTION): New anonymous enum member.
+       (long_options): Add entry for it.
+       (getargs): Add case for it calling compute_pkgdatadir.
+       * src/output.c (output_skeleton): Encapsulate data directory
+       computation from here...
+       (prepare): ... and from here...
+       (compute_pkgdatadir): ... into this new function.
+       * src/output.h (compute_pkgdatadir): Prototype.
+
+2007-09-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * src/print-xml.c (escape_bufs): New static global variable
+       replacing...
+       (xml_escape_n): ... the static local variable buf here.
+       (print_xml): Free memory for escape_bufs.
+       * src/reduce.c (reduce_xml): XML-escape terminal symbol tags.
+
+2007-09-25  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Replace `%push-parser' and `%push-pull-parser' with
+       `%define push_pull "push"' and `%define push_pull "both"'.
+       `%define push_pull "pull"' is the default.
+       * doc/bison.texinfo (Push Decl, Push Parser Function,
+       Pull Parser Function, Parser Create Function, Parser Delete Function):
+       Update declarations.
+       (Decl Summary, Table of Symbols): Replace %push-parser and
+       %push-pull-parser entries with a %define push_pull entry.
+       * data/bison.m4 (b4_percent_define_check_values): New macro.
+       (b4_pull_if, b4_push_if, b4_use_push_for_pull_if): Move these
+       definitions...
+       * data/c.m4 (b4_identification): ... and the YYPUSH and YYPULL cpp
+       definitions...
+       * data/push.c: ... to here and compute them from the value of the
+       %define variable push_pull.
+       * data/c-skel.m4: Instead of choosing the push.c skeleton for push
+       parsing requests here...
+       * data/yacc.c: ... hack this to switch to push.c any time
+       b4_use_push_pull_flag or the %define variable push_pull is set.  This
+       will go away when we mv push.c yacc.c.
+       * data/c++-skel.m4, data/glr.c, data/java-skel.m4: Don't report that
+       push parsing is not supported since unused %define variables are
+       reported anyway.
+       * src/getargs.c, src/getargs.h (pull_parser, push_parser): Remove.
+       * src/muscle_tab.h (muscle_percent_define_check_values): Update
+       comments for consistency with b4_percent_define_check_values.
+       * src/output.c (prepare): Don't insert b4_pull_flag and b4_push_flag
+       muscles.
+       * src/parse-gram.y (PERCENT_PUSH_PARSER, PERCENT_PUSH_PULL_PARSER):
+       Remove.
+       (prologue_declaration): Remove %push-parser and %push-pull-parser
+       rules.
+       * src/scan-gram.l (%push-parser, %push-pull-parser): Remove rules.
+       * tests/calc.at: Update declarations.
+       * tests/input.at (%define enum variables): New test case.
+       * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update
+       declaration.
+       (Push Parsing: Multiple impure instances): Update declaration.
+       (Push Parsing: Unsupported Skeletons): New test case.
+       * tests/torture.at (Exploding the Stack Size with Alloca): Update
+       declaration.
+       (Exploding the Stack Size with Malloc): Update declaration.
+
+2007-09-24  Wojciech Polak  <polak@gnu.org>
+
+       Add XSLT transformations.
+
+       * data/xslt/xml2dot.xsl: Transform XML into DOT.
+       * data/xslt/xml2text.xsl: Transform XML into plain text.
+       * data/xslt/xml2xhtml.xsl: Transform XML into XHTML.
+       * data/Makefile.am (xsltdir): New variable.
+       (dist_xslt_DATA): Add xslt/*.xsl files.
+
+2007-09-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/conflicts.c (log_resolution): Fix indenting bugs I introduced.
+       Problem reported by Wojciech Polak.
+       * src/print-xml.c (xml_puts): Work even if LEVEL exceeds INT_MAX/2.
+       (xml_printf): Undo change I made on 21 September; that is,
+       indent 2 spaces, not 1.
+
+2007-09-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Pacify ./configure --enable-gcc-warnings.
+       * src/print-xml.c, src/print-xml.h (xml_puts): Make third argument
+       `char const *' instead of `char *'.
+       * src/state.c (state_rule_lookahead_tokens_print_xml): Remove unused
+       local variable `sep'.
+
+2007-09-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/gram.c (rule_rhs_print_xml): Now static, since it isn't used
+       elsewhere.
+       * src/print-xml.c: Prefer "const" after types; that's more consistent.
+       (xml_printf): Indent just 1 space for level.
+       (e_char, xlate_char): Remove.
+       (xml_escape_string): Rewrite to avoid undefined behavior (used
+       storage that was freed from the stack).
+       (xml_escape_n): Don't bother checking for subscript error.
+
+2007-09-21  Wojciech Polak  <polak@gnu.org>
+
+       Add Bison XML Automaton Report.
+
+       Add support for an -x option to generate an XML report.
+       It is not documented yet.
+       * src/print-xml.c: New file.
+       * src/print-xml.h: Likewise.
+       * lib/timevar.def (TV_XML): New var.
+       * src/Makefile.am (bison_SOURCES): Add print-xml.c, print-xml.h.
+       * src/conflicts.c: Include print-xml.h.
+       (solved_conflicts_xml_obstack): New var.
+       (log_resolution, conflicts_solve, conflicts_free):
+       Add support for XML report.
+       (conflicts_output_val): New function.
+       * src/conflicts.h (conflicts_output_val): New decl.
+       * src/files.c (spec_xml_file): New var.
+       (compute_output_file_names, output_file_names_free): Add XML support.
+       * src/files.h (spec_xml_file): New decl.
+       * src/getargs.c (xml_flag): New var.
+       (usage, short_options, long_options, getargs): Add XML support.
+       * src/getargs.h (xml_flag): New decl.
+       * src/gram.c: Include print-xml.h.
+       (rule_lhs_print_xml, rule_rhs_print_xml):
+       (grammar_rules_partial_print_xml, grammar_rules_print_xml):
+       New functions.
+       * src/gram.h: Declare external ones.
+       * src/main.c: Include print-xml.h.
+       (main): Add XML support.
+       * src/reduce.c: Include print-xml.h.
+       (reduce_xml): New function.
+       * src/reduce.h: Declare it.
+       * src/state.c: Include print-xml.h.
+       (state_new): Add XML support.
+       (state_rule_lookahead_tokens_print_xml): New function.
+       * src/state.h: Declare it.
+       (struct state): New member solved_conflicts_xml.
+       * src/symtab.c (symbol_class_get_string): New function.
+       * src/symtab.h: Declare it.
+
+2007-09-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * GNUmakefile: Switch to coreutils's version.
+       * bootstrap: Likewise.
+       * Makefile.cfg: Adjust to new GNUmakefile.
+       * README-hacking: Likewise.
+
+       Import from gnulib:
+
+       2006-08-18  Paul Eggert  <eggert@cs.ucla.edu>
+                   Bruno Haible  <bruno@clisp.org>
+
+       * m4/bison-i18n.m4 (BISON_I18N): Also handle the case where yacc exists
+       and is a script that invokes bison. Tighten the code. Add comments.
+
+2007-08-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Spell "boolean" as "Boolean".  Reported by Akim Demaille.
+       * data/bison.m4 (b4_percent_define_flag_if): Fix complaint.
+       * doc/bison.texinfo (Decl Summary): Fix.
+       * src/muscle_tab.c (muscle_percent_define_flag_if): Fix complaint.
+       * tests/input.at (Boolean %define variables): Update output.
+       * tests/skeletons.at (%define boolean variables: invalid skeleton
+       defaults): Rename to...
+       (%define Boolean variables: invalid skeleton defaults): ... this and
+       update output.
+
+2007-08-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       In impure push mode, don't allow more than one yypstate to be allocated
+       since multiple impure parsers would corrupt yynerrs.
+       * data/push.c (yypstate_allocated): New static global variable
+       initialized to 0.
+       (yypull_parse): If yypstate_new returns 0, don't report it as memory
+       exhaustion if yypstate_allocated is 1, but still return 2.
+       (yypstate_new): Invoke yyerror and return 0 if yypstate_allocated is
+       already 1.  Otherwise, set it to 1.
+       (yypstate_delete): Set it to 0.
+       * tests/push.at (Push Parsing: Multiple impure instances): New test
+       case.
+
+2007-08-17  Bob Rossi  <bob@brasko.net>
+
+       * doc/bison.texinfo (Push Decl): Document the push parser.
+       (Table of Symbols): Ditto.
+       (Pure Decl): Ditto.
+       (Decl Summary): Ditto.
+       (Multiple Parsers, Push Parser Function, Pull Parser Function,
+       Parser Create Function, Parser Delete Function):
+       Add new push parser symbols.
+       (Table of Symbols): Document push-parser, push-pull-parser,
+       yypush_parse, yypull_parse, yypstate_new and yypstate_delete.
+
+2007-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update to GPLv3.
+       * doc/gpl-3.0.texi: New file.
+       * doc/gpl.texi: Remove.
+       * COPYING, GNUmakefile, HACKING, Makefile.am, Makefile.cfg:
+       * Makefile.maint, NEWS, PACKAGING, README, README-alpha:
+       * README-hacking, TODO, bootstrap, bootstrap.conf:
+       * configure.ac, data/Makefile.am, data/README, data/bison.m4:
+       * data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4:
+       * data/glr.c, data/glr.cc, data/java-skel.m4, data/java.m4:
+       * data/lalr1.cc, data/lalr1.java, data/location.cc:
+       * data/push.c, data/yacc.c, data/m4sugar/m4sugar.m4:
+       * djgpp/Makefile.maint, djgpp/README.in, djgpp/config.bat:
+       * djgpp/config.sed, djgpp/config.site, djgpp/config_h.sed:
+       * djgpp/djunpack.bat, djgpp/subpipe.c, djgpp/subpipe.h:
+       * djgpp/testsuite.sed, doc/Makefile.am, doc/bison.texinfo:
+       * doc/fdl.texi, doc/refcard.tex, etc/Makefile.am, etc/README:
+       * etc/bench.pl.in, examples/Makefile.am, examples/extexi:
+       * examples/calc++/Makefile.am, lib/Makefile.am, lib/abitset.c:
+       * lib/abitset.h, lib/bbitset.h, lib/bitset.c, lib/bitset.h:
+       * lib/bitset_stats.c, lib/bitset_stats.h, lib/bitsetv-print.c:
+       * lib/bitsetv-print.h, lib/bitsetv.c, lib/bitsetv.h:
+       * lib/ebitset.c, lib/ebitset.h, lib/get-errno.c:
+       * lib/get-errno.h, lib/lbitset.c, lib/lbitset.h:
+       * lib/libiberty.h, lib/main.c, lib/subpipe.c, lib/subpipe.h:
+       * lib/timevar.c, lib/timevar.def, lib/timevar.h:
+       * lib/vbitset.c, lib/vbitset.h, lib/yyerror.c:
+       * m4/c-working.m4, m4/cxx.m4, m4/m4.m4, m4/subpipe.m4:
+       * m4/timevar.m4, src/LR0.c, src/LR0.h, src/Makefile.am:
+       * src/assoc.c, src/assoc.h, src/closure.c, src/closure.h:
+       * src/complain.c, src/complain.h, src/conflicts.c:
+       * src/conflicts.h, src/derives.c, src/derives.h, src/files.c:
+       * src/files.h, src/flex-scanner.h, src/getargs.c:
+       * src/getargs.h, src/gram.c, src/gram.h, src/graphviz.c:
+       * src/lalr.c, src/lalr.h, src/location.c, src/location.h:
+       * src/main.c, src/muscle_tab.c, src/muscle_tab.h:
+       * src/nullable.c, src/nullable.h, src/output.c, src/output.h:
+       * src/parse-gram.c, src/parse-gram.h, src/parse-gram.y:
+       * src/print.c, src/print.h, src/print_graph.c:
+       * src/print_graph.h, src/reader.c, src/reader.h, src/reduce.c:
+       * src/reduce.h, src/relation.c, src/relation.h:
+       * src/revision.h, src/scan-code.h, src/scan-code.l:
+       * src/scan-gram.h, src/scan-gram.l, src/scan-skel.h:
+       * src/scan-skel.l, src/state.c, src/state.h, src/symlist.c:
+       * src/symlist.h, src/symtab.c, src/symtab.h, src/system.h:
+       * src/tables.c, src/tables.h, src/uniqstr.c, src/uniqstr.h:
+       * tests/Makefile.am, tests/actions.at, tests/c++.at:
+       * tests/calc.at, tests/conflicts.at, tests/cxx-type.at:
+       * tests/existing.at, tests/glr-regression.at:
+       * tests/headers.at, tests/input.at, tests/java.at:
+       * tests/local.at, tests/output.at, tests/push.at:
+       * tests/reduce.at, tests/regression.at, tests/sets.at:
+       * tests/skeletons.at, tests/synclines.at, tests/testsuite.at:
+       * tests/torture.at:
+       Update to GPLv3.
+
+2007-08-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Get rid of broken %no-parser, -n, and --no-parser implementation and
+       documentation.
+       * TODO: Don't mention them.
+       * doc/bison.1: Likewise.
+       * doc/bison.texinfo (Decl Summary): Likewise.
+       (Bison Options): Likewise.
+       (Option Cross Key): Likewise.
+       * src/getargs.c (no_parser_flag): Remove global variable.
+       (usage): Don't print description of -n and --no-parser.
+       (long_options): Remove --no-parser entry here.
+       (getargs): Remove -n case in the switch here.
+       * src/getargs.h (no_parser_flag): Remove extern.
+       * tests/regression.at (Web2c Actions): Remove comment that mentions
+       --no-parser.
+
+2007-08-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Do not
+       name user variables starting with `yy'.  Just pass NULL instead of a
+       dummy local &yylval to yypush_parse.
+       * tests/torture.at (AT_DATA_STACK_TORTURE): Do not name user variables
+       starting with `yy'.
+
+2007-08-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * data/yacc.c (yyexhaustedlab): Define it when YYERROR_VERBOSE is
+       true since it's then always used regardless of whether yyoverflow is
+       defined.  Reported by Christian Burger at
+       <http://lists.gnu.org/archive/html/bug-bison/2007-07/msg00031.html>.
+       * THANKS: Add Christian Burger.
+
+       * ChangeLog: For changes in doc/bison.texinfo, consistently reference
+       node names: say "Decl Summary" not "Bison Declaration Summary".
+
+2007-07-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * src/muscle_tab.c (muscle_percent_define_flag_if): In order to
+       determine whether this function has already complained about an invalid
+       value for a %define boolean variable, don't check whether Bison has
+       ever examined the value.  As written, the check was a tautology.
+       Instead, record and check for this complaint using a separate muscle.
+
+2007-07-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Fix push parsing memory leak reported by Brandon Lucia at
+       <http://lists.gnu.org/archive/html/bug-bison/2007-07/msg00032.html>.
+       * THANKS: Add Brandon Lucia.
+       * data/push.c (yypstate_delete): Free the stack if it was reallocated
+       but the parse never completed and thus freed it.
+       * tests/Makefile.am (TESTSUITE_AT): Add push.at.
+       * tests/testsuite.at: Include push.at.
+       * test/push.at: New.
+       (Push Parsing: Memory Leak for Early Deletion): New test case.
+
+2007-07-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Improve handling of multiple S/R conflicts in the same state and of S/R
+       conflicts involving multiple reductions.
+       * src/conflicts.c (resolve_sr_conflict): Don't assign the error action
+       set for a state here or Bison will abort if it is reassigned on a
+       later conflicted reduction in the same state.
+       Similarly, don't finalize and assign the solved conflicts report here
+       or it will be lost if it is reassigned on a later conflicted reduction
+       in the same state.
+       (set_conflicts): Instead, assign them both here after all S/R conflicts
+       in the state have been fully examined.
+       * src/print.c (shift_set): Rename to...
+       (no_reduce_set): ... this.
+       (print_reductions): Update for rename, and add %nonassoc error action
+       tokens to no_reduce_set so that, when printing the first remaining
+       reduction on an error action token, the reduction is enclosed in
+       brackets.
+       (print_results): Update for rename.
+       * tests/conflicts.at (Solved conflicts report for multiple reductions
+       in a state): New test case.
+       (%nonassoc error actions for multiple reductions in a state): New test
+       case.
+
+       * src/main.c (main): Don't depend on C99 features.
+
+2007-07-16  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * build-aux/.cvsignore: Add compile.
+       * lib/.cvsignore: Add charset.alias, ref-add.sed, ref-del.sed, and
+       uniwidth.
+
+2007-07-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * bootstrap (slurp): Create target directories that don't exist.
+       Specifically, we need lib/uniwidth/ because of recent Gnulib changes.
+
+2007-07-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * LR0.c (new_itemsets): Fix wording in comments: say item index rather
+       than item number.
+       * closure.c (closure): Likewise.
+       * state.h (reductions): Comment sorting of rules.
+       (state): Comment sorting of items.
+
+2007-07-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Fix C++ test cases after recent Gnulib changes.  Discussed starting at
+       <http://lists.gnu.org/archive/html/bug-bison/2007-07/msg00000.html>.
+       * examples/calc++/Makefile.am (DEFAULT_INCLUDES): Override Automake's
+       definition in order to avoid Gnulib headers since we don't use config.h
+       here.
+       * tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): Use AT_DATA_GRAMMAR
+       rather than AT_DATA so that config.h is included.
+
+2007-07-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * data/glr.c (yy_yypstack, yypstates, yypdumpstack): Use YYFPRINTF
+       instead of fprintf.  Guard these functions with #if YYDEBUG instead of
+       #ifdef YYDEBUG for consistency with all other uses of YYDEBUG in Bison
+       and so that YYFPRINTF is guaranteed to be defined here.
+
+2007-05-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * src/muscle_tab.c (muscle_percent_define_invalid_value): Replace
+       with...
+       (muscle_percent_define_check_values): ... this more helpful function.
+       Again, it's not used yet, but it will be.
+       * src/muscle_tab.h: Likewise.
+
+       Improve some comments in parser table construction.
+       * src/LR0.c (new_itemsets): Explain sorting of itemset and kernel_base.
+       (generate_states): Don't mention ruleset, which is internal to closure.
+       * src/closure.c (closure): Explain sorting of core and itemset, which
+       is required for this function to behave correctly.
+       * src/closure.h (closure): Mention sorting.
+
+2007-05-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * src/lalr.c (state_lookahead_tokens_count): For code readability,
+       move the check for disabled transitions to an aver since conflict
+       resolution hasn't happened yet.
+
+       * src/lalr.c (state_lookahead_tokens_count): Remove the check that
+       labels a state as inconsistent just because it has error transitions.
+       The original form of this check appeared in revision 1.1 of lalr.c,
+       which was committed on 1991-12-21.  Now (at least), changing the
+       consistency label on such a state appears to have no useful effect in
+       any of the places it is examined, which I enumerate below.  The key
+       point to understanding each item in this enumeration is that a state
+       with an error transition is labelled consistent in the first place only
+       if it has no rules, so the check cannot matter for states that have
+       rules.  (1) Labelling a state as inconsistent will cause set_conflicts
+       to try to identify its conflicts, and a state must have *rules* to have
+       conflicts.  (2) Labelling a state as inconsistent will affect how
+       action_row sets the default *rule* for the state.  (3) Labelling a
+       state as inconsistent will cause build_relations to add lookback edges
+       to *rules* in that state.
+       * src/state.h (struct state): Word the comment for member consistent
+       more carefully.
+
+2007-05-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Don't depend on C99 features.
+       * src/conflicts.c (conflicts_update_state_numbers): Fix for-loop.
+       * src/lalr.c (lalr_update_state_numbers): Fix for-loop.
+       * src/reader.c (check_and_convert_grammar): Fix for-loop.
+       * src/state.c (state_mark_reachable_states): Fix for-loop.
+       (state_remove_unreachable_states): Fix for-loop.
+
+       Don't widen struct state with member reachable just to temporarily
+       record reachability.  Instead, use a local bitset.
+       * src/state.h (struct state): Remove member.
+       * src/state.c (state_new): Don't initialize it.
+       (state_mark_reachable_states): Rename to...
+       (state_record_reachable_states): ... this, and use bitset.
+       (state_remove_unreachable_states): Use bitset.
+
+2007-05-26  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * src/Makefile.am (yacc): Quote target action commands properly so
+       that the yacc script isn't corrupt.  Reported by Hans Aberg at
+       <http://lists.gnu.org/archive/html/bug-bison/2007-05/msg00003.html>.
+
+       * data/glr.c (yylval): As in yacc.c, don't extern in the header for
+       the case of pure parsers.  Reported by Frans Englich at
+       <http://lists.gnu.org/archive/html/help-bison/2007-05/msg00018.html>.
+       * THANKS: Add Frans Englich.
+
+       * NEWS (2.3a+): In the %code entry, reference section `Bison
+       Declaration Summary' from the manual now since the %code summary has
+       moved there.
+       * doc/bison.texinfo (Prologue Alternatives): Mention that directives
+       in the rules section must be terminated by semicolons.
+
+2007-05-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Extend the front-end API for %define variables to more completely
+       mirror the back-end.  This will be useful in the future.
+       * data/bison.m4 (b4_percent_define_get, b4_percent_define_ifdef):
+       Update comments to mention the new front-end counterparts of these
+       macros.
+       * src/muscle_tab.c (MUSCLE_COMMON_DECODE): New macro with common code
+       for muscle_string_decode and muscle_location_decode.
+       (muscle_string_decode): New static function.
+       (muscle_location_decode): Use MUSCLE_COMMON_DECODE.
+       (muscle_percent_define_get, muscle_percent_define_ifdef): New
+       functions.
+       (muscle_percent_define_flag_if): Use muscle_percent_define_ifdef and
+       muscle_percent_define_get to mimic the b4_percent_define_flag_if
+       implementation more closely.
+       (muscle_percent_define_invalid_value): New function.
+       * src/muscle_tab.h (muscle_percent_define_get,
+       muscle_percent_define_ifdef, muscle_percent_define_invalid_value):
+       Prototype.
+
+2007-05-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * NEWS (2.3a+): Mention yesterday's state-removal change.
+       (2.3a): Remove the %language entry, which was added after 2.3a.
+       * src/LR0.c, src/closure.c, src/closure.h, src/conflicts.c,
+       src/conflicts.h, src/lalr.c, src/lalr.h, src/print.c,
+       src/print_graph.c, src/state.c, src/state.h, tests/conflicts.at,
+       tests/existing.at: Update copyright date.
+
+2007-05-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       If conflict resolution makes states unreachable, remove those states,
+       report rules that are then unused, and don't report conflicts in those
+       states.
+       * src/conflicts.c, src/conflicts.h (conflicts_update_state_numbers):
+       New global function.
+       * src/lalr.c, src/lalr.h (lalr_update_state_numbers): New global
+       function.
+       * src/main.c (main): After conflict resolution, remove the unreachable
+       states and update all data structures that reference states by number.
+       * src/state.c (state_new): Initialize each state's reachable member to
+       false.
+       (state_mark_reachable_states): New static function.
+       (state_remove_unreachable_states): New global function.
+       * src/state.h (struct state): Add member bool reachable.
+       (state_remove_unreachable_states): Prototype.
+       * tests/conflicts.at (Unreachable States After Conflict Resolution):
+       New test case.
+       * tests/existing.at (GNU pic Grammar): Update test case output now that
+       an unused rule is discovered.
+
+2007-05-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Minor code cleanup in parser table construction.
+       * src/LR0.c (new_itemsets): Use item_number_is_symbol_number.
+       (new_itemsets, save_reductions): Update for rename to nitemset.
+       * src/closure.c (nritemset): Rename to...
+       (nitemset): ... this since the "r" appears to meaningless and isn't
+       used in the comments.
+       (closure): Update for rename.
+       * src/closure.h (nritemset): Update extern to...
+       (nitemset): ... this.
+       * src/lalr.c (LA): Fix a typo in comments.
+       * src/print.c (print_core): Update for rename to nitemset.
+       * src/print_graph.c (print_graph): Likewise.
+       * src/state.h: Fix some typos in header comments.
+
+2007-04-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * THANKS: Use ASCII for Sebastien Fricker's name.  Bison source
+       still sticks to ASCII.  Sorry!
+
+       * README-hacking: New file, taken mostly from coreutils, with changes
+       for Bison.  Contains much of the contents of:
+       * README-cvs: Remove.
+       * bootstrap: Sync from gnulib.
+       * build-aux/.cvsignore: Remove *.t, mkinstalldirs.
+       * lib/.cvsignore: Add wchar.h, wctype.h.  Remove exit.h.
+
+2007-03-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * doc/bison.texinfo (Destructor Decl): Fix typo reported by Sebastian
+       Setzer.
+       (Java Differences): Fix some typos.
+       * THANKS: Add Sebastian Setzer.
+
+2007-03-07  Paolo Bonzini  <bonzini@gnu.org>
+
+        * data/java.m4 (b4_single_class_if): Remove.
+        (b4_abstract_if): Look at "%define abstract".
+        (b4_lexer_if): New.
+        (b4_union_name): Rename...
+        (b4_yystype): ... to this.  Map to "%define stype".
+        (b4_rhs_value, b4_parse_param_decl, b4_lex_param_decl,
+        b4_maybe_throws): Fix quoting.
+        (b4_lex_param_call): Move below to keep b4_*_param_decl close.
+        * data/lalr1.java (Lexer interface): Always define.
+        (Lexer interface within parser class): Remove.
+        (YYLexer class): New, used when "%code lexer" is present.
+        (constructor): When "%code lexer" is used, pass %lex-param
+        to the lexer constructor.
+        (yylex, yyparse): Remove %lex-param from method invocations
+        (YYStack, yyaction, yyparse): Rename b4_union_name to b4_yystype.
+
+        * doc/bison.texinfo (Java Bison Interface): Mention "%define
+        abstract".  Rename "%define union_name" to "%define stype".
+        Rename method names according to previous patch.
+        (Java Scanner Interface): Describe "%code lexer" instead of
+        "%pure-parser" and "%define single_class".
+        (Java Differences): Mention "%code lexer".
+
+        * tests/java.at (_AT_DATA_JAVA_CALC_Y): Remove final argument.
+        Include scanner here, using macros from tests/local.at.
+        (AT_DATA_CALC_Y): Remove final argument.
+        (_AT_CHECK_JAVA_CALC): Likewise.
+        (AT_CHECK_JAVA_CALC): Likewise.  Test all four combinations
+        of %locations and %error-verbose.
+        (main): Test with and without %lex-param.
+        * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Push AT_LEXPARAM_IF.
+        (AT_BISON_OPTION_POPDEFS): Pop it.
+
+2007-03-07  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+       DJGPP spefic issue.  Inhibit the use of disallowed characters for
+       file name genertion on Win98, WinXP, etc.  These are |<>":?*\
+       and concern testsuite case 46.
+       * Makefile.am: djgpp/testsuite.sed added to EXTRA_DIST
+       * djgpp/testsuite.sed: Inhibit the use of disallowed characters.
+       * djgpp/config.bat: Inhibit the use of disallowed characters.
+
+2007-03-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Miscellaneous %define and %code cleanup.
+       * data/bison.m4 (b4_percent_define_flag_if): Correct comments on how
+       values are interpreted.
+       * doc/bison.texinfo (Decl Summary): Clean up and extend %define
+       documentation a little more.
+       * src/muscle_tab.c (MUSCLE_USER_NAME_CONVERT,
+       muscle_percent_define_insert, muscle_percent_code_grow): New
+       functions/macros.
+       * src/muscle_tab.h (muscle_percent_define_insert,
+       muscle_percent_code_grow): Prototype.
+       * src/parse-gram.y (prologue_declaration): Use
+       muscle_percent_define_insert and muscle_percent_code_grow when parsing
+       %define and %code directives.
+
+       Make it easy to share %define boolean variables between the front-end
+       and back-end.  Though not used yet, this will be useful in the future.
+       * data/bison.m4 (b4_check_user_names): Rewrite comments to talk about
+       Bison uses of names rather than just skeleton uses of names.
+       (b4_percent_define_get, b4_percent_define_ifdef): Rename
+       b4_percent_define_skeleton_variables(VARIABLE) to
+       b4_percent_define_bison_variables(VARIABLE).
+       (b4_percent_code_get, b4_percent_code_ifdef): Rename
+       b4_percent_code_skeleton_qualifiers(QUALIFIER) to
+       b4_percent_code_bison_qualifiers(QUALIFIER).
+       (b4_check_user_names_wrap): Update for renames.
+       * src/muscle_tab.c, src/muscle_tab.h (muscle_percent_define_flag_if,
+       muscle_percent_define_default): New functions mimicking
+       b4_percent_define_flag_if and b4_percent_define_default.
+
+       For %define variables, report locations for invalid values and
+       redefinitions.
+       * data/bison.m4 (b4_percent_define_flag_if): Read
+       b4_percent_define_loc(VARIABLE) to report the location of an invalid
+       value for VARIABLE.
+       (b4_percent_define_default): Save a special location in
+       b4_percent_define_loc(VARIABLE) in case the default value for VARIABLE
+       must later be reported as invalid.
+       * src/muscle_tab.c (muscle_location_grow, muscle_location_decode): New
+       functions.
+       (muscle_percent_define_insert): Record the location of VARIABLE in
+       muscle percent_define_loc(VARIABLE), and use it to report the previous
+       location for a redefinition.
+       (muscle_percent_define_flag_if): Update like b4_percent_define_flag_if.
+       (muscle_percent_define_default): Update like b4_percent_define_default.
+       (muscle_grow_user_name_list): Rename to...
+       (muscle_user_name_list_grow): ... this for consistency and use
+       muscle_location_grow.
+       * src/muscle_tab.h (muscle_location_grow): Prototype.
+       * tests/input.at (%define errors): Update expected output.
+       * tests/skeletons.at (%define boolean variables: invalid skeleton
+       defaults): New test case.
+
+2007-02-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * src/print.c (lookahead_set, state_default_rule): Remove.
+       (print_reductions): Replace state_default_rule invocation with
+       equivalent use of yydefact, which was computed in token_actions in
+       tables.c.
+       (print_results): Don't allocate lookahead_set.
+
+2007-02-27  Paolo Bonzini  <bonzini@gnu.org>
+
+       * data/lalr1.java: Prefix all private members with yy.
+
+2007-02-24  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Use YYFPRINTF instead of fprintf where appropriate.  Reported by
+       Sebastien Fricker at
+       <http://lists.gnu.org/archive/html/bug-bison/2007-02/msg00035.html>.
+       * THANKS: Add Sebastien Fricker.
+       * data/glr.c, data/push.c, data/yacc.c (yy_reduce_print): Implement.
+       * doc/bison.texinfo (Tracing): Make it clearer that YYFPRINTF must
+       accept a variable number of arguments.
+
+2007-02-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * bootstrap: Remove occurrences of .#bootmp from lib/Makefile.
+
+2007-02-13  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+       * djgpp/config.bat: Adjustments concerning the use of autoconf 2.61.
+       * djgpp/config.sed: Adjustments concerning the use of autoconf 2.61.
+       * djgpp/config.site: Adjustments concerning the use of autoconf 2.61.
+
+2007-02-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Undo my 2007-02-07 change, switching back to the c-strcase module
+       introduced in the 2007-02-03 change.  Bruno Haible reported that
+       the 2007-02-07 change would be dangerous in Turkish if we add a
+       language whose name contains "i", since "i" is not lowercase "I"
+       in Turkish.
+       * bootstrap.conf (gnulib_modules): Add c-strcase.  Remove strcase.
+       * lib/.cvsignore: Add c-ctype.c, c-ctype.h, c-strcase.h,
+       c-strcasecomp.c, c-strncasecmp.c.  Remove strcasecmp.c, strncasecmp.c.
+       * m4/.cvsignore: Remove strcase.m4.
+       * src/getargs.c: Revert 2007-02-07 change, as follows.
+       Include c-strcase.h.
+       (language_argmatch): Use c_strcasecmp rather than strcasecmp.
+
+2007-02-11  Bruno Haible  <bruno@clisp.org>
+
+       Enable the Java related testsuite tests when the only Java compiler
+       found is a gcj < 4.3.  Discussed at
+       <http://lists.gnu.org/archive/html/bug-bison/2007-02/msg00016.html>.
+       * configure.ac (gt_JAVACOMP): Don't specify a target_version.
+
+2007-02-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * data/Makefile.am: Update copyright date.
+       * data/push.c (yypull_parse): Report memory exhaustion and return 2 if
+       yypstate_new returns NULL.
+       (yypstate_new): Return NULL if malloc does.
+       * src/reader.c (packgram): Move translation of rule actions from the
+       beginning of packgram to...
+       (check_and_convert_grammar): ... here right before packgram is invoked
+       so it's easier to write more complete comments, and remove redundant
+       code.
+
+2007-02-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       As in semantic actions, make @$ in %initial-action, %destructor, and
+       %printer imply %locations.
+       * src/scan-code.l (SC_SYMBOL_ACTION): Set locations_flag = true when
+       scanning @$.
+       * tests/actions.at (AT_CHECK_ACTION_LOCATIONS): New macro supporting...
+       (@$ in %initial-action implies %locations,
+       @$ in %destructor implies %locations,
+       @$ in %printer implies %locations): ... these new test cases.
+
+2007-02-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Undo most of the 2007-02-03 change, switching to the strcase module
+       now that gnulib strcase has been fixed.
+       * bootstrap.conf (gnulib_modules): Remove c-strcase.  Add strcase.
+       * lib/.cvsignore: Remove c-ctype.c, c-ctype.h, c-strcase.h,
+       c-strcasecomp.c, c-strncasecmp.c.  Add strcasecmp.c, strncasecmp.c
+       * m4/.cvsignore: Add strcase.m4.
+       * src/getargs.c: Revert 2007-02-03 change, as follows.
+       Don't include c-strcase.h.
+       (language_argmatch): Use strcasecmp rather than c_strcasecmp.
+       strcasecmp has "unspecified behavior" outside the POSIX locale,
+       but it works fine in practice if at least one argument is ASCII,
+       as is the case in Bison.
+
+2007-02-07  Paolo Bonzini  <bonzini@gnu.org>
+
+       * tests/java.at: Skip tests if only one of javac/java is present.
+       Reported by Joel E. Denny.
+       * tests/atlocal.in: Adjust copyright years.
+
+2007-02-05  Paolo Bonzini  <bonzini@gnu.org>
+
+       * data/lalr1.java (Stack): Work around old verifiers that disallow
+       access to the private fields of an inner class, from the outer class.
+       We can make Stack's fields public because user code doesn't have access
+       to the instance of Stack used by parse().  Reported by Paul Eggert.
+
+2007-02-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * .cvsignore: Add javacomp.sh, javaexec.sh.  Is this really
+       the right spot for these files?
+       * bootstrap.conf (gnulib_modules): Add c-strcase.
+       * lib/.cvsignore: Add c-ctype.c c-ctype.h, c-strcasecomp.c,
+       c-strncasecmp.c.
+       * src/getargs.c: Include c-strcase.h.
+       (language_argmatch): Use c_strcasecmp rather than strcasecmp,
+       to avoid unspecified behavior.
+
+2007-02-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * doc/bison.texinfo (Decl Summary): Correct typo.
+
+2007-01-30  Paolo Bonzini  <bonzini@gnu.org>
+
+       * data/bison.m4 (b4_percent_define_flag_if): Don't treat 0 as false.
+       Complain if the value does not match empty, "true" or "false".
+       * data/c++.m4: Adjust default definitions of %define variables.
+       * data/java.m4: Adjust default definitions of %define variables.
+       * doc/bison.texinfo (Decl Summary): Adjust the %define entry according
+       to above behavior.
+       * tests/input.at (Boolean %define variables): Test new behavior.
+
+2007-01-29  Paolo Bonzini  <bonzini@gnu.org>
+
+       * NEWS: Mention java.
+       * TODO: Remove things that are done.
+       * bootstrap.conf: Add javacomp-script and javaexec-script.
+       * configure.ac: Invoke gt_JAVACOMP and gt_JAVAEXEC.
+
+       * data/Makefile.am: Add new files.
+       * data/java-skel.m4: New.
+       * data/java.m4: New.
+       * data/lalr1.java: New.
+
+       * doc/bison.texinfo: Put "A Complete C++ Example" under
+       C++ Parsers.  Add Java Parsers.  Put C++ Parsers and Java Parsers
+       under Other Languages.
+
+       * src/getargs.c (valid_languages): Add Java.
+       * src/getargs.h (struct bison_language): Update size of string fields.
+
+       * tests/Makefile.am: Add java.at.
+       * tests/atlocal.in: Add CONF_JAVA and CONF_JAVAC.
+       * tests/java.at: New.
+       * tests/testsuite.at: Include it.
+
+2007-01-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Clean up.
+       * src/scan-skel.l (at_directive_perform): Add at_directive_argc and
+       at_directive_argv arguments so these no longer have to be global
+       variables.  Also, update the implementation for the following changes.
+       (fail_for_at_directive_too_many_args,
+       fail_for_at_directive_too_few_args): Add at_directive_name argument.
+       (at_directive_name): Remove as at_directive_argv[0] will be used for
+       this now.
+       (AT_DIRECTIVE_ARGC_MAX): Increment to make space in at_directive_argv
+       for the directive name.
+       (at_directive_argc, at_directive_argv): Make these local within
+       skel_lex instead of global.
+       (INITIAL): Update directive start action for above changes.
+       (SC_AT_DIRECTIVE_ARG): Rename to...
+       (SC_AT_DIRECTIVE_ARGS): ... this, and update for above changes.
+       (SC_AT_DIRECTIVE_SKIP_WS): Update.
+       (scan_skel): Move yylex_destroy to...
+       (skel_scanner_free): ... here.
+       * tests/skeletons.at (installed skeleton file name): Rename to...
+       (installed skeleton file names): ... this.
+
+2007-01-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * ChangeLog: For changes in doc/bison.texinfo, consistently reference
+       node names: say "Table of Symbols" not "Bison Symbols", and say "Decl
+       Summary" not "Directives".
+       * doc/bison.texinfo (Decl Summary, Calc++ Parser): Cross-reference the
+       %code entry in "Decl Summary" rather than the one in "Table of Symbols"
+       since the former is now the more complete one.
+       (Prologue Alternatives): Likewise and do the same for %defines.
+       (Table of Symbols): Add summary of %code, add summary of %define, and
+       move full %code documentation to...
+       (Decl Summary): ... here for consistency with other entries in these
+       sections.
+       Move %define entry in order to keep this list alphabetized.
+       Reword %define entry a little to put less emphasis on the skeleton
+       concept, which most users shouldn't have to think about.
+
+2007-01-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Adjust to recent gnulib changes.
+       * lib/.cvsignore: Remove stpcpy.h, strndup.h, strnlen.h.
+       Add string.h, string_.h, unistd_.h, wchar_.h.
+       * m4/.cvsignore: Add gnulib-common.m4, string_h.m4, wchar.m4.
+       * src/system.h: Don't include <stpcpy.h>; this is now done by
+       <string.h>.
+
+2007-01-23  Paolo Bonzini  <bonzini@gnu.org>
+
+       Simplify implementation of unqualified %code, implement macros for
+       uniform treatment of boolean %define flags.  Document %define.
+       * data/bison.m4 (b4_percent_define_ifdef, b4_percent_define_flag_if,
+       b4_percent_code_ifdef): New.
+       (b4_percent_code_get): Map unqualified %code to b4_percent_code().
+       * data/c++.m4: Define default value for global_tokens_and_yystype.
+       * data/glr.cc: Likewise.
+       * data/location.cc: Use b4_percent_define_flag_if.
+
+       * doc/bison.texinfo (Decl Summary): Document %define.
+
+       * src/parse-gram.y (Unqualified %code): Change muscle name to
+       b4_percent_code().
+       (content.opt): Default to empty.
+
+2007-01-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Implement support for relative and absolute skeleton file names.
+       Discussed starting at
+       <http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00071.html>.
+       * doc/bison.texinfo (Decl Summary): Document in %skeleton entry.
+       (Bison Options): Document in --skeleton entry.
+       * src/output.c (output_skeleton): Use strncpy rather than strcpy since
+       full_skeleton can't necessarily hold all of pkgdatadir.
+       If the specified skeleton file name contains a `/', don't prepend
+       pkgdatadir.
+       * src/parse-gram.y (prologue_declaration): If the specified skeleton
+       file name contains a `/', prepend the grammar file directory.
+       * tests/Makefile.am (TESTSUITE_AT): Add skeletons.at.
+       * skeletons.at: New file.
+       (relative skeleton file names): New test case.
+       (installed skeleton file names): New test case.
+       * tests/testsuite.at: Include skeletons.at.
+
+       * bootstrap: Update copyright to 2007.
+
+2007-01-17  Paolo Bonzini  <bonzini@gnu.org>
+
+       * bootstrap: Remove occurrences of .#bootmp from the files.
+
+2007-01-17  Akim Demaille  <akim@epita.fr>
+
+       * doc/bison.texinfo (Calc++ Parser): Don't try to alias
+       nonterminals.
+       Use per-type %printer.
+
+2007-01-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * NEWS, data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4,
+       data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+       djgpp/config.site, src/files.c, src/files.h, src/main.c,
+       src/muscle_tab.c, src/muscle_tab.h, src/parse-gram.y, src/reader.h,
+       src/scan-skel.h, src/scan-skel.l, tests/actions.at, tests/calc.at,
+       tests/glr-regression.at, tests/input.at, tests/local.at,
+       tests/output.at, tests/torture.at: Update copyright to 2007.
+
+2007-01-16  Akim Demaille  <akim@epita.fr>
+
+       * doc/bison.texinfo (Calc++ Parsing Driver): Let "parse" return an
+       error code.
+       (Calc++ Scanner): Exit with failure if we can't open the input
+       file.
+       Accept "-" standing for stdin.
+       (Calc++ Top Level): Print the result only if the parsing was
+       successful.
+
+2007-01-16  Akim Demaille  <akim@epita.fr>
+
+       * data/lalr1.cc (yy_reduce_print_): Add a missing end-of-line.
+
+2007-01-15  Paolo Bonzini  <bonzini@gnu.org>
+       and Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Clean up %define and %code implementation in M4 some.  Most
+       importantly, rename all related macros to be in the b4_percent_define
+       and b4_percent_code namespaces.  Also, complete support for `.' in
+       %define variable names and %code qualifiers.
+       * data/bison.m4 (b4_check_user_names): Check for special
+       "SKELETON-NAMESPACE(name)" macros instead of using two nested
+       m4_foreach loops.
+       (b4_get_percent_define, b4_get_percent_code): Rename to...
+       (b4_percent_define_get, b4_percent_code_get): ... these.
+       Extend documentation with examples.
+       For SKELETON-NAMESPACE (as documented for b4_check_user_names), use
+       b4_percent_define_skeleton_variables and
+       b4_percent_code_skeleton_qualifiers.
+       Expect any value for the %define variable `foo' to be stored in the
+       macro named `b4_percent_define(foo)'; expect any %code blocks for the
+       qualifier `foo' to be stored in a macro named `b4_percent_code(foo)';
+       expect any unqualified %code blocks to be stored in a macro named
+       `b4_percent_code_unqualified'.
+       Use m4_indir so that %define variable names and %code qualifiers can
+       contain `.', which is allowed by the grammar parser.
+       (b4_percent_define_default): New macro to set a default value for a
+       %define variable.
+       (m4_wrap): Update wrapped code, and fix some underquoting.
+       (b4_check_user_names_wrap): Update and define outside the m4_wrap.
+       Expect grammar uses of %define variables and %code qualifiers to be
+       defined in b4_percent_define_user_variables and
+       b4_percent_code_user_qualifiers.
+       * data/c++.m4: Use b4_percent_define_default rather than
+       m4_define_default.  Fix some underquoting.  Skeleton usage of %define
+       variable define_location_comparison now implies skeleton usage of
+       %define variable filename_type.
+       * data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+       data/push.c, data/yacc.c: Update macro names.
+       * src/parse-gram.y (prologue_declaration, grammar_declaration): Update
+       muscle names.
+
+2007-01-14  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+       DJGPP specific issues.
+
+       * djgpp/config.site: Set ac_cv_path_mkdir to a sane DJGPP specific
+       default.  Set gl_cv_absolute_wctype_h to a sane DJGPP specific default.
+
+2007-01-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * tests/glr-regression.at: Use AT_PARSER_CHECK rather than AT_CHECK to
+       run parsers in all tests so that Valgrind is invoked during
+       maintainer-check-valgrind.
+       (Duplicate representation of merged trees): Free all semantic values.
+       (Duplicated user destructor for lookahead): Likewise.
+
+2007-01-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * tests/local.at (AT_PARSER_CHECK): Add a PRE argument to specify a
+       command-line prefix.
+       * tests/torture.at (Exploding the Stack Size with Alloca): Stderr is
+       ignored, so use that PRE to set --log-fd=1 in VALGRIND_OPTS so we don't
+       miss Valgrind messages.
+       (Exploding the Stack Size with Malloc): Likewise.
+
+2007-01-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be
+       locals.  Reported by Juan Manuel Guerrero at
+       <http://lists.gnu.org/archive/html/bug-bison/2007-01/msg00000.html>.
+       * data/push.c: Enclose the #ifdef YYSTACK_USE_ALLOCA in b4_push_if.
+       Fix some indentation also.
+       * tests/torture.at (Exploding the Stack Size with Alloca): Add comment
+       explaining this issue.
+
+2007-01-09  Paolo Bonzini  <bonzini@gnu.org>
+       and Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Simplify union and prologue handling, and escape union and lex/parse
+       params with digraphs.
+       * data/bison.m4 (b4_pre_prologue, b4_post_prologue): Set their default
+       values to the empty string since these are no longer guaranteed
+       initialized by the front-end.
+       * data/glr.c, data/glr.cc, data/lalr1.cc, data/push.c, data/yacc.c: Add
+       braces around b4_user_stype since this is no longer done by the
+       front-end.
+       * src/files.c, src/files.h (pre_prologue_obstack,
+       post_prologue_obstack): Remove.
+       * src/muscle_tab.c (muscle_pair_list_grow): Don't duplicate header
+       comments here.  Use MUSCLE_OBSTACK_SGROW so that values are escaped
+       with digraphs.  This fixes lex params and parse params.
+       * src/muscle_tab.h (muscle_pair_list_grow): Update comments.
+       * src/output.c (prepare): Remove muscle insertion of the prologues.
+       (output): Remove freeing of pre_prologue_obstack and
+       post_prologue_obstack.
+       * src/parse-gram.y (prologue_declaration): Use muscle_code_grow rather
+       than prologue_augment for prologue parsing so you don't need prologue
+       obstacks.
+       (grammar_declaration): For %union RHS, use `braceless' instead of
+       "{...}" so that braces are already stripped and code is escaped with
+       digraphs.
+       * src/reader.c (prologue_augment): Remove.
+       (reader): Remove initialization of pre_prologue_obstack and
+       post_prologue_obstack.
+       * src/reader.h (prologue_augment): Remove.
+
+       * data/c.m4: Remove stray parenthesis.
+
+2007-01-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Remove quotes from variables names in %define directives and from
+       qualifiers in %code directives, and restrict the characters that are
+       allowed in them to M4-friendly ones.  For %define, continue to support
+       the quoted form as a deprecated feature.  Discussed starting at
+       <http://lists.gnu.org/archive/html/bison-patches/2007-01/msg00023.html>.
+       * NEWS (2.3a+): Add entry for the change to %define.  Update entry for
+       %code.
+       * doc/bison.texinfo (Prologue Alternatives): Update.
+       (Decl Summary): In %defines entry, update mention of `%code requires'
+       and `%code provides'.
+       (C++ Location Values): Update %define uses.
+       (Calc++ Parser Interface): Likewise.
+       (Calc++ Parser): Likewise, and update `%code requires' uses.
+       (Table of Symbols): Update %code documentation.
+       * src/parse-gram.y (prologue_declaration): For %define variables, use
+       `variable' instead of `STRING'.
+       (grammar_declaration): For %code qualifiers, use `ID' instead of
+       `STRING'.
+       (variable): New nonterminal that takes an `ID' or a `STRING'.
+       * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Update %code
+       and %define uses.
+       * tests/calc.at (_AT_DATA_CALC_Y): Update %define use.
+       * tests/input.at (Reject unused %code qualifiers): Update %code uses.
+       (%define errors): Update %define uses.
+
+2007-01-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * src/parse-gram.y (prologue_declaration): Use MUSCLE_INSERT_STRING
+       instead of muscle_insert for %define values so that M4-special
+       characters are replaced with digraphs.
+       * tests/input.at (%define errors): Extend to check weird values.
+
+2007-01-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Instead of having skeletons declare all valid %define variables and
+       %code qualifiers, provide macros that retrieve the associated values
+       and build these lists automatically.  Thus Bison will now warn when a
+       variable or qualifier is not used by the skeleton in the current
+       invocation regardless of whether it might sometimes be used by that
+       skeleton in other invocations.  Also, move all %define value macros to
+       the b4_percent_define_ namespace, and remove the %define "NAME" {CODE}
+       form, which is replaced by %code.
+       * data/bison.m4 (b4_check_for_unrecognized_names): Rename to...
+       (b4_check_user_names): ... this, and change the series of valid name
+       arguments to a single list argument for names used in the skeleton
+       similar to the existing list argument for names used in the grammar.
+       Warn instead of complaining.
+       (b4_get_percent_define, b4_get_percent_code): New to retrieve %define
+       values and %code code, to format %code code properly, and to build
+       lists of all %define variables and %code qualifiers used in the
+       skeleton: b4_skeleton_percent_define_variables and
+       b4_skeleton_percent_code_qualifiers.
+       (b4_check_percent_define_variables, b4_check_percent_code_qualifiers):
+       Remove, and...
+       (m4_wrap): ... m4_wrap b4_check_user_names invocations instead so that
+       the skeleton names lists can finish building first.  In place of
+       b4_used_percent_define_variables and b4_used_percent_code_qualifiers,
+       expect the lists b4_user_percent_define_variables and
+       b4_user_percent_code_qualifiers.
+       * data/c++.m4: Where setting default values for b4_parser_class_name,
+       b4_location_type, b4_filename_type, b4_namespace, and
+       b4_define_location_comparison, update their names to the
+       b4_percent_define_ namespace.
+       * data/glr.c: Don't use b4_check_percent_define_variables and
+       b4_check_percent_code_qualifiers.  Use b4_get_percent_code.
+       * data/glr.cc, data/lalr1.cc: Likewise, and use b4_get_percent_define.
+       (b4_parser_class_name, b4_namespace): Define these using
+       b4_get_percent_define for parser_class_name and namespace.
+       * data/location.cc: Use b4_get_percent_define.
+       * data/push.c: Don't use b4_check_percent_define_variables and
+       b4_check_percent_code_qualifiers.  Use b4_get_percent_code.
+       * data/yacc.c: Likewise, and don't call m4_exit in
+       b4_use_push_for_pull_if or m4_wrap code will never execute.
+       * src/muscle_tab.c, src/muscle_tab.h (muscle_grow_used_name_list):
+       Rename to...
+       (muscle_grow_user_name_list): ... this for consistency with the
+       terminology used in bison.m4.
+       * src/parse-gram.y (prologue_declaration): Prepend "percent_define_" to
+       %define variable names, and rename muscle used_percent_define_variables
+       to user_percent_define_variables.
+       (grammar_declaration): Rename muscle used_percent_code_qualifiers to
+       user_percent_code_qualifiers.
+       (content): Remove.
+       (content.opt): Replace content RHS with STRING RHS so %define "NAME"
+       {CODE} form is no longer accepted.
+       * tests/input.at (Reject bad %code qualifiers): Rename to...
+       (Reject unused %code qualifiers): ... this, and update test output.
+       (%define error): Update test output.
+
+2007-01-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Check for unrecognized %define variables similar to checking for
+       unrecognized %code qualifiers.  Check for redefined %define variables.
+       * data/bison.m4 (b4_check_for_unrecognized_names): New macro that
+       generalizes...
+       (b4_check_percent_code_qualifiers): ... this, which now wraps it.
+       (b4_check_percent_define_variables): New, also wraps it.
+       * data/glr.c: Unless glr.cc is wrapping glr.c, declare no valid %define
+       variables using b4_check_percent_define_variables.
+       * data/glr.cc, data/lalr1.cc: Declare the valid %define variables as
+       all those exercised in the test suite and all those listed in the
+       `Default values' section of c++.m4.  Are there others?
+       * data/push.c, data/yacc.c: Declare no valid %define variables.
+       * src/muscle_tab.c, src/muscle_tab.h (muscle_find_const): New function,
+       similar to muscle_find, but it works even when the muscle stores a
+       const value.
+       (muscle_grow_used_name_list): New function for constructing the used
+       name list muscles that b4_check_for_unrecognized_names requires.
+       * src/parse-gram.y (prologue_declaration): Warn if a variable is
+       %define'd more than once.  Define the b4_used_percent_define_variables
+       muscle with muscle_grow_used_name_list.
+       (grammar_declaration): Abbreviate %code code with
+       muscle_grow_used_name_list.
+       * tests/input.at (%define errors): New.
+
+2007-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Provide warn_at, complain_at, and fatal_at function callbacks to the
+       skeletons, and use this for %code qualifier complaints.
+       * data/bison.m4 (b4_error_at): New, invoked by...
+       (b4_warn_at, b4_complain_at, b4_fatal_at): ... these new macros to wrap
+       the skeleton scanner's new @warn_at(...@), @complain_at(...@), and
+       @fatal_at(...@) directives.
+       (b4_check_percent_code_qualifiers): Rewrite to expect locations for
+       qualifiers in b4_used_percent_code_qualifiers and to use
+       b4_complain_at.
+       * src/location.c, src/location.h (boundary_set_from_string): New global
+       function.
+       * src/muscle_tab.c, src/muscle_tab.h (muscle_boundary_grow): New global
+       function.
+       * src/parse-gram.y (grammar_declaration): Add locations for qualifiers
+       to b4_used_percent_code_qualifiers.
+       * src/scan-skel.l (fail_for_at_directive_too_few_args): New static
+       function.
+       (AT_DIRECTIVE_ARGC_MAX): Increase for boundary arguments.
+       (lineno): Rename to...
+       (out_lineno): ... this so I don't misunderstand it again.
+       (SC_AT_DIRECTIVE_SKIP_WS): Don't increment out_lineno for newlines
+       here; these newlines are in the input but not the output file.
+       (SC_AT_DIRECTIVE_ARG): Likewise.  Extract directive execution to...
+       (at_directive_perform): ... this new static function, and add handling
+       of new @warn_at(...@), @complain_at(...@), and @fatal_at(...@)
+       directives.
+       * tests/input.at (Reject bad %code qualifiers): Update test output with
+       locations and extend.
+
+       * tests/output.at (Output file name: [, Output file name: ]): Remove
+       bogus comment about these tests failing.
+
+2007-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Clean up b4_check_percent_code_qualifiers a little.
+       * data/bison.m4 (b4_check_percent_code_qualifiers): Expect qualifiers
+       in b4_used_percent_code_qualifiers to be double-M4-quoted.  Rewrite
+       documentation and add examples.
+       * src/parse-gram.y (grammar_declaration): Double-M4-quote those
+       qualifiers here.
+
+2007-01-05  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Don't use m4_divert since it makes m4_divert_push and m4_divert_pop
+       unreliable -- especially when they're hidden inside another macro.
+       * data/bison.m4, data/c++-skel.m4, data/c++.m4, data/c-skel.m4,
+       data/c.m4: Remove m4_divert(-1).
+       * data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+       data/push.c, data/yacc.c: Likewise, and replace m4_divert(0) with
+       m4_divert_push(0) and m4_divert_pop(0).
+       * src/output.c (output_skeleton): Don't add an m4_divert_push(0) and
+       an m4_wrap([m4_divert_pop(0)]) to the M4.  Diversion -1, which is
+       pushed and popped by m4sugar, should be first on the stack.
+
+       Provide warn, complain, and fatal function callbacks to the skeletons.
+       This provides more flexibility than m4_fatal, improves the error
+       message format, and captures messages for translation.  Discussed
+       starting at
+       <http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00063.html>.
+       * data/bison.m4 (b4_error): New, invoked by...
+       (b4_warn, b4_complain, b4_fatal): ... these new macros to wrap the
+       skeleton scanner's new @warn(...@), @complain(...@), and @fatal(...@)
+       directives.  Because these M4 macros might be called when the current
+       diversion is -1 or 0, m4_divert_push and m4_divert_pop is used; thus
+       the previous removal of uses of m4_divert, which caused trouble.
+       (b4_check_percent_code_qualifiers): Use b4_complain instead of
+       m4_fatal to report unrecognized %code qualifiers.
+       * data/c++-skel.m4: Use b4_complain instead of m4_fatal to report C++
+       push parser requests.
+       * data/glr.c: Use b4_complain instead of m4_fatal to report
+       non-deterministic push parser requests.
+       Update @output usage to @output(...@) form.
+       * data/glr.cc, data/lalr1.cc: Use b4_fatal instead of m4_fatal to
+       report missing %defines.  Update @output usage to @output(...@) form.
+       * data/location.cc, data/push.c, data/yacc.c: Update @output usage to
+       @output(...@) form.
+       * src/main.c (main): Invoke skel_scanner_free.
+       * src/scan-skel.h (skel_scanner_free): Prototype new function.
+       * src/scan-skel.l (FLEX_NO_OBSTACK): Don't define; we now need the
+       obstack_for_string from flex-scanner.h.
+       (YY_DECL): Use to declare skel_lex static.
+       (decode_at_digraphs): Remove; now handled in the new
+       SC_AT_DIRECTIVE_ARG start condition.
+       (fail_for_at_directive_too_many_args, fail_for_invalid_at): New static
+       functions.
+       (at_directive_name, AT_DIRECTIVE_ARGC_MAX, at_directive_argc,
+       at_directive_argv): New static globals.
+       (INITIAL): Use fail_for_invalid_at.
+       Don't parse `@output file_name\n' or `@basename(...@)'.  Instead,
+       recognize the start of a generalized `@directive(...@)' form and
+       start...
+       (SC_AT_DIRECTIVE_ARG): ... this new start condition to parse the
+       directive args (using the new obstack_for_string), to decode the
+       contained @ diagraphs, and to perform the directive.  It recognizes
+       @basename(...@), @warn(...@), @complain(...@), @fatal(...@), and
+       @output(...@).
+       (SC_AT_DIRECTIVE_SKIP_WS): New start condition started by
+       SC_AT_DIRECTIVE_ARG to skip whitespace after the argument delimiter,
+       `@,'.
+       (scan_skel): Initialize obstack_for_string on the first call.
+       (skel_scanner_free): New function to free obstack_for_string.
+       * tests/input.at (Reject bad %code qualifiers): Update test output.
+
+2007-01-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Consolidate the 4 prologue alternative directives (%code, %requires,
+       %provides, and %code-top) into a single %code directive with an
+       optional qualifier field.  Discussed at
+       <http://lists.gnu.org/archive/html/bison-patches/2007-01/msg00012.html>.
+       * NEWS (2.3a+): Rewrite the existing entry for the prologue
+       alternatives.
+       * doc/bison.texinfo (Prologue Alternatives): Update.
+       (Decl Summary): Update to %code "requires" and %code "provides".
+       (Calc++ Parser): Update to %code "requires".
+       (Table of Symbols): Remove entries for %requires, %provides, and
+       %code-top.  Rewrite %code entry, and add a %code "QUALIFIER" entry.
+       * data/bison.m4 (b4_user_provides, b4_user_requires): Remove as these
+       are replaced by b4_percent_code_provides and b4_percent_code_requires,
+       which are skeleton-specific.
+       (b4_check_percent_code_qualifiers): New.  A skeleton can use this to
+       declare what %code qualifiers it supports and to complain if any other
+       qualifiers were used in the grammar.
+       * data/glr.cc: Update to use b4_user_code([b4_percent_code_requires])
+       and b4_user_code([b4_percent_code_provides]) in place of
+       b4_user_requires and b4_user_provides.
+       * data/glr.c, data/lalr1.cc, data/push.c, data/yacc.c: Likewise.
+       Add b4_user_code([b4_percent_code_top]) and
+       b4_user_code([b4_percent_code]).
+       Invoke b4_check_percent_code_qualifiers.
+       * src/parse-gram.y (PERCENT_CODE_TOP, PERCENT_PROVIDES,
+       PERCENT_REQUIRES): Remove.
+       (grammar_declaration): Remove RHS's for %code-top, %provides, and
+       %requires.  Rewrite the %code RHS as the unqualified form defining the
+       muscle b4_percent_code.  Add another RHS for the qualified %code form,
+       which defines muscles of the form b4_percent_code_QUALIFIER and the
+       b4_used_percent_code_qualifiers muscle.
+       * src/scan-gram.l (PERCENT_CODE_TOP, PERCENT_PROVIDES,
+       PERCENT_REQUIRES): Remove.
+       * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Update to use
+       %code "requires" and %code "provides".
+       * tests/input.at (Reject bad %code qualifiers): New.
+
+2007-01-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Use the new code_props interface for destructors and printers.
+       * src/symtab.h (symbol, semantic_type): Remove destructor_location and
+       printer_location members, and change the type of the destructor and
+       printer members to code_props.
+       (symbol_destructor_set, symbol_destructor_get, symbol_printer_set,
+       symbol_printer_get, semantic_type_destructor_set,
+       semantic_type_printer_set, default_tagged_destructor_set,
+       default_tagless_destructor_set, default_tagged_printer_set,
+       default_tagless_printer_set): Use code_props in arguments and return
+       types in place of char const * and location.
+       (symbol_destructor_location_get, symbol_printer_location_get): Remove
+       since the locations are now contained in the return of
+       symbol_destructor_get and symbol_printer_get.
+       * src/output.c (symbol_destructors_output, symbol_printers_output):
+       Replace with...
+       (symbol_code_props_output): ... this to eliminate duplicate code.
+       (output_skeleton): Update to use symbol_code_props_output.
+       * src/reader.c (symbol_should_be_used): Update use of
+       symbol_destructor_get.
+       * src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set):
+       Update uses of the various _destructor_set and _printer_set functions.
+       * src/symtab.c: (default_tagged_destructor_location,
+       default_tagless_destructor_location, default_tagged_printer_location,
+       default_tagless_printer_location): Remove since we...
+       (default_tagged_destructor, default_tagless_destructor,
+       default_tagged_printer, default_tagless_printer): ... change the type
+       of these to code_props.
+       (symbol_new, semantic_type_new, symbol_destructor_set,
+       semantic_type_destructor_set, symbol_destructor_get,
+       symbol_printer_set, semantic_type_printer_set, symbol_printer_get,
+       symbol_check_alias_consistency, default_tagged_destructor_set,
+       default_tagless_destructor_set, default_tagged_printer_set,
+       default_tagless_printer_set): Update.
+       (symbol_destructor_location_get, symbol_printer_location_get): Remove.
+       (SYMBOL_CODE_PRINT): New similar to SYMBOL_ATTR_PRINT but for
+       code_props members.
+       (symbol_print): Use SYMBOL_CODE_PRINT.
+
+2007-01-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Use the new code_props interface for rule actions.
+       * src/symlist.h (symbol_list): Replace action, action_location, and
+       used members with a code_props action_props member.
+       * src/reader.c (symbol_should_be_used, grammar_rule_check,
+       grammar_midrule_action, grammar_current_rule_merge_set,
+       grammar_current_rule_symbol_append, packgram): Update.
+       * src/scan-code.h (translate_rule_action): Remove, no longer used.
+       * src/scan-code.l (handle_action_dollar): Update.
+       (translate_rule_action): Remove, no longer used.
+       * src/symlist.c (symbol_list_sym_new, symbol_list_syms_print): Update.
+
+2007-01-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Use the new code_props interface in parse-gram.y.
+       * src/parse-gram.y (prologue_declaration, braceless, epilogue.opt):
+       Update all uses of translate_* functions to use the new code_props
+       interface and to use gram_scanner_last_string_free and
+       code_scanner_last_string_free where possible.
+       (grammar_declaration): symbol_list_destructor_set and
+       symbol_list_printer_set now perform the translation, so don't do it
+       here.  Use gram_scanner_last_string_free where possible.
+       * src/scan-code.h, src/scan-code.l (translate_symbol_action,
+       translate_code): Remove, no longer used.
+       * src/symlist.h, src/symlist.c (symbol_list_destructor_set,
+       symbol_list_printer_set): Perform code translation here rather than
+       depending on the caller to do so.
+
+       * src/symlist.h (struct symbol_list): Correct some documentation typos.
+       * src/scan-gram.h (gram_last_string): Remove declaration.
+       * src/scan-gram.l (last_string): Declare it static.
+
+2007-01-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Encapsulate code properties and related functionality for the various
+       destructors, printers, and actions into a code_props structure and
+       interface.  This patch merely implements code_props in scan-code.h and
+       scan-code.l.  Future patches will rewrite other modules to use it.
+       Discussed starting at
+       <http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00020.html>.
+       * src/location.h (EMPTY_LOCATION_INIT): Define so that it's easier to
+       consistently initialize const structs that have an empty location
+       field.
+       * src/location.c (empty_location): Initialize with EMPTY_LOCATION_INIT
+       to ensure consistency.
+       * src/scan-code.h (code_props): New structure.
+       (code_props_none_init, CODE_PROPS_NONE_INIT, code_props_none): New
+       function, macro, and const global variable for initializing a
+       code_props with no code.
+       (code_props_plain_init, code_props_symbol_action_init,
+       code_props_rule_action_init, code_props_translate_code): The rest of
+       the new code_props functional interface.  Among other things, the init
+       functions set the code_props kind field so that
+       code_props_translate_code will know whether to behave like
+       translate_symbol_action, translate_rule_action, or translate_code.
+       These old translate functions must remain until all other modules are
+       updated to use the new code_props interface.
+       (code_scanner_last_string_free): New function similar to
+       gram_scanner_last_string_free.
+       (code_scanner_free): Add documentation.
+       * src/scan-code.l: Implement the new interface.
+       (code_lex): Make it static, add a code_props* argument, and remove the
+       rule argument.
+       (last_string): New static global similar to the one in scan-gram.l.
+       (SC_RULE_ACTION): Update to use the code_props* argument to code_lex
+       instead of rule.
+       (SC_SYMBOL_ACTION): For $$, set the is_value_used member of the
+       code_props since Bison may one day use this information for destructors
+       and printers.
+       (<*><<EOF>>): Use STRING_FINISH so that last_string is set.
+       (handle_action_dollar): Use symbol_list_n_get and set used flag
+       directly since symbol_list_n_used_set is removed.
+       (translate_action): Add a code_props* argument and remove the rule,
+       action, and location arguments.  Pass the code_props* on to code_lex.
+       (translate_rule_action, translate_symbol_action, translate_code):
+       Rewrite as wrappers around the new code_props interface.
+       * src/symlist.h, src/symlist.c (symbol_list_n_used_set): Remove since
+       it would eventually need to break the encapsulation of code_props.
+
+2007-01-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * etc/.cvsignore: New.
+
+2007-01-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Add maintainer-push-check to run maintainer-check using push parsing in
+       place of pull parsing where available.
+       * Makefile.am (maintainer-push-check): New.
+       * data/bison.m4 (b4_use_push_for_pull_if): New.
+       * data/push.c: Redefine b4_push_if and b4_use_push_for_pull_if
+       appropriately based on their existing values.
+       (yypush_parse): Don't print push-parser-specific diagnostics if push
+       parsing is being used in place of pull parsing.
+       * data/yacc.c: If push parsing should replace pull parsing, redirect to
+       push.c.
+       * src/output.c (prepare): Check BISON_USE_PUSH_FOR_PULL environment
+       variable, and insert b4_use_push_for_pull_flag into muscles.
+       * tests/Makefile.am (maintainer-push-check): New.
+
+2006-12-31  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       * data/push.c (yypush_parse): Set yynew = 1 at the end of a parse
+       (whether successful or failed) so that yypush_parse can be invoked
+       again to start a new parse using the same yypstate.
+       * tests/torture.at (AT_DATA_STACK_TORTURE): For push mode, extend to
+       check multiple yypull_parse invocations on the same yypstate.  For pull
+       mode, extend to check multiple yyparse invocations.
+       (Exploding the Stack Size with Alloca): Extend to try with
+       %push-pull-parser.
+       (Exploding the Stack Size with Malloc): Likewise.
+
+       * tests/calc.at (Simple LALR Calculator): Don't specify
+       %skeleton "push.c" since %push-pull-parser implies that now.
+       * tests/headers.at (export YYLTYPE): Don't check for the push
+       declarations.  Otherwise, this test case can't be used to see if push
+       mode can truly emulate pull mode.
+       * tests/input.at (Torturing the Scanner): Likewise.
+       * tests/local.at (AT_YACC_OR_PUSH_IF, AT_PUSH_IF): Remove.
+       (AT_YYERROR_SEES_LOC_IF): Rather than AT_YACC_OR_PUSH_IF, use
+       AT_YACC_IF, which now includes the case of push mode since %skeleton
+       need not be used for push mode.  This will be more intuitive once
+       push.c is renamed to yacc.c.
+
 2006-12-31  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        For push mode, convert yyparse from a macro to a function, invoke yylex
 2006-12-31  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        For push mode, convert yyparse from a macro to a function, invoke yylex
        documentation instead.
        (Calc++ Parser): Use `%require "@value{VERSION}"' rather than
        `%require "2.3b"' so that the example is always up-to-date.
        documentation instead.
        (Calc++ Parser): Use `%require "@value{VERSION}"' rather than
        `%require "2.3b"' so that the example is always up-to-date.
-       (Bison Symbols): Add entries for %language and %skeleton.
+       (Table of Symbols): Add entries for %language and %skeleton.
        * examples/extexi (normalize): Instead of replacing every %require
        argument with the current Bison version, just substitute for
        `@value{VERSION}'.  This guarantees that we're testing what actually
        * examples/extexi (normalize): Instead of replacing every %require
        argument with the current Bison version, just substitute for
        `@value{VERSION}'.  This guarantees that we're testing what actually
 
        * doc/bison.texinfo (C++ Parser Interface): Prefer %language
        over %skeleton.
 
        * doc/bison.texinfo (C++ Parser Interface): Prefer %language
        over %skeleton.
-       (Directives): Document %language and %skeleton.
+       (Decl Summary): Document %language and %skeleton.
        (Command line): Document -L.
 
        * examples/extexi: Rewrite %require directive.
        (Command line): Document -L.
 
        * examples/extexi: Rewrite %require directive.
        (2.3a): Annotate this entry to say the old forms of these features were
        also experimental.
        * doc/bison.texinfo (Prologue Alternatives, Freeing Discarded Symbols,
        (2.3a): Annotate this entry to say the old forms of these features were
        also experimental.
        * doc/bison.texinfo (Prologue Alternatives, Freeing Discarded Symbols,
-       Bison Symbols): Say they're experimental.  Comment out any mention
+       Table of Symbols): Say they're experimental.  Comment out any mention
        of Java (we'll want this back eventually).
 
 2006-12-01  Joel E. Denny  <jdenny@ces.clemson.edu>
        of Java (we'll want this back eventually).
 
 2006-12-01  Joel E. Denny  <jdenny@ces.clemson.edu>
        %file-prefix, %name-prefix, and %output.  Discussed at
        <http://lists.gnu.org/archive/html/help-bison/2006-09/msg00001.html>.
        * NEWS (2.3a+): Mention.
        %file-prefix, %name-prefix, and %output.  Discussed at
        <http://lists.gnu.org/archive/html/help-bison/2006-09/msg00001.html>.
        * NEWS (2.3a+): Mention.
-       * doc/bison.texinfo (Decl Summary, Bison Symbols): Add entry for new
+       * doc/bison.texinfo (Decl Summary, Table of Symbols): Add entry for new
        form of %defines, and remove `=' from entries for %file-prefix,
        %name-prefix, and %output.
        * src/parse-gram.y (prologue_declaration): Implement.
        form of %defines, and remove `=' from entries for %file-prefix,
        %name-prefix, and %output.
        * src/parse-gram.y (prologue_declaration): Implement.
        Rename <!> to <>.  Discussed starting at
        <http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00039.html>.
        * NEWS (2.3a+): Update.
        Rename <!> to <>.  Discussed starting at
        <http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00039.html>.
        * NEWS (2.3a+): Update.
-       * doc/bison.texinfo (Freeing Discarded Symbols, Bison Symbols):
+       * doc/bison.texinfo (Freeing Discarded Symbols, Table of Symbols):
        Update.
        * src/parse-gram.y (TYPE_TAG_NONE, generic_symlist_item): Implement.
        * src/scan-gram.l (INITIAL): Implement.
        Update.
        * src/parse-gram.y (TYPE_TAG_NONE, generic_symlist_item): Implement.
        * src/scan-gram.l (INITIAL): Implement.
        * NEWS (2.3a+): Mention.
        * doc/bison.texinfo (Freeing Discarded Symbols): Document this and the
        previous change today related to mid-rules.
        * NEWS (2.3a+): Mention.
        * doc/bison.texinfo (Freeing Discarded Symbols): Document this and the
        previous change today related to mid-rules.
-       (Bison Symbols): Remove %symbol-default and add <*> and <!>.
+       (Table of Symbols): Remove %symbol-default and add <*> and <!>.
        * src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): Remove.
        (TYPE_TAG_ANY): Add as <*>.
        (TYPE_TAG_NONE): Add as <!>.
        * src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): Remove.
        (TYPE_TAG_ANY): Add as <*>.
        (TYPE_TAG_NONE): Add as <!>.
        alternatives to...
        (Prologue Alternatives): ... this new section, and extend it to discuss
        all 4 directives in detail.
        alternatives to...
        (Prologue Alternatives): ... this new section, and extend it to discuss
        all 4 directives in detail.
-       (Bison Symbols): Clean up discussion of prologue alternatives and add
-       %code-top.
+       (Table of Symbols): Clean up discussion of prologue alternatives and
+       add %code-top.
 
 2006-10-16  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
 
 
 2006-10-16  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
 
        <http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00007.html>.
        * NEWS (2.3+): Add %symbol-default to example.
        * bison.texinfo (Freeing Discarded Symbols): Likewise.
        <http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00007.html>.
        * NEWS (2.3+): Add %symbol-default to example.
        * bison.texinfo (Freeing Discarded Symbols): Likewise.
-       (Bison Symbols): Add entry for %symbol-default.
+       (Table of Symbols): Add entry for %symbol-default.
        * src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): New token.
        (generic_symlist, generic_symlist_item): New nonterminals for creating
        a list in which each item is a symbol, semantic type, or
        * src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): New token.
        (generic_symlist, generic_symlist_item): New nonterminals for creating
        a list in which each item is a symbol, semantic type, or
        * doc/bison.texinfo (The prologue): Update names, and replace remaining
        prologue blocks with %*-header declarations.
        (Calc++ Parser): Likewise.
        * doc/bison.texinfo (The prologue): Update names, and replace remaining
        prologue blocks with %*-header declarations.
        (Calc++ Parser): Likewise.
-       (Bison Declaration Summary): Update names.
-       (Bison Symbols): Update description.
+       (Decl Summary): Update names.
+       (Table of Symbols): Update description.
        * src/parse-gram.y (PERCENT_AFTER_DEFINITIONS): Update to...
        (PERCENT_END_HEADER): ... this.
        (PERCENT_BEFORE_DEFINITIONS): Update to...
        * src/parse-gram.y (PERCENT_AFTER_DEFINITIONS): Update to...
        (PERCENT_END_HEADER): ... this.
        (PERCENT_BEFORE_DEFINITIONS): Update to...
        header and code file.
        * doc/bison.texinfo (Prologue): Show use of %before-definitions instead
        of prologues for %union dependencies.
        header and code file.
        * doc/bison.texinfo (Prologue): Show use of %before-definitions instead
        of prologues for %union dependencies.
-       (Bison Declaration Summary): In %defines description, mention the
-       effect of %before-definitions and %after-definitions on the header
-       file.
+       (Decl Summary): In %defines description, mention the effect of
+       %before-definitions and %after-definitions on the header file.
        (Calc++ Parser): Forward declare driver in a %before-definitions rather
        than in the pre-prologue so that make check succeeds.
        (Calc++ Parser): Forward declare driver in a %before-definitions rather
        than in the pre-prologue so that make check succeeds.
-       (Bison Symbols): Add entries for %before-definitions and
+       (Table of Symbols): Add entries for %before-definitions and
        %after-definitions.
        * src/parse-gram.y (PERCENT_BEFORE_DEFINITIONS): New token for
        %before-definitions.
        %after-definitions.
        * src/parse-gram.y (PERCENT_BEFORE_DEFINITIONS): New token for
        %before-definitions.
        in the yychar entry.
        In the yychar entry, remove mention of the local yychar case (pure
        parser) since this is irrelevant information when writing semantic
        in the yychar entry.
        In the yychar entry, remove mention of the local yychar case (pure
        parser) since this is irrelevant information when writing semantic
-       actions and since it's already discussed in `Bison Symbols' where
+       actions and since it's already discussed in `Table of Symbols' where
        yychar is otherwise described as an external variable.
        In the yychar entry, don't call it the `current' look-ahead since it
        isn't when semantic actions are deferred.
        yychar is otherwise described as an external variable.
        In the yychar entry, don't call it the `current' look-ahead since it
        isn't when semantic actions are deferred.
        `current' look-ahead, and do mention yylval and yylloc.
        (Error Recovery): Cross-reference `Action Features' when mentioning
        yyclearin.
        `current' look-ahead, and do mention yylval and yylloc.
        (Error Recovery): Cross-reference `Action Features' when mentioning
        yyclearin.
-       (Bison Symbols): In the yychar entry, don't call it the `current'
+       (Table of Symbols): In the yychar entry, don't call it the `current'
        look-ahead.
        In the yylloc and yylval entries, mention look-ahead usage.
 
        look-ahead.
        In the yylloc and yylval entries, mention look-ahead usage.
 
        -----
 
        Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996,
        -----
 
        Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996,
-       1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
-       Software Foundation, Inc.
+       1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+       Free Software Foundation, Inc.
 
        Copying and distribution of this file, with or without
        modification, are permitted provided the copyright notice and this
 
        Copying and distribution of this file, with or without
        modification, are permitted provided the copyright notice and this