1
0
mirror of https://git.savannah.gnu.org/git/gperf.git synced 2025-12-02 21:19:24 +00:00
Commit Graph

240 Commits

Author SHA1 Message Date
Bruno Haible
9273667ad1 Fix -Wshadow=compatible-local warnings.
* src/search.cc (Search::prepare_asso_values): Declare 'temp' in each
'for' loop separately.
2025-04-26 14:45:56 +02:00
Bruno Haible
d2aeec9b9c Release gperf-3.3.
* src/version.cc (version_string): Bump.
* tests/*.exp: Update.
* NEWS: Mention the changes.
2025-04-20 14:07:11 +02:00
Bruno Haible
a3fc358838 Add two more assertions.
Suggested by Frank Wojcik.

* src/search.cc (Search::find_asso_values): Assert that a step's
_changing_count is positive.
2025-04-20 11:56:45 +02:00
Bruno Haible
07009de281 Fix typo in comment.
Reported by Frank Wojcik.

* src/search.cc (Search::find_asso_values): Fix typo in comment.
2025-04-20 11:56:03 +02:00
Bruno Haible
aa03db7dda Use an array-list instead of a linked-list of equiv.-classes, part 2.
* src/search.cc (Search::compute_partition): Fix a memory leak.
2025-04-20 10:50:29 +02:00
Bruno Haible
e63c9b209e Use a hash table in compute_partition, part 2.
* src/search.cc (Search::compute_partition): Fix a memory leak.
2025-04-20 10:50:13 +02:00
Bruno Haible
70899c856b Optimize: Test large equivalence classes for conflict first.
This reduces the execution time of gperf on large inputs by ca. 10%.

* src/search.cc (cmp_equiv_classes): New function.
(compute_partition): Sort the equivalence classes according to
decreasing size.
2025-04-20 02:31:42 +02:00
Bruno Haible
9e29799ac3 Refactor: Use an array-list instead of a linked-list of equiv.-classes.
* src/search.h (Search::compute_partition): Return a 'Partition *', not
a 'EquivalenceClass *'.
(Search::count_possible_collisions, Search::unchanged_partition): Change
parameter from 'EquivalenceClass *' to 'Partition *'.
* src/search.cc (struct EquivalenceClass): Remove field _next.
(struct Partition): New type.
(struct Step): Change type of _partition from 'EquivalenceClass *' to
'Partition *'.
(Search::compute_partition): Return a 'Partition *', not a
'EquivalenceClass *'.
(delete_partition): Update.
(Search::count_possible_collisions, Search::unchanged_partition): Change
parameter from 'EquivalenceClass *' to 'Partition *'.
(Search::find_asso_values): Update.
2025-04-20 02:31:42 +02:00
Bruno Haible
b1ff3c70b1 Optimize: Use an array-list instead of a linked-list of keywords.
Storing list elements in contiguous memory means: less cache misses.
This reduces the execution time of gperf on large inputs by ca. 30%.

* src/arraylist.h: New file.
* src/arraylist.cc: New file.
* src/Makefile.in (OBJECTS): Add arraylist.$(OBJEXT).
(ARRAYLIST_H): New variable.
(arraylist.$(OBJEXT)): New rule.
(search.$(OBJEXT)): Update dependencies.
(SOURCE_FILES): Add arraylist.cc and arraylist.h.
* src/search.cc: Include arraylist.h.
(struct EquivalenceClass): An an ArrayList field. Remove the linked-list
fields. Add a constructor.
(Search::compute_partition, delete_partition): Update.
(Search::count_possible_collisions, Search::unchanged_partition,
Search::find_asso_values): Update.
2025-04-20 02:31:35 +02:00
Bruno Haible
a69b7c1c81 Optimize: Minimize object references in find_asso_values.
This reduces the execution time of gperf on large inputs by ca. 4%.

* src/search.cc (Search::find_asso_values): Cache some values in local
variables.
2025-04-19 15:05:31 +02:00
Bruno Haible
772a63e46d Optimize: Use a hash table in compute_partition.
This reduces the execution time of gperf on large inputs by ca. 30%.

* autogen.sh (GNULIB_MODULES): Add map-c++, hash-map.
* src/keyword.h: Include <stddef.h>.
(struct KeywordExt): Add fields _undetermined_chars,
_undetermined_chars_length, _undetermined_chars_hashcode.
* src/search.cc: Include gl_map.hh, gl_hash_map.h.
(Search::prepare_asso_values): Initialize the _undetermined_chars field.
(struct EquivalenceClass): Remove the fields _undetermined_chars,
_undetermined_chars_length.
(undetermined_equals, undetermined_hashcode): New functions.
(Search::compute_partition): Initialize the _undetermined_chars* fields
of all keywords. Use a hash map instead of a loop over the equivalence
classes.
(Search::find_good_asso_values): Deallocate the _undetermined_chars field.
2025-04-19 15:03:10 +02:00
Bruno Haible
43fa5ebcb7 Optimize: Make Bool_Array take less memory.
Less memory means: less cache misses.
This reduces the execution time of gperf on large inputs by ca. 2.5%.

* src/bool-array.h (Bool_Array): For the _storage_array and
_iteration_number fields, use 'unsigned char' instead of 'unsigned int'.
* src/bool-array.icc (Bool_Array::Bool_Array, Bool_Array::clear: Update.
* src/bool-array.cc (Bool_Array::~Bool_Array): Update.
2025-04-19 15:01:26 +02:00
Bruno Haible
3cb2d2f1d2 build: Update dependencies after 2025-04-16 change.
* src/Makefile.in (*.$(OBJEXT)): Depend on $(CONFIG_H).
2025-04-19 14:33:33 +02:00
Bruno Haible
8872451544 Improve comments.
* src/search.cc: Fix comments.
2025-04-17 17:30:21 +02:00
Bruno Haible
6ca5ea1384 build: Use more gnulib modules.
* autogen.sh (GNULIB_MODULES): Add read-file.
Copy also config.guess and config.sub.
* lib/Makefile.am (BUILT_SOURCES, MOSTLYCLEANDIRS): New variables.
(libgp_a_SOURCES): Remove getline.h, getline.cc.
* lib/getline.h: Remove file.
* lib/getline.cc: Remove file.
* src/configure.ac: Change config.h to also include ../lib/config.h.
* src/output.cc: Include <config.h> first.
* src/search.cc: Likewise.
* src/bool-array.cc: Include <config.h>.
* src/keyword.cc: Likewise.
* src/keyword-list.cc: Likewise.
* src/hash-table.cc: Likewise.
* src/main.cc: Likewise.
* src/options.cc: Likewise.
* src/positions.cc: Likewise.
* src/version.cc: Likewise.
* src/input.cc: Likewise. Include read-file.h instead of getline.h.
(Input<KT>::read_input): Use fread_file instead of get_delim.
2025-04-16 22:28:11 +02:00
Bruno Haible
5533d54f9a build: Prepare for using generated .h files in lib/.
* src/Makefile.in (CPPFLAGS): Add more -I options.
2025-04-16 22:28:11 +02:00
Bruno Haible
8dff71fb70 build: Remove left-overs from config.h_vms. 2025-04-16 19:21:27 +02:00
Bruno Haible
1a67526a17 Release gperf-3.2.1.
* src/version.cc (version_string): Bump.
* tests/*.exp: Update.
* NEWS: Mention the changes.
2025-04-13 18:12:04 +02:00
Bruno Haible
3bab6ab7bf Avoid "-Wundef" warnings in C++ mode on the generated code.
Reported by Heiko Becker <mail@heiko-becker.de> in
<https://lists.gnu.org/archive/html/bug-gperf/2025-04/msg00001.html>
and by Thomas Klausner <wiz@netbsd.org>.

* src/output.cc (Output::output_hash_function): Emit a
'defined __STDC_VERSION__' before the test of __STDC_VERSION__.
* 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: Update.
2025-04-09 12:29:19 +02:00
Bruno Haible
fe7539a0f9 Release gperf-3.2.
* src/options.cc (Options::parse_options): Bump copyright year.
* NEWS: Mention a few more changes.
2025-04-05 16:31:52 +02:00
Bruno Haible
8e6a0c97c6 Tweak last commit.
* src/keyword.h (Keyword_Factory): Update comments.
2025-04-05 14:44:52 +02:00
Bruno Haible
a041291c80 Remove all occurrences of reinterpret_cast<>.
* src/keyword-list.h (Keyword_List): Add template parameter list <KT>.
(KeywordExt_List): Define as a typedef, not as a subclass.
(copy_list, delete_list, mergesort_list): Templatize accordingly.
* src/keyword-list.icc (Keyword_List): Add template parameter list <KT>.
(KeywordExt_List): Remove method definitions.
* src/keyword-list.cc (Keyword_List): Add template parameter list <KT>.
(copy_list, mergesort_list): Remove definitions on subclass.
Add explicit template instantiation.
* src/keyword.h (Keyword_Factory): Add template parameter list <KT>.
* src/keyword.cc (Keyword_Factory): Likewise.
Add explicit template instantiation.
* src/input.h (Input): Add template parameter list <KT>.
* src/input.cc (Input): Likewise. Add explicit template instantiation.
* src/main.cc (KeywordExt_Factory): Define as a typedef, not as a
subclass.
(main): Update.
2025-04-05 14:18:27 +02:00
Bruno Haible
67c697622f Make output on Windows identical to output on Unix.
* src/options.cc (Options::print_options): Drop a ".exe" suffix from the
program name before printing it.
2025-04-05 10:23:32 +02:00
Bruno Haible
2dd5061f4d Avoid "-Wzero-as-null-pointer-constant" warnings on the generated code.
Reported in
<https://lists.gnu.org/archive/html/bug-gnulib/2024-11/msg00123.html>.

* src/output.cc (Output::output_lookup_function_body): To denote a null
pointer, emit a cast expression instead of plain "0".
* 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.
2024-11-16 08:23:49 +01:00
Bruno Haible
0246553284 Fix build (regression 2024-04-04).
Reported by Pádraig Brady <P@draigBrady.com> in
<https://lists.gnu.org/archive/html/bug-gperf/2024-06/msg00000.html>.

* doc/configure.ac: Invoke AC_CONFIG_AUX_DIR, needed for locating
install-sh.
* lib/configure.ac: Likewise.
* src/configure.ac: Likewise.
* tests/configure.ac: Likewise.
2024-06-05 11:31:18 +02:00
Bruno Haible
84183912e0 Remove outdated Autoconf macro.
* aclocal.m4 (CL_PROG_INSTALL): Remove macro.
* doc/configure.ac: Invoke AC_PROG_INSTALL instead of CL_PROG_INSTALL.
* lib/configure.ac: Likewise.
* src/configure.ac: Likewise.
2024-04-04 15:10:51 +02:00
Bruno Haible
ce5106eb19 Avoid "clang -Wimplicit-fallthrough" warnings also in C mode.
* src/output.cc (Output::output_hash_function): Enhance the fallthrough
marker, to include clang >= 10 in C mode.
* tests/*.exp: Update.
2023-09-07 12:55:29 +02:00
Bruno Haible
8d68fff1c7 Avoid "gcc -Wmissing-field-initializers" warnings on the generated code.
* src/options.h (Options::has_initializer_suffix): New declaration.
* src/options.cc (Options::has_initializer_suffix): New function.
* src/output.cc (Output::output_keyword_table): If option -t is
specified and option -F is not specified, emit '#pragma GCC diagnostic'
lines, to silence -Wmissing-field-initializers warnings from gcc or
clang.
* tests/charsets.exp: Update.
* tests/gpc.exp: Likewise.
* tests/incomplete.exp: Likewise.
* tests/languages.exp: Likewise.
* tests/objc.exp: Likewise.
* tests/test-4.exp: Likewise.
2023-09-05 21:20:51 +02:00
Bruno Haible
91ed1621cc Avoid "gcc -Wunused-parameter" warnings on the generated hash function.
Reported by Vinícius dos Santos Oliveira <vini.ipsmaker@gmail.com> in
<https://savannah.gnu.org/bugs/index.php?64393>.

* src/output.cc (Output::output_hash_function): If str is not used, emit
a cast from str to void. If len is not used, emit a cast from len to
void.
* tests/permut2.exp: Update.
* tests/permut3.exp: Likewise.
* tests/permutc2.exp: Likewise.
2023-07-08 12:30:47 +02:00
Bruno Haible
1862c6e57a Add support for reproducible builds.
Suggested by Richard Purdie <richard.purdie@linuxfoundation.org> in
<https://lists.gnu.org/archive/html/bug-gperf/2022-07/msg00000.html>.

* autogen.sh: Import also lib/filename.h.
* Makefile.in (IMPORTED_FILES): Add lib/filename.h.
* src/options.cc: Include filename.h.
(Options::print_options): Print only the base name of the program name.
* tests/*.exp: Update.
2022-07-05 07:51:46 +02:00
Bruno Haible
6d53a2dbe0 Release gperf-3.2.
* src/version.cc (version_string): Bump to 3.2.
* src/options.cc (Options::parse_options): Bump copyright year.
* tests/*.exp: Update.
* doc/gperf.texi: Bump date.
2022-01-05 12:59:54 +01:00
Michael Drake
96ebd0b95d Honor --readonly-tables when outputting table for --ignore-case.
* src/output.cc (output_upperlower_table): Add 'const' when suitable.
2021-06-06 11:23:17 +02:00
Bruno Haible
8cb07d4235 Fix warnings from Autoconf 2.69c.
* configure.ac: Invoke AC_INIT, AC_OUTPUT without arguments.
* doc/configure.ac: Likewise.
* lib/configure.ac: Likewise.
* src/configure.ac: Invoke AC_INIT, AC_OUTPUT without arguments. Use
AC_CACHE_CHECK, AC_LANG_PUSH/AC_LANG_POP, AC_COMPILE_IFELSE
* tests/configure.ac: Invoke AC_INIT, AC_OUTPUT without arguments. Use
ac_cv_c_compiler_gnu instead of ac_cv_prog_gcc, and
ac_cv_cxx_compiler_gnu instead of ac_cv_prog_gxx. Don't use 'test' with
option '-a'.
2020-10-05 00:45:25 +02:00
Bruno Haible
4706572628 Update after gnulib changed.
* configure.ac (AC_PREREQ): Require Autoconf >= 2.64.
* doc/configure.ac (AC_PREREQ): Likewise.
* lib/configure.ac (AC_PREREQ): Likewise.
* src/configure.ac (AC_PREREQ): Likewise.
* tests/configure.ac (AC_PREREQ): Likewise.
* autogen.sh: Update comment.
2020-08-30 02:06:20 +02:00
Bruno Haible
0a2ed64ff7 Rely entirely on the GNU Build System.
* Makefile.vms: Remove file.
* INSTALL.vms: Remove file.
* Makefile.in (SOURCE_FILES): Remove them.
* Makefile.devel (src/config.h_vms): Remove target.
(totally-clean): Update.
* src/Makefile.in (GENERATED_FILES): Remove config.h_vms.
2020-02-11 03:14:38 +01:00
Bruno Haible
9f4f11ab13 Update after gnulib changed. 2018-10-24 11:59:45 +02:00
Bruno Haible
b3c3566855 Prefer https URLs where possible. 2018-09-17 16:53:00 +02:00
Bruno Haible
50840436d5 Avoid "implicit fallthrough" warnings also from clang. 2018-09-09 01:14:20 +02:00
Bruno Haible
5f4cf73df2 Don't print uninitialized hash values in debug mode. 2018-09-08 16:37:56 +02:00
Bruno Haible
24f492fd8d Improve the speed of the positions search. 2018-09-08 16:08:09 +02:00
Bruno Haible
947854520b Really prefer more efficient hash functions over less efficient ones. 2018-09-08 15:56:21 +02:00
Bruno Haible
a720310c28 Correct width of columns when outputting the asso_values array.
Patch by Frank Wojcik <frankw@touristinresidence.com>.

* src/output.cc (Output::output_hash_function): Increase the
field_width by 1 if _max_hash_value+1 is a power of 10.
2018-09-08 15:36:36 +02:00
Bruno Haible
0d37a8763d Avoid "implicit fallthrough" warnings in the generated code. 2018-07-26 02:00:39 +02:00
Bruno Haible
13c9383b10 Support input files with CR/LF line terminators. 2018-04-24 09:25:10 +02:00
Bruno Haible
283b51086a Don't use an undocumented Autoconf macro. 2018-01-23 08:59:13 +01:00
Bruno Haible
a459641a53 Initialize the Keyword::_lineno field through the constructor. 2017-04-16 17:39:15 +02:00
Bruno Haible
825b077bf4 Fix copyright years. 2017-02-22 15:32:38 +01:00
Marcel Schaible
d551865672 Adjusted the version information for the release 2017-01-02 19:00:16 +01:00
Bruno Haible
a705809f3d Drop the inline specifiers from the generated lookup function. 2016-11-26 18:42:05 +01:00
Bruno Haible
0414be8fff Change mailing list address to <bug-gperf@gnu.org>. 2016-11-26 18:08:57 +01:00