aboutsummaryrefslogtreecommitdiffstats
path: root/ChangeLog
diff options
context:
space:
mode:
Diffstat (limited to 'ChangeLog')
-rw-r--r--ChangeLog1643
1 files changed, 1643 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 95ba1fefb2ec..42b21d7c329e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1646 @@
+2007-04-30 Brendan Kehoe <brendan@zen.org>
+
+ * gperf-3.0.3 released.
+ * src/version.cc: Bump to 3.0.3.
+ * tests/*.exp: Bump to 3.0.3 in header.
+ * doc/gperf.1: Regenerate with gperf 3.0.3.
+
+2007-04-06 Bruno Haible <bruno@clisp.org>
+
+ Improve support for mingw.
+ * tests/Makefile.in (check-c, check-ada, check-modula3, check-pascal,
+ check-lang-utf8, check-lang-ucs2): Remove '\r' from output before diff.
+ (POSTPROCESS_FOR_MINGW): New variable.
+ (check-test): Use it to postprocess output before diff.
+
+2007-04-04 Bruno Haible <bruno@clisp.org>
+
+ Support for newer GNU standards.
+ * doc/configure.ac (mandir): Remove assignment.
+ * doc/Makefile.in (datarootdir): New variable.
+ (docdir, dvidir, psdir, pdfdir, htmldir): Use value determined by
+ autoconf.
+ * configure.ac: Require autoconf >= 2.60.
+ * doc/configure.ac: Likewise.
+ * lib/configure.ac: Likewise.
+ * src/configure.ac: Likewise.
+ * tests/configure.ac: Likewise.
+ * configure: Regenerated with autoconf-2.61.
+ * doc/configure: Likewise.
+ * lib/configure: Likewise.
+ * src/configure: Likewise.
+ * tests/configure: Likewise.
+ * src/config.h.in: Likewise.
+ * src/config.h.msvc: Likewise.
+ * src/config.h_vms: Likewise.
+
+2007-04-04 Bruno Haible <bruno@clisp.org>
+
+ * doc/Makefile.in (MAKEINFO): Disable also the LC_MESSAGES and LC_ALL
+ environment variables.
+
+2007-04-04 Bruno Haible <bruno@clisp.org>
+
+ * configure.ac: Renamed from configure.in.
+ * doc/configure.ac: Renamed from doc/configure.in.
+ * lib/configure.ac: Renamed from lib/configure.in.
+ * src/configure.ac: Renamed from src/configure.in.
+ * tests/configure.ac: Renamed from tests/configure.in.
+ * Makefile.devel: Update.
+ * INSTALL: Update.
+
+2007-03-31 Bruno Haible <bruno@clisp.org>
+
+ * tests/test.c (in_word_set): New declaration.
+ * tests/test2.c (in_word_set): Likewise.
+
+2007-03-31 Bruno Haible <bruno@clisp.org>
+
+ * src/options.cc (Options::parse_options): Bump copyright year.
+
+2007-03-31 Bruno Haible <bruno@clisp.org>
+
+ * doc/gperf.texi: Fix typo.
+
+2007-03-31 Bruno Haible <bruno@clisp.org>
+
+ Change generated code after the meaning of __inline is changed in
+ GCC 4.3.
+ * src/output.cc (Output::output_lookup_function): Emit an inline
+ marker that also works with gcc-4.3 in c99 or gnu99 mode.
+ * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
+ tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp,
+ tests/java.exp, tests/languages.exp, tests/modula2.exp,
+ tests/objc.exp, tests/permut2.exp, tests/permut3.exp,
+ tests/permutc2.exp, tests/test-4.exp: Update.
+ Reported by Bruce Korb <Bruce.Korb@gmail.com>.
+
+2006-06-29 Brendan Kehoe <brendan@zen.org>
+
+ * gperf-3.0.2 released.
+
+ * doc/Makefile.in (all): No longer depend on dvi.
+
+2006-01-22 Brendan Kehoe <brendan@zen.org>
+
+ * doc/gperf.texi: Update copyright to be 1989-2006.
+ (UPDATED): Change to 22 January 2006.
+ * doc/gperf.1 (TH): Fix date.
+ * configure.in: Update copyright years.
+ * configure: Regenerate.
+ * src/Makefile.in: Update copyright years.
+
+ * doc/gperf.{dvi,ps,pdf}: Regenerated by manually invoking tex
+ instead of trying to use texi2dvi, whose run of etex ends up
+ actually always running pdfetex, thus always recreating gperf.pdf.
+
+2006-01-13 Brendan Kehoe <brendan@zen.org>
+
+ * NEWS: Add note about #line directive fix.
+ * doc/gperf.1: Regenerate with Makefile.devel.
+
+ * doc/gperf.texi (UPDATED): Correct to be today.
+ * doc: Regenerated by doing make in a configured tree.
+ Requires makeinfo, texi2dvi, texi2pdf, and texi2html.
+
+ * configure.in: Add AC_OBJEXT and AC_EXEEXT.
+ * lib/Makefile.in (OBJEXT): Define for subst.
+ (OBJECTS): Use $(OBJEXT) instead of '.o'.
+ * src/Makefile.in: Make dependencies use $(OBJEXT).
+ (OBJEXT, EXEEXT): Define for subst.
+ (TARGETPROG): Add $(EXEEXT).
+ (OBJECTS): Use $(OBJEXT) instead of '.o'.
+ (clean): Remove *.$(OBJEXT) instead of *.o.
+
+2006-01-13 Bruno Haible <bruno@clisp.org>
+
+ Fix #line directives for filenames containing backslashes.
+ * src/output.cc (output_line_directive): New function.
+ (output_keyword_entry, Output::output): Use it.
+ Reported by Alexander <alexander.me@gmail.com>.
+
+ * src/options.cc (Options::parse_options): Update years in --version
+ output.
+
+2005-08-29 Brendan Kehoe <brendan@zen.org>
+
+ * src/keyword.cc: Tweak comment to avoid nesting.
+
+2005-08-27 Bruno Haible <bruno@clisp.org>
+
+ Fix missing ranlib detection when cross-compiling.
+ * aclocal.m4 (CL_PROG_RANLIB): Remove macro.
+ * lib/configure.in: Use AC_PROG_RANLIB instead of CL_PROG_RANLIB.
+
+2005-07-30 Bruno Haible <bruno@clisp.org>
+
+ * src/version.cc: Bump version number to 3.0.2.
+ * doc/gperf.texi: Likewise.
+ * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
+ tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp,
+ tests/java.exp, tests/languages.exp, tests/modula2.exp,
+ tests/objc.exp, tests/permut2.exp, tests/permut3.exp,
+ tests/permutc2.exp, tests/test-4.exp: Update.
+
+2005-07-30 Bruno Haible <bruno@clisp.org>
+
+ * src/positions.h: Add forward declarations of friend classes.
+ Needed for compilation with g++ 4.0.
+
+2004-08-22 Bruno Haible <bruno@clisp.org>
+
+ * tests/Makefile.in (check-lang-syntax): Add test for the
+ --length-table-name option.
+ * tests/test-6.exp: Update.
+
+2004-08-21 Bruce Lilly <blilly@erols.com>
+
+ * src/input.cc (Input::read_input): Accept length-table-name
+ declaration.
+ * src/options.h (Options::get_lengthtable_name,
+ Options::set_lengthtable_name): New declarations.
+ (Options): Add field _lengthtable_name.
+ * src/options.icc (Options::get_lengthtable_name): New inline method.
+ * src/options.cc (DEFAULT_LENGTHTABLE_NAME): New constant.
+ (Options::long_usage): Document --length-table-name option.
+ (Options::Options): Initialize _lengthtable_name field.
+ (Options::~Options): Update.
+ (Options::set_lengthtable_name): New method.
+ (long_options): Add option --length-table-name.
+ (Options::parse_options): Implement --length-table-name option.
+ * src/output.cc (Output::output_keylength_table, output_switch_case,
+ Output::output_lookup_function_body): Use option.get_lengthtable_name.
+ * doc/gperf.texi (Gperf Declarations): Document %define
+ length-table-name.
+ (Output Details): Document --length-table-name option.
+
+2003-06-12 Bruno Haible <bruno@clisp.org>
+
+ * gperf-3.0.1 released.
+
+ * src/version.cc: Bump version number to 3.0.1.
+ * doc/gperf.texi: Likewise.
+ * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
+ tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp,
+ tests/java.exp, tests/languages.exp, tests/modula2.exp,
+ tests/objc.exp, tests/permut2.exp, tests/permut3.exp,
+ tests/permutc2.exp, tests/test-4.exp: Update.
+
+2003-05-31 Bruno Haible <bruno@clisp.org>
+
+ * doc/gperf.texi (User-supplied Struct): Mention the possibility of an
+ abbreviated struct declaration.
+ * src/input.cc (Input::read_input): Support struct declarations of the
+ form "struct foo;".
+ * tests/incomplete.gperf: New file.
+ * tests/incomplete.exp: New file.
+ * tests/Makefile.in (check-test): Check incomplete.gperf too.
+ Reported by Rob Leslie <rob@mars.org>.
+
+2003-05-20 Bruno Haible <bruno@clisp.org>
+
+ * doc/Makefile.in (gperf.ps): Don't use $< in a target rule.
+
+2003-05-27 Bruno Haible <bruno@clisp.org>
+
+ * Makefile.vms (CC): Correct value.
+ (getopt.obj, getopt1.obj, getline.obj, hash.obj): Don't set
+ HAVE_CONFIG_H.
+
+2003-05-17 Bruno Haible <bruno@clisp.org>
+
+ * Makefile.msvc (DEBUGFLAGS): New variable.
+ (gperf.exe): Use it, and MFLAGS too.
+
+2003-05-08 Bruno Haible <bruno@clisp.org>
+
+ * gperf-3.0 released.
+
+2003-05-07 Bruno Haible <bruno@clisp.org>
+
+ * src/version.cc: Bump version number to 3.0.
+ * doc/gperf.texi: Likewise.
+ * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
+ tests/cplusplus.exp, tests/gpc.exp, tests/java.exp,
+ tests/languages.exp, tests/modula2.exp, tests/objc.exp,
+ tests/permut2.exp, tests/permut3.exp, tests/permutc2.exp,
+ tests/test-4.exp: Update.
+
+ * src/configure.in: Fix AC_INIT argument.
+
+ * Makefile.devel (configure, lib/configure, src/configure,
+ tests/configure, doc/configure): Use the newest autoconf.
+ (src/config.h.in): Use the newest autoheader.
+
+2003-05-03 Bruno Haible <bruno@clisp.org>
+
+ * doc/gperf.texi: Use two spaces as sentence separator, as recommended
+ by the texinfo manual.
+
+2003-04-12 Bruno Haible <bruno@clisp.org>
+
+ * doc/configure.in (mandir): Change default value.
+ * doc/Makefile.in (docdir): Use datadir instead of prefix.
+ * Makefile.msvc (datadir): New variable.
+ (mandir, docdir): Use it instead of prefix.
+ (install, installdirs): Update.
+ * Makefile.vms (datadir): New variable.
+ (mandir, docdir): Use it instead of prefix.
+ (install, installdirs): Update.
+
+2003-04-12 Bruno Haible <bruno@clisp.org>
+
+ * README.vms: New file.
+ * Makefile.vms: New file.
+ * Makefile.devel (src/config.h_vms): New rule.
+ (all): Depend on it.
+
+2003-03-19 Bruno Haible <bruno@clisp.org>
+
+ * src/input.cc (Input::read_input): Ignore comments at the beginning
+ of the declarations section.
+ * doc/gperf.texi (Controls for GNU indent): New section.
+ Reported by Bruce Lilly <blilly@erols.com>.
+
+2003-03-19 Bruno Haible <bruno@clisp.org>
+
+ * src/output.cc (Output::output_hash_function): Avoid lint warning if
+ not all arguments of the hash function are used. Avoid lint warning
+ for fallthrough in switch.
+ * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
+ tests/cplusplus.exp, tests/java.exp, tests/languages.exp,
+ tests/modula2.exp, tests/objc.exp: All /*FALLTHROUGH*/ to expected
+ output.
+ Reported by Bruce Lilly <blilly@erols.com>.
+
+2003-03-01 Bruno Haible <bruno@clisp.org>
+
+ * src/options.h (Options::set_initializer_suffix): New declaration.
+ * src/options.cc (Options::set_initializer_suffix): New method.
+ * src/input.cc (Input::read_input): Recognize %define
+ initializer-suffix.
+ * doc/gperf.texi (Gperf Declarations): Document %define
+ initializer-suffix.
+ * NEWS: Update.
+
+2003-02-26 Bruno Haible <bruno@clisp.org>
+
+ * Makefile.msvc: New file.
+ * README.woe32: New file.
+ * Makefile.devel (all): Depend on src/config.h.msvc.
+ (src/config.h.msvc): New rule.
+
+2003-01-07 Bruno Haible <bruno@clisp.org>
+
+ * src/input.h (Input::_charset_dependent): New field.
+ * src/input.cc (Input::read_input): Also set _charset_dependent.
+ * src/main.cc (main): Pass _charset_dependent from Input to Output.
+ * src/output.h (Output::Output): Add charset_dependent argument.
+ (Output::_charset_dependent): New field.
+ * src/output.cc (Output::Output): Add charset_dependent argument.
+ (Output::output): Provoke a compilation error if the execution
+ character set doesn't match the expectations.
+ * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
+ tests/cplusplus.exp, tests/gpc.exp, tests/java.exp,
+ tests/languages.exp, tests/modula2.exp, tests/objc.exp,
+ tests/permut2.exp, tests/permut3.exp, tests/permutc2.exp,
+ tests/test-4.exp: Update.
+
+ * src/options.cc (Options::long_usage): Change bug report address to
+ <bug-gnu-gperf@gnu.org>.
+ * tests/test-6.exp: Update.
+
+ * src/output.cc (USE_DOWNCASE_TABLE): New macro.
+ (output_upperlower_table): New function.
+ (output_upperlower_strcmp, output_upperlower_strncmp,
+ output_upperlower_memcmp): Emit gperf_downcase array accesses.
+ (Output::output): Call output_upperlower_table.
+ * tests/permutc2.exp: Update.
+
+ * src/keyword-list.icc (KeywordExt_List::rest): Use a portable cast.
+ (Only in GCC a cast of an lvalue is an lvalue.)
+
+2003-01-01 Bruno Haible <bruno@clisp.org>
+
+ * src/options.cc (Options::parse_options): Update copyright year.
+
+ * doc/gperf.texi (@author): Add me.
+
+ * src/options.h (NULLSTRINGS): New enum value.
+ (Options::get_stringpool_name, Options::set_stringpool_name): New
+ method declarations.
+ (Options::_stringpool_name): New field.
+ * src/options.icc (Options::get_stringpool_name): New method.
+ * src/options.cc (DEFAULT_STRINGPOOL_NAME): New variable.
+ (Options::long_usage): Document -Q and --null-strings.
+ (Options::Options): Initialize _stringpool_name.
+ (Options::~Options): Output _stringpool_name, NULLSTRINGS values too.
+ (Options::set_stringpool_name): New method.
+ (long_options): Add options --string-pool-name, --null-strings.
+ (Options::parse_options): Implement options -P, -Q and --null-strings.
+ * src/input.cc (Input::read_input): Recognize declarations %pic,
+ %define string-pool-name, %null-strings.
+ * src/output.h (Output::output_string_pool,
+ Output::output_lookup_pools): New method declarations.
+ (Output::_wordlist_eltype): New field.
+ * src/output.cc (Output::output_keylength_table): Trivial
+ simplification.
+ (Output::output_string_pool): New method.
+ (output_keyword_entry): Add stringpool_index argument. For SHAREDLIB,
+ use struct offsets.
+ (output_keyword_blank_entries): For SHAREDLIB, use -1 instead of "".
+ (Output::output_keyword_table): Use _wordlist_eltype instead of
+ _struct_tag. Compute stringpool_index for output_keyword_entry.
+ (Output::output_lookup_pools): New method.
+ (Output::output_lookup_function_body): Use _wordlist_eltype instead of
+ _struct_tag. For SHAREDLIB, use "+ stringpool" to convert offsets to
+ strings. Use "o >= 0" to test for nonempty table entry.
+ (Output::output_lookup_function): Call output_lookup_pools.
+ (Output::output): Initialize _wordlist_eltype. Call
+ output_lookup_pools.
+ * tests/jstest4.gperf: New file.
+ * tests/test-6.exp: Update.
+ * tests/Makefile.in (check-lang-syntax): Drop test of -p. Add tests of
+ -P and -Q.
+ * doc/gperf.texi (User-supplied Struct): Mention that first field has
+ to be of type 'int' if -P is given.
+ (Gperf Declarations): Document %pic, %define string-pool-name,
+ %null-strings.
+ (Output Details): Update description of option -P. Document options -Q
+ and --null-strings.
+
+ * tests/Makefile.in (check-link-c, check-ada, check-pascal,
+ check-test): Omit option -p.
+ * tests/c-parse.exp: Regenerated.
+ * tests/chill.exp: Regenerated.
+ * tests/cplusplus.exp: Regenerated.
+ * tests/gpc.exp: Regenerated.
+ * tests/java.exp: Regenerated.
+ * tests/objc.exp: Regenerated.
+ * tests/test-4.exp: Regenerated.
+
+ * src/output.cc (Output::output_lookup_function_body): Omit the
+ multicompare code section and its variables when it is not used.
+ * tests/chill.exp: Regenerated.
+
+ * src/output.c (Output_Compare::output_firstchar_comparison): New
+ method.
+ (Output_Compare_Strcmp::output_comparison,
+ Output_Compare_Strncmp::output_comparison,
+ Output_Compare_Memcmp::output_comparison): Use it.
+ * tests/permutc2.exp: Update.
+
+ * tests/smtp.gperf: New file, based on a contribution by Bruce Lilly.
+ * tests/Makefile.in (check-smtp): New rule.
+ (check): Depend on it.
+ (clean): Update.
+
+2002-12-12 Bruno Haible <bruno@clisp.org>
+
+ * src/search.h (Search::init_selchars_tuple,
+ Search::count_duplicates_tuple): Add alpha_unify argument.
+ (Search::count_duplicates_tuple): New method declaration.
+ * src/search.cc (Search::init_selchars_tuple,
+ Search::count_duplicates_tuple): Add alpha_unify argument.
+ (Search::find_positions): Update.
+ (Search::count_duplicates_tuple): New method.
+ (Search::count_duplicates_multiset): Free temp alpha_unify vector.
+ (Search::find_alpha_inc): Call count_duplicates_tuple.
+
+ * src/configure.in: Add test for stack-allocated variable-size arrays.
+ * src/config.h.in: Regenerated.
+ * src/search.cc: Include config.h.
+ (DYNAMIC_ARRAY, FREE_DYNAMIC_ARRAY): New macros.
+ (Search::find_alpha_inc, Search::count_possible_collisions,
+ Search::find_asso_values): Use them.
+ * src/Makefile.in (search.o): Depend on config.h.
+
+ * src/search.h (Search::keyword_list_length, Search::max_key_length,
+ Search::get_max_keysig_size, Search::prepare): Remove declarations.
+ (Search::prepare): Renamed from Search::preprepare.
+ (Search::_max_selchars_length): New field.
+ * src/search.cc (Search::prepare): Renamed from Search::preprepare.
+ (Search::prepare_asso_values): Merged with old Search::prepare.
+ Initialize _max_selchars_length.
+ (Search::keyword_list_length): Remove function. Use _list_len instead.
+ (Search::max_key_length): Remove function. Use _max_key_len instead.
+ (Search::get_max_keysig_size): Remove function. Use
+ _max_selchars_length instead.
+ (Search::count_possible_collisions, Search::find_asso_values): Update.
+ (Search::find_good_asso_values): Call just prepare_asso_values.
+ (Search::~Search): Update.
+
+ * src/output.h (Output::output_asso_values_ref): New declaration.
+ * src/output.cc (char_to_index): Remove variable.
+ (Output::output_asso_values_ref): New function.
+ (Output::output_hash_function): Use it.
+ (Output::output): Update.
+
+ * src/positions.h (Positions::is_useall, Positions::set_useall,
+ Positions::iterator, Positions::reviterator): New method declarations.
+ (Positions::_useall): New field.
+ (PositionIterator): Make constructor private. Add a constructor and a
+ copy constructor.
+ (PositionIterator::remaining): New declaration.
+ (PositionReverseIterator): Make constructor private. Add a constructor
+ and a copy constructor.
+ (PositionReverseIterator::remaining): New declaration.
+ (PositionReverseIterator::_minindex): New field.
+ * src/positions.icc (Positions::Positions): Initialize _useall.
+ (Positions::operator=): Likewise.
+ (Positions::is_useall, Positions::set_useall): New methods.
+ (Positions::sort): Do nothing if _useall is set.
+ (Positions::iterator, Positions::reviterator): New methods.
+ (PositionIterator::PositionIterator): New constructor.
+ (PositionIterator::remaining): New method.
+ (PositionReverseIterator::PositionReverseIterator): New constructor.
+ (PositionReverseIterator::next): Use _minindex as bound.
+ (PositionReverseIterator::remaining): New method.
+ * src/positions.cc (Positions::add, Positions::remove): Reset the
+ useall flag.
+ (Positions::print): Handle the useall case.
+ * src/options.h (ALLCHARS): Remove.
+ * src/options.cc (Options::~Options): Update.
+ (Options::parse_options): Use Positions::set_useall().
+ * src/keyword.h (KeywordExt::init_selchars_tuple,
+ KeywordExt::init_selchars_multiset, KeywordExt::init_selchars_low):
+ Remove use_all_chars argument.
+ * src/keyword.cc (KeywordExt::init_selchars_low): Remove use_all_chars
+ argument. Tell the position iterator to stop at _allchars_length.
+ Remove special case code for -k'*'.
+ (KeywordExt::init_selchars_tuple, KeywordExt::init_selchars_multiset):
+ Remove use_all_chars argument.
+ * src/search.h (Search::init_selchars_tuple): Remove use_all_chars
+ argument.
+ (Search::init_selchars_multiset): Likewise.
+ * src/search.cc (Search::init_selchars_tuple): Remove use_all_chars
+ argument.
+ (Search::count_duplicates_tuple, Search::find_positions): Update.
+ (Search::compute_alpha_unify): Remove special case code for -k'*'.
+ (Search::init_selchars_multiset): Remove use_all_chars argument.
+ (Search::count_duplicates_multiset): Update.
+ (Search::find_alpha_inc): Remove special case code for -k'*'.
+ (Search::prepare): Update.
+ (Search::get_max_keysig_size): Update.
+ * src/output.cc (Output::output_hash_function): Remove special case
+ code for -k'*'.
+ * tests/chill.exp: Regenerated.
+
+2002-12-11 Bruno Haible <bruno@clisp.org>
+
+ Change the positions to be 0-based, instead of 1-based.
+ * src/positions.h (Positions::LASTCHAR): Set to -1.
+ (Positions::MAX_SIZE): New constant.
+ (Positions::pointer): Change return type.
+ (Positions::_positions): Change element type.
+ (PositionIterator::EOS, PositionReverseIterator::EOS): Set to -2.
+ * src/positions.icc (Positions::pointer): Change return type.
+ (Positions::sort): Update.
+ * src/positions.cc (Positions::contains, Positions::add,
+ Positions::remove): Update.
+ (Positions::print): Update. Fix off-by-one bug.
+ * src/options.cc (Options::~Options): Update.
+ (Options::parse_options): Set BAD_VALUE to -3. Update.
+ * src/keyword.cc (KeywordExt::init_selchars_low): Update.
+ * src/search.cc (Search::find_positions, Search::compute_alpha_unify,
+ Search::find_alpha_inc): Update.
+ * src/output.cc (Output::output_hash_function): Update. Don't emit
+ a 'case' statement right after 'default:'.
+ * tests/c-parse.exp: Regenerated.
+ * tests/charsets.exp: Regenerated.
+ * tests/cplusplus.exp: Regenerated.
+ * tests/java.exp: Regenerated.
+ * tests/languages.exp: Regenerated.
+ * tests/modula2.exp: Regenerated.
+ * tests/objc.exp: Regenerated.
+
+2002-12-10 Bruno Haible <bruno@clisp.org>
+
+ * src/options.h: Reorder enum values.
+ (Options::short_usage, Options::long_usage): Make static.
+ * src/options.cc (Options::short_usage); No longer print a monster
+ usage line.
+ (Options::print_options): Improve output of options like
+ --key-positions=1,2,$.
+ (Options::~Options): Update.
+
+ * src/options.h (UPPERLOWER): New enum value.
+ * src/options.cc (Options::long_usage): Document option --ignore-case.
+ (Options::~Options): Update.
+ (long_options): Add option --ignore-case.
+ (Options::parse_options): Handle option --ignore-case.
+ * src/input.cc (Input::read_input): Recognize option %ignore-case.
+ * src/keyword.h (KeywordExt::init_selchars_tuple,
+ KeywordExt::init_selchars_multiset, KeywordExt::init_selchars_low):
+ Add alpha_unify argument.
+ * src/keyword.cc (KeywordExt::init_selchars_low): Add alpha_unify
+ argument.
+ (KeywordExt::init_selchars_tuple): Add alpha_unify argument.
+ (KeywordExt::init_selchars_multiset): Add alpha_unify argument.
+ * src/search.h (Search::compute_alpha_size,
+ Search::compute_alpha_unify): New declarations.
+ (Search::init_selchars_multiset): Add alpha_unify argument.
+ (Search::_alpha_unify): New field.
+ * src/search.cc (Search::compute_alpha_size,
+ Search::compute_alpha_unify): New functions.
+ (Search::init_selchars_tuple): Update.
+ (Search::find_positions): Temporarily set _alpha_unify. Perform a
+ case insensitive comparison if needed.
+ (Search::init_selchars_multiset): Add alpha_unify argument.
+ (Search::count_duplicates_multiset): Call compute_alpha_unify.
+ (Search::find_alpha_inc): Temporarily set _alpha_unify. At the end,
+ set _alpha_size and _alpha_unify.
+ (Search::prepare): Update. Don't compute _alpga_size here.
+ (Search::optimize): Propagate unified asso_values.
+ (Search::~Search) Delete _alpha_unify.
+ * src/output.cc (output_upperlower_strcmp, output_upperlower_strncmp,
+ output_upperlower_memcmp): New functions.
+ (Output_Compare_Strcmp::output_comparison,
+ Output_Compare_Strncmp::output_comparison,
+ Output_Compare_Memcmp::output_comparison): Use the case-insensitive
+ comparison function if --ignore-case was given.
+ (Output::output): Emit the auxiliary case-insensitive comparison
+ function if needed.
+ * tests/permutc2.gperf, tests/permutc2.exp: New files.
+ * tests/Makefile.in (check-test): Also check permutc2.gperf.
+ * tests/test-6.exp: Update.
+ * doc/gperf.texi (Gperf Declarations): Document %ignore-case.
+ (Input Details): Document option --ignore-case.
+ * NEWS: Update.
+
+ * src/search.cc (Search::optimize): Fill unused asso_values[] entries
+ with a large value.
+ * src/output.h (Output::Output): Remove occurrences argument.
+ (Output::_occurrences): Remove field.
+ * src/output.cc (Output::Output): Remove occurrences argument.
+ (Output::output_hash_function): Ignore _occurrences.
+ * src/main.cc (main): Don't pass the _occurrences to Output.
+
+ * src/search.cc (Search::preprepare): Exit if keywords contain
+ out-of-range characters.
+
+ * src/search.cc (for): Define so as to avoid errors with old compilers.
+
+ * src/options.h (SHAREDLIB): New enum value.
+ * src/options.cc (Options::short_usage): Mention option -P.
+ (Options::long_usage): Document option -P.
+ (long_options): Add option --pic.
+ (Options::parse_options): Handle option -P/--pic.
+ * src/output.cc (output_keyword_blank_entries): When SHAREDLIB is
+ specified, emit NULL pointers instead of "".
+ (Output::output_lookup_function_body): When SHAREDLIB is specified
+ and SWITCH and DUP and not specified, test the table entry against
+ NULL before the string comparison.
+ * tests/test-6.exp: Update.
+ * doc/gperf.texi (Output Details): Document option -P.
+ * NEWS: Update.
+ Suggested by Ulrich Drepper.
+
+2002-12-08 Bruno Haible <bruno@clisp.org>
+
+ * tests/permut2.gperf, tests/permut2.exp: New files.
+ * tests/permut3.gperf, tests/permut3.exp: New files.
+ * tests/charsets.gperf: New file, from Bruce Lilly.
+ * tests/charsets.exp: New file.
+ * tests/languages.gperf: New file, from Bruce Lilly.
+ * tests/languages.exp: New file.
+ * Makefile.in (check-test): Test them all.
+
+ Completely new asso_values search algorithm.
+ * src/search.h (Search::compute_occurrence, Search::clear_determined,
+ Search::set_determined, Search::already_determined, Search::reorder):
+ Remove functions.
+ (Search::init_asso_values, Search::sort_by_occurrence,
+ Search::compute_occurrence, Search::sort_by_occurrence,
+ Search::has_collisions, Search::collision_prior_to): Remove functions.
+ (Search::compute_partition, Search::count_possible_collisions,
+ Search::unchanged_partition): New method declarations.
+ (Search::_determined): Remove field.
+ * src/search.cc (Search::prepare): Don't initialize _determined.
+ (Search::compute_occurrence, greater_by_occurrence,
+ Search::clear_determined, Search::set_determined,
+ Search::already_determined, Search::reorder): Remove functions.
+ (Search::init_asso_values, compute_disjoint_union,
+ Search::sort_by_occurrence, Search::compute_occurrence,
+ Search::sort_by_occurrence, Search::has_collisions,
+ Search::collision_prior_to): Remove functions.
+ (StackEntry): Remove class.
+ (EquivalenceClass, Step): New classes.
+ (equals, Search::compute_partition, delete_partition,
+ Search::count_possible_collisions, Search::unchanged_partition): New
+ functions.
+ (Search::find_asso_values): Completely rewritten.
+ (Search::find_good_asso_values): Don't call reorder().
+ (Search::~Search): Don't free _determined.
+ * src/keyword.h (KeywordExt::_occurrence): Remove field.
+ * src/options.h (ORDER, FAST, OPT_CHOICE): Remove enum values.
+ (Options::_iterations): Remove field.
+ * src/options.icc (Options::get_iterations): Remove method.
+ * src/options.cc (Options::long_usage): Remove mention of -f and -o.
+ (Options::Options): Don't initialize _iterations.
+ (Options::~Options): Update.
+ (Options::parse_options): Do nothing for options -f, -o, -O.
+ * doc/gperf.texi: (Contributors): Update.
+ (Algorithmic Details): Remove options -f and -o. Update description
+ of option -s.
+ * tests/c-parse.exp, tests/chill.exp, tests/cplusplus.exp,
+ tests/gpc.exp, tests/java.exp, tests/modula2.exp, tests/objc.exp,
+ tests/test-4.exp): Regenerated, smaller than before.
+ * tests/test-6.exp: Update.
+ * NEWS: Update.
+
+2002-12-08 Bruno Haible <bruno@clisp.org>
+
+ * src/search.h (Search::_alpha_size): Change type to 'unsigned int'.
+ (Search::_asso_value_max): Likewise.
+ * src/search.cc (Search::prepare_asso_values): Update.
+ (Search::init_asso_values): Update.
+ (Search::~Search): Update.
+ * src/output.h (Output::Output): Change alpha_size type to
+ 'unsigned int'.
+ (Output::_alpha_size): Change type to 'unsigned int'.
+ * src/output.cc (Output::Output): Change alpha_size type to
+ 'unsigned int'.
+ (Output::output_hash_function): Update.
+
+2002-12-07 Bruno Haible <bruno@clisp.org>
+
+ * src/options.h (OPT_CHOICE): New enum value.
+ * src/options.cc (Options::~Options): Update.
+ (long_options): New option --optimized-collision-resolution.
+ (Options::parse_options): Accept option -O.
+ * src/search.h (Search::sort_by_occurrence): Change argument to
+ 'unsigned int'.
+ (Search::compute_occurrence, Search::sort_by_occurrence): New method
+ declarations.
+ * src/search.cc (Search::sort_by_occurrence): Change argument to
+ 'unsigned int'.
+ (Search::compute_occurrence, Search::sort_by_occurrence): New methods.
+ (Search::find_asso_values): Implement OPT_CHOICE. More debugging
+ output.
+
+ * src/search.cc (Search::prepare_asso_values) [DEBUG]: Also print
+ the keyword list in order.
+ (Search::find_asso_values) [DEBUG]: Upon failure, print the union_set.
+
+ * src/options.h (Options::get_size_multiple): Change return type to
+ float.
+ (Options::_size_multiple): Change type to float.
+ * src/options.icc (Options::get_size_multiple): Change return type to
+ float.
+ * src/options.cc (Options::long_usage): Update description of option
+ -s.
+ (Options::~Options): Update.
+ (Options::parse_options): For option -s, accept a fraction.
+ * src/search.cc (Search::prepare_asso_values): Use get_size_multiple
+ as it is.
+ * tests/test-6.exp: Update.
+ * doc/gperf.texi (Algorithmic Details): Update description of option
+ -s.
+
+2002-12-04 Bruno Haible <bruno@clisp.org>
+
+ Improve debugging output.
+ * src/hash-table.h (Hash_Table::dump): New method.
+ * src/hash-table.cc (Hash_Table::dump): New method, extracted from
+ destructor.
+ (Hash_Table::~Hash_Table): No longer print the contents.
+ * src/positions.h (PositionReverseIterator): New class.
+ * src/positions.icc (PositionReverseIterator::PositionReverseIterator,
+ PositionReverseIterator::next): New methods.
+ * src/search.cc (Search::find_positions): If debugging, print the
+ result.
+ (Search::find_alpha_inc): If debugging, print the result.
+ (Search::prepare): Explicitly dump the hash table's contents here.
+
+ Portability fixes.
+ * src/positions.h (Positions::LASTCHAR, Positions::MAX_KEY_POS,
+ PositionIterator::EOS): Define as compile-time constants using enum.
+ * src/bool-array.cc (Bool_Array::~Bool_Array): Remove const qualifier
+ of pointer to be deleted.
+ * src/input.cc (Input::~Input): Likewise.
+ * src/keyword.cc (KeywordExt::delete_selchars): Likewise.
+ * src/main.cc (main): Likewise.
+ * src/hash-table.cc (Hash_Table::~Hash_Table): Limit scope of 'for'
+ variables.
+ * src/search.cc (Search::prepare_asso_values): Use a static_cast to
+ convert from time_t to long. This is possible because ISO C 99 says
+ time_t is a numeric type.
+
+2002-11-20 Bruno Haible <bruno@clisp.org>
+
+ * src/search.cc (Search::find_asso_values): Avoid gcc warnings about
+ uninitialized variables.
+
+ Implement backtracking.
+ * src/search.h (Search::has_collisions): Renamed from
+ Search::less_collisions. Return a boolean.
+ * src/search.cc (Search::has_collisions): Renamed from
+ Search::less_collisions. Return a boolean.
+ (StackEntry): Remove field _collisions_so_far.
+ (Search::find_asso_values): Backtrack when encountering an unresolved
+ collision. Assume collisions_so_far is always zero.
+ (Search::optimize): Exit if there are accidental duplicates at the end.
+ * src/output.cc (Output::num_hash_values): Simply return the list
+ length.
+ (Output::output_keylength_table): Remove handling of accidental
+ duplicates.
+ (Output::output_keyword_table, Output::output_lookup_array): Likewise.
+ (output_switch_case, output_switches): Likewise.
+ * doc/gperf.texi (Algorithmic Details): Adjust description of options
+ -D, -f, -o, -r.
+ (Bugs): Remove note about missing backtracking.
+ (Projects): Likewise.
+
+2002-11-19 Bruno Haible <bruno@clisp.org>
+
+ Prepare for backtracking.
+ * src/search.h (Search::try_asso_value, Search::change_some_asso_value):
+ Remove declarations.
+ (Search::less_collisions, Search::collision_prior_to): New declarations.
+ (Search::_fewest_collisions, Search::_union_set, Search::_num_done):
+ Remove fields.
+ * src/search.cc (Search::prepare_asso_values): Don't initialize
+ _union_set.
+ (Search::try_asso_value, Search::change_some_asso_value): Remove
+ methods.
+ (Search::less_collisions, Search::collision_prior_to): New methods.
+ (StackEntry): New class.
+ (Search::find_asso_values): Reorganized to use pseudo-recursion.
+ (Search::~Search): Don't free _union_set.
+
+ * src/search.h (Search::find_good_asso_values): New declaration.
+ * src/search.cc: Add comments about the basic structure of the
+ algorithm.
+ (Search::find_positions): Move the option[POSITIONS] test to here.
+ (Search::find_good_asso_values): New method, extracted from
+ Search::optimize.
+ (Search::optimize): Remove option[POSITIONS] test. Call
+ find_good_asso_values.
+
+2002-11-17 Bruno Haible <bruno@clisp.org>
+
+ * src/options.cc (Options::parse_options): Include copyright notice
+ and authors in --version output.
+
+ Avoid artificial duplicates.
+ * src/keyword.h (KeywordExt::init_selchars_tuple): New declaration.
+ (KeywordExt::init_selchars_multiset): Renamed from
+ KeywordExt::init_selchars.
+ (KeywordExt::init_selchars_low): New declaration.
+ * src/keyword.cc (KeywordExt::init_selchars_low): Renamed from
+ KeywordExt::init_selchars. Add alpha_inc argument. Remove sorting.
+ (KeywordExt::init_selchars_tuple): New method.
+ (KeywordExt::init_selchars_multiset): New method, replaces
+ KeywordExt::init_selchars.
+ * src/search.h (Search::init_selchars_tuple): Renamed from
+ Search::init_selchars.
+ (Search::count_duplicates_tuple): Renamed from Search::count_duplicates.
+ (Search::init_selchars_multiset, Search::count_duplicates_multiset,
+ Search::find_alpha_inc): New declarations.
+ (Search::_alpha_inc): New field.
+ (Search::_alpha_size, Search::_occurrences, Search::_asso_values,
+ Search::_determined): Make non-const.
+ * src/search.cc (Search::Search): Don't initialize _key_positions,
+ _alpha_size, _occurrences, _asso_values, _determined here.
+ (Search::init_selchars_tuple): Renamed from Search::init_selchars.
+ (Search::count_duplicates_tuple): Renamed from Search::count_duplicates.
+ (Search::find_positions): Update.
+ (Search::init_selchars_multiset, Search::count_duplicates_multiset,
+ Search::find_alpha_inc): New methods.
+ (Search::prepare): Move preprepare, find_positions calls away.
+ Initialize _alpha_size, _occurrences, _asso_values, _determined here.
+ (Search::optimize): Call preprepare, find_positions here. Initialize
+ _key_positions here.
+ (Search::~Search): Deallocate _alpha_inc.
+ * src/output.cc (Output::Output): Add alpha_inc argument.
+ (Output::output_hash_function): Use _alpha_inc.
+ * src/output.h (Output::Output): Add alpha_inc argument.
+ (Output::_alpha_inc): New field.
+ * src/main.cc (main): Pass _alpha_inc from Search to Output.
+ * tests/chill.exp: Update.
+ * doc/gperf.texi (Algorithmic Details): Remove description of
+ artificial duplicates.
+
+ * src/keyword.h (KeywordExt::_selchars): Change type to
+ 'const unsigned int *'.
+ * src/keyword.cc (sort_char_set): Change argument type to
+ 'unsigned int *'.
+ (KeywordExt::init_selchars): Update.
+ * src/search.h (Search::sort_by_occurrence): Change argument type to
+ 'unsigned int *'.
+ (Search::try_asso_value): Change argument type to 'unsigned int'.
+ (Search::_union_set): Change type to 'unsigned int *'.
+ * src/search.cc (Search::prepare, Search::compute_occurrence,
+ Search::set_determined, Search::already_determined,
+ Search::prepare_asso_values, Search::compute_hash): Update.
+ (compute_disjoint_union): Change argument types to 'unsigned int *'.
+ (Search::sort_by_occurrence): Likewise.
+ (Search::try_asso_value): Change argument type to 'unsigned int'.
+ (Search::change_some_asso_value, Search::~Search): Update.
+ * src/hash-table.cc (Hash_Table::~Hash_Table, Hash_Table::equal,
+ Hash_Table::insert): Update.
+
+ * src/positions.h: New file, extracted from options.h.
+ * src/positions.icc: New file, extracted from options.icc.
+ * src/positions.cc: New file, extracted from options.cc.
+ * src/options.h: Include positions.h. Move classes Positions and
+ PositionsIterator away.
+ * src/options.icc: Move classes Positions and PositionsIterator away.
+ * src/options.cc: Move class Positions away.
+ * src/keyword.cc: Include positions.h instead of options.h.
+ * src/output.h: Include positions.h instead of options.h.
+ * src/search.h: Include positions.h instead of options.h.
+ * src/Makefile.in (OBJECTS): Add positions.o.
+ (POSITIONS_H): New variable.
+ (OPTIONS_H, SEARCH_H, OUTPUT_H, keyword.o): Use it.
+ (positions.o): New rule.
+
+ * src/options.h (POSITIONS): New enum value.
+ (Positions::Positions): New copy constructor.
+ (Positions::operator=, Positions::contains, Position::add,
+ Positions::remove, Positions::print): New method declaration.
+ (Options::get_max_keysig_size): Remove method.
+ * src/options.icc (Positions::Positions): New copy constructor.
+ (Positions::operator=): New method.
+ (Options::get_max_keysig_size): Remove method.
+ * src/options.cc (Options::Options): Initialize _key_positions
+ trivially.
+ (Options::parse_options): Option -k sets POSITIONS.
+ (Positions::contains, Positions::add, Positions::remove,
+ Positions::print): New methods.
+ * src/hash-table.cc (Hash_Table::~Hash_Table): Compute the field
+ width explicitly, instead of using Options::get_max_keysig_size.
+ * src/keyword.h (KeywordExt::init_selchars): Add arguments
+ use_all_chars, positions.
+ (KeywordExt::delete_selchars): New declaration.
+ * src/keyword.cc (KeywordExt::init_selchars): Add arguments
+ use_all_chars, positions. Remove error message if there are no key
+ positions.
+ (KeywordExt::delete_selchars): New method.
+ * src/search.h: Include options.h.
+ (Search::preprepare, Search::init_selchars, Search::delete_selchars,
+ Search::count_duplicates, Search::find_positions): New declarations.
+ (Search::_key_positions): New field.
+ * src/search.cc (Search::Search): Initialize _key_positions.
+ (Search::preprepare, Search::init_selchars, Search::delete_selchars,
+ Search::count_duplicates, Search::find_positions): New functions.
+ (Search::prepare): Call preprepare and find_positions. Tweak error
+ message.
+ (Search::get_max_keysig_size): Use _key_positions instead of
+ option.get_key_positions().
+ (Search::optimize): Tweak error message.
+ * src/output.h: Include options.h.
+ (Output::Output): Add Positions argument.
+ (Output::_key_positions): New field.
+ * src/output.cc (Output::Output): Add Positions argument.
+ (Output::output_hash_function): Omit the table if there are no
+ positions at all. Use _key_positions instead of
+ option.get_key_positions().
+ (Output::output): Output the computed positions as a comment.
+ * src/main.cc (main): Pass the Positions from Searcher to Output.
+ * src/Makefile.in (SEARCH_H, OUTPUT_H): Include OPTIONS_H.
+ * tests/Makefile.in (check-test): Pass key positions explicitly.
+ * tests/gpc.exp: Update.
+ * tests/test-4.exp: Update.
+ * doc/gperf.texi (Algorithmic Details): Mention that -k is not needed
+ usually.
+
+2002-11-16 Bruno Haible <bruno@clisp.org>
+
+ * src/options.h (Options::get_slot_name): Renamed from
+ Options::get_key_name.
+ (Options::set, Options::set_language, Options::set_total_switches,
+ Options::set_function_name, Options::set_slot_name,
+ Options::set_class_name, Options::set_hash_name,
+ Options::set_wordlist_name, Options::set_delimiters): New method
+ declarations.
+ (Options::_language): New field.
+ (Options::_slot_name): Renamed from Options::_key_name.
+ * src/options.icc (Options::set): New method.
+ (Options::get_slot_name): Renamed from Options::get_key_name.
+ * src/options.cc (DEFAULT_FUNCTION_NAME): Renamed from DEFAULT_NAME.
+ (DEFAULT_SLOT_NAME): Renamed from DEFAULT_NAME.
+ (Options::Options): Initialize _language. Update.
+ (Options::~Options): Update.
+ (Options::set_language, Options::set_total_switches,
+ Options::set_function_name, Options::set_slot_name,
+ Options::set_class_name, Options::set_hash_name,
+ Options::set_wordlist_name, Options::set_delimiters): New methods.
+ (Options::parse_options): Call set_language. Update.
+ * src/input.cc (is_declaration, is_declaration_with_arg,
+ is_define_declaration): New functions.
+ (Input::read_input): Accept %DECL declarations.
+ * src/output.cc (Output::output_lookup_function_body): Update.
+ * doc/gperf.texi (Declarations): Add new subnodes.
+ (User-supplied Struct, Gperf Declarations, C Code Inclusion): New
+ nodes.
+ (Keywords, Output Format, Binary Strings, Options): Mention %
+ declarations as being equivalent to the command line options.
+
+ * src/options.cc (Options::long_usage): Rename options -H, -N, -l, -G.
+ (long_options): Add --hash-function-name, --lookup-function-name,
+ --compare-lengths.
+ * doc/gperf.texi (Output Details): Rename options -H, -N, -l, -G.
+ * tests/test-6.exp: Update.
+
+ * src/options.cc (DEFAULT_DELIMITERS): Remove newline.
+ * src/options.cc (Options::long_usage): Change default --delimiters.
+ * doc/gperf.texi (Input Details): Likewise.
+ * tests/test-6.exp: Update.
+
+ * doc/gperf.texi: Move description of option -l from section
+ Algorithmic Details to section Output Details.
+ * src/options.cc (Options::long_usage): Likewise.
+ * tests/test-6.exp: Update.
+
+2002-11-12 Bruno Haible <bruno@clisp.org>
+
+ * src/options.h (Output::get_output_file_name): New method.
+ (Output::_output_file_name): New field.
+ * src/options.icc (Options::get_output_file_name): New method.
+ * src/options.cc (Options::long_usage): Document option --output-file.
+ (Options::Options): Initialize _output_file_name.
+ (long_options): Add --output-file.
+ (Options::parse_options): Handle it.
+ * src/main.cc (main): Open the output file if given by name.
+ * doc/gperf.texi (Output File): New section.
+ * tests/test-6.exp: Update.
+
+2002-11-10 Bruno Haible <bruno@clisp.org>
+
+ * src/input.cc (pretty_input_file_name): New function.
+ (read_input): Use it in all error and warning messages.
+
+ * src/keyword.h (Keyword::_lineno): New field.
+ * src/input.h (Input::_struct_decl_lineno): New field.
+ * src/input.cc (Input::read_input): Set _struct_decl_lineno. Fill
+ each keyword's _lineno field.
+ * src/main.cc (main): Pass _struct_decl_lineno from Input to Output.
+ * src/output.h (Output::Output) Add struct_decl_lineno argument.
+ (Output::_struct_decl_lineno): New field.
+ * src/output.cc (Output::Output) Add struct_decl_lineno argument.
+ (output_keyword_entry): Emit #line directive before table entry.
+ (Output::output): Emit #line directive before _struct_decl.
+
+ Fix memory leaks.
+ * src/keyword.h (empty_string): New declaration.
+ * src/keyword.cc (empty_string): New variable.
+ * src/input.h (Input::_input): Make public.
+ (Input::_input_end): New field.
+ * src/input.cc (read_input): When removing leading whitespace from
+ struct_decl, reallocate it. For rest, use empty_string instead of "".
+ Set _input_end.
+ (Input::~Input): Delete _struct_decl, _struct_tag, _return_type.
+ * src/search.cc (Search::prepare): When removing an element from
+ the keyword list, delete the list node.
+ (Search::~Search): Delete _occurrences, _asso_values.
+ * src/main.cc (main): Between Search::~Search and Input::~Input,
+ destroy the keyword list.
+
+ Rewrite the input routines.
+ * src/input.h: Don't include read-line.h.
+ (Input): Don't inherit from class Read_Line.
+ (Input::read_keys, Input::strcspn, Input::set_output_types,
+ Input::get_array_type, Input::save_include_src,
+ Input::get_special_input): Remove declarations.
+ (Input::read_input): New declaration.
+ (Input::_struct_decl): Renamed from Input::_array_type.
+ (Input::_verbatim_declarations): Renamed from Input::_include_src.
+ (Input::_verbatim_code): Replaces Input::_additional_code.
+ * src/input.cc: Completely rewritten.
+ * src/output.h (Output::Output): Update the verbatim_* arguments.
+ (Output::_struct_decl): Renamed from Output::_array_type.
+ (Output::_verbatim_declarations): Renamed from Output::_include_src.
+ (Output::_verbatim_code): Replaces Output::_additional_code.
+ * src/output.cc (Output::Output): Update the verbatim_* arguments.
+ (Output::output): Output the verbatim_* code pieces with #line.
+ * src/main.cc (main): Call Input::read_input instead of
+ Input::read_keys. Update Output::Output arguments.
+ * src/read-line.h: Remove file.
+ * src/read-line.cc, src/read-line.icc: Remove files.
+ * src/Makefile.in (OBJECTS): Remove read-line.o.
+ (READ_LINE_H): Remove variable.
+ (INPUT_H): Update.
+ (read-line.o): Remove rule.
+ * doc/gperf.texi (Declarations): Correct the example.
+ (Keywords): Mention that lines starting with % are forbidden here.
+ * tests/c-parse.exp: Update.
+ * tests/cplusplus.exp: Update.
+ * tests/gpc.exp: Update.
+ * tests/java.exp: Update.
+ * tests/objc.exp: Update.
+ * tests/test-4.exp: Update.
+
+ * src/options.h (Options::get_input_file_name): New declaration.
+ (Options::_input_file_name): New field.
+ * src/options.icc (Options::get_input_file_name): New method.
+ * src/options.cc (Options::Options): Initialize _input_file_name.
+ (Options::parse_options): Don't open input file, only store it in
+ _input_file_name.
+ * src/main.cc (main): Open input file here.
+ Print an error message upon write error on the output file.
+
+ Upgrade to autoconf-2.52.
+ * configure.in: Use AC_CONFIG_SUBDIRS instead of AC_OUTPUT_SUBDIRS.
+ * Makefile.devel (configure, lib/configure, src/configure,
+ tests/configure, doc/configure): Use autoconf-2.52.
+
+2002-11-09 Bruno Haible <bruno@clisp.org>
+
+ * doc/gperf.texi: Talk about "bytes" instead of "characters". Talk
+ about "keywords", not "keys". Talk about "input file", not "keyfile".
+ (@menu): Fix a menu entry.
+ (Contributors): Don't mention cperf.
+ (Motivation): Fix an off-by-one error in the definition of "minimal".
+ Mention GNU Java. Recommend http URL instead of anonymous ftp.
+ (Search Structures): Mention GNU Java.
+ (Output Format): Drop reference to node 'Implementation'.
+ (Output Details): Talk about "slot-name" instead of "key name".
+ (Algorithmic Details): Talk about "selected byte positons", not
+ "key positions". Upper limit is now 255. Explain a third reason
+ why duplicates can occur. Describe negative effects of
+ --occurrence-sort.
+ (Implementation): Remove chapter.
+
+2002-11-07 Bruno Haible <bruno@clisp.org>
+
+ * src/bool-array.cc (Bool_Array::~Bool_Array): Free _storage_array.
+ * src/search.cc (Search::~Search): Free _union_set, _determined.
+
+ * tests/Makefile.in (check-test): Don't redirect stderr.
+
+2002-11-05 Bruno Haible <bruno@clisp.org>
+
+ * src/keyword-list.h (mergesort_list): New declarations.
+ * src/keyword-list.cc (Keyword_Comparison): New type.
+ (merge, mergesort_list): New functions, moved here from search.cc.
+ * src/search.h (Search::merge, Search::merge_sort): Remove methods.
+ (Search::_occurrence_sort, Search::_hash_sort): Remove fields.
+ * src/search.cc (Search::merge, Search::merge_sort): Remove methods.
+ (greater_by_occurrence, less_by_hash_value): New functions.
+ (Search::reorder, Search::sort): Use mergesort_list.
+
+2002-11-04 Bruno Haible <bruno@clisp.org>
+
+ * src/options.h (Options::_asso_iterations): New field.
+ (Options::get_asso_iterations): New method declaration.
+ * src/options.icc (Options::get_asso_iterations): New method.
+ * src/options.cc (Options::short_usage): Mention j<jump> and m<num>.
+ (Options::long_usage): Document option -m.
+ (Options::Options): Initialize _asso_iterations.
+ (Options::~Options): Print _asso_iterations too.
+ (long_options): Add --multiple-iterations.
+ (Options::parse_options): Handle option -m.
+ * src/keyword-list.h (copy_list, delete_list): New declarations.
+ * src/keyword-list.cc (copy_list, delete_list): New functions.
+ * src/search.h (Search::_initial_asso_value, Search::_jump): New fields.
+ * src/search.cc (Search::prepare_asso_values): Initialize
+ _initial_asso_value and _jump here.
+ (Search::init_asso_values): Use _initial_asso_value.
+ (Search::try_asso_value): Use _jump.
+ (Search::optimize): If option -m was given, iterate over different
+ values for _initial_asso_value and _jump.
+ * doc/gperf.texi (Algorithmic Details): Document option -m.
+ * tests/test-6.exp: Update.
+
+2002-11-03 Bruno Haible <bruno@clisp.org>
+
+ Bug fix: When option -j 0 was used without option -r, the output was
+ not random.
+ * src/search.h (Search::prepare_asso_values): New method declaration.
+ * src/search.cc (Search::prepare_asso_values): New method, extracted
+ from Search::init_asso_values. Call srand also when "-j 0" was given.
+ (Search::optimize): Call prepare_asso_values().
+
+ * src/hash-table.h (Hash_Table::_ignore_length, Hash_Table::equal):
+ Declare as const.
+ * src/hash-table.cc (Hash_Table::equal): Declare as const.
+ * src/input.h (Input::_factory): Declare as const.
+ * src/keyword-list.h (Keyword_List::first, KeywordExt_List::first):
+ Declare as const.
+ * src/keyword-list.icc (Keyword_List::first, KeywordExt_List::first):
+ Declare as const.
+ * src/output.h (Output::num_hash_values, Output::output_constants,
+ Output::output_hash_function, Output::output_keylength_table,
+ Output::output_keyword_table, Output::output_lookup_array,
+ Output::output_lookup_tables, Output::output_lookup_function_body,
+ Output::output_lookup_function, Output::_array_type,
+ Output::_additional_code, Output::_include_src, Output::_total_keys,
+ Output::_total_duplicates, Output::_max_key_len, Output::_min_key_len):
+ Declare as const.
+ * src/output.cc (Output::num_hash_values, Output::output_constants,
+ Output::output_hash_function, Output::output_keylength_table,
+ Output::output_keyword_table, Output::output_lookup_array,
+ Output::output_lookup_tables, Output::output_lookup_function_body,
+ Output::output_lookup_function): Declare as const.
+ * src/search.h (Search::merge, Search::merge_sort,
+ Search::compute_occurrence, Search::already_determined,
+ Search::keyword_list_length, Search::max_key_length,
+ Search::get_max_keysig_size, Search::compute_hash,
+ Search::sort_by_occurrence): Declare as const.
+ * src/search.cc (Search::merge, Search::merge_sort,
+ Search::compute_occurrence, Search::already_determined,
+ Search::keyword_list_length, Search::max_key_length,
+ Search::get_max_keysig_size, Search::compute_hash,
+ Search::sort_by_occurrence): Declare as const.
+
+ * src/output.cc (Output::output): Set char_to_index to a cast in all
+ cases. Avoids gcc warnings on the generated code.
+
+ * src/output.cc (Output_Enum): Prepend an underscore to field names.
+ (Output_Expr1): Likewise.
+ (Output::output_hash_function): Simplify the special case for "-k 1,$".
+
+ * src/search.h (Search::init_asso_values, Search::find_asso_values):
+ New declarations.
+ (Search::try_asso_value): Renamed from Search::affects_prev.
+ (Search::change_some_asso_value): Renamed from Search::change.
+ (Search::set_asso_max, Search::get_asso_max): Remove methods.
+ (Search::_union_set): New field.
+ * src/search.cc (Search::init_asso_values): New method, extracted
+ from Search::optimize.
+ (Search::try_asso_value): Renamed from Search::affects_prev. Take the
+ iteration count as argument.
+ (Search::change_some_asso_value): Renamed from Search::change. Don't
+ make union_set static. Don't increment _fewest_collisions here.
+ (Search::find_asso_values): New method, extracted from
+ Search::optimize.
+ (Search::optimize); Update.
+
+ * src/search.h (Search::compute_hash): Renamed from Search::hash.
+ (Search::compute_disjoint_union): Remove declaration.
+ (Search::sort_by_occurrence): Renamed from Search::sort_set.
+ * src/search.cc (Search::compute_hash): Renamed from Search::hash.
+ (compute_disjoint_union): Renamed from Search::compute_disjoint_union.
+ (Search::sort_by_occurrence): Renamed from Search::sort_set.
+ (Search::change): Simplify loop.
+
+ * src/search.h (Search::clear_determined): New declaration.
+ * src/search.cc (Search::clear_determined): New method.
+ (Search::already_determined): Optimize.
+ (Search::reorder): Even when the next keyword after the current one
+ is completely determined, move all determined keywords after the
+ current one.
+
+ Compute the occurrences after removal of duplicates, not before.
+ * src/keyword.h (KeywordExt::init_selchars): Remove occurrences
+ argument.
+ * src/keyword.cc (KeywordExt::init_selchars): Likewise.
+ * src/search.cc (Search::prepare): Reorder the code. Compute the
+ occurrences after removal of duplicates.
+ (Search::merge_sort): Optimize the loop.
+ (Search::compute_occurrence): Renamed from Search::get_occurrence.
+ * src/search.h (Search::compute_occurrence): Renamed from
+ Search::get_occurrence.
+ * tests/chill.exp: Regenerated.
+
+ Bug fix: The hash table could fail to detect duplicates, between
+ keywords of different length, when option -n (option[NOLENGTH]) was
+ given.
+ * src/hash-table.h (Hash_Table::Hash_Table): Pass table size, not
+ vector and vector size as arguments.
+ (Hash_Table::_log_size): New field.
+ (Hash_Table::equal): New declaration.
+ * src/hash-table.cc (size_factor): New variable.
+ (Hash_Table::Hash_Table): Pass table size, not vector and vector size
+ as arguments. Allocate the vector here.
+ (Hash_Table::~Hash_Table): Deallocate the vector here.
+ (Hash_Table::equal): New function.
+ (Hash_Table::insert): Use it. Don't use item->_allchars_length for the
+ increment if _ignore_length is true.
+ * src/search.cc (TABLE_MULTIPLE): Remove variable.
+ (Search::prepare): Update.
+
+2002-11-02 Bruno Haible <bruno@clisp.org>
+
+ Provide documentation also in PDF format.
+ * doc/Makefile.in (pdfdir, TEXI2PDF): New variables.
+ (all): Depend on pdf.
+ (pdf, gperf.pdf): New rules.
+ (maintainer-clean): Remove the PDF file.
+
+ * src/keyword-list.icc: New file, extracted from keyword-list.h.
+ * src/keyword-list.h: Include keyword-list.icc. Move inline methods
+ to there.
+ * src/keyword-list.cc: Include keyword-list.icc.
+ * src/Makefile.in (KEYWORD_LIST_H): Add keyword-list.icc.
+
+ * lib/hashpjw.h (hashpjw): Change argument type to 'unsigned char *'.
+ * lib/hash.cc (hashpjw): Likewise.
+ * src/keyword.icc: New file.
+ * src/keyword.h: Include keyword.icc.
+ (KeywordExt::_selchars): Change type to 'unsigned char *'.
+ * src/keyword.cc: Include keyword.icc.
+ (Keyword::Keyword, KeywordExt::KeywordExt): Move to keyword.icc.
+ (sort_char_set): Change argument type to 'unsigned char *'.
+ (KeywordExt::init_selchars): Update.
+ * src/search.h (Search::compute_disjoint_union): Change argument types
+ to 'unsigned char *'.
+ (Search::sort_set): Likewise.
+ (Search::affects_prev): Change argument type to 'unsigned char'.
+ * src/search.cc (Search::prepare): Initialize _duplicate_link here.
+ (Search::get_occurrence, Search::set_determined,
+ Search::already_determined, Search::hash): Update.
+ (Search::compute_disjoint_union): Change argument types to
+ 'unsigned char *'.
+ (Search::sort_set): Likewise.
+ (Search::affects_prev): Change argument type to 'unsigned char'.
+ (Search::change): Update.
+ * src/Makefile.in (KEYWORD_H): Add keyword.icc.
+
+ * src/options.cc (Options::parse_options): Fix error message.
+
+ * src/read-line.h (Read_Line::Read_Line): Make FILE* argument
+ mandatory. Move body to read-line.icc.
+ * src/read-line.icc (Read_Line::Read_Line): New constructor.
+ * src/input.h (Input::Input): Add FILE* argument.
+ * src/input.cc (Input::Input): Likewise.
+ * src/main.cc (main): Pass stdin to Input constructor.
+
+ * src/options.h (DEFAULTCHARS): Remove.
+ (Positions::MAX_KEY_POS): Set to 255.
+ (Positions::_positions): Increase array size.
+ (PositionIterator::EOS): Set to -1.
+ (PositionIterator::_index): Change type to 'unsigned int'.
+ * src/options.icc (Positions::Positions): Don't store
+ PositionIterator::EOS.
+ (PositionIterator::next): Produce PositionIterator::EOS here.
+ * src/options.cc (Options::long_usage): Use MAX_KEY_POS, not
+ MAX_KEY_POS-1.
+ (PositionStringParser): Rename field _size to _in_range. Rename
+ field _curr_value to _range_curr_value. Rename field _upper_bound
+ to _range_upper_bound.
+ (PositionStringParser::nextPosition): Comments.
+ (Options::Options): Update.
+ (Options::~Options): Update.
+ (long_options): Use NULL, not 0.
+ (Options::parse_options): Set BAD_VALUE to -2; -1 is now EOS. Bug fix:
+ Check against array overflow when more than MAX_KEY_POS positions are
+ given. Don't store PositionIterator::EOS.
+ Check against extra arguments before opening the input file.
+ * src/output.cc (Output::output_hash_function): Change test which
+ was for option[DEFAULTCHARS].
+ * tests/test-6.exp: Update.
+
+ * src/options.h (Options::get_delimiters): Renamed from
+ Options::get_delimiter.
+ * src/options.icc (Options::get_delimiters): Renamed from
+ Options::get_delimiter.
+ * src/input.cc (Input::read_keys): Update.
+
+ Bug fix.
+ * src/options.cc (Options::print_options): Escape backquote inside
+ double-quoted strings.
+
+ Bug fix.
+ * src/keyword.cc (KeywordExt::init_selchars): Avoid comparison with
+ uninitialized member variable. Found with 'valgrind'.
+
+ * src/version.cc: Include version.h.
+ * src/Makefile.in (OBJECTS): Reorder.
+ (KEYWORD_H, KEYWORD_LIST_H, INPUT_H, SEARCH_H, OUTPUT_H): New
+ variables.
+ (HASH_TABLE_H): Update.
+ (options.o, read-line.o, keyword.o, keyword-list.o, input.o, search.o,
+ output.o, main.o): Update dependencies.
+
+ * src/vectors.h: Remove file.
+ * src/vectors.cc: Remove file.
+ * src/search.h: Don't include vectors.h.
+ (Search): Don't inherit from Vectors. New fields _alpha_size,
+ _occurrences, _asso_values.
+ (Search::_determined, Search::get_occurrence, Search::set_determined,
+ Search::already_determined, Search::hash, Search::sort_set): Make
+ nonstatic.
+ * src/search.cc (Search::Search): Initialize _alpha_size, _occurrences,
+ _asso_values, _determined.
+ (Search::optimize, Search::~Search): Update.
+ * src/output.h: Don't include vectors.h.
+ (Output): Remove field _v. New fields _alpha_size, _occurrences,
+ _asso_values.
+ (Output::Output): Replace Vectors* argument with alpha_size,
+ occurrences, asso_values.
+ * src/output.cc (Output::Output): Replace Vectors* argument with
+ alpha_size, occurrences, asso_values.
+ (Output::output_hash_function): Update.
+ * src/main.cc (main): Don't set Vectors::ALPHA_SIZE.
+ Pass _alpha_size, _occurrences, _asso_values from Search to Output.
+ * src/keyword.h: Don't include vectors.h.
+ * src/Makefile.in (OBJECTS): Remove vectors.o.
+ (VECTORS_H): Remove variable.
+ (vectors.o): Remove rule.
+
+ * src/search.h: New file, combines src/key-list.h, src/gen-perf.h.
+ * src/search,cc: New file, combines src/key-list.cc, src/gen-perf.cc.
+ * src/key-list.h: Remove file.
+ * src/key-list.cc: Remove file.
+ * src/gen-perf.h: Remove file.
+ * src/gen-perf.cc: Remove file.
+ * src/main.cc (KeywordExt_Factory): Moved here from gen-perf.cc.
+ (main): Inline some code from gen-perf.cc.
+ * src/keyword.h (KeywordExt::init_selchars): Take the occurrences
+ vector as argument.
+ * src/keyword.cc (KeywordExt::init_selchars): Take the occurrences
+ vector as argument.
+ * src/input.cc (Input::set_output_types): Initialize _array_type,
+ _return_type, _struct_tag.
+ (Input::read_keys): Initialize _additional_code.
+ * src/Makefile.in (OBJECTS): Add search.o.
+ Remove key-list.o, gen-perf.o.
+ (KEY_LIST_H, GEN_PERF_H): Remove variables.
+ (gen-perf.o, key-list.o): Remove rules.
+ (search.o): New rule.
+
+ * *, */*: Update copyright notice to GPL version 2.
+
+ * src/keyword-list.h (Keyword_List): New class.
+ (KeywordExt_List): Inherit from it.
+ * src/keyword-list.cc (Keyword_List::Keyword_List): New constructor.
+ (KeywordExt_List::KeywordExt_List): Update.
+ * src/input.h (Input::Input): Add Keyword_Factory argument.
+ (Input::_factory): New field.
+ (Input::_head): Change type to Keyword_List*.
+ (Input::parse_line): New declaration.
+ * src/input.cc (Input::Input): New constructor.
+ (Input::parse_line): Renamed from parse_line. Use the _factory.
+ (Input::read_keys): Update.
+ * src/key-list.cc (KeywordExt_Factory): New class.
+ (Key_List::read_keys): Pass a KeywordExt_Factory as Input constructor
+ argument.
+
+ Avoid g++ -Wold-style-cast warnings.
+ * src/bool-array.icc: Use new-style casts.
+ * src/gen-perf.cc: Likewise.
+ * src/input.cc: Likewise.
+ * src/key-list.cc: Likewise.
+ * src/keyword.cc: Likewise.
+ * src/options.cc: Likewise.
+ * src/output.cc: Likewise.
+ * src/hash-table.cc: Likewise. Remove (char *) cast in memset argument.
+
+ * src/keyword-list.h (KeywordExt_List): Don't inherit from KeywordExt.
+ (KeywordExt_List::KeywordExt_List): Take a KeywordExt* as argument.
+ (KeywordExt_List::_car): New field.
+ (KeywordExt_List::first): Use it.
+ * src/keyword-list.cc (KeywordExt_List::KeywordExt_List): Take a
+ KeywordExt* as argument.
+ * src/input.cc (parse_line): Create the KeywordExt separately.
+
+ Start using bool.
+ * src/bool-array.h (Bool_Array::set_bit): Change return type to bool.
+ * src/bool-array.icc (Bool_Array::set_bit): Likewise.
+ * src/gen-perf.h (Gen_Perf::affects_prev): Likewise.
+ * src/gen-perf.cc (Gen_Perf::affects_prev): Likewise.
+ * src/hash-table.h (Hash_Table::_ignore_length): Change type to bool.
+ (Hash_Table::Hash_Table): Change 3rd argument type to bool.
+ * src/hash-table.cc (Hash_Table::Hash_Table): Likewise.
+ * src/input.h (Input::_additional_code): Change type to bool.
+ * src/input.cc (Input::read_keys): Update.
+ * src/key-list.h (Key_List::_occurrence_sort, Key_List::_hash_sort,
+ Key_List::_additional_code): Change type to bool.
+ (Key_List::_determined): Change element type to bool.
+ (Key_List::already_determined): Change return type to bool.
+ * src/key-list.cc (Key_List::_determined): Change element type to bool.
+ (Key_List::set_determined): Update.
+ (Key_List::already_determined): Change return type to bool.
+ (Key_List::reorder, Key_List::sort, Key_List::Key_List): Update.
+ * src/options.h (Positions::sort): Change return type to bool.
+ (Options::operator[]): Likewise.
+ * src/options.icc (Positions::sort): Change return type to bool.
+ (Options::operator[]): Likewise.
+ * src/output.h (Output::Output): Change 5th argument type to bool.
+ (Output::_additional_code): Change type to bool.
+ * src/output.cc (Output::Output): Change 5th argument type to bool.
+
+2002-10-16 Bruno Haible <bruno@clisp.org>
+
+ * src/*.h: Align all member names at column 24.
+
+2002-10-15 Bruno Haible <bruno@clisp.org>
+
+ * src/input.h: New file.
+ * src/input.cc: New file, extracted from key-list.cc.
+ * src/key-list.h (Key_List): Don't inherit from Read_Line.
+ (Key_List::get_special_input,
+ Key_List::save_include_src, Key_List::get_array_type,
+ Key_List::strcspn, Key_List::set_output_types): Remove methods.
+ * src/key-list.cc (Key_List::get_special_input,
+ Key_List::save_include_src, Key_List::get_array_type,
+ Key_List::strcspn, Key_List::set_output_types, parse_line): Move to
+ src/input.cc.
+ (Key_List::read_keys): Use Input::read_keys.
+ (Key_List::Key_List): Update.
+ * src/gen-perf.cc: Update.
+ * src/Makefile.in (OBJECTS): Add input.o.
+ (input.o): New rule.
+
+2002-10-14 Bruno Haible <bruno@clisp.org>
+
+ * src/options.cc: Don't include "vector.h".
+ (Options::parse_options): Don't initialize Vectors::ALPHA_SIZE here.
+ * src/vectors.cc (Vectors::ALPHA_SIZE): Don't initialize here.
+ * src/gen-perf.cc (Gen_Perf::Gen_Perf): Initialize Vectors::ALPHA_SIZE.
+
+ * src/options.h (Positions): New class.
+ (PositionIterator): New class.
+ (Options::parse_options): Renamed from Options::operator().
+ (Options::get_asso_max, Options::set_asso_max): Move to class Key_List.
+ (Options::reset, Options::get): Remove, replaced by class
+ PositionIterator.
+ (Options::get_initial_asso_value): Renamed from Options::initial_value.
+ (Options::key_sort): Remove, replaced by Positions::sort.
+ (Options): Make all fields and methods non-static.
+ * src/options.icc (Positions::Positions, Positions::operator[],
+ Positions::get_size, Positions::pointer, Positions::set_size,
+ Positions::sort, PositionIterator::PositionIterator,
+ PositionIterator::next): New methods.
+ (Options::get_initial_asso_value): Renamed from Options::initial_value.
+ (Options::get_size_multiple): New method.
+ (Options::get_key_positions): New method.
+ (Options::get_max_keysig_size): Implement using _key_positions.
+ * src/options.cc (Options::long_usage): Split big string into small
+ pieces.
+ (PositionStringParser): Prefix field names with _.
+ (Options::Options): Update.
+ (Options::~Options): Fix explanation of of _size_multiple. Don't print
+ _key_positions if it is effectively ignored.
+ (Options::parse_options): Renamed from Options::operator(). Update.
+ * src/key-list.h (Key_List): New field _size. New methods get_asso_max,
+ set_asso_max, get_max_keysig_size.
+ * src/key-list.cc (Key_List::read_keys): Don't make side effects on
+ options.
+ (Key_List::dump): Use Key_List::get_max_keysig_size() instead of
+ Options::get_max_keysig_size().
+ (Key_List::get_max_keysig_size): New function.
+ * src/hash-table.cc (Hash_Table::~Hash_Table): Compute the field
+ width on the fly if option[ALLCHARS].
+ * src/gen-perf.cc (Gen_Perf::Gen_Perf): Update,
+ Use Options::get_size_multiple() instead of Options::get_asso_max().
+ Use Key_List::get_asso_max() instead of Options::get_asso_max(). Use
+ Key_List::get_max_keysig_size() instead of
+ Options::get_max_keysig_size().
+ (Gen_Perf::affects_prev): Likewise.
+ (Gen_Perf::change): Likewise.
+ * src/keyword.cc: Update.
+ * src/main.cc: Update.
+ * src/output.cc: Update.
+ * tests/test-6.exp: Update.
+
+2002-10-13 Bruno Haible <bruno@clisp.org>
+
+ * src/bool-array.*: Some polishing.
+
+ * src/options.h (Options::operator=, Options::operator!=): Remove
+ unused methods.
+ * src/options.icc (Options::operator=, Options::operator!=): Remove.
+
+ * src/*.h: Prefix all field names with _.
+ * src/*.cc, src/*.icc: Update.
+
+ * src/*: Simplify declarations of functions without arguments.
+
+2002-10-04 Bruno Haible <bruno@clisp.org>
+
+ * src/output.h: New file, extracted from key-list.h.
+ * src/output.cc: New file, extracted from key-list.cc.
+ * src/key-list.h (Key_List): Make some fields protected. Move output
+ routines to src/output.h.
+ * src/key-list.cc: Move output routines to src/output.cc.
+ * src/gen-perf.cc (Gen_Perf::doit_all): Use class Output.
+ * src/Makefile.in (OBJECTS): Add output.o.
+ (output.o): New rule.
+
+2002-10-03 Bruno Haible <bruno@clisp.org>
+
+ * src/iterator.h: Remove file.
+ * src/iterator.cc: Remove file.
+ * src/options.cc: (PositionStringParser): New class, taken from old
+ iterator.cc.
+ * src/Makefile.in (OBJECTS): Remove iterator.o.
+ (ITERATOR_H): Remove variable.
+ (iterator.o): Remove rule.
+
+ * src/keyword-list.h: New file.
+ * src/keyword-list.cc: New file.
+ * src/list-node.h: Remove file.
+ * src/list-node.cc: Remove file.
+ * src/keyword.h (KeywordExt::init_selchars): New declaration.
+ * src/keyword.cc (sort_char_set, KeywordExt::init_selchars): New, from
+ old list-node.cc.
+ * src/gen-perf.cc: Replace List_Node by KeywordExt or KeywordExt_List,
+ as appropriate.
+ * src/hash-table.h: Likewise.
+ * src/key-list.h: Likewise.
+ * src/key-list.cc: Likewise.
+ * src/Makefile.in (OBJECTS): Remove list-node.o, add keyword-list.o.
+ (LIST_NODE_H): Remove macro.
+ (list-node.o): Remove rule.
+ (keyword-list.o): New rule.
+
+ * src/keyword.h (KeywordExt): New class.
+ * src/keyword.cc (KeywordExt): New constructor.
+ * src/list-node.h (List_Node): Inherit from KeywordExt.
+ * src/list-node.cc: Update.
+ * src/gen-perf.cc: Update.
+ * src/hash-table.cc: Update.
+ * src/key-list.cc: Update.
+ (output_keyword_entry): Change argument type to KeywordExt*.
+
+ * src/keyword.h: New file.
+ * src/keyword.cc: New file.
+ * src/list-node.h (List_Node): Extend Keyword.
+ * src/list-node.cc: Update.
+ * src/gen-perf.cc: Update.
+ * src/hash-table.cc: Update.
+ * src/key-list.cc: Update.
+ * src/Makefile.in (OBJECTS): Add keyword.o.
+ (keyword.o): New rule.
+
+ * src/key-list.cc (Key_List::read_keys): Allocate the memory for the
+ hash table using 'new'.
+ (Key_List::output_lookup_array): Allocate the memory for the duplicates
+ array using 'new'.
+ * src/options.h (LARGE_STACK_ARRAYS): Remove definition.
+ * src/main.cc (main): Remove setrlimit call.
+ * src/configure.in: Don't test for unistd.h, sys/time.h,
+ sys/resource.h, getrlimit, setrlimit.
+
+ * src/bool-array.h (Bool_Array): Make all members non-static.
+ Add an argument to the constructor. Remove init(), rename reset() to
+ clear(), rename find() to set_bit().
+ * src/bool-array.icc: Move init() code into the constructor.
+ Rename reset() to clear(), rename find() to set_bit().
+ * src/gen-perf.h (Gen_Perf): Add collision_detector member.
+ * src/gen-perf.cc: Update.
+
+ * src/gen-perf.h (Gen_Perf::doit_all): Renamed from
+ Gen_Perf::operator ().
+ * src/gen-perf.cc (Gen_Perf::doit_all): Renamed from
+ Gen_Perf::operator ().
+ * src/main.cc: Update.
+
+ * src/read-line.h (Read_Line::read_next_line): Renamed from
+ Read_Line::get_line.
+ * src/read-line.icc: Likewise.
+ * src/read-line.cc: Update.
+ * src/key-list.cc: Update.
+
+ * lib/getline.h: New file.
+ * lib/getline.cc: New file.
+ * lib/Makefile.in (OBJECTS): Add getline.o.
+ (getline.o): New rule.
+ * src/read-line.h (Read_Line::readln_aux): Remove declaration.
+ * src/read-line.cc (Read_Line::readln_aux): Remove function.
+ * src/read-line.icc (Read_Line::get_line): Use ::get_line.
+ * src/options.h (LARGE_STACK): Remove macro.
+
+ * src/bool-array.h (STORAGE_TYPE): Remove type.
+ Use 'unsigned int' instead of STORAGE_TYPE.
+ * src/bool-array.cc: Likewise.
+ * src/bool-array.icc: Likewise.
+ * src/gen-perf.cc: Likewise.
+
+ * src/new.cc: Remove file.
+ * src/Makefile.in (OBJECTS): Remove new.o.
+ (new.o): Remove rule.
+ * src/configure.in: Remove test for HAVE_THROW_DECL.
+ * acconfig.h: Remove file.
+
+ * src/trace.h: Remove file.
+ * src/trace.cc: Remove file.
+ * src/Makefile.in (OBJECTS): Remove trace.o.
+ (TRACE_H): Remove variable.
+ (trace.o): Remove rule.
+ Update all dependencies.
+ * src/bool-array.h, src/bool-array.cc, src/bool-array.icc: Don't use T.
+ * src/gen-perf.cc: Likewise.
+ * src/hash-table.cc: Likewise.
+ * src/iterator.cc: Likewise.
+ * src/key-list.cc: Likewise.
+ * src/list-node.cc: Likewise.
+ * src/main.cc: Likewise.
+ * src/new.cc: Likewise.
+ * src/options.h, src/options.cc, src/options.icc: Likewise.
+ * src/read-line.h, src/read-line.cc, src/read-line.icc: Likewise.
+
+ * tests/Makefile.in: Use gperf option -I, to avoid gcc-3.x warnings.
+ * tests/test.c: Don't use gets(), to avoid warnings.
+
+2001-08-02 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
+
+ * doc/gperf.texi: Change bug report address to <bug-gnu-gperf@gnu.org>.
+ * README: Updated.
+
+2000-12-18 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
+
+ * src/configure.in: Add check for rand() in libm. Needed for BeOS.
+ * src/Makefile.in (LIBS): Use @GPERF_LIBM@ instead of hardwiring -lm.
+
+2000-11-20 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
+
+ * doc/help2man: Update to version 1.23.
+
2000-09-26 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
* gperf-2.7.2 released.