+2007-10-28 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Deprecate %pure-parser and add `%define api.pure'. Discussed starting
+ at
+ <http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00006.html>.
+ * NEWS (2.3a+): Mention.
+ * data/bison.m4 (b4_pure_if): Don't define it here.
+ * data/c.m4 (b4_identification): Depend on individual skeletons to
+ define b4_pure_flag, b4_push_flag, or b4_pull_flag if they use the
+ values of the %define variables api.pure or api.push_pull. Define
+ YYPURE, YYPUSH, and YYPULL accordingly.
+ * data/glr.c: Define b4_pure_if based on `%define api.pure' unless
+ glr.cc has already defined b4_pure_flag.
+ * data/push.c: Define b4_pure_if based on `%define api.pure'.
+ Remove YYPUSH and YYPULL since they're back in b4_identification again.
+ * data/yacc.c Define b4_pure_if based on `%define api.pure'.
+ * doc/bison.texinfo (Pure Decl): Update.
+ (Push Decl): Update.
+ (Decl Summary): Add api.pure to %define entry.
+ In %pure-parser entry, say it's deprecated and reference %define.
+ (Pure Calling): Update.
+ (Error Reporting): Update.
+ (C++ Scanner Interface): Update.
+ (How Can I Reset the Parser): Update.
+ (Table of Symbols): In %pure-parser entry, say it's deprecated and
+ reference %define.
+ * src/getargs.c (pure_parser): Remove global variable.
+ * src/getargs.h (pure_parser): Remove extern.
+ * src/output.c (prepare): Don't define pure_flag muscle.
+ * src/parse-gram.y (prologue_declaration): Implement %pure-parser as a
+ wrapper around `%define api.pure'.
+ * tests/calc.at (Simple LALR Calculator): Update.
+ (Simple GLR Calculator): Update.
+ * tests/cxx-type.at (GLR: Resolve ambiguity, pure, no locations):
+ Update.
+ (GLR: Resolve ambiguity, pure, locations): Update.
+ (GLR: Merge conflicting parses, pure, no locations): Update.
+ (GLR: Merge conflicting parses, pure, locations): Update.
+ * tests/glr-regression.at (Uninitialized location when reporting
+ ambiguity): Update
+ * tests/input.at (Unused %define api.pure): New test case.
+ * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Update definition for
+ AT_PURE_IF and AT_PURE_AND_LOC_IF.
+ * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update.
+
+2007-10-28 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ %define push_pull -> %define api.push_pull. Discussed starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00005.html>.
+ * data/push.c: Expect the new name.
+ * data/yacc.c: Likewise.
+ * doc/bison.texinfo (Push Decl): Update.
+ (Decl Summary): Update %define entry.
+ (Push Parser Function): Update.
+ (Pull Parser Function): Update.
+ (Parser Create Function): Update.
+ (Parser Delete Function): Update.
+ * tests/calc.at (Simple LALR Calculator): Update.
+ * tests/input.at (%define enum variables): Update.
+ * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update.
+ (Push Parsing: Multiple impure instances): Update.
+ (Push Parsing: Unsupported Skeletons): Update.
+ * tests/torture.at (Exploding the Stack Size with Alloca): Update.
+ (Exploding the Stack Size with Malloc): Update.
+
+ * NEWS (2.3a+): Add an entry for the push parser, and clean up the
+ other entries some.
+
+2007-10-27 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ For the XML output's terminal element, rename @number to @token-number,
+ and add @symbol-number. In the nonterminal element, rename @number to
+ @symbol-number. Discussed starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2007-10/msg00040.html>.
+ * data/xslt/xml2text.xsl (xsl:template match="terminal"): Update for
+ renames.
+ (xsl:template match="nonterminal"): Likewise.
+ * data/xslt/xml2xhtml.xsl (xsl:template match="terminal"): Likewise.
+ (xsl:template match="nonterminal"): Likewise.
+ * src/print-xml.c (print_grammar): Implement.
+
+2007-10-21 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * data/xslt/xml2dot.xsl (xsl:template match="automaton/state"): After
+ 2007-10-11 change, the child elements here are items not rules.
+ (<xsl:template match="item"): New.
+ (xsl:template match="rule"): Update for new reduced itemset.
+ (xsl:template match="point"): Remove.
+ (xsl:template match="empty"): For consistency with --graph, don't
+ output "/* empty */".
+ * data/xslt/xml2text.xsl (xsl:template match="terminal"): When invoking
+ line-wrap, don't pass a negative value as first-line-length since this
+ won't work with the following changes.
+ (xsl:template name="line-wrap"): Simplify slightly.
+ (xsl:template name="ws-search"): Eliminate recursion.
+ * src/print_graph.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.
+
+2007-10-19 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Add %define lr.keep_unreachable_states.
+ * NEWS (2.3a+): Mention it in the entry for unreachable state removal.
+ * doc/bison.texinfo (Decl Summary): Mention it in the %define entry.
+ * src/main.c (main): Implement it.
+ * tests/conflicts.at (Unreachable States After Conflict Resolution):
+ Extend to test it, and fix a typo.
+
+2007-10-19 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * NEWS (2.3a+): Add entry for recent .output file lookahead set fix.
+ * doc/bison.texinfo (Understanding): Remove a bogus lookahead set in
+ the example .output text.
+ * tests/regression.at (Extra lookahead sets in report): Improve wording
+ of comments.
+
+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 ` '
+ 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
+ instead of passing a yylexp argument to yypull_parse, and don't
+ generate yypull_parse or yyparse unless %push-pull-parser is declared.
+ Discussed starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00163.html>.
+ * data/bison.m4 (b4_pull_if): New.
+ * data/c.m4 (b4_identification): Define YYPULL similar to YYPUSH.
+ * data/push.c: Improve M4 quoting a little.
+ (b4_generate_macro_args, b4_parenthesize): Remove.
+ (yyparse): If there's a b4_prefix, #define this to b4_prefix[parse]
+ any time a pull parser is requested.
+ Don't #define this as a wrapper around yypull_parse. Instead, when
+ both push and pull are requested, make it a function that does that
+ same thing.
+ (yypull_parse): If there's a b4_prefix, #define this to
+ b4_prefix[pull_parse] when both push and pull are requested.
+ Don't define this as a function unless both push and pull are
+ requested.
+ Remove the yylexp argument and hard-code yylex invocation instead.
+ * etc/bench.pl.in (bench_grammar): Use %push-pull-parser instead of
+ %push-parser.
+ * src/getargs.c (pull_parser): New global initialized to true.
+ * getargs.h (pull_parser): extern it.
+ * src/output.c (prepare): Insert pull_flag muscle.
+ * src/parse-gram.y (PERCENT_PUSH_PULL_PARSER): New token.
+ (prologue_declaration): Set both push_parser and pull_parser = true for
+ %push-pull-parser. Set push_parser = true and pull_parser = false for
+ %push-parser.
+ * src/scan-gram.l: Don't accept %push_parser as an alternative to
+ %push-parser since there's no backward-compatibility concern here.
+ Scan %push-pull-parser.
+ * tests/calc.at (Simple LALR(1) Calculator): Use %push-pull-parser
+ instead of %push-parser.
+ * tests/headers.at (export YYLTYPE): Make yylex static, and don't
+ prototype it in the module that calls yyparse.
+ * tests/input.at (Torturing the Scanner): Likewise.
+ * tests/local.at (AT_PUSH_IF): Check for %push-pull-parser as well.
+
+2006-12-26 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Update etc/bench.pl. Optimize push mode a little (the yyn change
+ deserves most of the credit).
+ * Makefile.am (SUBDIRS): Add etc subdirectory.
+ * configure.ac (AC_CONFIG_FILES): Add etc/bench.pl and etc/Makefile.
+ * data/push.c (b4_declare_parser_state_variables): Move yyn, yyresult,
+ yytoken, yyval, and yyloc declarations to...
+ (yyparse or yypush_parse): ... here to improve performance. For
+ yypush_parse invocations after the first, be sure to assign yyn its old
+ value again.
+ (yypstate_new): Don't bother initializing the yyresult field since the
+ initial value isn't used.
+ (yyn, yyresult, yytoken, yyval, yyloc): For each NAME in this list,
+ remove the #define that, in push mode, set it to yyps->NAME.
+ * etc/Makefile.am: New.
+ * etc/bench.pl: Remove and build it instead from...
+ * etc/bench.pl.in: ... this new file. Use @abs_top_builddir@ to invoke
+ "tests/bison" from the build directory by default rather than just
+ invoking "bison" from $PATH.
+ (calc_grammar): Update push parser code: don't declare yylval globally,
+ don't define yyparse_wrapper, and don't #define yyparse.
+ (bench_grammar): Update to check all working combinations of yacc.c,
+ push.c, impure, pure, pull, and push.
+
+2006-12-25 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ For push mode, add pull wrappers around yypush_parse.
+ * data/push.c: (b4_generate_macro_args, b4_parenthesize): New macros.
+ (yypull_parse): New function wrapping yypush_parse.
+ (yyparse): New #define wrapping yypull_parse.
+ * tests/calc.at (_AT_DATA_CALC_Y): Call yyparse even when %push-parser
+ is declared.
+ * tests/headers.at (export YYLTYPE): Make yylex global. For push mode,
+ prototype yylex in the module that calls yyparse, and don't prototype
+ yyparse there. Otherwise, the yyparse expansion won't compile.
+ * tests/input.at (Torturing the Scanner): Likewise.
+
+2006-12-25 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Enable push parsers to operate in impure mode. Thus, %push-parser no
+ longer implies %pure-parser. The point of this change is to move
+ towards being able to test the push parser code by running the entire
+ test suite as if %push-parser had been declared.
+ * data/push.c (yypush_parse): For impure mode, remove the
+ yypushed_char, yypushed_val, and yypushed_loc arguments.
+ Instead, declare these as local variables initialized to the global
+ yychar, yylval, and yylloc.
+ For the first yypush_parse invocation only, restore the initial values
+ of these global variables when it's time to read a token since they
+ have been overwritten.
+ * src/parse-gram.y (prologue_declaration): Don't set pure_parser for
+ %push-parser.
+ * tests/calc.at (Simple LALR(1) Calculator): Always declare
+ %pure-parser along with %push-parser since this test case was designed
+ for pure push parsers.
+ * tests/local.at (AT_PURE_OR_PUSH_IF): Remove unused.
+ (AT_YACC_OR_PUSH_IF): New.
+ (AT_YYERROR_SEES_LOC_IF): Fix enough that the test suite passes, but
+ add a note that it's still wrong for some cases (as it has been for a
+ while).
+ (AT_PURE_LEX_IF): Use AT_PURE_IF instead of AT_PURE_OR_PUSH_IF since
+ %push-parser no longer implies %pure-parser.
+
+2006-12-20 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Remove some unnecessary differences between the pull parser code and
+ the push parser code. This patch enables yynerrs in push mode.
+ * data/push.c: Reformat M4 a little.
+ (b4_yyerror_range): Remove and convert all uses to just yyerror_range.
+ (b4_declare_scanner_communication_variables): Don't omit yynerrs just
+ because push mode is on. Instead, if pure mode is on, move yynerrs
+ to...
+ (b4_declare_parser_state_variables): ... here.
+ (yynerrs, yyerror_range): For push mode, #define each NAME in this list
+ to yyps->NAME so it can be used in yypush_parse.
+ (yypush_parse): Don't omit uses of yynerrs in push mode.
+
+2006-12-20 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Fix bug such that the first pushed token's value and location are
+ sometimes overwritten (sometimes by %initial-action) before being used.
+ * data/push.c (yypush_parse): Rename arguments yynchar, yynlval, and
+ yynlloc to yypushed_char, yypushed_val, and yypushed_loc for clarity.
+ For the first yypush_parse invocation, initialize yychar to YYEMPTY to
+ more closely mimic the pull parser logic.
+ Don't copy the pushed token to yychar, yylval, and yylloc until it's
+ time to read a token, which is after any initialization of yylval and
+ yylloc.
+ (gottoken): Rename label to...
+ (yyread_pushed_token): ... for clarity and to avoid infringing on the
+ user namespace.
+
+2006-12-20 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Rearrange initialization of the parser state variables so that the
+ skeleton doesn't have to have a copy for pull mode and another for push
+ mode. This patch also fixes at least a bug such that yylloc was not
+ initialized (with b4_location_initial_line and
+ b4_location_initial_column) upon calling yypush_parse. However, that
+ initialization now overwrites the first token's location;
+ %initial-action assigning @$ already did the same thing, and both bugs
+ will be fixed in a later patch.
+ * data/push.c (b4_yyssa): Remove and convert all uses to just yyssa.
+ (b4_declare_parser_state_variables): Remove initialization of yytoken,
+ yyss, yyvs, yyls, and yystacksize.
+ (yypstate_new): Remove initialization of some yypstate fields: yystate,
+ yyerrstatus, yytoken, yyss, yyvs, yyls, yystacksize, yyssp, yyvsp, and
+ yylsp.
+ (yyssa, yyvsa, yylsa): For push mode, #define each NAME in this list to
+ yyps->NAME so it can be used in yypush_parse.
+ (yyparse or yypush_parse): For yypush_parse, don't print the
+ "Starting parse" diagnostic for invocations after the first.
+ Add initialization of yytoken, yyss, yyvs, yyls, and yystacksize; for
+ yypush_parse, only do it for the first invocation.
+ Allow yystate, yyerrstatus, yyssp, yyvsp, yylsp, and yylloc
+ initialization to occur in yypush_parse but only on the first
+ invocation.
+
+2006-12-19 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * data/push.c: Add CPP guards around push parser declarations in both
+ the header and the code file.
+ In the code file, move the push parser declarations to the same place
+ they appear in the header file.
+ Clean up the M4 some, especially the inconsistent underquoting in
+ some b4_c_function_def and b4_c_function_decl uses.
+
+2006-12-19 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Encapsulate the push parser state variables into an M4 macro so the
+ push skeleton doesn't have to list them again for pull mode's yyparse.
+ For push mode, remove yypush_parse's local equivalents of these
+ variables to eliminate unnecessary copying between the two sets at
+ run-time. This patch also fixes at least a bug related to multiple
+ %initial-action invocations in push mode.
+ * data/push.c (b4_declare_parser_variables): Rename to...
+ (b4_declare_scanner_communication_variables): ... this for clarity and
+ update both uses.
+ (b4_declare_yyparse_variables): Remove and move its contents to the one
+ spot where it was invoked.
+ (b4_declare_parser_state_variables): New macro containing the parser
+ state variables required by push mode.
+ (struct yypstate): Replace all fields but yynew with
+ b4_declare_parser_state_variables.
+ (yystate, yyn, yyresult, yyerrstatus, yytoken, yyss, yyssp, yyvs,
+ yyvsp, yyls, yylsp, yystacksize, yyval, yyloc): For push mode, #define
+ each NAME in this list to yyps->NAME so it can be used in yypush_parse.
+ (yyparse or yypush_parse): For yyparse in pull mode, replace local
+ parser state variable declarations with
+ b4_declare_parser_state_variables.
+ Don't initialize parser state variables when calling yypush_parse since
+ yypstate_new already does that.
+ Invoke the user's initial action only upon the first yypush_parse
+ invocation.
+ Remove all code that copies between the local parser state variables
+ and the yypstate.
+
+2006-12-19 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * data/push.c (union yyalloc): Rename yyss, yyvs, and yyls fields to
+ prevent a name collision in a future patch where these names will
+ sometimes be #define'd.
+ (YYSTACK_RELOCATE): Add an argument to select a union yyalloc field
+ since it no longer has the same name as the existing argument.
+ (yyparse or yypush_parse): Update all uses of YYSTACK_RELOCATE.
+
+2006-12-19 Paolo Bonzini <bonzini@gnu.org>
+ and Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * doc/bison.texinfo (Decl Summary): In the %language entry, mention
+ that the argument is case-insensitive, and there's no `=' here.
+ For the %skeleton entry, mention that %language is better.
+ (Bison Options): Likewise for --language and --skeleton. Move the
+ --skeleton entry so that the `Tuning the parser' section is sorted
+ alphabetically on long options.
+ (C++ Bison Interface): Don't use the word skeleton. Don't explain the
+ %language directive in detail here; cross-reference the %language
+ documentation instead.
+ (Calc++ Parser): Use `%require "@value{VERSION}"' rather than
+ `%require "2.3b"' so that the example is always up-to-date.
+ (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
+ appears in the documentation.
+ * examples/calc++/Makefile.am ($(calc_extracted)): Use `$(VERSION)'
+ rather than `@VERSION@'.
+
+2006-12-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Reword the %language news a bit, and put it earlier.
+
+ * src/getargs.c (skeleton_arg): Last arg is now location const *.
+ Rewrite to simplify the logic.
+ (language_argmatch): Likewise.
+ (program_name): We now own this var.
+ * src/getargs.h (struct bison_language): Use char[] rather than
+ const char *.
+
+ * doc/bison.texinfo (Decl Summary, Bison Options): Don't claim
+ Java is supported.
+ * src/complain.c (program_name): Remove decl; no longer needed.
+ * src/main.c (program_name): Remove; now belongs to getargs.
+
+2006-12-18 Paolo Bonzini <bonzini@gnu.org>
+
+ * NEWS: Document %language.
+
+ * data/Makefile.am (dist_pkgdata_DATA): Add c-skel.m4, c++-skel.m4.
+
+ * data/c-skel.m4, data/c++-skel.m4: New files.
+ * data/glr.c: Complain on push parsers.
+
+ * doc/bison.texinfo (C++ Parser Interface): Prefer %language
+ over %skeleton.
+ (Decl Summary): Document %language and %skeleton.
+ (Command line): Document -L.
+
+ * examples/extexi: Rewrite %require directive.
+ * examples/calc++/Makefile.am: Pass VERSION to extexi.
+
+ * src/files.c (compute_exts_from_gc): Look in language structure
+ for .y extension.
+ (compute_file_name_parts): Check whether .tab should be added.
+ * src/getargs.c (valid_languages, skeleton_prio, language_prio):
+ (language, skeleton_arg, language_argmatch): New.
+ (long_options): Add --language.
+ (getargs): Use skeleton_arg, add -L/--language.
+ * src/getargs.h: Include location.h.
+ (struct bison_language, language, skeleton_arg, language_argmatch): New.
+ * src/output.c (prepare): Pick default skeleton from struct language.
+ Don't dispatch C skeletons here.
+ * src/parse-gram.y (PERCENT_LANGUAGE): New.
+ (prologue_declaration): Add "%language" rule, use skeleton_arg.
+ * src/scan-gram.l ("%language"): New rule.
+
+ * tests/calc.at: Test %skeleton and %language.
+ * tests/local.at (AT_SKEL_CC_IF): Look for %language.
+ (AT_GLR_IF): Look for %skeleton "glr.cc".
+ (AT_LALR1_CC_IF, AT_GLR_CC_IF): Rewrite.
+ (AT_YACC_IF): Reject %language.
+
+2006-12-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * src/symtab.h (struct semantic_type): Remove the tag 'semantic_type',
+ since it wasn't used; only the typedef name 'semantic_type' is needed.
+ Also, omit trailing white space.
+
+ * bootstrap: Sync from coreutils.
+ (gnulib_extra_files): Add build-aux/announce.gen.
+ (slurp): Adjust .gitignore files like .cvsignore files.
+ * build-aux/announce-gen: Remove from CVS, since bootstrap
+ now creates this.
+
+2006-12-16 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Make %push-parser imply %pure-parser. This fixes several bugs; see
+ <http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00148.html>.
+ * src/parse-gram.y (prologue_declaration): For %push-parser, also set
+ pure_parser = true.
+ * data/push.c: Don't bother testing b4_push_if when deciding whether
+ to expand b4_declare_parser_variables globally.
+ (yypush_parse): Likewise in here.
+
+ * data/push.c (yypush_parse): Add b4_parse_param to arguments.
+ (yy_reduce_print): Reformat M4 for readability.
+
+2006-12-15 Bob Rossi <bob@brasko.net>
+ and Joel Denny <jdenny@ces.clemson.edu>
+
+ * data/push.c (yypstate): Add typedef, and update all uses of
+ struct yypstate to just yypstate.
+ * tests/calc.at (_AT_DATA_CALC_Y): Update here as well.
+
+2006-12-14 Bob Rossi <bob@brasko.net>
+
+ * data/push.c (yypush_parse): Declare prototype regardless of
+ %locations option.
+
+2006-12-14 Bob Rossi <bob@brasko.net>
+
+ * data/push.c (yyparse): Remove the prototype and the #define when in
+ push-parser mode.
+
+2006-12-13 Bob Rossi <bob@brasko.net>
+
+ * data/push.c (yypstate_init): Rename to...
+ (yypstate_new): ... this and use b4_c_function_def.
+ (yypstate_delete): New.
+ (yypush_parse): Change parameters yynval and yynlloc to be const.
+ * tests/calc.at (_AT_DATA_CALC_Y): Use new yypstate_new and
+ yypstate_delete functions.
+
+2006-12-13 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * configure.ac (AC_PREREQ): Require Autoconf 2.61 because of our
+ strange test case titles. Reported by Bob Rossi.
+
+2006-12-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * TODO: Add pointer to Sylvain Schmitz's work on static detection
+ of potential ambiguities in GLR grammers.
+
+2006-12-12 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * tests/testsuite.at (AT_CHECK): When checking if $1 starts with
+ `bison ', use m4_index instead of m4_substr since chopping up a string
+ containing M4-special characters causes problems here.
+
+ Fix a couple of bugs related to special characters in user-specified
+ file names, and make it easier for skeletons to compute output file
+ names with the same file name prefix as Bison-computed output file
+ names.
+ * data/glr.cc, data/push.c, data/yacc.c: In @output, use
+ b4_parser_file_name and b4_spec_defines_file instead of
+ @output_parser_name@ and @output_header_name@, which are now redundant.
+ * data/glr.c, data/lalr1.cc: Likewise. Also, in header #include's, use
+ b4_parser_file_name, b4_spec_defines_file, and the new
+ @basename(FILENAME@) instead of @output_parser_name@ and
+ @output_header_name@, which inappropriately escaped the file names as
+ C string literals.
+ * src/files.c (all_but_ext): Remove static qualifier.
+ (compute_output_file_names): Move `free (all_but_ext)' to...
+ (output_file_names_free): ... here since all_but_ext is needed later.
+ * src/files.h (all_but_ext): Extern.
+ * src/muscle_tab.h (MUSCLE_INSERT_STRING_RAW): New macro that does
+ exactly what MUSCLE_INSERT_STRING used to do.
+ (MUSCLE_INSERT_STRING): Use MUSCLE_OBSTACK_SGROW so that M4-special
+ characters are escaped properly.
+ * src/output.c (prepare): Define muscle file_name_all_but_ext as
+ all_but_ext.
+ For pkgdatadir muscle, maintain previous functionality by using
+ MUSCLE_INSERT_STRING_RAW instead of MUSCLE_INSERT_STRING. The problem
+ is that b4_pkgdatadir is used inside m4_include in the skeletons, so
+ digraphs would never be expanded. Hopefully no one has M4-special
+ characters in his Bison installation path.
+ * src/scan-skel.l: Don't parse @output_header_name@ and
+ @output_parser_name@ anymore since they're now redundant.
+ In @output, use decode_at_digraphs.
+ Parse a new @basename command that invokes last_component.
+ (decode_at_digraphs): New.
+ (BASE_QPUTS): Remove unused.
+ * tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): New macro.
+ (Output file name): New tests.
+
+2006-12-09 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Warn about output files that are generated by the skeletons and that
+ conflict with other output files.
+ * data/glr.c: Don't generate the header file here when glr.cc does.
+ * src/files.c (file_names, file_names_count): New static globals.
+ (compute_output_file_names): Invoke output_file_name_check for files
+ not generated by the skeletons and remove existing checks.
+ (output_file_name_check): New function that warns about conflicting
+ output file names.
+ (output_file_names_free): Free file_names.
+ * src/files.h (output_file_name_check): Declare.
+ * src/scan-skel.l: Invoke output_file_name_check for files generated by
+ the skeletons.
+ * tests/output.at (AT_CHECK_CONFLICTING_OUTPUT): New.
+ (Conflicting output files): New tests.
+
+2006-12-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/bison.texinfo: Fix a couple of typos.
+
+2006-12-08 Bob Rossi <bob@brasko.net>
+
+ * data/push.c: (yypvarsinit, yypvars, struct yypvars, yypushparse):
+ Rename to...
+ (yypstate_init, yypstate, struct yypstate, yypush_parse): ... these and
+ update all uses.
+ (b4_yyssa, b4_yyerror_range, yypstate_init): Rename pv to yyps.
+ (yypush_parse): Rename yypvars argument to yyps and remove redundant
+ local pv.
+ (yypstate_init, yypush_parse): Declare in Bison-generated header file.
+ * tests/calc.at (_AT_DATA_CALC_Y): Use newly named functions.
+
+2006-12-07 Bob Rossi <bob@brasko.net>
+ and Joel Denny <jdenny@ces.clemson.edu>
+
+ * data/push.c (yypvarsinit): Change return type from void* to struct
+ yypvars*. No longer cast to void* on return.
+ (struct yypvars): Remove yylen since it need not be remembered between
+ yypushparse invocations.
+ (yypushparse): Don't copy between yylen and pv->yylen.
+
+2006-12-05 Bob Rossi <bob@brasko.net>
+
+ * data/push.c (yychar_set, yylval_set, yylloc_set): Delete.
+ (yypushparse): Add yynchar, yynlval, yynlloc parameters.
+ (b4_declare_parser_variables): Do not declare yynerrs for push mode.
+ (struct yypvars): Remove b4_declare_parser_variables.
+ (yypvarsinit): Remove init code for removed variables.
+ (global scope): Do not declare b4_declare_parser_variables if
+ push or pure mode.
+ (yypushparse): Add b4_declare_parser_variables.
+ Init new local variables, and remove init code for removed
+ yypvars variables.
+ (yyparse): Delete.
+ * tests/calc.at (_AT_DATA_CALC_Y): Call yypushparse for push mode
+ and yyparse for other modes.
+ (AT_CHECK_CALC_LALR): Added '%skeleton "push.c"' for push tests.
+ * tests/local.at (AT_PUSH_IF, AT_PURE_OR_PUSH_IF): Added.
+ (AT_YYERROR_SEES_LOC_IF): push-parser makes this false.
+ (AT_PURE_LEX_IF): True if pure or push parser.
+
+2006-12-05 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Document Yacc prologue alternatives and default %destructor's and
+ %printer's as experimental. Don't mention Java yet. Discussed at
+ <http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00002.html>.
+ * NEWS (2.3a+): Say they're experimental. Remove any mention of Java.
+ (2.3a): Annotate this entry to say the old forms of these features were
+ also experimental.
+ * doc/bison.texinfo (Prologue Alternatives, Freeing Discarded Symbols,
+ 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>
+
+ Support a file name argument to %defines. Deprecate `=' in
+ %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, 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.
+ * tests/calc.at (Simple LALR Calculator, Simple GLR Calculator, Simple
+ LALR1 C++ Calculator, Simple GLR C++ Calculator): Remove the `=' from
+ all but one occurrence of %name-prefix.
+ * tests/headers.at (export YYLTYPE): Remove the `=' from %name-prefix.
+ * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Likewise.
+ * tests/output.at (AT_CHECK_OUTPUT): Remove the `=' from all but one
+ occurrence of each of %file-prefix and %output. Add check for %defines
+ with argument.
+ * tests/reduce.at (Useless Terminals, Useless Nonterminals,
+ Useless Rules, Reduced Automaton, Underivable Rules, Empty Language):
+ Remove the `=' from %output.
+
+2006-11-21 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Don't escape $ in test case titles since Autoconf 2.61 now does that
+ correctly.
+ * tests/actions.at (Default %printer and %destructor are not for error
+ or $undefined): Here.
+ (Default %printer and %destructor are not for $accept): Here.
+ * tests/input.at (Invalid $n and @n): Here.
+
+2006-11-20 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ 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, Table of Symbols):
+ Update.
+ * src/parse-gram.y (TYPE_TAG_NONE, generic_symlist_item): Implement.
+ * src/scan-gram.l (INITIAL): Implement.
+ * src/symlist.c (symbol_list_default_tagless_new): Update comment.
+ * src/symlist.h (symbol_list, symbol_list_default_tagless_new): Update
+ comment.
+ * tests/actions.at (Default tagless %printer and %destructor,
+ Default tagged and per-type %printer and %destructor,
+ Default %printer and %destructor are not for error or $undefined,
+ Default %printer and %destructor are not for $accept,
+ Default %printer and %destructor for mid-rule values): Update.
+ * tests/input.at (Default %printer and %destructor redeclared,
+ Unused values with default %destructor): Update.
+
+2006-11-17 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Don't let %prec take a nonterminal.
+ * src/reader.c (grammar_current_rule_prec_set): Make the %prec symbol a
+ token.
+ * tests/input.at (%prec takes a token): New test checking that %prec
+ won't take a nonterminal.
+
+2006-11-10 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * tests/testsuite.at (AT_CHECK): Don't miss an exit value of 0 because
+ it was double-quoted.
+ * src/Makefile.am (YACC): Use --warnings=all,error so that Bison's own
+ grammar is maintained with Bison's highest standards.
+ * src/getargs.c: Fix some typos in Doxygen comments.
+
+2006-11-10 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Fix memory leaks in scanners generated by at least Flex 2.5.9 and
+ later. Reported by Paul Eggert in
+ <http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00014.html>.
+ * src/flex-scanner.h (yylex_destroy): Define for Flex before 2.5.9.
+ * src/scan-code.l (translate_action): Don't bother invoking
+ yy_delete_buffer (YY_CURRENT_BUFFER) before creating the first buffer.
+ (code_scanner_free): Instead of invoking
+ yy_delete_buffer (YY_CURRENT_BUFFER) directly, invoke yylex_destroy,
+ which frees more.
+ * src/scan-gram.l (gram_scanner_free): Likewise.
+ * src/scan-skel.l (scan_skel): Likewise.
+
+2006-11-09 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * src/files.c (tr): Change return type to void.
+ * src/muscle_tab.c (muscle_insert): Free storage in case muscle_grow
+ has been called previously for the same key.
+ (muscle_find): Return storage instead of value so that
+ --enable-gcc-warnings doesn't produce warnings that the return discards
+ const. aver that the value and storage are the same since storage
+ could potentially be NULL when value is not.
+ * tests/testsuite.at (AT_CHECK): Treat an unspecified exit value the
+ same as 0.
+
+2006-11-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * bootstrap.conf (excluded_files): Exclude m4/codeset.m4 (undoing
+ the earlier change today), m4/intl.m4, m4/intldir.m4. This gives
+ us a slightly cleaner distribution, and also works.
+ * m4/.cvsignore: Add inline.m4, wint_t.m4 to accommodate recent
+ gnulib changes.
+
+2006-11-08 Joel E. Denny <jdenny@ces.clemson.edu>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ Don't let Bison leak memory except when it complains.
+ * src/files.h (parser_file_name, spec_verbose_file, spec_graph_file):
+ (spec_defines_file, dir_prefix): Now char *, not const char *,
+ since they are freed.
+ * src/files.c: Likewise.
+ (all_but_ext, all_but_tab_ext, src_extension, header_extension):
+ Likewise.
+ (tr): Now operates in-place. All uses changed.
+ (compute_exts_from_gf, compute_exts_from_src): Don't leak temporary
+ values.
+ (compute_file_name_parts, compute_output_file_names): Don't store
+ read-only data in variables that will be freed.
+ (compute_output_file_names): Free all_but_ext, all_but_tab_ext,
+ src_extension, and header_extension.
+ (output_file_names_free): New public function to free
+ spec_verbose_file, spec_graph_file, spec_defines_file,
+ parser_file_name, and dir_prefix.
+ * src/getargs.c (getargs): Don't store read-only data in variables that
+ will be freed.
+ * src/main.c (main): Invoke output_file_names_free, code_scanner_free
+ (which previously existed but was unused), and quotearg_free.
+ * src/muscle_tab.h (muscle_insert): value arg is now a `char const *'.
+ * src/muscle_tab.c: Likewise.
+ (muscle_entry): Make the value char const *,
+ and add a new storage member that is char * and can be freed.
+ (muscle_entry_free): New private function.
+ (muscle_init): Use it instead of free.
+ (muscle_insert, muscle_grow): Update and use new storage member.
+ (muscle_code_grow): Free the string passed to muscle_grow
+ since it's not needed anymore.
+ * src/parse-gram.y (%union): Make `chars' member a `char const *', and
+ add a new `char *code' member.
+ ("{...}"): Declare semantic type as code.
+ * src/scan-code.h (translate_rule_action):
+ (translate_symbol_action, translate_code, translate_action): Return
+ `char const *' rather than `char *' since external code should not free
+ these strings.
+ * src/scan-code.l: Likewise.
+ * src/scan-gram.l (<SC_BRACED_CODE>): Use val->code for BRACED_CODE,
+ which is "{...}" in the parser.
+ * tests/Makefile.am (maintainer-check-valgrind): Set
+ VALGRIND_OPTS='--leak-check=full --show-reacheable=yes' before invoking
+ Valgrind.
+ * tests/calc.at (_AT_DATA_CALC_Y): fclose the FILE* so Valgrind doesn't
+ complain.
+ * tests/testsuite.at (AT_CHECK): Redefine so that running Bison and
+ expecting a non-zero exit status sets --leak-check=summary and
+ --show-reachable=no for Valgrind. Bison unabashedly leaks memory in
+ this case, and we don't want to hear about it.
+
+2006-11-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * bootstrap (runtime-po/Makevars): Derive from po/Makevars
+ instead of from the template, to simplify configuration a bit.
+ * bootstrap.conf (excluded_files): Don't exclude m4/codeset.m4
+ and m4/wint_t.m4, as they are needed with the latest gnulib.
+
+2006-10-31 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Disable unset/unused mid-rule value warnings by default, and recognize
+ --warnings=midrule-values to enable them. Discussed starting at
+ <http://lists.gnu.org/archive/html/help-bison/2006-10/msg00030.html>.
+ * NEWS (2.3a+): Mention.
+ * src/getargs.c, src/getargs.h (warnings_args, warnings_types, enum
+ warnings): Add entry for midrule-values subargument.
+ * src/reader.c (symbol_should_be_used): Don't return true just because
+ the value is a set/used mid-rule value unless
+ --warnings=midrule-values was specified.
+ * tests/input.at (Unused values, Unused values before symbol
+ declarations): Run tests with and without --warnings=midrule-values.
+
+ * src/reader.c (check_and_convert_grammar): Use symbol_list_free rather
+ than LIST_FREE directly.
+
+2006-10-31 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Finish implementing --warnings=error, which should not be implied by
+ --warnings=all (or by its synonyms -W and --warnings without
+ subarguments).
+ * src/complain.c (set_warning_issued): New function to report that
+ warnings are being treated as errors and to record an error if so.
+ Invoke...
+ (warn_at, warn): ... here.
+ * src/getargs.c (warnings_args, warnings_types): Reorder so that
+ "error - warnings are errors" does not appear above "all - all of the
+ above".
+ (getargs): For -W and --warnings without subarguments, don't let
+ FLAGS_ARGMATCH set warnings_error in warnings_flag.
+ * src/getargs.h (enum warnings): Unset warnings_error in warnings_all.
+
+2006-10-31 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * src/getargs.c (flags_argmatch): Don't cause segmentation fault for
+ empty subargument list. For example: `bison --warnings= parser.y'.
+
+2006-10-21 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * data/push.c, data/yacc.c: Make sure there's a newline at the end of
+ the parser header file so that gcc doesn't warn.
+
+2006-10-21 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Split the default %destructor/%printer into two kinds: <*> and <!>.
+ Discussed starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00060.html>.
+ * NEWS (2.3a+): Mention.
+ * doc/bison.texinfo (Freeing Discarded Symbols): Document this and the
+ previous change today related to mid-rules.
+ (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 <!>.
+ (generic_symlist_item): Remove RHS for %symbol-default and add RHS's
+ for <*> and <!>.
+ * src/scan-gram.l (PERCENT_SYMBOL_DEFAULT): Remove.
+ (TYPE_TAG_ANY, TYPE_TAG_NONE): Add.
+ * src/symlist.c (symbol_list_default_new): Split into tagged and
+ tagless versions.
+ (symbol_list_destructor_set, symbol_list_printer_set): Split
+ SYMLIST_DEFAULT case into SYMLIST_DEFAULT_TAGGED and
+ SYMLIST_DEFAULT_TAGLESS.
+ * src/symlist.h: Update symbol_list_default*_new prototypes.
+ (symbol_list.content_type): Split enum value SYMLIST_DEFAULT into
+ SYMLIST_DEFAULT_TAGGED and SYMLIST_DEFAULT_TAGLESS.
+ * src/symtab.c (default_destructor, default_destructor_location,
+ default_printer, default_printer_location): Split each into tagged and
+ tagless versions.
+ (symbol_destructor_get, symbol_destructor_location_get,
+ symbol_printer_get, symbol_printer_location_get): Implement tagged
+ default and tagless default cases.
+ (default_destructor_set, default_printer_set): Split each into tagged
+ and tagless versions.
+ * src/symtab.h: Update prototypes.
+ * tests/actions.at (Default %printer and %destructor): Rename to...
+ (Default tagless %printer and %destructor): ... this, and extend.
+ (Per-type %printer and %destructor): Rename to...
+ (Default tagged and per-type %printer and %destructor): ... this, and
+ extend.
+ (Default %printer and %destructor for user-defined end token): Extend.
+ (Default %printer and %destructor are not for error or $undefined):
+ Update.
+ (Default %printer and %destructor are not for $accept): Update.
+ (Default %printer and %destructor for mid-rule values): Extend.
+ * tests/input.at (Default %printer and %destructor redeclared): Extend.
+ (Unused values with default %destructor): Extend.
+