+2002-04-07 Akim Demaille <akim@epita.fr>
+
+ * src/output.c (output_rule_data): Fix various range errors:
+ `rules' starts at 1, not 0.
+
+
+2002-04-07 Akim Demaille <akim@epita.fr>
+
+ Remove the useless rules from the parser.
+
+ * src/gram.h, src/gram.c (rules_swap, rule_rhs_length): New.
+ (ritem_longest_rhs): Use the latter.
+ * src/gram.h (rule_t): `number' is a new member.
+ * src/reader.c (packgram): Set it.
+ * src/reduce.c (reduce_grammar_tables): Move the useless rules at
+ the end of `rules', and count them out of `nrules'.
+ (reduce_output, dump_grammar): Adjust.
+ * src/print.c (print_grammar): It is no longer needed to check for
+ the usefulness of a rule, as useless rules are beyond `nrules + 1'.
+ * tests/reduce.at (Reduced Automaton): New test.
+
+diff -x *.po -ur -x testsuite bison-1.49a/NEWS bison/NEWS
+--- bison-1.49a/NEWS Sun Apr 7 17:36:56 2002
++++ bison/NEWS Sun Apr 7 18:19:39 2002
+@@ -3,6 +3,10 @@
+
+ Changes in version 1.49a:
+
++* Useless rules are actually removed.
++ Before, Bison reported the useless rules, but, although not used,
++ included them in the parsers.
++
+ * False `Token not used' report fixed.
+ On a grammar such as
+
+diff -x *.po -ur -x testsuite bison-1.49a/src/gram.c bison/src/gram.c
+--- bison-1.49a/src/gram.c Sun Apr 7 17:36:56 2002
++++ bison/src/gram.c Sun Apr 7 18:19:39 2002
+@@ -1,5 +1,5 @@
+ /* Allocate input grammar variables for bison,
+- Copyright 1984, 1986, 1989, 2001 Free Software Foundation, Inc.
++ Copyright 1984, 1986, 1989, 2001, 2002 Free Software Foundation, Inc.
+
+ This file is part of Bison, the GNU Compiler Compiler.
+
+@@ -51,6 +51,51 @@
+ int error_token_number;
+
+
++/*----------------------------------.
++| Swap the rules number R1 and R2. |
++`----------------------------------*/
++
++void
++rules_swap (int r1, int r2)
++{
++ /* The easy part: swap the immediate contents of the structures. */
++ {
++ rule_t rule = rules[r1];
++ rules[r1] = rules[r2];
++ rules[r2] = rule;
++ }
++
++ /* The first negative number in the RHS is the rule number. */
++ {
++ short *rhsp;
++ for (rhsp = rules[r1].rhs; *rhsp >= 0; ++rhsp)
++ /* Nothing. */;
++ assert (*rhsp == -r2);
++ *rhsp = -r1;
++
++ for (rhsp = rules[r2].rhs; *rhsp >= 0; ++rhsp)
++ /* Nothing. */;
++ assert (*rhsp == -r1);
++ *rhsp = -r2;
++ }
++}
++
++
++/*--------------------------------------.
++| Return the number of symbols in RHS. |
++`--------------------------------------*/
++
++int
++rule_rhs_length (rule_t *rule)
++{
++ int res = 0;
++ short *rhsp;
++ for (rhsp = rule->rhs; *rhsp >= 0; ++rhsp)
++ ++res;
++ return res;
++}
++
++
+ /*------------------------.
+ | Dump RITEM for traces. |
+ `------------------------*/
+@@ -76,23 +121,15 @@
+ size_t
+ ritem_longest_rhs (void)
+ {
+- int length;
+- int max;
++ int max = 0;
+ int i;
+
+- length = 0;
+- max = 0;
+- for (i = 0; i < nritems; ++i)
+- if (ritem[i] >= 0)
+- {
+- length++;
+- }
+- else
+- {
+- if (length > max)
+- max = length;
+- length = 0;
+- }
++ for (i = 1; i < nrules + 1; ++i)
++ {
++ int length = rule_rhs_length (&rules[i]);
++ if (length > max)
++ max = length;
++ }
+
+ return max;
+ }
+diff -x *.po -ur -x testsuite bison-1.49a/src/gram.h bison/src/gram.h
+--- bison-1.49a/src/gram.h Sun Apr 7 17:55:00 2002
++++ bison/src/gram.h Sun Apr 7 18:19:39 2002
+@@ -124,6 +124,10 @@
+
+ typedef struct rule_s
+ {
++ /* The number of the rule in the source. It is usually the index in
++ RULES too, except if there are useless rules. */
++ short number;
++
+ short lhs;
+ short *rhs;
+ short prec;
+@@ -166,6 +170,11 @@
+
+ extern int error_token_number;
+
++/* Swap two rules. */
++void rules_swap PARAMS ((int r1, int r2));
++
++/* Report the length of the RHS. */
++int rule_rhs_length PARAMS ((rule_t *rule));
+
+ /* Dump RITEM for traces. */
+ void ritem_print PARAMS ((FILE *out));
+diff -x *.po -ur -x testsuite bison-1.49a/src/print.c bison/src/print.c
+--- bison-1.49a/src/print.c Sun Apr 7 17:55:00 2002
++++ bison/src/print.c Sun Apr 7 18:19:39 2002
+@@ -366,19 +366,17 @@
+ fprintf (out, "%s\n\n", _("Grammar"));
+ fprintf (out, " %s\n", _("Number, Line, Rule"));
+ for (i = 1; i < nrules + 1; i++)
+- /* Don't print rules disabled in reduce_grammar_tables. */
+- if (rules[i].useful)
+- {
+- fprintf (out, _(" %3d %3d %s ->"),
+- i - 1, rules[i].line, escape (symbols[rules[i].lhs]->tag));
+- rule = rules[i].rhs;
+- if (*rule >= 0)
+- while (*rule >= 0)
+- fprintf (out, " %s", escape (symbols[*rule++]->tag));
+- else
+- fprintf (out, " /* %s */", _("empty"));
+- fputc ('\n', out);
+- }
++ {
++ fprintf (out, _(" %3d %3d %s ->"),
++ i - 1, rules[i].line, escape (symbols[rules[i].lhs]->tag));
++ rule = rules[i].rhs;
++ if (*rule >= 0)
++ while (*rule >= 0)
++ fprintf (out, " %s", escape (symbols[*rule++]->tag));
++ else
++ fprintf (out, " /* %s */", _("empty"));
++ fputc ('\n', out);
++ }
+ fputs ("\n\n", out);
+
+
+diff -x *.po -ur -x testsuite bison-1.49a/src/reader.c bison/src/reader.c
+--- bison-1.49a/src/reader.c Sun Apr 7 17:56:13 2002
++++ bison/src/reader.c Sun Apr 7 18:19:39 2002
+@@ -1687,6 +1687,7 @@
+ while (p)
+ {
+ bucket *ruleprec = p->ruleprec;
++ rules[ruleno].number = ruleno;
+ rules[ruleno].lhs = p->sym->number;
+ rules[ruleno].rhs = ritem + itemno;
+ rules[ruleno].line = p->line;
+diff -x *.po -ur -x testsuite bison-1.49a/src/reduce.c bison/src/reduce.c
+--- bison-1.49a/src/reduce.c Sun Apr 7 17:55:00 2002
++++ bison/src/reduce.c Sun Apr 7 18:19:39 2002
+@@ -220,70 +220,59 @@
+ bitset_set (V1, rules[i].precsym);
+ }
+
++
++/*-------------------------------------------------------------------.
++| Put the useless productions at the end of RULES, and adjust NRULES |
++| accordingly. |
++`-------------------------------------------------------------------*/
++
+ static void
+ reduce_grammar_tables (void)
+ {
+- /* This is turned off because we would need to change the numbers in
+- the case statements in the actions file.
+-
+- We don't disable it via CPP so that it is still checked with the
+- rest of the code, to avoid its becoming completely obsolete.
+-
+- FIXME: I think the comment above demonstrates this code must be
+- turned off for *semantic* parser, not in the general case. Try
+- to understand this better --akim. */
+-
+- if (0)
+- /* remove useless productions */
+- if (nuseless_productions > 0)
+- {
+- short np, pn, ni, pi;
+-
+- np = 0;
+- ni = 0;
+- for (pn = 1; pn < nrules + 1; pn++)
+- if (bitset_test (P, pn))
+- {
+- np++;
+- if (pn != np)
+- {
+- rules[np].lhs = rules[pn].lhs;
+- rules[np].line = rules[pn].line;
+- rules[np].prec = rules[pn].prec;
+- rules[np].assoc = rules[pn].assoc;
+- rules[np].rhs = rules[pn].rhs;
+- if (rules[np].rhs - ritem != ni)
+- {
+- pi = rules[np].rhs - ritem;
+- rules[np].rhs = ritem + ni;
+- while (ritem[pi] >= 0)
+- ritem[ni++] = ritem[pi++];
+- ritem[ni++] = -np;
+- }
+- }
+- else
+- {
+- while (ritem[ni++] >= 0)
+- /* Nothing. */;
+- }
+- }
+-
+- ritem[ni] = 0;
+- nrules -= nuseless_productions;
+- nitems = ni;
+- nritems = ni;
+-
+- /* Is it worth it to reduce the amount of memory for the
+- grammar? Probably not. */
+- }
+-
+- /* Disable useless productions. */
++ /* Flag useless productions. */
+ if (nuseless_productions > 0)
+ {
+ int pn;
+ for (pn = 1; pn < nrules + 1; pn++)
+ rules[pn].useful = bitset_test (P, pn);
+ }
++
++ /* Map the nonterminals to their new index: useful first, useless
++ afterwards. Kept for later report. */
++ if (nuseless_productions > 0)
++ {
++ short *map = XCALLOC (short, nrules + 1) - 1;
++ int useful = 1;
++ int useless = nrules + 1 - nuseless_productions;
++ int i;
++ for (i = 1; i < nrules + 1; ++i)
++ map[i] = rules[i].useful ? useful++ : useless++;
++
++ /* Shuffle elements of tables indexed by symbol number. */
++ for (i = 1; i < nrules + 1; ++i)
++ if (i != map[i])
++ {
++ int j = map[i];
++ rules_swap (i, map[i]);
++ map[i] = map[j];
++ map[j] = j;
++ }
++
++ free (map + 1);
++ nrules -= nuseless_productions;
++ }
++
++ /* Adjust NRITEMS and NITEMS. */
++ {
++ int r;
++ int length;
++ for (r = nrules + 1; r < nrules + 1 + nuseless_productions; ++r)
++ {
++ length = rule_rhs_length (&rules[r]);
++ nritems -= length + 1;
++ nitems -= length + 1;
++ }
++ }
+ }
+
+
+@@ -378,16 +367,15 @@
+ {
+ int i;
+ fprintf (out, "%s\n\n", _("Useless rules:"));
+- for (i = 1; i < nrules + 1; i++)
+- if (!rules[i].useful)
+- {
+- rule r;
+- fprintf (out, "#%-4d ", i - 1);
+- fprintf (out, "%s:", symbols[rules[i].lhs]->tag);
+- for (r = rules[i].rhs; *r >= 0; r++)
+- fprintf (out, " %s", symbols[*r]->tag);
+- fputs (";\n", out);
+- }
++ for (i = nrules + 1; i < nuseless_productions + nrules + 1; i++)
++ {
++ rule r;
++ fprintf (out, "#%-4d ", rules[i].number - 1);
++ fprintf (out, "%s:", symbols[rules[i].lhs]->tag);
++ for (r = rules[i].rhs; *r >= 0; r++)
++ fprintf (out, " %s", symbols[*r]->tag);
++ fputs (";\n", out);
++ }
+ fputs ("\n\n", out);
+ }
+ }
+@@ -411,7 +399,7 @@
+ fprintf (out, "\n\n");
+ fprintf (out, "Rules\n-----\n\n");
+ fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
+- for (i = 1; i < nrules + 1; i++)
++ for (i = 1; i < nrules + nuseless_productions + 1; i++)
+ {
+ int rhs_count = 0;
+ /* Find the last RHS index in ritems. */
+@@ -429,7 +417,7 @@
+ }
+ fprintf (out, "\n\n");
+ fprintf (out, "Rules interpreted\n-----------------\n\n");
+- for (i = 1; i < nrules + 1; i++)
++ for (i = 1; i < nrules + nuseless_productions + 1; i++)
+ {
+ fprintf (out, "%-5d %s :", i, symbols[rules[i].lhs]->tag);
+ for (r = rules[i].rhs; *r >= 0; r++)
+diff -x *.po -ur -x testsuite bison-1.49a/tests/reduce.at bison/tests/reduce.at
+--- bison-1.49a/tests/reduce.at Sun Apr 7 17:36:56 2002
++++ bison/tests/reduce.at Sun Apr 7 18:19:39 2002
+@@ -174,6 +174,89 @@
+
+
+ ## ------------------- ##
++## Reduced Automaton. ##
++## ------------------- ##
++
++# Check that the automaton is that as the for the grammar reduced by
++# hand.
++
++AT_SETUP([Reduced Automaton])
++
++# The non reduced grammar.
++# ------------------------
++AT_DATA([[not-reduced.y]],
++[[/* A useless token. */
++%token useless_token
++/* A useful one. */
++%token useful
++%verbose
++%output="not-reduced.c"
++
++%%
++
++exp: useful { /* A useful action. */ }
++ | non_productive { /* A non productive action. */ }
++ ;
++
++not_reachable: useful { /* A not reachable action. */ }
++ ;
++
++non_productive: non_productive useless_token
++ { /* Another non productive action. */ }
++ ;
++]])
++
++AT_CHECK([[bison not-reduced.y]], 0, [],
++[[not-reduced.y contains 2 useless nonterminals and 3 useless rules
++]])
++
++AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' not-reduced.output]], 0,
++[[Useless nonterminals:
++ not_reachable
++ non_productive
++Terminals which are not used:
++ useless_token
++Useless rules:
++#2 exp: non_productive;
++#3 not_reachable: useful;
++#4 non_productive: non_productive useless_token;
++]])
++
++# The reduced grammar.
++# --------------------
++AT_DATA([[reduced.y]],
++[[/* A useless token. */
++%token useless_token
++/* A useful one. */
++%token useful
++%verbose
++%output="reduced.c"
++
++%%
++
++exp: useful { /* A useful action. */ }
++// | non_productive { /* A non productive action. */ } */
++ ;
++
++//not_reachable: useful { /* A not reachable action. */ }
++// ;
++
++//non_productive: non_productive useless_token
++// { /* Another non productive action. */ }
++// ;
++]])
++
++AT_CHECK([[bison reduced.y]])
++
++# Comparing the parsers.
++cp reduced.c expout
++AT_CHECK([sed 's/not-reduced/reduced/g' not-reduced.c], 0, [expout])
++
++AT_CLEANUP
++
++
++
++## ------------------- ##
+ ## Underivable Rules. ##
+ ## ------------------- ##
+
+2002-04-07 Akim Demaille <akim@epita.fr>
+
+ * src/reduce.c (inaccessable_symbols): Fix a buglet: because of a
+ lacking `+ 1' to nrules, Bison reported as useless a token if it
+ was used solely to set the precedence of the last rule...
+
+
+2002-04-07 Akim Demaille <akim@epita.fr>
+
+ * data/bison.c++, data/bison.simple: Don't output the current file
+ name in #line, to avoid useless diffs between two identical
+ outputs under different names.
+
+
+2002-04-07 Akim Demaille <akim@epita.fr>
+
+ * src/closure.c, src/print.c, src/reader.c, src/reduce.c:
+ Normalize loops to using `< nrules + 1', not `<= nrules'.
+
+
+2002-04-07 Akim Demaille <akim@epita.fr>
+
+ * TODO: Update.
+
+
+2002-04-07 Akim Demaille <akim@epita.fr>
+
+ * src/output.c, src/reader.c, src/symtab.c, src/symtab.h: Rename
+ bucket.value as bucket.number.
+
+
+2002-04-07 Akim Demaille <akim@epita.fr>
+
+ * src/closure.c, src/derives.c, src/gram.h, src/lalr.c,
+ * src/nullable.c, src/output.c, src/print.c, src/print_graph.c,
+ * src/reader.c, src/reduce.c: Let rule_t.rhs point directly to the
+ RHS, instead of being an index in RITEMS.
+
+2002-04-04 Paul Eggert <eggert@twinsun.com>
+
+ * doc/bison.texinfo: Update copyright date.
+ (Rpcalc Lexer, Symbols, Token Decl): Don't assume ASCII.
+ (Symbols): Warn about running Bison in one character set,
+ but compiling and/or running in an incompatible one.
+ Warn about character code 256, too.
+
+2002-04-03 Paul Eggert <eggert@twinsun.com>
+
+ * src/bison.data (YYSTACK_ALLOC): Depend on whether
+ YYERROR_VERBOSE is nonzero, not whether it is defined.
+
+ Merge changes from bison-1_29-branch.
+
+2002-03-20 Paul Eggert <eggert@twinsun.com>
+
+ Merge fixes from Debian bison_1.34-1.diff.
+
+ * configure.in (AC_PREREQ): 2.53.
+
+2002-03-20 Akim Demaille <akim@epita.fr>
+
+ * src/conflicts.c (log_resolution): Argument `resolution' is const.
+
+2002-03-19 Paul Eggert <eggert@twinsun.com>
+
+ * src/bison.simple (YYCOPY): New macro.
+ (YYSTACK_RELOCATE): Use it.
+ Remove Type arg; no longer needed. All callers changed.
+ (yymemcpy): Remove; no longer needed.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): 1.6.
+ * doc/Makefile.am (AUTOMAKE_OPTIONS): Remove.
+
+2002-03-19 Akim Demaille <akim@epita.fr>
+
+ Test and fix the #line outputs.
+
+ * tests/atlocal.at (GCC): New.
+ * tests/synclines.at (AT_TEST_SYNCLINE): New macro.
+ (Prologue synch line, ,%union synch line, Postprologue synch line)
+ (Action synch line, Epilogue synch line): New tests.
+ * src/reader.c (parse_union_decl): Define the muscle stype_line.
+ * data/bison.simple, data/bison.c++: Use it.
+
+
+2002-03-19 Akim Demaille <akim@epita.fr>
+
+ * tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts)
+ (Solved SR Conflicts, %expect not enough, %expect right)
+ (%expect too much): Move to...
+ * tests/conflicts.at: this new file.
+
+2002-03-19 Akim Demaille <akim@epita.fr>
+
+ * data/m4sugar/m4sugar.m4: Update from CVS Autoconf.
+ * data/bison.simple, data/bison.c++: Handle the `#define' part, so
+ that we can move to enums for instance.
+ * src/output.c (token_definitions_output): Output a list of
+ `token-name, token-number' instead of the #define.
+ (output_skeleton): Name this list `b4_tokens', not `b4_tokendefs'.
+
+2002-03-14 Akim Demaille <akim@epita.fr>
+
+ Use Gettext 0.11.1.
+
+2002-03-09 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++: Make the user able to add members to the generated
+ parser by subclassing.
+
+2002-03-05 Robert Anisko <robert@lrde.epita.fr>
+
+ * src/reader.c (read_additionnal_code): `c' should be an integer, not
+ a character.
+ Reported by Nicolas Tisserand and Nicolas Burrus.
+
+2002-03-04 Robert Anisko <robert@lrde.epita.fr>
+
+ * src/reader.c: Warn about lacking semi-colons, do not complain.
+
+2002-03-04 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++: Remove a debug line.
+
+2002-03-04 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++: Unmerge value as yylval and value as yyval. Unmerge
+ location as yylloc and location as yyloc. Use YYLLOC_DEFAULT, and
+ provide a default implementation.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * tests/input.at (Invalid $n, Invalid @n): Add the ending `;'.
+ * tests/output.at (AT_CHECK_OUTPUT): Likewise.
+ * tests/headers.at (AT_TEST_CPP_GUARD_H): Ditto.
+ * tests/semantic.at (Parsing Guards): Similarly.
+ * src/reader.at (readgram): Complain if the last rule is not ended
+ with a semi-colon.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/warshall.h, src/warshall.c (bitmatrix_print): Move to...
+ * src/closure.c: here.
+ (set_firsts): Use bitsetv_reflexive_transitive_closure instead of
+ RTC.
+ * src/warshall.h, src/warshall.c: Remove.
+ * tests/sets.at (Broken Closure): Adjust.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/output.c (output_skeleton): tempdir is const.
+ bytes_read is unused.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * lib/bbitset.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
+ * lib/bitsetv.h, lib/ebitset.c, lib/lbitset.c, lib/sbitset.c:
+ Update.
+ From Michael Hayes.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/closure.c (closure): `r' is unused.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * tests/sets.at (Broken Closure): Add the ending `;'.
+ * src/reader.at (readgram): Complain if a rule is not ended with a
+ semi-colon.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/conflicts.c (set_conflicts): Use bitset_disjoint_p.
+ (count_sr_conflicts): Use bitset_count.
+ * src/reduce.c (inaccessable_symbols): Ditto.
+ (bits_size): Remove.
+ * src/warshall.h, src/warshall.c: Convert to bitsetv.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/closure.c, src/conflicts.c, src/lalr.c, src/print.c,
+ * src/reduce.c: Remove the `bitset_zero's following the
+ `bitset_create's, as now it is performed by the latter.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * lib/bitset.c, lib/bitset.h, lib/bitsetv.c, lib/bitsetv.h,
+ * lib/ebitset.c, lib/ebitset.h, lib/lbitset.c, lib/lbitset.h,
+ * lib/sbitset.c, lib/sbitset.h, lib/bbitset.h: Update from the
+ latest sources from Michael.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/output.c (output): Don't free the grammar.
+ * src/reader.c (grammar_free): New.
+ * src/main.c (main): Call it and don't free symtab here.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/lex.c (parse_percent_token): Be sure to 0-end token_buffer
+ before returning.
+ Reported by Benoit Perrot.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ Use bitset operations when possible, not loops over bits.
+
+ * src/conflicts.c (set_conflicts, count_sr_conflicts): Use
+ bitset_or.
+ * src/print.c (print_reductions): Use bitset_and, bitset_andn.
+ * src/reduce.c (useless_nonterminals): Formatting changes.
+ * src/warshall.c (TC): Use bitset_or.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/lalr.h, src/lalr.c (tokensetsize): Remove, unused.
+ * src/system.h (BITS_PER_WORD, WORDSIZE, SETBIT, RESETBIT, BITISSET):
+ Ditto.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/lalr.c (F): Now a bitset*.
+ Adjust all dependencies.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/conflicts.c (shiftset, lookaheadset): Now bitset.
+ Adjust all dependencies.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/L0.c, src/LR0.h (nstates): Be size_t.
+ Adjust comparisons (signed vs unsigned).
+ * src/conflics.c, src/lalr.c, src/lalr.h, src/output.c (LA): Now a
+ bitset*.
+ Adjust all dependencies.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/closure.c (firsts): Now, also a bitset.
+ Adjust all dependencies.
+ (varsetsize): Remove, now unused.
+ * src/warshall.h, src/warshall.c: Now work on arrays of bitsets.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/print.c: Convert to use bitset.h, not hand coded iterations
+ over ints.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/reduce.c: Convert to use bitset.h, not hand coded BSet.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * src/closure.c (ruleset): Be a bitset.
+ (rulesetsize): Remove.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * lib/bitset-int.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
+ * lib/bitsetv.h, lib/ebitset.c, lib/ebitset.h, lib/lbitset.c,
+ * lib/lbitset.h, lib/sbitset.c, lib/sbitset.h: New.
+ * src/closure.c (fderives): Be an array of bitsets.
+
+2002-02-28 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++: Merge the two generated headers. Insert a copyright
+ notice in each output file.
+
+2002-02-28 Akim Demaille <akim@epita.fr>
+
+ * data/bison.c++: Copy the prologue of bison.simple to fetch
+ useful M4 definitions, such as b4_header_guard.
+
+2002-02-25 Akim Demaille <akim@epita.fr>
+
+ * src/getargs.c (version): Give the name of the authors, and use a
+ translator friendly scheme for the bgr
+ copyright notice.
+
+2002-02-25 Akim Demaille <akim@epita.fr>
+
+ * src/output.c (header_output): Remove, now handled completely via
+ M4.
+
+2002-02-25 Akim Demaille <akim@epita.fr>
+
+ * m4/m4.m4: New, from CVS Autoconf.
+ * configure.in: Invoke it.
+ * src/output.c (output_skeleton): Use its result instead of the
+ hard coded name.
+
+2002-02-25 Akim Demaille <akim@epita.fr>
+
+ * lib/tempname.c, lib/mkstemp.c, m4/mkstemp.m4: New, stolen from
+ Fileutils 4.1.5.
+ * configure.in: Invoke UTILS_FUNC_MKSTEMP.
+ * src/output.c (output_skeleton): Use mkstemp to create a real
+ temporary file.
+ Move the filling of `skeleton' and its muscle to...
+ (prepare): here.
+ (output): Move the definition of the prologue muscle to...
+ (prepare): here.
+ * src/system.h (DEFAULT_TMPDIR): New.
+
+2002-02-14 Paul Eggert <eggert@twinsun.com>
+
+ Remove the support for C++ namespace cleanliness; it was
+ causing more problems than it was curing, since it didn't work
+ properly on some nonstandard C++ compilers. This can wait
+ for a proper C++ parser.
+
+ * NEWS: Document this.
+ * doc/bison.texinfo (Bison Parser, Debugging): Remove special mention
+ of C++, as it's treated like C now.
+ * src/bison.simple (YYSTD): Remove.
+ (YYSIZE_T, YYFPRINTF, YYPARSE_PARAM_ARG, YYPARSE_PARAM_DECL):
+ Treat C++ just like Standard C instead of trying to support
+ namespace cleanliness.
+
+2002-02-14 Akim Demaille <akim@epita.fr>
+
+ * tests/regression.at (else): Adjust to Andreas' change.
+
+2002-02-14 Akim Demaille <akim@epita.fr>
+
+ * lib/Makefile.am (EXTRA_DIST): Ship strnlen.c.
+
+2002-02-13 Andreas Schwab <schwab@suse.de>
+
+ * src/output.c (output_rule_data): Don't output NULL, it might
+ not be defined yet.
+
+2002-02-11 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++ (YYDEBUG, YYERROR_VERBOSE): After the prologue.
+ (Copyright notice): Update.
+
+2002-02-11 Akim Demaille <akim@epita.fr>
+
+ * tests/regression.at (%nonassoc and eof): Don't include
+ nonportable headers.
+
+2002-02-08 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++: Correct error recovery. Make the user able to
+ initialize the starting location.
+
+2002-02-07 Akim Demaille <akim@epita.fr>
+
+ * tests/input.at: New.
+
+2002-02-07 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++: Replace some direct m4 expansions by constants. Be
+ more consistent when naming methods and variables. Put preprocessor
+ directives around tables only needed for debugging.
+
+2002-02-07 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++ (yy::b4_name::print_): New method, replaces yyprint in
+ C++ parsers.
+ (yy::b4_name::parse): Use print_.
+
+2002-02-07 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++ (yy::b4_name::parse): Error recovery is back.
+
+2002-02-07 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++ (yy::b4_name::error_): New method, replaces yyerror in
+ C++ parsers.
+ (yy::b4_name::parse): Build verbose error messages, and use error_.
+
+2002-02-06 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++: Fix m4 quoting in comments.
+
+2002-02-06 Robert Anisko <robert@lrde.epita.fr>
+
+ * data/bison.c++: Adjust the parser code. Fix some muscles that were
+ not expanded by m4.
+
2002-02-05 Akim Demaille <akim@epita.fr>
* data/bison.c++: Adjust to the M4 back end.