]> git.saurik.com Git - bison.git/blobdiff - ChangeLog
doc: update README-hacking.
[bison.git] / ChangeLog
index 707aad9de9fefc1f7b7edf2da50a05c67585c354..52342a1365990a9b4cc2f4d383679237bfb1487a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,926 @@
+2009-03-26  Akim Demaille  <demaille@gostai.com>
+
+       doc: update README-hacking.
+       * README-hacking: We now use git and git submodules.
+       Reported by Ralf Wildenhues and Alexandre Duret-Lutz.
+
+2009-03-26  Akim Demaille  <demaille@gostai.com>
+
+       lalr1.cc: avoid GCC 4.3 warnings.
+       GCC 4.3 now warns about "a || b && c" and asks for explicit
+       parentheses.
+       Reported by Alexandre Duret-Lutz.
+       * data/location.cc: Update copyright years.
+       (Position::operator==): Use parens to make precedence explicit.
+       Compare lines and columns first, as they are more likely to be
+       different, and they are faster to compare.
+
+2009-03-26  Akim Demaille  <demaille@gostai.com>
+
+       gnulib: update.
+       * gnulib: Update to latest.
+       * src/local.mk (AM_CFLAGS): Move to...
+       * Makefile.am: here.
+       * etc/prefix-gnulib-mk (prefix_assignment): Also transform
+       AM_CFLAGS.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       Share b4_yytranslate_define.
+       * data/lalr1.cc (b4_yytranslate_define): Move to...
+       * data/c++.m4: here.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       Use locations in the variant example.
+       Yes, this obfuscates the point of this example, variants only.  But glr.cc
+       cannot work (yet?) without locations.  This change makes it easier to use
+       this example with glr.cc.
+
+       * examples/variant.yy (assert): %define it.
+       (locations): Request them.
+       (yylex): Bind the location to the stage.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       Dub make_TOKEN as a public type interface.
+       * data/c++.m4 (b4_symbol_constructor_declare)
+       (b4_symbol_constructor_define): New empty stubs.
+       (b4_public_types_declare, b4_public_types_define): Use them.
+       * data/lalr1.cc (b4_symbol_constructor_declare)
+       (b4_symbol_constructor_declare_)
+       (b4_symbol_constructor_define_, b4_symbol_constructor_define):
+       Move to...
+       * data/variant.hh: here.
+       Remove the "b4_variant_if" parts, as variant.hh is loaded only if
+       needed.
+       * data/lalr1.cc: No longer invoke b4_symbol_constructor_define and
+       b4_symbol_constructor_declare, as it is now done by
+       b4_public_types_define and b4_public_types_declare.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       Coding style changes.
+       * data/lalr1.cc (b4_symbol_constructor_declaration_)
+       (b4_symbol_constructor_declarations)
+       (b4_symbol_constructor_definition_)
+       (b4_symbol_constructor_definitions)
+       (b4_yytranslate_definition): Rename as...
+       (b4_symbol_constructor_declare_)
+       (b4_symbol_constructor_declare)
+       (b4_symbol_constructor_define_)
+       (b4_symbol_constructor_define)
+       (b4_yytranslate_define): these.
+       * data/variant.hh (b4_variant_definition): Rename as...
+       (b4_variant_define): this.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       Factor b4_assert_if, b4_lex_symbol_if, and b4_variant_if.
+       * data/bison.m4 (b4_percent_define_if_define): New.
+       * data/c++.m4 (b4_variant_if): Move to...
+       * data/bison.m4: Here, using b4_percent_define_if_define.
+       * data/lalr1.cc (b4_assert_if, b4_lex_symbol_if): Move to...
+       * data/bison.m4: Here, using b4_percent_define_if_define.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       Dub symbol_type_base as a public type.
+       * data/c++.m4 (b4_public_types_declare): Now define
+       symbol_type_base and symbol_type.
+       (b4_public_types_define): New.
+       In both cases, the definitions are taken verbatim from lalr1.cc.
+       * data/lalr1.cc: Adjust.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       b4_public_types_declare.
+       * data/c++.m4 (b4_public_types_declare): New.
+       * data/glr.cc, data/lalr1.cc: Use it.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+       b4_semantic_type_declare.
+       * data/c++.m4 (b4_semantic_type_declare): New.
+       Factors and generalizes what was in glr.cc and lalr1.cc.
+       * data/variant.hh (b4_semantic_type_declare): Redefine it for
+       variants.
+       * data/lalr1.cc, data/glr.cc: Use it.
+
+2009-02-26  Akim Demaille  <demaille@gostai.com>
+
+       Upgrade gnulib.
+       * gnulib: Upgrade from master.
+       * lib/.cvsignore, lib/.gitignore, m4/.cvsignore, m4/.gitignore:
+       Regen.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+       Remove useless arguments.
+       * data/glr.c (yy_reduce_print): $$ and @$ are not used and not
+       relevant.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+       * data/lalr1.cc: here.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+       Fix glr.cc's debug level handling.
+       * data/glr.cc (yydebug_): Remove, as it is actually yydebug from
+       glr.c which is used.
+       (debug_level, set_debug_level): Adjust.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+       Copyright years.
+       * data/glr.c: Add 2007 and 2008 here, consistenly with the comments.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+       Style changes.
+       * etc/bench.pl.in (generate_grammar_list): Consitently use
+       location_type, not yy::location.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+       Comment change.
+       * data/lalr1.cc: here.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+       Make yyparser::error public.
+       * data/lalr1.cc: here.
+       There is no good reason to keep it private (and it is convenient
+       to use it from the scanner for instance).  It is already public in
+       glr.cc.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+       * data/glr.cc: here.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+       Remove trailing blanks.
+       The epilogue has its own ending \n, no need to add another.
+
+       * data/glr.c, data/lalr1.java, data/yacc.c: dnl when outputing the
+       epilogue.
+       * data/glr.cc: dnl when extending the epilogue.
+       Remove stray "private:".
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+       Use b4_c_modern.
+       * data/c.m4 (b4_c_function_decl): Here.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+       * data/lalr1.cc: here.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+       Extract variant.hh
+       * data/variant.hh: New, extracted from...
+       * data/lalr1.cc: here.
+       Adjust.
+       * data/local.mk: Adjust.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+       Extract stack.hh from lalr1.cc.
+       * data/stack.hh: New.
+       * data/lalr1.cc: Extract from here.
+       * data/local.mk: Adjust.
+
+2009-02-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Add reminder about uploading public key to keys.gnupg.net.
+       * HACKING (Release Procedure): Here.
+
+2009-01-28  Akim Demaille  <demaille@gostai.com>
+
+       * NEWS: Update information about 2.4.1 and 2.4.2.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+       Reformat NEWS.
+       * NEWS: Use more outline-mode markup.
+       Suggested by Jim Meyering.
+
+2009-01-08  Akim Demaille  <demaille@gostai.com>
+
+       Fix grep portability issues.
+       Grep on Solaris does not support -q.
+       Reported by Summum Bonum.
+
+       * NEWS: Add a stub for 2.4.2.
+       * THANKS: Add Summum Bonum.
+       * tests/atlocal.in (EGREP): New.
+       (CC, CXX, XSLTPROC): Make it possible to override them via
+       envvars.
+       * tests/java.at: Use $EGREP instead of egrep.
+       Use AT_CHECK's ignore instead of grep's -q.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+       Pass the token type to yysyntax_error.
+       * data/yacc.c (yysyntax_error): Take the transated token instead
+       of the raw number.
+       Adjust callers.
+       * TODO: Update.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+       Formatting changes.
+       * data/glr.c: Formatting changes.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+       Propagate i18n changes into glr.c.
+       * TODO: Update.
+       * data/glr.c (yyreportSyntaxError): Use "switch" instead of
+       building the error message format dynamically.
+       * data/lalr1.java: Formatting changes.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+       Use testsuite -C.
+       * tests/local.mk: Replace "cd && testsuite" by "testsuite -C".
+       Solves problems when top_srcdir is an absolute path.
+       Suggested by Eric Blake.
+       * configure.ac: Require Autoconf 2.62.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+       Simplify the i18n of the error messages.
+       * data/lalr1.cc: Comment changes.
+       * data/yacc.c (yysyntax_error): Rewrite, using a switch as in
+       lalr1.cc instead of building dynamically the format string.
+
+2008-12-08  Akim Demaille  <demaille@gostai.com>
+
+       Fix portability issue in the test suite.
+       * tests/local.at (AT_MATCHES_CHECK): New.
+       Based on Perl instead of Sed.  Sed has too many portability
+       pitfalls, not ever Sed is GNU Sed.
+       * tests/actions.at (Fix user actions without a trailing semicolon):
+       Use it.
+
+2008-12-08  Akim Demaille  <demaille@gostai.com>
+
+       Update data/README.
+       * data/README: Document glr.cc, lalr1.java, m4sugar and xslt.
+
+2008-12-08  Akim Demaille  <demaille@gostai.com>
+
+       Install autoconf as a submodule to get m4sugar.
+       * .gitmodules: Add submodules/autoconf.
+       * data/m4sugar/foreach.m4, data/m4sugar/m4sugar.m4: Now links into
+       submodules/autoconf.
+
+2008-12-08  Akim Demaille  <demaille@gostai.com>
+
+       Test token.prefix in all the skeletons.
+       * data/java.m4 (b4_token_enum): Use the token.prefix.
+       * tests/local.at (AT_BISON_OPTION_PUSHDEFS): Define AT_TOKEN_PREFIX.
+       * tests/calc.at (_AT_DATA_CALC_Y): Use it.
+       Add checks for yacc.c, glr.c, lalr1.cc and glr.cc.
+       * tests/java.at: Comment changes.
+       (AT_CHECK_JAVA_MINIMAL): Define the END token.
+       (Java parser class and package names): Add token.prefix check.
+
+2008-12-08  Akim Demaille  <demaille@gostai.com>
+
+       Fix regeneration of atconfig.
+       * tests/local.mk (tests/atconfig): The rule was incorrect, but
+       remove it: now that there is no tests/Makefile.am, the top-level
+       Makefile properly updates atconfig when needed.
+
+2008-12-07  Di-an Jan  <dianj@freeshell.org>
+
+       Implement the FIXME that ends an user action with a semicolon
+       if it seems necessary.
+       * src/scan-code.l (flex rules section): Flag cpp directive from
+       any `#' to the first unescaped end-of-line.  Semicolon is not
+       needed after `;', `{', '}', or cpp directives and is needed after
+       any other token (whitespaces and comments have no effect).
+       * tests/actions.at (Fix user actions without a trailing semicolon):
+       New test.
+       * tests/input.at (AT_CHECK_UNUSED_VALUES): Add semicolons to
+       to make user actions complete statements.
+       Adjust column numbers in error messages.
+       * tests/regression.at (Fix user actions without a trailing semicolon):
+       Remove.  Covered by new test.
+
+2008-12-07  Akim Demaille  <demaille@gostai.com>
+
+       Update gnulib.
+       * gnulib: Update from master.
+
+2008-12-05  Eric Blake  <ebb9@byu.net>
+
+       Avoid compiler warning.
+       * src/output.c (muscle_insert_item_number_table): Delete unused
+       function.
+
+2008-12-02  Eric Blake  <ebb9@byu.net>
+
+       Build testsuite with newer autoconf.
+       * tests/output.at (m4_expand): Don't override in newer autoconf,
+       where the underlying implementation changed.
+       * tests/cxx-type.at (_AT_RESOLVED_GLR_OUTPUT)
+       (_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_AMBIG_GLR_OUTPUT)
+       (_AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
+       (_AT_VERBOSE_GLR_STDERR): Expand to double-quoted strings,
+       since some of them contain unbalanced ')'.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+       Use b4_symbol for printers and destructors everywhere.
+       * data/bison.m4 (b4_symbol_action_location): New.
+       * data/c.m4 (b4_symbol_actions): Remove.
+       Adjust all callers to use by b4_symbol_foreach and the corresponding
+       b4_symbol_printer/destructor macro.
+       * data/glr.cc: Adjust.
+       * data/lalr1.java: Adjust the %destructor sanity check.
+       * src/output.c (symbol_code_props_output): Remove, we no longer
+       need the b4_symbol_printers/destructors tables.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+       Use b4_symbol_case_.
+       * data/lalr1.cc, data/bison.m4 (b4_symbol_action): Use
+       b4_symbol_case_.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+       Move b4_symbol based macro to bison.m4.
+       * data/lalr1.cc (b4_symbol_, b4_symbol, b4_symbol_if)
+       (b4_symbol_action, b4_symbol_destructor, b4_symbol_printer)
+       (b4_symbol_case_, b4_symbol_foreach, b4_type_action_)
+       (b4_type_foreach): Move to...
+       * data/bison.m4: Here.
+       * data/lalr1.cc (b4_symbol_action): Specialize for C++: use
+       b4_symbol_value_template instead of b4_symbol_value.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+       b4_symbol/type_foreach.
+       * data/lalr1.cc (b4_symbol_foreach, b4_type_foreach): New.
+       Use them.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+       Use the symbol properties to output the printer/destructor for lalr1.cc.
+       Instead of defining complex list of tuples to define various
+       properties of the symbols, we now prefer to define symbols as
+       "structs" in m4: using the symbol key (its number), and the
+       property name, b4_symbol gives it value.  Use this to handle
+       destructors and printers.
+
+       * src/output.c (CODE_PROP): New.
+       (prepare_symbol_definitions): Use it to define the printer and
+       destructor related attributes of the symbols.
+       * data/lalr1.cc (b4_symbol_actions): Rename as...
+       (b4_symbol_action): this.
+       Use b4_symbol instead of 6 arguments.
+       (b4_symbol_printer, b4_symbol_destructor): New.
+       Use them instead of b4_symbol_actions.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+       Avoid capturing variables too easily.
+       * src/muscle_tab.h (MUSCLE_INSERT_BOOL, MUSCLE_OBSTACK_SGROW): Use
+       v__ and p__ instead of v and p.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+       Remove spurious empty line before syncline.
+       * data/bison.m4 (b4_syncline): Don't output an empty line before
+       the output.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Convert lib/Makefile.am into lib/local.mk.
+       The real problem is rather gnulib.mk, which itself is extracted
+       from a Makefile.am that gnulib expects to the "recursive".  The
+       tool prefix-gnulib-mk converts such a gnulib.mk to be
+       non-recursive.  Also, some AC_SUBST variables need to be adjusted.
+
+       * etc/prefix-gnulib-mk: New.
+       * bootstrap (slurp): Use it to convert further gnulib.mk.
+       No longer try to avoid re-creation of lib/gnulib.mk as the changes
+       are deeper.
+       * lib/Makefile.am: Rename as...
+       * lib/local.mk: this.
+       Adjust to be prefixed.
+       * Makefile.am, configure.ac: Adjust.
+       * src/local.mk (AM_CPPFLAGS): Extend it, don't define it.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       s/_FLAGS/FLAGS/.
+       * tests/local.mk (TESTSUITE_FLAGS, AUTOTEST_FLAGS): Rename as...
+       (TESTSUITEFLAGS, AUTOTESTFLAGS): these to compy with the GCS.
+       Reported by Eric Blake.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Use b4_parser_tables_define in glr.cc.
+       * data/glr.c: Use b4_parser_tables_define instead of defining the
+       (deterministic integral) tables by hand.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Use b4_parser_tables_define in Java.
+       * data/java.m4 (b4_typed_parser_table): Rename as...
+       (b4_typed_parser_table_define): this, for consistency.
+       Accept a comment as $4.
+       Move $2 into yy*_.
+       (b4_integral_parser_table): Rename as...
+       (b4_integral_parser_table_define): this.
+       * data/lalr1.java: Adjust all uses.
+       Use b4_parser_tables_define instead of generation by hand.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Prepare the convergence bw C style and Java table generation.
+       * data/bison.m4 (b4_tables_map, b4_tables_declare)
+       (b4_tables_define): Rename as...
+       (b4_integral_parser_tables_map, b4_parser_tables_declare)
+       (b4_parser_tables_define): these.
+       * data/c.m4 (b4_table_define): Rename as...
+       (b4_integral_parser_table_define): this.
+       * data/lalr1.cc: Adjust.
+       (b4_table_define, b4_table_declare): Rename as...
+       (b4_integral_parser_table_define)
+       (b4_integral_parser_table_declare): these.
+       (yyrline_): Move the comment where it is actually used.
+       * data/yacc.c: Adjust.
+       (yyrline): Use b4_integral_parser_table_define.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Regen.
+       * src/parse-gram.h, src/parse-gram.c: Regen.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Factor the generation of the (integral) tables bw yacc.c and lalr1.cc.
+       * data/lalr1.cc (b4_tables_map): Move to...
+       * data/bison.m4: here.
+       Update the comment for yytable during the flight.
+       (b4_tables_declare, b4_tables_define): New.
+       * data/lalr1.cc: Use them.
+       * data/c.m4 (b4_table_define): New.
+       * data/yacc.c: Use b4_tables_define instead of output the tables
+       by hand.
+       * tests/regression.at (Web2c Actions): Adjust the expected output,
+       the order of the tables changed.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Get rid of (yy)rhs and (yy)prhs.
+       These tables are no longer needed in the parsers, and they don't seem to
+       be useful.  They are not documented either.
+
+       * src/output.c (prepare_rules): Get rid of rhs and prhs.
+       Adjust the computation of (yy)r2.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Rule length is unsigned.
+       * src/gram.h, src/gram.c (rule_rhs_length): Return a size_t.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Get rid of lalr1-split.cc.
+       It was no longer maintainer.
+
+       * data/lalr1-split.cc: Remove.
+       * etc/bench.pl.in (bench_fusion_parser): Remove.
+       Adjust.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+       Use yy* consistently.
+       * data/glr.c: Now that yyrhs no longer exists as a global
+       variable, rename local "rhs" variables into "yyrhs" for
+       consistency.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       Get rid of yyrhs and yyprhs in glr.c.
+       * data/glr.c (yyrhs, yyprhs): Remove.
+       Instead, use the state stack and yystos.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       Flag glr tests.
+       * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): If glr, declare it
+       as an Autotest keyword.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       Prefer TESTSUITE_FLAGS.
+       TESTSUITEFLAGS is barely readable.
+
+       * tests/local.mk (TESTSUITE_FLAGS): Default to $(TESTSUITEFLAGS)
+       for backward compatibility.
+       Use the former instead of the latter.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       Get rid of yyrhs and yyprhs in larl1.java.
+       * data/lalr1.java (yyrhs_, yyprhs_): Remove.
+       (yy_reduce_print): Rather, use yystos_ and the state stack.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       Formatting changes.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       Get rid of yyrhs and yyprhs in yacc.c.
+       They were used to get the symbol types, given a rule number, when
+       displaying the top of the stack before a reduction.  But the
+       symbol type is available from the state stack.  This has two be
+       benefits: two tables less in the parser (making it smaller), and a
+       more consistent use of the three stacks which will help to fuse
+       them.
+
+       * data/yacc.c (yyprhs, yyrhs): Remove.
+       (YY_REDUCE_PRINT): Pass yyssp to yy_reduce_print.
+       (yy_reduce_print): Take yyssp as argument.
+       Use it, together with yystos, to get the symbol type.
+       * tests/regression.at (Web2c Report): Remove these tables from the
+       expected output.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       b4_tables_map.
+       The point is to factor the generation of the tables across skeletons.
+       This is language dependant.
+
+       * data/c.m4 (b4_comment_): New.
+       Should be usable to define how to generate tables independently of
+       the language.
+       (b4_c_comment): New.
+       (b4_comment): Bounce to b4_c_comment.
+       Now support $2 = [PREFIX] for indentation.
+       * data/lalr1.cc (b4_table_declare): Don't output a comment if
+       there is no comment.
+       Indent it properly when there is one.
+       Output the ending semicolon.
+       (b4_table_define): Space changes.
+       Output the ending semicolon.
+       (b4_tables_map): New.
+       Use it twice instead of declaring and defining the (integral)
+       tables by hand.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       b4_table_declare.
+       * data/lalr1.cc (b4_table_declare): New.
+       Use it to declare the tables defined with b4_table_define.
+       (b4_table_define): Declare a third arg to match b4_table_declare
+       signature.
+       Move all the comments around invocations of b4_table_define into
+       the invocations itselves.
+       Move things around to have the order for declarations and
+       definitions.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       Formatting changes.
+       * data/lalr1.java: here.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+       b4_args is more general than only C++.
+       * data/lalr1.cc (b4_args, _b4_args): Move to...
+       * data/bison.m4: here.
+
+2008-11-21  Di-an Jan  <dianj@freeshell.org>
+
+       Implement no-XXX arguments for --warnings, --report, --trace.
+       * src/getargs.c (flags_argmatch): Handles no-XXX.
+       Fix typo in doxygen comment.
+
+2008-11-21  Akim Demaille  <demaille@gostai.com>
+
+       Display the changes in cross-options.texi.
+       * build-aux/cross-options.pl ($sep): New, to separate items.
+       * doc/local.mk ($(CROSS_OPTIONS_TEXI)): Use diff to display the
+       changes.
+
+2008-11-20  Di-an Jan  <dianj@freeshell.org>
+
+       Improves options in the manual.
+       * doc/bison.texinfo (-g, -x): Add space before argument.
+       (Option Cross Key): Implement FIXME: listing directives also.
+       * build-aux/cross-options.pl:  Read from <STDIN> rather than <>.
+       (Short Option): Special case -d.  Put arguments inside @option.
+       (Bison Directive): Add column, automatically extracted from
+       src/scan-gram.l (actual name passed as the first argument)
+       with special case for %define.
+       * doc/local.mk (doc/cross-options.texi): Pass src/scan-gram.l
+       to build-aux/cross-options.pl.
+       * src/getargs.c (usage): Document limitations of cross-options.pl.
+       * src/scan-gram.l: Likewise.
+
+2008-11-18  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Fix unexpanded macros in GLR defines file.
+       Reported by Csaba Raduly at
+       <http://lists.gnu.org/archive/html/bug-bison/2008-11/msg00048.html>.
+       * THANKS (Csaba Raduly): Add.
+       * data/glr.c: Fix overquoting on b4_prefix for yylval and yylloc.
+       * tests/calc.at (_AT_DATA_CALC_Y): If %defines is specified, generate
+       lexer in a separate module that includes the defines file.
+       (AT_CHECK_CALC): From AT_FULL_COMPILE, request compilation of lexer
+       source.
+       * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Push AT_DEFINES_IF.
+       Adjust AT_LOC and AT_VAL to use AT_NAME_PREFIX.
+       (AT_BISON_OPTION_POPDEFS): Pop AT_DEFINES_IF.
+       (AT_DATA_SOURCE_PROLOGUE): New.
+       (AT_DATA_GRAMMAR_PROLOGUE): Use AT_DATA_SOURCE_PROLOGUE.
+       (AT_DATA_SOURCE): New.
+       (AT_FULL_COMPILE): Extend to support an additional source file.
+
+2008-11-18  Akim Demaille  <demaille@gostai.com>
+
+       More TODO.
+       * TODO: More short term issues.
+
+2008-11-18  Akim Demaille  <demaille@gostai.com>
+
+       Regen.
+       * src/parse-gram.h, src/parse-gram.c: Regen.
+
+2008-11-18  Akim Demaille  <demaille@gostai.com>
+
+       Use b4_subtract where possible.
+       * data/lalr1.cc (b4_subtract): Move to...
+       * data/bison.m4: here.
+       * data/glr.c (b4_rhs_data): Use it.
+       * data/yacc.c (b4_rhs_value, b4_rhs_location): Use it.
+
+2008-11-18  Akim Demaille  <demaille@gostai.com>
+
+       Remove incorrect mode specification.
+       * data/glr.cc: Don't pretend it's C code.
+
+2008-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Simplify last patch slightly.
+       * src/getargs.c (getargs): Here.
+
+2008-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Fix last warning from --enable-gcc-warnings.
+       * src/getargs.c (getargs): Don't assign const address to non-const
+       pointer.
+
+2008-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Don't let maintainer-*-check targets force a version update.
+       * cfg.mk (_is-dist-target): Implement.  maintainer-check* was already
+       handled.
+
+2008-11-17  Di-an Jan  <dianj@freeshell.org>
+
+       * doc/bison.texinfo: Synchronize ``Detail Node Listing''.
+       Align menus.  Adjust word wrapping.  Use node names for menu names.
+       (Examples): Don't abbreviate node names.
+       (LocalWords): Remove abbreviations.
+       (Copying): Make description a sentence.
+       (Java Action Features): Remove period to match the rest of menu.
+
+2008-11-17  Di-an Jan  <dianj@freeshell.org>
+
+       Handles several --enable-gcc-warnings.
+       * src/getargs.c (command_line_location): Set parameters to void.
+       * src/output.c (symbol_type_name_cmp): Make static.
+       (symbols_by_type_name): Set parameters to void.
+       (symbol_definitions_output): Remove unused parameter.  Rename as...
+       (prepare_symbol_definitions): this.
+       (muscles_output): Move symbol_definitions_output to...
+       (output): here as prepare_symbol_definitions.
+       * tests/c++.at (AT_CHECK_VARIANTS): Remove unused parameters of main.
+       (AT_CHECK_NAMESPACE): Make unused parameter lloc unnamed.
+
+2008-11-17  Di-an Jan  <dianj@freeshell.org>
+
+       * tests/c++.at (AT_CHECK_VARIANTS): Fixes tests 198-202.
+       Use AT_DATA_GRAMMAR instead of AT_DATA for compiled tests.
+
+2008-11-16  Akim Demaille  <demaille@gostai.com>
+
+       Add missing $(EXEEXT).
+       * doc/local.mk ($(CROSS_OPTIONS_TEXI)): The target is
+       "src/bison$(EXEEXT)".
+       Reported by Di-an Jan.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       * TODO: Update.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Formatting changes.
+       * tests/input.at: here.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove duplicate header inclusion.
+       * src/LR0.c: here.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       * src/parse-gram.h, src/parse-gram.c: Regen.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Support parametric types.
+
+       There are two issues to handle: first scanning nested angle
+       bracket pairs to support types such as std::pair< std::string,
+       std::list<std::string> > >.
+
+       Another issue is to address idiosyncracies of C++: do not glue two
+       closing angle brackets together (otherwise it's operator>>), and
+       avoid sticking blindly a TYPE to the opening <, as it can result
+       in '<:' which is a digraph for '['.
+
+       * src/scan-gram.l (brace_level): Rename as...
+       (nesting): this.
+       (SC_TAG): New.
+       Implement support for complex tags.
+       (tag): Accept
+       , but not <.
+       * data/lalr1.cc (b4_symbol_value, b4_symbol_value_template)
+       (b4_symbol_variant): Leave space around types as parameters.
+       * examples/variant.yy: Use nested template types and leading ::.
+       * src/parse-gram.y (TYPE, TYPE_TAG_ANY, TYPE_TAG_NONE, type.opt):
+       Rename as...
+       (TAG, TAG_ANY, TAG_NONE, tag.opt): these.
+       * tests/c++.at: Test parametric types.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       Test token.prefix.
+       This is not sufficient, but we test at least that the make_SYMBOL
+       interface is not affected by token.prefix.  A more general test
+       will be implemented when the support of token.prefix is generalized
+       to more skeletons.
+
+       * tests/c++.at: One more variant test, using token.prefix.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       Test the make_TOKEN interface.
+       * tests/c++.at (AT_CHECK_VARIANTS): Require and use locations.
+       Factor the common code in yylex.
+       Use it to test "%define lex_symbol".
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       Formatting change.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       Simplify code for variants bench marks.
+       * etc/bench.pl.in (&generate_grammar_list): Define and use
+       location_type.
+       Factor the common code in yylex.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Better error message.
+       * bootstrap (find_tool): Fix the error message.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Update variant.yy to newest interface.
+       * examples/variant.yy: Define lex_symbol.
+       Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Don't use locations in variant.yy.
+       * examples/variant.yy: Adjust to not using locations.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+       * data/local.mk, etc/local.mk, examples/local.mk: Use Automake
+       comments for the license.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove tests/Makefile.am.
+       * tests/Makefile.am: Rename as...
+       * tests/local.mk: this.
+       * Makefile.am, configure.ac: Adjust.
+       * Makefile.am (DISTCLEANFILES): Define.
+       (maintainer-check, maintainer-xml-check, maintainer-push-check):
+       Remove, we no longer need to bounce to the real targets.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       djgpp/local.mk.
+       * Makefile.am (EXTRA_DIST): Move djgpp related part to...
+       * djgpp/local.mk: this new file.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove doc/Makefile.am.
+       * doc/Makefile.am: Rename as...
+       * doc/local.mk: this.
+       Adjust paths
+       * Makefile.am, configure.ac: Adjust.
+       * Makefile.am (MOSTLYCLEANFILES): New.
+       * src/local.mk: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Move sc_tight_scope into maint.mk.
+       It does not work, and I don't know how it was supposed to work: it
+       seems to be looking for sources in the build tree.  I just moved
+       it at a better place, fixing it is still required.
+
+       * src/local.mk (echo): Remove.
+       (sc_tight_scope): Move to...
+       * maint.mk: here.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Regen.
+       * src/parse-gram.h, src/parse-gram.h: Regen.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove src/Makefile.am.
+       * src/Makefile.am: Rename as...
+       * src/local.mk: this.
+       Prefix all the paths with src/.
+       (AUTOMAKE_OPTIONS): Build object files in the sub dirs.
+       (AM_CPPFLAGS): Find find in builddir/src.
+       (YACC): Move the flags into...
+       (AM_YFLAGS): here.
+       * maint.mk (sc_tight_scope): Disable.
+       It used to bounce to the version in src/Makefile.am which is now
+       part of this very Makefile.
+       * Makefile.am, configure.ac: Adjust.
+       * src/scan-code-c.c, src/scan-code.l: We can no longer rely on
+       include "..." to find files "here": we are no longer in src/, so
+       qualify the includes with src/.
+       * doc/Makefile.am (PREPATH): No longer include the top_builddir
+       prefix.
+       (.x.1): Adjust to be able to create src/foo from the top level
+       Makefile, instead of going bounce to src/Makefile the creation of
+       foo.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove useless variable.
+       * doc/Makefile.am (srcsrcdir): Remove.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove data/Makefile.am.
+       * data/Makefile.am: Rename as...
+       * data/local.mk: this.
+       Adjust paths.
+       * Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove etc/Makefile.am.
+       * etc/Makefile.am: Rename as...
+       * etc/local.mk: this.
+       Adjust.
+       * Makefile.am, configure.ac: Adjust.
+
 2008-11-15  Akim Demaille  <demaille@gostai.com>
 
        Remove examples/local.mk.
        examples/calc++/Makefile.am might be interesting to keep as is, since
        it is an example in itself.
-       
+
        * examples/Makefile.am: Rename as...
        * examples/local.mk: this.
        Adjust.
        Remove build-aux/Makefile.am.
        Recursive Makefiles are really way too slow, let's get rid of some of
        them.
-       
+
        * build-aux/Makefile.am: Rename as...
        * build-aux/local.mk: this.
        Adjust paths.
 
 2008-11-15  Akim Demaille  <demaille@gostai.com>
 
-       Instead of using make_symbol<TOK_FOO>, generate make_FOO for each token type.
+       Instead of using make_symbol<TOK_FOO>, generate make_FOO for each
+       token type.
        Using template buys us nothing, and makes it uselessly complex to
        construct a symbol.  Besides, it could not be generalized to other
        languages, while make_FOO would work in C/Java etc.
-       
+
        * data/lalr1.cc (b4_symbol_): New.
        (b4_symbol): Use it.
        (b4_symbol_constructor_declaration_)
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        %define token.prefix.
-       Provide a means to add a prefix to the name of the tokens as output in the
-       generated files.  Because of name clashes, it is good to have such a
-       prefix such as TOK_ that protects from names such as EOF, FILE etc.
-       But it clutters the grammar itself.
-       
+       Provide a means to add a prefix to the name of the tokens as
+       output in the generated files.  Because of name clashes, it is
+       good to have such a prefix such as TOK_ that protects from names
+       such as EOF, FILE etc.  But it clutters the grammar itself.
+
        * data/bison.m4 (token.prefix): Empty by default.
        * data/c.m4 (b4_token_enum, b4_token_define): Use it.
        * data/lalr1.cc (b4_symbol): Ditto.
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        Compute at M4 time some of the subtractions.
-       * data/lalr1.cc (b4_substract): New.
+       * data/lalr1.cc (b4_subtract): New.
        (b4_rhs_data): Use it.
 
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        symbol::token.
-       This is allows the user to get the type of a token return by
-       yylex.
-       
+       This allows the user to get the type of a token returned by yylex.
+
        * data/lalr1.cc (symbol::token): New.
        (yytoknum_): Define when %define lex_symbol, independently of
        %debug.
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        Define make_symbol in the header.
-       To reach good performances these functions should be inlined (yet this is
-       to measure precisely).  To this end they must be available to the caller.
-       
+       To reach good performances these functions should be inlined (yet
+       this is to measure precisely).  To this end they must be available
+       to the caller.
+
        * data/lalr1.cc (b4_symbol_constructor_definition_): Qualify
        location_type with the class name.
        Since will now be output in the header, declare "inline".
 
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
-       Define the constructors of symbol_type in b4_symbol_constructor_definitions.
+       Define the constructors of symbol_type in
+       b4_symbol_constructor_definitions.
        The constructors are called by the make_symbol functions, which a
-       forthcoming patch will move elsewhere.  Hence the interest of putting them
-       together.
-       
-       The stack_symbol_type does not need to be moved, it is used only by the
-       parser.
-       
+       forthcoming patch will move elsewhere.  Hence the interest of
+       putting them together.
+
+       The stack_symbol_type does not need to be moved, it is used only
+       by the parser.
+
        * data/lalr1.cc: Move symbol_type and symbol_base_type
        constructors into...
        (b4_symbol_constructor_definitions): here.
        Make it easier to move the definition of yytranslate_.
        Forthcoming changes will make it possible to use yytranslate_
        from outside the parser implementation file.
-       
+
        * data/lalr1.cc (b4_yytranslate_definition): New.
        Use it.
 
        goes against the stronger typing I am trying to have with the new
        lex interface which return a symbol_type.  So in this case, feed
        yytranslate_ with a token_type.
-       
+
        * data/lalr1.cc (yytranslate_): When in %define lex-symbol,
        expect a token_type.
 
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        Use b4_type_names for the union type.
-       The union used to compute the size of the variant used to iterate over the
-       type of all the symbols, with a lot of redundancy.  Now iterate over the
-       lists of symbols having the same type-name.
-       
+       The union used to compute the size of the variant used to iterate
+       over the type of all the symbols, with a lot of redundancy.  Now
+       iterate over the lists of symbols having the same type-name.
+
        * data/lalr1.cc (b4_char_sizeof_): New.
        (b4_char_sizeof): Use it.
        Adjust to be called with a list of numbers instead of a single
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        Define the "identifier" of a symbol.
-       Symbols may have several string representations, for instance if they
-       have an alias.  What I call its "id" is a string that can be used as
-       an identifier.  May not exist.
-       
-       Currently the symbols which have the "tag_is_id" flag set are those that
-       don't have an alias.  Look harder for the id.
-       
+       Symbols may have several string representations, for instance if
+       they have an alias.  What I call its "id" is a string that can be
+       used as an identifier.  May not exist.
+
+       Currently the symbols which have the "tag_is_id" flag set are
+       those that don't have an alias.  Look harder for the id.
+
        * src/output.c (is_identifier): Move to...
        * src/symtab.c (is_identifier): here.
        * src/symtab.h, src/symtab.c (symbol_id_get): New.
 2008-11-11  Akim Demaille  <demaille@gostai.com>
 
        Introduce make_symbol.
-       make_symbol provides a means to construct a full symbol (kind, value,
-       location) in a single shot.  It is meant to be a Symbol constructor,
-       parameterized by the symbol kind so that overloading would prevent
-       incorrect kind/value pairs.  Unfortunately parameterized constructors do
-       not work well in C++ (unless the parameter also appears as an argument,
-       which is not acceptable), hence the use of a function instead of a
-       constructor.
-       
+       make_symbol provides a means to construct a full symbol (kind,
+       value, location) in a single shot.  It is meant to be a Symbol
+       constructor, parameterized by the symbol kind so that overloading
+       would prevent incorrect kind/value pairs.  Unfortunately
+       parameterized constructors do not work well in C++ (unless the
+       parameter also appears as an argument, which is not acceptable),
+       hence the use of a function instead of a constructor.
+
        * data/lalr1.cc (b4_symbol_constructor_declaration_)
        (b4_symbol_constructor_declarations)
        (b4_symbol_constructor_specialization_)
 2008-11-10  Akim Demaille  <demaille@gostai.com>
 
        Make parser::yytranslate static.
-       Small speedup (1%) on the list grammar.  And makes yytranslate_ available
-       in non member functions.
+       Small speedup (1%) on the list grammar.  And makes yytranslate_
+       available in non member functions.
 
        * data/lalr1.cc (yytranslate_): Does not need to be a instance
        function.
 2008-11-09  Akim Demaille  <demaille@gostai.com>
 
        Rely on the state stack to display reduction traces.
-       To display rhs symbols before a reduction, we used information about the rule
-       reduced, which required the tables yyrhs and yyprhs.  Now use rely only on the
-       state stack to get the same information.
+       To display rhs symbols before a reduction, we used information
+       about the rule reduced, which required the tables yyrhs and
+       yyprhs.  Now use rely only on the state stack to get the same
+       information.
 
        * data/lalr1.cc (b4_rhs_data, b4_rhs_state): New.
        Use them.
 2008-11-03  Akim Demaille  <demaille@gostai.com>
 
        Fuse the three stacks into a single one.
-       In order to make it easy to perform benchmarks to ensure that there are no
-       performance loss, lalr1.cc is forked into lalr1-fusion.cc.  Eventually,
-       lalr1-fusion.cc will replace lalr1.cc.
 
-       Meanwhile, to make sure that lalr1-fusion.cc is correctly exercized by the
-       test suite, the user must install a symbolic link from lalr1.cc to it.
+       In order to make it easy to perform benchmarks to ensure that
+       there are no performance loss, lalr1.cc is forked into
+       lalr1-fusion.cc.  Eventually, lalr1-fusion.cc will replace
+       lalr1.cc.
+
+       Meanwhile, to make sure that lalr1-fusion.cc is correctly
+       exercized by the test suite, the user must install a symbolic link
+       from lalr1.cc to it.
 
-       Instead of having three stacks (state, value, location), use a stack
-       of triples.  This considerably simplifies the code (and it will be
-       easier not to require locations as currently does the C++ parser),
-       and also gives a 10% speedup according to etc/bench (probably mainly since
-       memory allocation is done once instead of three times).
+       Instead of having three stacks (state, value, location), use a
+       stack of triples.  This considerably simplifies the code (and it
+       will be easier not to require locations as currently does the C++
+       parser), and also gives a 10% speedup according to
+       etc/bench (probably mainly since memory allocation is done once
+       instead of three times).
 
        Another motivation is to make it easier to destruct properly
        semantic values: now that they are bound to their state (hence
 
        These changes should probably benefit the C parser too.
 
-       * data/lalr1.cc: Copy as...  * data/lalr1-fusion.cc: this new
-       file.
+       * data/lalr1.cc: Copy as...
+       * data/lalr1-fusion.cc: this new file.
        (b4_rhs_value, b4_rhs_location): New definitions overriding those
        from c++.m4.
        (state_stack_type, semantic_stack_type, location_stack_type)
 2008-11-03  Akim Demaille  <demaille@gostai.com>
 
        Use variants to support objects as semantic values.
-       This patch was inspired by work by Michiel De Wilde.  But he used Boost
-       variants which (i) requires Boost on the user side, (ii) is slow, and
-       (iii) has useless overhead (the parser knows the type of the semantic value
-       there is no reason to duplicate this information as Boost.Variants do).
+       This patch was inspired by work by Michiel De Wilde.  But he used
+       Boost variants which (i) requires Boost on the user side, (ii) is
+       slow, and (iii) has useless overhead (the parser knows the type of
+       the semantic value there is no reason to duplicate this
+       information as Boost.Variants do).
 
-       This implementation reserves a buffer large enough to store the largest
-       objects.  yy::variant implements this buffer.  It was implemented with
-       Quentin Hocquet.
+       This implementation reserves a buffer large enough to store the
+       largest objects.  yy::variant implements this buffer.  It was
+       implemented with Quentin Hocquet.
 
        * src/output.c (type_names_output): New.
        (output_skeleton): Invoke it.
 2008-08-29  Akim Demaille  <demaille@gostai.com>
 
        Clarify UPDATED use.
-        * doc/bison.texinfo: It refers to the last edition of this file,
+       * doc/bison.texinfo: It refers to the last edition of this file,
        not to the release date of Bison.
-        Reported by Joel E. Denny.
+       Reported by Joel E. Denny.
 
 2008-08-29  Akim Demaille  <demaille@gostai.com>
 
 2008-08-27  Akim Demaille  <demaille@gostai.com>
 
        Check yyerrok in calc.at.
-        * tests/calc.at (calc.y): Use yyerrok on "( error )".
-        (AT_CHECK_CALC): Add a check that ensures that yyerrok works as
-        expected.
+       * tests/calc.at (calc.y): Use yyerrok on "( error )".
+       (AT_CHECK_CALC): Add a check that ensures that yyerrok works as
+       expected.
 
 2008-08-27  Akim Demaille  <demaille@gostai.com>
 
        Support yyerrok in lalr1.cc.
        YYBACKUP is still to import back into lalr1.cc.
-        * data/lalr1.cc (yyerrork, yyclearin, YYRECOVERING): Define.
+       * data/lalr1.cc (yyerrork, yyclearin, YYRECOVERING): Define.
 
 2008-08-26  Joel E. Denny  <jdenny@ces.clemson.edu>