ChangeLog revision 67064
1264790Sbapt2000-09-26 Bruno Haible <bruno@linuix.math.u-bordeaux.fr> 2 3 * gperf-2.7.2 released. 4 5 * doc/gperf.texi: Add a second bug report address 6 <gperf-bugs@lists.sourceforge.net>. 7 * README: Updated. 8 92000-08-28 Bruno Haible <bruno@linuix.math.u-bordeaux.fr> 10 11 * lib/getopt.h (struct option): Use "const" also when compiling in 12 C++ mode. Avoids warnings from Sun CC and HP-UX aCC. 13 14 * doc/Makefile.in (docdir): Change from $(datadir)/doc/@PACKAGE@ to 15 $(prefix)/doc/@PACKAGE@, following the newest GNU standards. 16 172000-08-20 Bruno Haible <bruno@linuix.math.u-bordeaux.fr> 18 19 * src/version.cc: Bump version number to 2.7.2. 20 * doc/gperf.texi: Likewise. 21 22 * doc/texinfo.tex: Update to post-texinfo-4.0 version. @code in the 23 title page now chooses a larger font. The overall layout of the 24 text is denser. 25 26 * AUTHORS: New file. 27 28 * tests/Makefile.in (all): Add check-lang-utf8 and check-lang-ucs2. 29 (check-lang-utf8, check-lang-ucs2): New targets. 30 (clean): Remove lu8out and lu2out. 31 * tests/lang-utf8.gperf, tests/lang-utf8.exp: New files. 32 * tests/lang-ucs2.gperf, tests/test2.c, tests/lang-ucs2.in, 33 tests/lang-ucs2.exp: New files. 34 35 Allow the use of embedded NULs in keys. 36 * lib/hash.h (hashpjw): Add a length argument. 37 * lib/hash.cc (hashpjw): Likewise. Don't stop when encountering a NUL 38 character. 39 * src/hash-table.h (Hash_Table constructor): Add ignore_len argument. 40 (Hash_Table::ignore_length): New field. 41 (Hash_Table::insert): Renamed from Hash_Table::operator(). Remove 42 ignore_length argument. 43 * src/hash-table.cc (NIL): Remove macro. 44 (Hash_Table constructor): Add ignore_len argument. Use it to 45 initialize ignore_length. 46 (Hash_Table destructor): Specify explicit length of char_set and 47 key. 48 (Hash_Table::insert): Renamed from Hash_Table::operator(). Remove 49 ignore_length argument. Pass explicit length to hashpjw. Compare 50 char_set using memcmp, not strcmp. 51 * src/list-node.h (List_Node): Rename field length to key_length. 52 New field char_set_length. 53 (List_Node constructor): Accept key and rest, not the entire line. 54 * src/list-node.cc (List_Node constructor): Accept key and rest, not 55 the entire line. Don't NUL terminate key and char_set. Specify 56 explicit length of key. Initialize char_set_length field. 57 * src/key-list.cc: Include <ctype.h>. 58 (parse_line): New function. 59 (Key_List::read_keys): Call parse_line instead of new List_Node. 60 Pass option[NOLENGTH] to Hash_Table constructor, not 61 Hash_Table::insert. Specify explicit length of key and char_set. 62 (Key_List::get_occurrence): Use explicit length of char_set. 63 (Key_List::set_determined): Likewise. 64 (Key_List::already_determined): Likewise. 65 (output_string): Add length argument. Output unprintable characters 66 using octal escape sequence. 67 (output_keyword_entry): Use explicit length of key. 68 (Key_List::output_lookup_array): Specify explicit length of key. 69 (output_switch_case): Likewise. 70 (Key_List::dump): Likewise. 71 * src/gen-perf.h (Gen_Perf::compute_disjoint_union): Add two length 72 arguments. 73 * src/gen-perf.cc (Gen_Perf::compute_disjoint_union): Likewise. Don't 74 stop when encountering NUL characters. Don't NUL terminate the 75 result. 76 (Gen_Perf::hash): Use explicit length of char_set. 77 (Gen_Perf::change): Specify explicit length of key. 78 * doc/gperf.texi: Document it. 79 80 * doc/help2man: New file, help2man version 1.022. 81 * Makefile.devel (all): Add doc/gperf.1. 82 (doc/gperf.1): New target. 83 * doc/gperf.1: Automatically generated. 84 85 * mkinstalldirs: New file, from automake-1.4, grep-2.4.1, guile-1.4, 86 libtool-1.3.3, make-3.79.1, tar-1.13. 87 * src/Makefile.in (MKINSTALLDIRS): New variable. 88 (install, installdirs): Use it instead of mkdir. 89 * doc/Makefile.in (MKINSTALLDIRS): New variable. 90 (install, installdirs): Use it instead of mkdir. 91 92 * INSTALL: Update. 93 942000-08-19 Bruno Haible <bruno@linuix.math.u-bordeaux.fr> 95 96 * src/key-list.cc (Output_Compare_Memcmp): New class. 97 (Key_List::output_lookup_function): When option -l is given, use 98 memcmp instead of strcmp or strncmp. 99 100 * doc/gperf.texi: The bug report address is <bug-gnu-utils@gnu.org>. 101 The download address is ftp.gnu.org. Remove mention of -a and -g 102 options (now nops). Explain effect of -c option. 103 104 * doc/configure.in (PACKAGE): New variable. 105 * doc/Makefile.in (datadir, docdir): New variables. 106 (dvidir, htmldir): Change values. 107 (install, installdirs): Update. 108 109 * src/configure.in: Rename cache variable gp_cxx_throw_decl to 110 gp_cv_cxx_throw_decl. 111 112 * src/key-list.cc (Key_List::output_hash_function): When outputting 113 __inline, take advantage of C++ compilers which have inline. 114 115 * src/key-list.cc (Output_Compare_Strncmp::output_comparison): 116 After the call to strncmp, verify that expr2 is not longer than 117 `len'. 118 Reported by Carlo Wood <carlo@runaway.xs4all.nl>. 119 120 * src/key-list.cc (Key_List::output_lookup_function_body): Avoid 121 emitting the loop for dealing with duplicates if 122 total_duplicates == 0. 123 124 * src/key-list.cc (Key_List::read_keys): Don't accept an empty key. 125 126 * src/Makefile.in (install, installdirs, uninstall): Respect 127 $(DESTDIR). 128 * doc/Makefile.in (install, installdirs, uninstall): Likewise. 129 130 * src/options.cc (Options::print_options): Escape the arguments which 131 contain special characters. 132 133 * tests/c-parse.gperf: Updated from gcc-2.95.2/gcc/c-parse.gperf. 134 * tests/objc.gperf: New file, from gcc-2.95.2/gcc/objc/objc.gperf. 135 * tests/chill.gperf: New file, from gcc-2.95.2/gcc/ch/gperf. 136 * tests/cplusplus.gperf: New file, from gcc-2.95.2/gcc/cp/gxx.gperf. 137 * tests/gplus.gperf: Remove file. 138 * tests/java.gperf: New file, from gcc-2.95.2/gcc/java/keyword.gperf. 139 * tests/Makefile: Check them all. 140 * tests/c-parse.exp: Renamed from tests/test-1.exp. 141 * tests/modula2.exp: Renamed from tests/test-2.exp. 142 * tests/cplusplus.exp: Renamed from tests/test-3.exp. 143 * tests/gpc.exp: Renamed from tests/test-5.exp. 144 145 * src/key-list.cc (output_switch_case): Add trailing semicolon to 146 lengthptr assignment line. Fixes bug with -D and -S. 147 From Reini Urban <rurban@sbox.tu-graz.ac.at>. Also reported by 148 David Hunter. 149 * tests/Makefile.in (check-lang-syntax): Perform each test with -D 150 once without and once with duplicates. 151 152 * src/key-list.cc (output_keyword_entry): Avoid outputting a struct 153 initializer of the form {"key",}. 154 155 * src/iterator.cc: Don't include <stream.h>. 156 From Michael Deutschmann <ldeutsch@mail.netshop.net>. 157 158 * tests/Makefile.in (VALIDATE, check-lang-syntax): Use $(srcdir) where 159 appropriate. 160 Reported by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>. 161 162 * tests/validate: Don't run -traditional tests by default. 163 164 * src/main.cc (main): Check for write error on stdout before returning. 165 166 * src/Makefile.in (LDFLAGS): New definition, to catch the value given 167 at configure time. 168 169 Make the structure initializers customizable. Based on a patch by 170 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. 171 * src/options.h (Options::get_initializer_suffix, 172 Options::initializer_suffix): New declarations. 173 * src/options.icc (Options::get_initializer_suffix): New function. 174 * src/options.cc (DEFAULT_INITIALIZER_SUFFIX): New constant. 175 (Options::initializer_suffix): New variable. 176 (Options::short_usage): Document option "-F". 177 (Options::long_usage): Document option "-F". 178 (Options constructor): Initialize initializer_suffix. 179 (Options destructor): Dump initializer_suffix. 180 (long_options): Add option "-F". 181 (Options::operator()): Accept option "-F". Sets initializer_suffix. 182 * src/key-list.cc (output_keyword_blank_entries): Output 183 initializer_suffix. 184 * doc/gperf.texi: Document option "-F". 185 186 * COPYING: Replace with GPL version 2 (with new FSF address and Y2K 187 safe year format). 188 189 * doc/gpl.texinfo: New file. 190 * doc/gperf.texi: Document it. 191 * doc/Makefile.in (gperf.info, gperf.dvi, gperf.html, gperf_toc.html): 192 Update dependencies. 193 194 * doc/Makefile.in (MAKEINFO): Unset LANG while running makeinfo. 195 1961998-05-20 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 197 198 * doc/Makefile.in (gperf.dvi, clean): Remove gperf.cps. 199 (install, installdirs, uninstall): Don't install gperf.dvi. The 200 info and HTML documentations are sufficient for on-line use, and 201 users who wish to print the documentation (in PS or DVI format) 202 can do this directly off the source distribution. 203 (DVIPS): Use "-D600" instead of "-Pljfour", for portability. 204 2051998-05-20 Akim Demaille <demaille@inf.enst.fr> 206 207 * doc/gperf.texi: Many modifications: 208 (Output Format): Declare `hash' and `in_word_set' as functions. 209 (Concept Index): New section. 210 (Title page): Use standard presentation. 211 (Top): Use @top instead of @unnumbered so that automatic master 212 update works. 213 (Motivation): Avoid spaces in @var. 214 (Options): Use the standard name ``Invoking ...''. 215 (Options): Declare also the long form of the options. 216 (Options): Remove redundant @itemize when @table is used. 217 2181998-05-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> 219 220 * aclocal.m4 (CL_PROG_INSTALL): Set cl_cv_path_install, not 221 ac_cv_path_install. 222 223Sat May 2 13:20:54 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 224 225 * gperf-2.7 released. 226 227Sat May 2 12:31:51 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 228 229 * src/version.cc (version_string): Remove the "(C++ version)" suffix. 230 It's redundant: the early C versions of gperf are called cperf. 231 Reported by Karl Berry. 232 * src/option.cc (Options::operator()): Trim the output of "gperf -v". 233 234Thu Apr 16 13:22:16 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 235 236 * lib/Makefile.in, src/Makefile.in: Don't use $(TARGET_ARCH). 237 Solaris "make" sets it to a value not understood by "cc". 238 239Wed Apr 15 23:52:14 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 240 241 * lib/Makefile.in, src/Makefile.in: Don't use implicit rules. Don't 242 use $<. AIX "make" and OSF/1 "make" have problems with both. 243 * src/gen-perf.cc, src/key-list.cc: Cast free() argument to char*, 244 otherwise it doesn't compile on SunOS 4. 245 * src/key-list.h: Declare structs outside of other declarations, 246 needed for OSF/1 cxx 5.5. 247 * lib/getopt.h: Use prototypes if __STDC__ || __cplusplus. 248 Don't give a prototype for getopt(), to avoid error on SunOS 4. 249 * lib/getopt.c: Declare strncmp, to avoid warnings. 250 251Tue Apr 14 23:24:07 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 252 253 * lib/GetOpt.{h,cc}: Remove files. 254 * lib/getopt.{h,c}, lib/getopt1.c: New files, from GNU libc. 255 * lib/configure.in (AC_INIT): Search for hash.cc, not GetOpt.cc. 256 * lib/Makefile.in (OBJECTS): Remove GetOpt.o, add getopt.o, getopt1.o. 257 (getopt.o, getopt1.o, hash.o): Use explicit building rules. Some 258 "make"s don't support to have both implicit rules for "%.o : %.c" 259 and "%.o : %.cc" in the same Makefile. 260 * lib/hash.{h,cc}: Remove #pragma; there are no templates here. 261 * src/option.h (Options::usage): Remove. 262 (Options::short_usage, Options::long_usage): Declare. 263 * src/option.cc (Options::usage): Remove. 264 (Options::short_usage, Options::long_usage): New functions. 265 (long_options): New array. 266 (Options::operator()): Use getopt_long instead of GetOpt::operator(), 267 change all references to GetOpt members. 268 269 * src/std-err.{h,cc}: Remove files. 270 * src/gen-perf.cc, src/key-list.cc, list-node.cc, new.cc, options.cc: 271 Call fprintf(stderr) instead of Std_Err::report_error(). 272 * src/key-list.h, src/list-node.h, src/options.h: Don't use class 273 Std_Err any more. 274 * src/option.cc (program_name): New variable. 275 * src/Makefile.in: Remove STD_ERR_H. 276 (OBJECTS): Remove std-err.o. 277 278Mon Mar 23 01:03:35 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 279 280 * aclocal.m4, {lib,src,tests}/configure.in: Remove CL_CC_WORKS and 281 CL_CXX_WORKS, already contained in autoconf 2.12. 282 283 * src/gen-perf.cc, src/key-list.cc: Move some code from 284 Gen_Perf::Gen_Perf() to Key_List::output(). 285 * src/Makefile.in: Update dependencies. 286 287 * src/options.{h,cc}: Remove option "-p". 288 * src/key-list.cc (Key_List::set_output_types): Rewrite. 289 (default_array_type, default_return_type): Remove. 290 * src/key-list.cc: Adjust "const" handling. 291 + With option "-t" [TYPE], don't emit wrong code if there is no 292 space before the struct's opening brace. 293 294Sun Mar 22 16:59:15 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 295 296 * src/key-list.{h,cc}: Completely reorganized the output routines. 297 Rewrote from scratch the output_switch() function. Use classes 298 (Output_Constants, Output_Expr, Output_Compare) for abstraction. 299 In particular: 300 + Don't emit trailing whitespace and spurious blank lines. 301 + Adjust indentation of the arrays. 302 + Don't emit commas at the end of array initializers and 303 struct initializers. 304 + With option "-l" [LENTABLE], compare the length before 305 fetching the word from memory. 306 + With option "-S" [SWITCH], emit the comparison code just once, 307 not once in every switch statement. 308 + With option "-S" [SWITCH], choose the right switch statement 309 through a binary search, not a linear search. 310 + With option "-S" [SWITCH], emit straightforward comparisons 311 instead of switch statements with just one "case" label. 312 + With options "-S -p -t" [SWITCH, POINTER, TYPE], don't emit 313 spurious empty elements at the beginning of the wordlist array. 314 + With option "-D" [DUP] and not option "-S" [SWITCH], if there 315 is no more room for duplicate entries in the lookup array, 316 don't call `assert (i != 0)'. Instead, make the array larger :-) 317 + With option "-D" [DUP], if there are no duplicates, don't 318 automatically fall back to the non-"-D" algorithm. If the user 319 wants the non-"-D" algorithm, he can just not specify "-D". 320 + With option "-D" [DUP] and either options "-p -t" [POINTER, TYPE] 321 or not option "-S" [SWITCH], don't emit spurious empty elements 322 at the beginning of the wordlist array. 323 + With option "-D" [DUP], simplify the detection and processing 324 of duplicate entries in the lookup array. 325 + With options "-D -l" [DUP, LENTABLE] and not option "-S" [SWITCH], 326 don't forget to emit the lengthtable array. 327 + With options "-D -l -S" [DUP, LENTABLE, SWITCH], don't forget to 328 compare the lengths before comparing the strings. 329 330 * src/gen-perf.cc: No need to include <assert.h>. 331 * src/options.cc: Likewise. 332 333 * src/options.cc: Don't use `errno' after freopen failed. 334 * src/std-err.cc: `report_error' doesn't call strerror(errno) any 335 more. No need to include <string.h> and <errno.h>. 336 337 * tests/Makefile.in (check-*): Any difference between .exp and .out 338 is a failure. Don't ignore whitespace differences. 339 340 * tests/Makefile.in (check-lang-syntax): Add some more checks. 341 342Fri Mar 20 00:54:54 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 343 344 * tests/jscript.gperf: Renamed from tests/javascript.gperf, because 345 of Minix and SVR2 14-character filename limit. 346 * src/key-list.cc (output_string): New function. 347 (Key_List::output_switch, Key_List::output_keyword_table): Call it. 348 349 * src/options.{h,icc,cc} (get_wordlist_name): New function. Add 350 option -W. 351 * src/key-list.cc (Key_List::output_switch, 352 Key_List::output_keyword_table, Key_List::output_lookup_function): 353 Use it. 354 Patch from William Bader <wbader@CSEE.Lehigh.Edu>. 355 356 * src/version.cc: Bump version number directly from 2.5 to 2.7, 357 because Schmidt's last release from 1991 carries version number 2.6. 358 359Tue Jul 30 00:02:39 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu) 360 361 * Fixed a small bug in the Key_List::output_keyword_table routine 362 that caused an extra newline to be printed if there where no 363 leading blank entries... (who cares, right?!) 364 365Mon Jul 29 22:05:40 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu) 366 367 * Modified the handling of the -E (emit enums rather than 368 #defines) option in conjunction with the -G option. Now, if -G 369 and -E are given the enums are generated outside the lookup 370 function, rather than within it! 371 372Mon Apr 8 18:17:04 1991 Doug Schmidt (schmidt at net4.ics.uci.edu) 373 374 * Yucko, there was a bug in the handling of -c (and of course the 375 new -I command in key-list.cc). Apparently when I added the 376 super-duper hack that provided support for duplicate keys I 377 forgot to update the strcmp output... 378 379Mon Mar 9 02:19:04 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de> 380 381 * Moved the documentation to doc/, put the stuff borrowed from 382 libg++ into lib/. 383 * Rewrote all Makefile.in's for better compliance with GNU standards. 384 * Autoconf based configuration. Rewrote all configure.in's. Added 385 aclocal.m4, with macros from CLISP and CLN. Added Makefile.devel. 386 * src/depend: Removed. Dependencies are now in src/Makefile.in. 387 388 * src/bool-array.icc: New file, contains inline functions, from both 389 src/bool-array.h and src/bool-array.cc. 390 * src/options.icc: New file, contains inline functions, from both 391 src/options.h and src/options.cc. 392 * src/read-line.icc: New file, contains inline functions, from both 393 src/read-line.h and src/read-line.cc. 394 395 * src/bool-array.h: Don't include <std.h>. 396 * src/bool-array.cc: Include <string.h>. 397 * src/gen-perf.cc: No need to include <ctype.h>. Don't include 398 <_G_config.h>. 399 * src/hash-table.cc: Don't include <std.h> and <builtin.h>. Include 400 <string.h> and lib/hash.h instead. 401 * src/iterator.cc: Don't include <std.h>. 402 * src/key-list.cc: Don't include <builtin.h>. Include <string.h> and 403 <stdlib.h> instead. 404 * src/list-node.cc: Don't include <std.h>. Include <stdlib.h> instead. 405 Remove `index' hack. 406 * src/main.cc: Don't include <_G_config.h>. 407 * src/new.cc: Don't include <std.h>. Include <stdlib.h> instead. 408 * src/options.cc: Don't include <builtin.h>. Include <string.h> and 409 <stdlib.h> instead. 410 * src/read-line.cc: Don't include <builtin.h>. Include <stdlib.h> 411 instead. 412 * src/std-err.cc: Don't include <std.h>. Include <string.h> (for Irix). 413 * src/vectors.h: No need to include <stdio.h>. 414 * src/version.cc: No need to include <stdio.h>. 415 416 * src/bool-array.h: Change `STORAGE_TYPE' from int to unsigned int. 417 * src/bool-array.{h,cc}: Change type of `Bool_Array::size' from int 418 to unsigned int. 419 * src/bool-array.{h,cc}: Change type of `Bool_Array::init' argument 420 from STORAGE_TYPE to unsigned int. 421 * src/gen-perf.{h,cc}: Change two `Gen_Perf::compute_disjoint_union' 422 argument types from `char *' to `const char *'. 423 * src/iterator.h: Change type of `Iterator::str' and argument of 424 `Iterator::Iterator' from `char *' to `const char *'. 425 * src/iterator.cc: Cast to `unsigned char' before calling `isdigit'. 426 * src/key-list.{h,cc}: Change type of `Key_List::array_type', 427 `Key_List::return_type', `Key_List::struct_tag', 428 `Key_List::include_src', `default_array_type', `default_return_type' 429 and return type of `Key_List::get_array_type', 430 `Key_List::get_special_input', `Key_List::save_include_src' from 431 `char *' to `const char *'. 432 * src/key-list.cc: Change "pretty gross" assignment. 433 * src/key-list.cc: Don't use `alloca', HP-UX CC lacks it. 434 * lib/GetOpt.cc: Likewise. 435 * src/key-list.cc (merge): Use iteration instead of recursion. 436 * src/list-node.{h,cc}: Change type of `List_Node::key', 437 `List_Node::rest', `List_Node::char_set' from `char *' to 438 `const char *'. 439 * src/new.cc: Don't use BUFSIZ. Conditionalize the throw() declaration. 440 * src/read-line.h: Don't use BUFSIZ. 441 * src/read-line.cc: Make CHUNK_SIZE a constant, and use allocate the 442 buffers on the stack by default. Use memcpy for copying buffers. 443 Include <string.h>. 444 * src/read-line.icc (get_line): Use iteration instead of tail recursion. 445 Don't call ungetc(EOF,stdin). 446 * src/std-err.{h,cc}: Change type of `Std_Err::program_name' and of 447 argument `Std_Err::report_error' from `char *' to `const char *'. 448 * src/std-err.cc: `report_error' doesn't call `exit' any more. All 449 callers changed to do that themselves. 450 * src/trace.h: Make constructor/destructor calls non-inline. 451 452 * src/key-list.cc (output_hash_function): If option[CPLUSPLUS], 453 always make the hash function inline. 454 (output): Declare the hash function inline, with the right name. 455 * src/options.{h,cc}, src/gen-perf.cc, src/key-list.cc: Remove 456 options -g, making it on by default. Remove option -a. Instead, 457 introduce "-L KR-C", "-L C", "-L ANSI-C", "-L C++". 458 * src/options.{h,cc}, src/key-list.cc: Add option -I. 459 * src/key-list.cc: Don't emit "const" if compiling in mode "-L KR-C". 460 * src/key-list.cc: Don't emit a comma at the end of an enum list. 461 * src/main.cc: Remove COUNT_TIME code. 462 * src/vectors.h, src/key-list.cc, src/options.cc, src/list-node.cc: 463 ALPHA_SIZE defaults to 256 now. Add option -7. 464 465 * tests/javascript.gperf: New file. 466 * tests/jstest*.gperf, tests/validate: New tests. 467 468Sat Jan 31 01:38:11 1998 Alexandre Oliva <oliva@dcc.unicamp.br> 469 470 * src/Makefile.in ($(TARGETPROG)): Add $(CFLAGS). 471 472Wed Jan 28 01:56:00 1998 Manfred Hollstein <manfred@s-direktnet.de> 473 474 * configure.in (package_makefile_rules_frag): New and 475 redirect stderr from ${srcdir}/config.shared to 476 ${package_makefile_rules_frag}. 477 * src/configure.in: Ditto. 478 * tests/configure.in: Ditto. 479 480Fri Jan 23 08:00:41 1998 H.J. Lu (hjl@gnu.org) 481 482 * gperf.texi (@ichapter): Changed to @chapter. 483 484Wed Jan 14 09:16:48 1998 H.J. Lu (hjl@gnu.org) 485 486 * src/key-list.cc, src/key-list.h (Key_List::strcspn): Don't 487 define if strcspn is defined. 488 489Fri Jan 24 13:23:47 1997 Mike Stump <mrs@cygnus.com> 490 491 * src/new.cc (operator delete): Add the exception specification. 492 493Mon Feb 5 19:29:16 1996 Per Bothner <bothner@kalessin.cygnus.com> 494 495 * src/read-line.cc (Read_Line::readln_aux): Handle EOF if last line 496 has a length which is an exact multiple of CHUNK_SIZE. (Used to throw 497 away the line's contents.) From Bruno Haible <haible@ilog.ilog.fr>. 498 * src/Makefile.in ($(TARGETPROG)): Add -lm to link line. 499 500Tue Jun 11 13:43:50 1996 Brendan Kehoe <brendan@lisa.cygnus.com> 501 502 * src/list-node.cc (List_Node): Reorder init of nodes to 503 match declaration order. 504 * src/hash-table.cc (Hash_Table): Likewise. 505 506Tue Oct 10 16:37:28 1995 Mike Stump <mrs@cygnus.com> 507 508 * src/new.cc: Since malloc/delete are not paired, we cannot call 509 free. 510 511Wed Jan 4 12:40:14 1995 Per Bothner <bothner@kalessin.cygnus.com> 512 513 * src/Makefile.in ($(TARGETPROG)): Link with $(LDFLAGS). 514 Patch from John Interrante <interran@uluru.stanford.edu>. 515 516Sat Nov 5 19:12:48 1994 Jason Merrill (jason@phydeaux.cygnus.com) 517 518 * src/Makefile.in (LIBS): Remove. 519 520Tue Oct 18 17:51:14 1994 Per Bothner <bothner@kalessin.cygnus.com> 521 522 * src/std-err.cc: Use stderror, instead of the non-standard 523 sys_nerr and sys_errlist. 524 525Sat Sep 17 22:02:13 1994 Per Bothner (bothner@kalessin.cygnus.com) 526 527 * src/key-list.cc (output_hash_function): 528 Patch from William Bader <wbader@CSEE.Lehigh.Edu>. 529 530Fri Jul 15 09:38:11 1994 Per Bothner (bothner@cygnus.com) 531 532 * src/std-err.cc: #include <errno.h>, and only declare 533 extern int errno if errno is not a macro. 534 535Mon May 30 17:29:34 1994 Per Bothner (bothner@kalessin.cygnus.com) 536 537 * Makefile.in (src_all, install): Make sure to add '/' after 538 `pwd` in $rootme, as expected by FLAGS_TO_PASS. 539 540Wed May 11 00:47:22 1994 Jason Merrill (jason@deneb.cygnus.com) 541 542 Make libg++ build with gcc -ansi -pedantic-errors 543 * src/options.h: Lose commas at end of enumerator lists. 544 545Sun Dec 5 19:16:40 1993 Brendan Kehoe (brendan@lisa.cygnus.com) 546 547 * src/hash-table.cc (Hash_Table::~Hash_Table): Don't pass an 548 argument to fprintf, since it's not expecting one. 549 550Fri Nov 26 19:03:18 1993 Per Bothner (bothner@kalessin.cygnus.com) 551 552 * src/list-node.cc: #undef index, for the sake of broken NeXT, 553 554Thu Nov 4 11:16:03 1993 Per Bothner (bothner@kalessin.cygnus.com) 555 556 * Makefile.in (install): Use INSTALL_DATA for gperf.1. 557 558Mon Oct 25 18:40:51 1993 Per Bothner (bothner@kalessin.cygnus.com) 559 560 * src/key-list.cc (Key_List::read_keys): Use POW macro 561 to increase hash table size to power of 2. 562 563 * options.h (LARGE_STACK_ARRAYS): New flag. Defaults to zero. 564 * gen-perf.cc, key-list.cc, read-line.cc: 565 Only stack-allocate large arrays if LARGE_STACK_ARRAYS is set. 566 * main.cc (main): Only call setrlimit (RLIMIT_STACK, ...) 567 if LARGE_STACK_ARRAYS. 568 569Mon Oct 4 17:45:08 1993 Per Bothner (bothner@kalessin.cygnus.com) 570 571 * src/gen-perf.cc: Always use ANSI rand/srand instead of BSDisms. 572 573Wed Aug 18 12:19:53 1993 Per Bothner (bothner@kalessin.cygnus.com) 574 575 * Makefile.in (src_all): Make less verbose output. 576 577Fri May 28 14:01:18 1993 Per Bothner (bothner@rtl.cygnus.com) 578 579 * src/gen-perf.cc (Gen_Perf::change): Don't use gcc-specific 580 2-operand conditional expression. 581 * src/key-list.cc (Key_List::output_lookup_array): 582 Don't use variable-size stack arrays, unless compiled by g++. 583 584Tue May 4 14:08:44 1993 Per Bothner (bothner@cygnus.com) 585 586 Changes (mostly from Peter Schauer) to permit compilation 587 using cfront 3.0 and otherwise be ARM-conforming. 588 * src/key-list.h: class Key_List must use public derivation 589 of base class Std_Err (because Gen_Perf::operator() in gen-perf.cc 590 calls Std_Err::report_error). 591 * src/gen-perf.cc (Gen_Perf::affects_prev), src/hash-table.cc 592 (Hash_Table::operator()): Don't use gcc-specific 2-operand 593 conditional expression. 594 * src/iterator.cc (Iterator::operator()): Don't use gcc-specific 595 range construct in case label. 596 * key-list.cc (Key_List::output_lookup_array, Key_List::read_keys), 597 src/gen-perf.cc (Gen_Perf::operator(), src/read-line.cc 598 (Read_Line::readln_aux): If not gcc, don't allocate 599 variable-sized arrays on stack. 600 * src/new.cc (operator new): Argument type should be size_t. 601 * key-list.cc (Key_List::output_lookup_array, Key_List::read_keys), 602 new/cc (::operator new): Don't use non-standard >?= operator. 603 604Tue Apr 27 20:11:30 1993 Per Bothner (bothner@cygnus.com) 605 606 * src/Makefile.in: Define TARGETPROG, and use it. 607 608Mon Apr 19 00:29:18 1993 Per Bothner (bothner@cygnus.com) 609 610 * Makefile.in, configure.in: Re-vamped configure scheme. 611 * gperf.texinfo: Renamed to gperf.texi. 612 * src/bool-array.{h,cc}: ANSIfy bzero->memset. 613 614Sat Jan 30 20:21:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com) 615 616 * tests/Makefile.in (mostlyclean): Also delete aout, cout, m3out, 617 pout, and preout. 618 619Tue Dec 29 08:58:17 1992 Ian Lance Taylor (ian@cygnus.com) 620 621 * Makefile.in: pass $(FLAGS_TO_PASS) to all calls to make. 622 (FLAGS_TO_PASS): added INSTALL, INSTALL_DATA, INSTALL_PROGRAM. 623 624Mon Dec 21 18:46:46 1992 Per Bothner (bothner@rtl.cygnus.com) 625 626 * tests/expected.* renamed to *.exp to fit in 14 chars. 627 * tests/Makefile.in: Update accordingly. 628 Also rename output.* to *.out. 629 * src/Makefile.in (clean): Remove gperf program. 630 631Wed Dec 9 14:33:34 1992 Per Bothner (bothner@cygnus.com) 632 633 * src/hash-table.cc, src/bool-array.h: ANSIfy bzero->memset. 634 635Thu Dec 3 19:34:12 1992 Per Bothner (bothner@cygnus.com) 636 637 * Makefile.in (distclean, realclean): Don't delete 638 Makefile before recursing. 639 640Fri Nov 6 13:41:49 1992 Per Bothner (bothner@rtl.cygnus.com) 641 642 * key-list.{h,cc}: Remove MAX_INT (and similar) constant 643 fields from Key_List class, and use INT_MAX (etc) from limits.h. 644 * key-list.{h,cc}, options.{h,cc}, vectors.h: Removed all 645 uses of initialized const fields, as they are non-standard 646 - and their use was easy to do away with. Mostly, just 647 made the constants static non-fields in the .cc file. 648 649Mon Nov 2 13:10:11 1992 Per Bothner (bothner@cygnus.com) 650 651 * tests/Makefile.in: When generating cinset.c, don't pass -C, 652 since -C assumes an ANSI compiler. Add the -C flag (with -a) 653 when generating test.out.3 instead. 654 * tests/expected.out.3: Update accordingly. 655 656Wed Aug 12 11:47:54 1992 Per Bothner (bothner@cygnus.com) 657 658 * Makefile.in: Factor out common flags into $(FLAGS_TO_PASS). 659 * Makefile.in: 'install-info' depends on gperf.info. 660 661Mon Aug 10 11:39:52 1992 Ian Lance Taylor (ian@dumbest.cygnus.com) 662 663 * Makefile.in, src/Makefile.in: always create installation 664 directories. 665 666Mon Jul 20 15:33:21 1992 Mike Stump (mrs@cygnus.com) 667 668 * src/new.cc (operator new): Add cast from void * to char *, 669 since it is not a standard conversion. 670 671Wed Jun 17 16:25:30 1992 Per Bothner (bothner@rtl.cygnus.com) 672 673 * src/gen-perf.cc: #include <_G_config.h> for _G_SYSV. 674 * src/key-list.cc: alloca() hair. 675 * src/main.cc (main): Only call getrlimit if _G_HAVE_SYS_RESOURCE. 676 * Makefile,in, {src,test}/Makefile.in: Fix *clean rules. 677 678Fri May 29 13:21:13 1992 Per Bothner (bothner@rtl.cygnus.com) 679 680 * src/gen-perf.cc: Replace USG -> _G_SYSV. 681 682Thu May 14 13:58:36 1992 Per Bothner (bothner@rtl.cygnus.com) 683 684 * src/Makefile.in: Don't pass obsolete flag -DUNLIMIT_STACK. 685 * tests/Makefile.in (clean): Fix. 686 687Sat Mar 7 00:03:56 1992 K. Richard Pixley (rich@rtl.cygnus.com) 688 689 * gperf.texinfo: added menu item hook. 690 691Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com) 692 693 * Makefile.in, configure.in: removed traces of namesubdir, 694 -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced 695 copyrights to '92, changed some from Cygnus to FSF. 696 697Sun Jan 26 19:21:58 1992 Per Bothner (bothner at cygnus.com) 698 699 * tests/Makefile.in: Use re-directed stdin instead of file 700 name in argv. This allows us to remove the filename 701 from the output, the expected output, and hence the diffs. 702 (Note that the input file is in $(srcdir), which we cannot 703 place in the expected out files.) 704 * tests/expected.out.[1235]: Edit out input filename, 705 to match new output. 706 707Thu Jun 28 16:17:27 1990 Doug Schmidt (schmidt at brilliant) 708 709 * Wow, first fix on the new job! There was a dumb error 710 in Key_List::output_lookup_function, where I printed the 711 string "&wordlist[key]" instead of the correct "&wordlist[index]". 712 713 * Added a couple of #ifdefs for USG support. 714 715Sun Jun 3 17:16:36 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) 716 717 * Updated the version number to 2.5 and sent to Doug Lea for release 718 with the latest GNU libg++. 719 720 * Changed the error handling when a keyword file cannot be opened 721 (now calls perror). 722 723Wed May 30 14:49:40 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) 724 725 * Instrumented the source code with trace statements automagically 726 inserted using my new automated trace instrumentation tool! 727 728Wed May 9 11:47:41 1990 Doug Schmidt (schmidt at siam.ics.uci.edu) 729 730 * Really fixed the previous bug. Turns out that a small amount 731 of logic had to be duplicated to handle static links that occur 732 as part of dynamic link chains. What a pain!!! 733 734Tue May 8 23:11:44 1990 Doug Schmidt (schmidt at siam.ics.uci.edu) 735 736 * Fixed a stupid bug in Key_List::output_lookup_array that was 737 causing incorrect counts to be generated when there were both 738 static and dynamic links occurring for the same hash value. 739 Also simplified the code that performs the logic in this routine. 740 741Mon Apr 30 17:37:24 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) 742 743 * Fixed stupid bug in Key_List::output_lookup_array that was 744 making the generated lookup[] array contain `chars' even 745 when the values stored in the chars are greater than 127! 746 747 * Changed the behavior of the -G (global table) option so that it 748 will output the `length[]' array in the global scope along with 749 the `word_list[]' array. 750 751 * Fixed a stupid bug in Key_List::output_lookup_function that 752 would always output the complicated `duplicate-handling' lookup 753 logic, even when there were no duplicates in the input! 754 755 * Yikes, had to modify a bunch of stuff in key-list.cc to correctly 756 handle duplicate entries. Changed the generated code so that 757 the MIN_HASH_VALUE is no longer subtracted off when calculating 758 the hash value for a keyword. This required changing some other 759 code by substituting MAX_HASH_VALUE for TOTAL_KEYS in several places. 760 Finally, this means that the generated tables may contain leading 761 null entries, but I suppose it is better to trade-off space to get 762 faster performance... 763 764Mon Mar 26 13:08:43 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) 765 766 * Updated version number to 2.4 to reflect the latest changes. 767 768 * Changed the main program so that it always prints out gperf's 769 execution timings to the generated output file. 770 771Sun Mar 25 12:39:30 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) 772 773 * Added the -Z option so that users can specify the name of the 774 generated class explicitly. Updated documentation to reflect 775 this change. 776 777 * Modified the generated C++ class interface so that the functions 778 are declared static (to remove the overhead of passing the `this' 779 pointer). This means that operator()() can no longer be used, 780 since it only works on non-static member functions. 781 Also changed things so that there is no constructor (why waste 782 the extra call, when it doesn't do anything, eh?) 783 784 * Modified the behavior of Key_List::output when the -L C++ option 785 is enabled. Previously the code generated use const data members 786 to record MIN_WORD_LENGTH, MIN_HASH_VALUE, etc. However, as 787 pointed out by James Clark this may result in suboptimal behavior 788 on the part of C++ compilers that can't inline these values. 789 Therefore, the new behavior is identical to what happens with 790 -L C, i.e., either #defines or function-specific enums are used. 791 Why sacrifice speed for some abstract notion of `code purity?' ;-) 792 793Tue Mar 6 18:17:42 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) 794 795 * Added the -E option that defines constant values using an enum 796 local to the lookup function rather than with #defines. This 797 also means that different lookup functions can reside in the 798 same file. Thanks to James Clark (jjc@ai.mit.edu). 799 800Sat Mar 3 20:19:00 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) 801 802 * Added a special case to key_list::output_switch that doesn't 803 generate extra comparisons when the `-S' is given an argument 804 of 1 (the normal case). This should speed up the generated 805 code output a tad... 806 807Fri Feb 23 14:21:28 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) 808 809 * Renamed all instances of member function get_keysig_size 810 to get_max_keysig_size, since this is more precise... 811 812 * Changed all occurrences of charset to keysig (stands for ``key 813 signature'') to reflect the new naming convention used in the 814 USENIX paper. 815 816Thu Feb 22 11:28:36 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) 817 818 * Changed the name of the generated associated values table from 819 asso_value to asso_values to reflect conventions in the USENIX 820 C++ paper. 821 822Thu Feb 15 23:29:03 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) 823 824 * Updated the gperf.texinfo file to fix some formatting problems 825 that had crept in since last time. 826 827Wed Feb 14 23:27:24 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) 828 829 * Fixed stupid bug in key-list.cc (get_special_input), wher 830 gperf replaced each '%' with the succeeding character. 831 832 * Added support for multiple target language generation. Currently 833 handled languages are C and C++, with C as the default. Updated 834 documentation and option handler to reflect the changes. 835 836 * Added a global destructor to new.cc and removed the #ifdef, since 837 the bloody thing now works with libg++. 838 839Mon Feb 14 13:00:00 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) 840 841 * Found out that my gperf paper was accepted at the upcoming 842 USENIX C++ Conference in San Francisco. Yow! 843 844Tue Jan 30 09:00:29 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) 845 846 * #ifdef'd out the new.cc memory allocator, since there are 847 problems with this and the libg++ stuff. 848 849 * Changed key-list.h so that class Vectors is a public (rather 850 than private) base class for class Key_List. The previous 851 form was illegal C++, but wasn't being caught by the old 852 g++ compiler. Should work now... ;-) 853 854Sun Dec 10 14:08:23 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 855 856 * Added several changes from rfg@ics.uci.edu. These changes 857 help to automate the build process. 858 859Wed Nov 15 15:49:33 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) 860 861 * Removed conditional compilation for GATHER_STATISTICS. There's 862 really no good reason to avoid collecting this info at run-time, 863 since that section of code is *hardly* the bottleneck... ;-) 864 865 * Simplified the C output routines in Key_List::set_output_types 866 and Key_List::output_keyword_table a bit in order to 867 speed-up and clean up the code generation. 868 869 * Modified function Key_List::get_special_input so that it does 870 not try to `delete' a buffer that turned out to be too short. 871 This is important since the new memory management scheme 872 does not handle deletions. However, adding a small amount of 873 garbage won't hurt anything, since we generally don't do this 874 operation more than a couple times *at most*! 875 876 * Created a new file (new.cc) which includes my own overloaded 877 operator new. This function should dramatically reduce the 878 number of calls to malloc since it grabs large chunks and 879 doles them out in small pieces. As a result of this change 880 the class-specific `operator new' was removed from class List_Node. 881 882Tue Nov 14 21:45:30 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 883 884 * Continued to refine the great hack. The latest trick is to 885 try and replace most uses of dynamic memory (i.e., calls to 886 new) with uses of gcc dynamic arrays (i.e., an alloca solution). 887 This makes life much easier for the overall process-size, since 888 it reduces the amount of overhead for memory management. As a 889 side-effect from this change there is no reason to have the 890 Bool_Array::dispose member function, so it's outta here! 891 892 * Fixed a stupid bug that was an disaster waiting to happen... 893 Instead of making the boolean array large enough to index 894 max_hash_value it was only large enough to index max_hash_value 895 - 1. Once again, an off-by-one mistake in C/C++!!!! 896 897Mon Nov 13 19:38:27 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 898 899 * Added the final great hack! This allows us to generate hash tables 900 for near-perfect hash functions that contain duplicates, *without* 901 having to use switch statements! Since many compilers die on large 902 switch statements this feature is essential. Furthermore, it appears 903 that the generated code is often *smaller* than that put out by 904 compilers, even though a large, sparse array must be created. 905 Here's the general idea: 906 907 a. Generate the wordlist as a contiguous block of keywords, 908 just as before when using a switch statement. This 909 wordlist *must* be sorted by hash value. 910 911 b. Generate the lookup array, which is an array of signed 912 {chars,shorts,ints}, (which ever allows full coverage of 913 the wordlist dimensions). If the value v, where v = 914 lookup[hash(str,len)], is >= 0 and < TOTAL_KEYWORDS, then we 915 simply use this result as a direct access into the wordlist 916 array to snag the keyword for comparison. 917 918 c. Otherwise, if v is < -TOTAL_KEYWORDS or > TOTAL_KEYWORDS 919 this is an indication that we'll need to search through 920 some number of duplicates hash values. Using a hash 921 linking scheme we'd then index into a different part of 922 the hash table that provides the starting index and total 923 length of the duplicate entries to find via linear search! 924 925Sun Nov 12 13:48:10 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) 926 927 * Simplified Key_List::output_min_max considerably by recognizing 928 that since the keyword list was already sorted by hash value finding 929 the min and max values is trivial! 930 931 * Improved the debugging diagnostics considerably in classes Key_List, 932 Hash_Table, and Gen_Perf. 933 934 * Modified the `-s' option so that a negative argument is now 935 interpreted to mean `allow the maximum associated value to be 936 about x times *smaller* than the number of input keys.' This 937 should help prevent massive explosion of generated hash table 938 size for large keysets. 939 940Sat Nov 11 11:31:13 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 941 942 * Added a field in class Key_List that counts the total number 943 of duplicate keywords, both static and dynamic. 944 945 * Added a new member function Bool_Array that deletes the dynamic 946 memory allocated to Bool_Array::storage_array. This space may 947 be needed for subsequent options, so it made sense to free it as 948 soon as possible... 949 950 * Renamed file/class Alpha_Vectors to Vectors, to avoid problems 951 with 14 character length filenames on SYSV. Also changed file 952 adapredefined.gperf to adadefs.gperf in the ./tests directory. 953 954 * Modified class Options by changing the member function 955 Options::total_positions to Options::get_charset_size and 956 Options::set_charset_size. These two routines now either return 957 the total charset size *or* the length of the largest keyword 958 if the user specifies the -k'*' (ALLCHARS) option. This change 959 cleans up client code. 960 961 * Merged all the cperf changes into gperf. 962 963 * Made sure to explicitly initialize perfect.fewest_collisions to 964 0. 965 966 * Cleaned up some loose ends noticed by Nels Olson. 967 1. Removed `if (collisions <= perfect.fewest_collisions)' 968 from Gen_Perf::affects_prev since it was superfluous. 969 2. Removed the fields best_char_value and best_asso_value 970 from Gen_Perf. There were also unnecessary. 971 3. Fixed a braino in the Bool_Array::bool_array_reset 972 function. Since iteration numbers can never be zero 973 the `if (bool_array.iteration_number++ == 0)' must be 974 `if (++bool_array.iteration_number == 0).' 975 4. Modified Std_Err::report_error so that it correctly handles 976 "%%". 977 978 * It is important to note that -D no longer enables -S. 979 There is a good reason for this change, which will become 980 manifested in the next release... (suspense!). 981 982 * Made some subtle changes to Key_List::print_switch so that if finally 983 seems to work correctly. Needs more stress testing, however... 984 985 * Made a major change to the Key_List::print_switch function. 986 The user can now specify the number of switch statements to generate 987 via an argument to the -S option, i.e., -S1 means `generate 1 988 switch statement with all keywords in it,' -S2 means generate 989 2 switch statements with 1/2 the elements in each one, etc. 990 Hopefully this will fix the problem with C compilers not being 991 able to generate code for giant switch statements (but don't 992 hold your breath!) 993 994 * Changed Key_List::length function to Key_List::keyword_list_length. 995 996 * Added a feature to main.c that prints out the starting wall-clock 997 time before the program begins and prints out the ending wall-clock 998 time when the program is finished. 999 1000 * Added the GATHER_STATISTICS code in hash-table.c so we can 1001 keep track of how well double hashing is doing. Eventually, 1002 GATHER_STATISTICS will be added so that all instrumentation 1003 code can be conditionally compiled in. 1004 1005 * Fixed a stupid bug in Key_List::print_switch routine. This 1006 was necessary to make sure the generated switch statement worked 1007 correctly when *both* `natural,' i.e., static links and dynamic 1008 links, i.e., unresolved duplicates, hash to the same value. 1009 1010 * Modified Bool_Array::~Bool_Array destructor so that 1011 it now frees the bool_array.storage_array when it is no longer 1012 needed. Since this array is generally very large it makes sense 1013 to return the memory to the freelist when it is no longer in use. 1014 1015 * Changed the interface to constructor Hash_Table::Hash_Table. This 1016 constructor now passed a pointer to a power-of-two sized buffer that 1017 serve as storage for the hash table. Although this weakens information 1018 hiding a little bit it greatly reduces dynamic memory fragmentation, 1019 since we can now obtain the memory via a call to alloca, rather 1020 than malloc. This change modified Key_List::read_keys calling 1021 interface. 1022 1023 * Since alloca is now being used more aggressively a conditional 1024 compilation section was added in main.c. Taken from GNU GCC, 1025 this code gets rid of any avoidable limit on stack size so that 1026 alloca does not fail. It is only used if the -DRLIMIT_STACK 1027 symbol is defined when gperf is compiled. 1028 1029 * Added warnings in option.c so that user's would be informed 1030 that -r superceeds -i on the command-line. 1031 1032 * Rewrote Gen_Perf::affects_prev. First, the code structure 1033 was cleaned up considerably (removing the need for a dreaded 1034 goto!). Secondly, a major change occurred so that Gen_Perf::affects_prev 1035 returns FALSE (success) when fewest_hits gets down to whatever 1036 it was after inserting the previous key (instead of waiting for 1037 it to reach 0). In other words, it stops trying if it can 1038 resolve the new collisions added by a key, even if there are 1039 still other old, unresolved collisions. This modification was 1040 suggested by Nels Olson and seems to *greatly* increase the 1041 speed of gperf for large keyfiles. Thanks Nels! 1042 1043 * In a similar vein, inside the Gen_Perf::change routine 1044 the variable `perfect.fewest_collisions is no longer initialized 1045 with the length of the keyword list. Instead it starts out at 1046 0 and is incremented by 1 every time change () is called. 1047 The rationale for this behavior is that there are times when a 1048 collision causes the number of duplicates (collisions) to 1049 increase by a large amount when it would presumably just have 1050 gone up by 1 if none of the asso_values were changed. That is, 1051 at the beginning of change(), you could initialize fewest_hits 1052 to 1+(previous value of fewest_hits) instead of to the number of 1053 keys. Thanks again, Nels. 1054 1055 * Replaced alloca with new in the Gen_Perf::change function. 1056 This should eliminate some overhead at the expense of a little 1057 extra memory that is never reclaimed. 1058 1059 * Renamed Gen_Perf::merge_sets to Gen_Perf::compute_disjoint_union 1060 to reflect the change in behavior. 1061 1062 * Added the -e option so users can supply a string containing 1063 the characters used to separate keywords from their attributes. 1064 The default behavior is ",\n". 1065 1066 * Removed the char *uniq_set field from LIST_NODE and modified 1067 uses of uniq_set in perfect.c and keylist.c. Due to changes 1068 to Gen_Perf::compute_disjoint_sets this field was no longer 1069 necessary, and its removal makes the program smaller and 1070 potentially faster. 1071 1072 * Added lots of changes/fixes suggested by Nels Olson 1073 (umls.UUCP!olson@mis.ucsf.edu). In particular: 1074 1. Changed Bool_Array so that it would dynamically create 1075 an array of unsigned shorts rather than ints if the 1076 LO_CAL symbol was defined during program compilation. 1077 This cuts the amount of dynamic memory usage in half, 1078 which is important for large keyfile input. 1079 2. Added some additional debugging statements that print extra 1080 info to stderr when the -d option is enabled. 1081 3. Fixed a really stupid bug in Key_List::print_switch 1082 A right paren was placed at the wrong location, which broke 1083 strlen (). 1084 4. Fixed a subtle problem with printing case values when keylinks 1085 appear. The logic failed to account for the fact that there 1086 can be keylinks *and* regular node info also! 1087 5. Changed the behavior of Key_List::read_keys so that it would 1088 honor -D unequivocally, i.e., it doesn't try to turn off dup 1089 handling if the user requests it, even if there are no 1090 immediate links in the keyfile input. 1091 6. Modified the -j option so that -j 0 means `try random values 1092 when searching for a way to resolve collisions.' 1093 7. Added a field `num_done' to the Gen_Perf struct. This is used 1094 to report information collected when trying to resolve 1095 hash collisions. 1096 8. Modified the merge_sets algorithm to perform a disjoint 1097 union of two multisets. This ensures that subsequent 1098 processing in Gen_Perf::affect_prev doesn't 1099 waste time trying to change an associated value that is 1100 shared between two conflicting keywords. 1101 9. Modified Gen_Perf::affects_prev so that it doesn't try 1102 random jump values unless the -j 0 option is enabled. 1103 10. Fixed a silly bug in Gen_Perf::change. This problem caused 1104 gperf to seg fault when the -k* option was given and the 1105 keyfile file had long keywords. 1106 1107Sun Oct 29 00:18:55 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) 1108 1109 * Modified class-specific new operations for Read_Line and 1110 List_Node so they don't fail if SIZE is larger than twice 1111 the previous buffer size. Note we double buffer size 1112 everytime the previous buffer runs out, as a heuristic 1113 to reduce future calls to malloc. 1114 1115Sun Oct 22 13:49:43 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1116 1117 * Updated gperf version number to 2.0. Send to Doug Lea for 1118 incorporation into the long-awaited `official' libg++ 1.36 1119 release! 1120 1121 * Thanks to Nels Olson a silly bug in Gen_Perf::change () 1122 was fixed. This problem caused gperf to seg fault when 1123 the -k* option was given and the keyfile file had long 1124 keywords. 1125 1126 * Modified Key_List::print_hash_function so that it output 1127 max_hash_value + 1 (rather than just max_hash_value) for 1128 any associated value entries that don't correspond to 1129 keyword charset characters. This should speed up rejection 1130 of non-keyword strings a little in some cases. 1131 1132Sat Oct 21 19:28:36 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1133 1134 * Fixed Key_List::print_hash_function so that it no longer output 1135 things like `return 0 + ...' Although this probably gets 1136 optimized away by even the worst C compilers there isn't any 1137 point tempting fate... ;-) 1138 1139 * Fixed class List_Node's constructor so that it wouldn't a priori 1140 refuse to consider trying to hash keys whose length is less 1141 than the smallest user-specified key position. It turns out 1142 this is not a problem unless the user also specifies the -n 1143 (NOLENGTH) option, in which case such keys most likely 1144 don't have a prayer of being hashed correctly! 1145 1146 * Changed the name of the generated lookup table from `Hash_Table' 1147 to `asso_value' to be consistent with the gperf paper. 1148 1149Tue Oct 17 14:19:48 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1150 1151 * Added a flag GATHER_STATISTICS in the Makefile. If defined 1152 during compilation this turns on certain collection facilities 1153 that track the performance of gperf during its execution. In 1154 particular, I want to see how many collisions occur for the 1155 double hashing Hash_Table. 1156 1157 * Added a safety check so that we don't screw up if the total 1158 number of `resets' of the Bool_Array exceeds MAX_INT. Since 1159 this number is around 2^31 it is unlikely that this would ever 1160 occur for most input, but why take the risk? 1161 1162 * Changed the behavior for the -a (ANSI) option so that the 1163 generated prototypes use int rather than size_t for the LEN 1164 parameter. It was too ugly having to #include <stddef.h> all 1165 over the place... 1166 1167Mon Oct 16 11:00:35 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1168 1169 * Continued to work on the gperf paper for the USENIX C++ 1170 conference. At some point this will be merged back into 1171 the gperf documentation... 1172 1173Sat Oct 14 20:29:43 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) 1174 1175 * Added a majorly neat hack to Bool_Array, suggested by rfg. 1176 The basic idea was to throw away the Ullman array technique. 1177 The Ullman array was used to remove the need to reinitialize all 1178 the Bool_Array elements to zero everytime we needed to determine 1179 whether there were duplicate hash values in the keyword list. 1180 The current trick uses an `iteration number' scheme, which takes 1181 about 1/3 the space and reduces the overall program running a 1182 time by about 20 percent for large input! The hack works as 1183 follows: 1184 1185 1. Dynamically allocation 1 boolean array of size k. 1186 2. Initialize the boolean array to zeros, and consider the first 1187 iteration to be iteration 1. 1188 2. Then on all subsequent iterations we `reset' the bool array by 1189 kicking the iteration count by 1. 1190 3. When it comes time to check whether a hash value is currently 1191 in the boolean array we simply check its index location. If 1192 the value stored there is *not* equal to the current iteration 1193 number then the item is clearly *not* in the set. In that 1194 case we assign the iteration number to that array's index 1195 location for future reference. Otherwise, if the item at 1196 the index location *is* equal to the iteration number we've 1197 found a duplicate. No muss, no fuss! 1198 1199Mon Oct 2 12:30:54 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1200 1201 * Changed some consts in options.h to enumerals, since g++ 1202 doesn't seem to like them at the moment! 1203 1204Sat Sep 30 12:55:24 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1205 1206 * Fixed a stupid bug in Key_List::print_hash_function that manifested 1207 itself if the `-k$' option was given (i.e., only use the key[length] 1208 character in the hash function). 1209 1210 * Added support for the -C option. This makes the contents of 1211 all generated tables `readonly'. 1212 1213 * Changed the handling of generated switches so that there is 1214 only one call to str[n]?cmp. This *greatly* reduces the size of 1215 the generated assembly code on all compilers I've seen. 1216 1217 * Fixed a subtle bug that occurred when the -l and -S option 1218 was given. Code produced looked something like: 1219 1220 if (len != key_len || !strcmp (s1, resword->name)) return resword; 1221 1222 which doesn't make any sense. Clearly, this should be: 1223 1224 if (len == key_len && !strcmp (s1, resword->name)) return resword; 1225 1226Tue Sep 26 10:36:50 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1227 1228 * Changed class Read_Line's definition so that it no longer 1229 needs to know about the buffering scheme used to speed up 1230 dynamic memory allocation of input keywords and their 1231 associated attributes. This means that operator new is no longer 1232 a friend of Read_Line. 1233 1234Mon Sep 25 23:17:10 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1235 1236 * Decided that Obstacks had too much overhead, so they were 1237 removed in favor of super-efficient, low-overhead buffered 1238 storage allocation hacks in Read_Line and List_Node. 1239 1240 * No longer try to inline functions that g++ complains about 1241 (Key_List::Merge and Key_List::Merge_Sort). 1242 1243Sun Sep 24 13:11:24 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1244 1245 * Changed classes Read_Line and List_Node to use Obstacks in order 1246 to cache memory allocation for keyword strings and List_Nodes. 1247 1248 * Continued to experiment with inheritance schemes. 1249 1250 * Added a new file `alpha.h', that declares static data shared 1251 (i.e., inherited) between classes List_Node and Key_List. 1252 1253Tue Sep 12 16:14:41 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1254 1255 * Made numerous changes to incorporate multiple inheritance in 1256 gperf. 1257 1258Wed Aug 16 23:04:08 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1259 1260 * Added the -DCOMPILER_FIXED flag to the ./src/Makefile. This 1261 implies that people trying to compile gperf need to have a 1262 working version of the new g++ compiler (1.36.0). 1263 1264 * Removed some extra spaces that were being added in the generated 1265 C code. 1266 1267Mon Jul 24 17:09:46 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1268 1269 * Fixed PRINT_HASH_FUNCTION and PRINT_LOOKUP_FUNCTION in keylist.c 1270 so that the generated functions take an unsigned int length argument. 1271 If -a is enabled the prototype is (const char *str, size_t len). 1272 1273Fri Jul 21 13:06:15 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) 1274 1275 * Fixed a typo in PRINT_KEYWORD_TABLE in keylist.cc that prevented 1276 the indentation from working correctly. 1277 1278 * Fixed a horrible typo in PRINT_KEYWORD_TABLE in keylist.cc 1279 that prevented links from being printed correctly. 1280 1281Tue Jul 18 16:04:31 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) 1282 1283 * Fixed up readline.cc and readline.h so that they work OK 1284 with g++ compilers that aren't completely up-to-date. 1285 If symbol COMPILER_FIXED is defined then the behavior 1286 that works on my more recent version of g++ is enabled. 1287 1288Sun Jul 9 17:53:28 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1289 1290 * Changed the ./tests subdirectory Makefile so that it 1291 uses $(CC) instead of gcc. 1292 1293Sun Jul 2 21:52:15 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1294 1295 * Fixed a number of subtle bugs that occurred when -S was 1296 combined with various and sundry options. 1297 1298 * Added the -G option, that makes the generated keyword table 1299 a global static variable, rather than hiding it inside 1300 the lookup function. This allows other functions to directly 1301 access the contents in this table. 1302 1303 * Added the "#" feature, that allows comments inside the keyword 1304 list from the input file. Comment handling takes place in readline.c. 1305 This simplifies the code and reduces the number of malloc calls. 1306 1307 * Also added the -H option (user can give the name of the hash 1308 function) and the -T option (prevents the transfer of the type decl 1309 to the output file, which is useful if the type is already defined 1310 elsewhere). 1311 1312Thu Jun 22 20:39:39 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1313 1314 * Modified many classes so that they would inherit Std_Err as 1315 a base class. This makes things more abstract... 1316 1317Fri Jun 16 14:23:00 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) 1318 1319 * Modified the -f (FAST) option. This now takes an argument. 1320 The argument corresponds to the number of iterations used 1321 to resolve collisions. -f 0 uses the length of the 1322 keyword list (which is what -f did before). This makes 1323 life much easier when dealing with large keyword files. 1324 1325Tue Jun 6 17:53:27 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1326 1327 * Added the -c (comparison) option. Enabling this 1328 will use the strncmp function for string comparisons. 1329 The default is to use strcmp. 1330 1331 * Fixed a typo in key_list.cc (PRINT_SWITCH). This caused 1332 faulty C code to be generated when the -D, -p, and -t 1333 options were all enabled. 1334 1335Thu May 25 14:07:21 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) 1336 1337 * Once again, changed class Read_Line to overload global operator 1338 new. Hopefully, this will work...! 1339 1340Sun May 21 01:51:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1341 1342 * Modified Key_List::print_hash_function () so that it properly 1343 formats the associated values in the hash table according to 1344 the maximum number of digits required to represent the largest 1345 value. 1346 1347 * Removed the named return value from class Hash_Table's 1348 operator (), since this causes a seg fault when -O is enabled. 1349 No sense tripping subtle g++ bugs if we don't have to.... ;-) 1350 1351 * Removed the operator new hack from Read_Line, since this seemed 1352 to create horrible bus error problems. 1353 1354 * Changed many class member functions and data members to be `static', 1355 if they don't manipulate this! 1356 1357Fri May 12 23:06:56 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1358 1359 * Changed class Std_Err to use static member functions, a la 1360 Ada or Modula 2. This eliminates the need for an explicit 1361 error-handler class object. 1362 1363 * Added the ``named return value'' feature to Hash_Table::operator () 1364 and Bool_Array::operator [], just for the heck of it.... ;-) 1365 1366 * Changed the previous hack in Read_Line so that we now use 1367 the overloaded global `new' instead of NEW_STRING! 1368 1369Wed May 3 17:36:55 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) 1370 1371 * Updated to version 1.7. This reflects the recent major changes 1372 and the new C port. 1373 1374 * Modified the GNU getopt.cc routine to have a class-based interface. 1375 1376 * Fixed a typo in Perfect.cc ~Perfect that prevented the actual maximum 1377 hash table size from being printed (maybe the stream classes 1378 weren't so bad after all.... ;-). 1379 1380 * Added support for the -f option. This generates the perfect 1381 hash function ``fast.'' It reduces the execution time of 1382 gperf, at the cost of minimizing the range of hash values. 1383 1384Tue May 2 16:23:29 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1385 1386 * Added an efficiency hack to Read_Line. Instead of making 1387 a call to operator NEW (a.k.a. malloc) for each input string 1388 a new member function NEW_STRING stores a large buffer from 1389 which new strings are carved out, growing the buffer if 1390 necessary. It might be useful to add this throughout the 1391 program.... 1392 1393 * Removed all unnecessary calls to DELETE. If the program is about 1394 to exit it is silly to waste time freeing memory. 1395 1396 * Added the GNU getopt program to the distribution. This makes 1397 GPERF portable to systems that don't include getopt in libc. 1398 1399 * Added a strcspn member to class Key_List. This also increases 1400 portability. 1401 1402 * Added the get_include_src function from keylist.c as a member 1403 function in class Key_List. Hopefully every function is 1404 now associated with a class. This aids abstraction and 1405 modularity. 1406 1407 * Ported gperf to C. From now on both K&R C and GNU G++ versions 1408 will be supported. There will be two ChangeLog files, one 1409 for each version of the program. 1410 1411Mon May 1 16:41:45 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1412 1413 * Fixed a bug with -k'*'. This now prints out *all* the cases 1414 up to the length of the longest word in the keyword set. 1415 1416Sun Apr 30 12:15:25 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1417 1418 * Removed all use of the stream classes. Too ugly, slow, and 1419 not handled by the c++-mode formatter.... 1420 1421 * Modified the handling of links (i.e., keywords that have 1422 identical hash values as other keywords). This should 1423 speed up hash function generation for keyword sets with 1424 many duplicate entries. The trick is to treat duplicate 1425 values as equivalence classes, so that each set of duplicate 1426 values is represented only once in the main list processing. 1427 1428 * Fixed some capitialization typos and indentations mistakes in 1429 Key_List::print_hash_function. 1430 1431Sat Apr 29 12:04:03 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) 1432 1433 * Fixed a typo/logico in Key_List::print_switch that prevented 1434 the last keyword in the keyword list to be print out. This 1435 requires further examination..... 1436 1437 * Fixed a stupid bug in List_Node::List_node. If the -k'*' option 1438 was enabled the KEY_SET string wasn't getting terminated with 1439 '\0'! 1440 1441Fri Apr 28 12:38:35 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1442 1443 * Renamed strexp.h and strexp.cc to iterator.h and iterator.cc. 1444 Also changed the strexp class to iterator. Continued to work 1445 on style... 1446 1447 * Updated the version number to 1.6. This reflects all the 1448 recent changes. 1449 1450Thu Apr 27 00:14:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1451 1452 * Added the -D option that properly handles keyword sets that 1453 contain duplicate hash values. 1454 1455 * Continued the stylistic changes. Added the #pragma once 1456 directive to all the *.h files. Removed all #defines and 1457 replaced them with static consts. Also moved the key_sort 1458 routine from options.cc into the options class as a 1459 member function. 1460 1461Mon Apr 3 13:26:55 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) 1462 1463 * Made massive stylistic changes to bring source code into 1464 conformance with GNU style guidelines. 1465 1466Thu Mar 30 23:28:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1467 1468 * Fixed up the output routines so that they generate code 1469 corresponding to the GNU style guidelines. 1470 1471Sat Mar 11 13:12:37 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1472 1473 * Fixed Stderr constructors so that they wouldn't try to 1474 use the base class initializer syntax for the static 1475 class variable Program_Name. G++ 1.34 is stricter in 1476 enforcing the rules! 1477 1478Fri Mar 10 11:24:14 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1479 1480 * Removed -v and ``| more'' from the Makefile to keep rfg happy... 1481 1482Thu Mar 2 12:37:30 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1483 1484 * Sent latest GNU gperf version 1.5 to Doug Lea for inclusion 1485 into libg++ 1.34. Note that there is a small bug with 1486 the new %{ ... %} source inclusion facility, since it doesn't 1487 understand comments and will barf if %{ or %} appear nested 1488 inside the outermost delimiters. This is too trivial of 1489 a defect to fix at the moment... 1490 1491Tue Feb 28 11:19:58 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1492 1493 * Added the -K option, which allows the user to provide a 1494 alternative name for the keyword structure component. 1495 The default is still ``name.'' 1496 1497 * Added the LEX and YACC-like ability to include arbitrary 1498 text at the beginning of the generated C source code output. 1499 This required two new functions Get_Special_Input, 1500 Key_List::Save_Include_Src; 1501 1502 * Fixed memory allocation bug in Key_List::Set_Types. 1503 Variable Return_Type needs 1 additional location 1504 to store the "*" if the -p option is used. 1505 1506 * Added code to NULL terminate both Struct_Tag and Return_Type, 1507 *after* the strncpy (stupid mistake). 1508 1509Mon Feb 27 14:39:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1510 1511 * Added a new option -N. This allows the user to specify the 1512 name to be used for the generated lookup function. The 1513 default name is still ``in_word_set.'' This makes it 1514 possible to completely automate the perfect hash function 1515 generation process! 1516 1517Mon Feb 20 23:33:14 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1518 1519 * Corrected the Hash_Table::operator () function so that 1520 *it* is responsible for deciding when a new key has the 1521 same signature as a previously seen key. The key length 1522 information is now used internally to this function to 1523 decide whether to add to the hash table those keys with 1524 the same key sets, but different lengths. Before, this 1525 was handled by the Key_List::Read_Keys function. However, 1526 this failed to work for certain duplicate keys, since 1527 they weren't being entered into the hash table properly. 1528 1529Sun Feb 19 16:02:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1530 1531 * Modified class Options by moving the enum Option_Type out 1532 of the class. This is to satisfy the new enumeration 1533 scope rules in C++. 1534 1535Sun Jan 15 15:12:09 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1536 1537 * Incremented the version number upto 1.4 to reflect the new 1538 options that affect the generated code. Send the new 1539 distribution off to Michael for use with g++ 1.33. 1540 1541 * Added a fix to Key_List::Read_Keys so that it checks for links 1542 properly when the -n option is used. Previously, it didn't 1543 catch obvious links, which caused it to spend large amount 1544 of time searching for a solution that could never occur! 1545 1546 * Modified the Key_List data structure to record *both* the 1547 minimum and the maximum key lengths. This information 1548 is now computed in Key_List::Read_Keys, and thus 1549 Key_List::Print_Min_Max doesn't need to bother. 1550 1551 * Modifed the key position iterator scheme in options.cc to 1552 eliminate the need for member function Options::Advance. 1553 Now, the Options::Get function performs the advancement 1554 automatically, obviating the need for an extra function call. 1555 1556 * Added the new function Options::Print_Options, to print out 1557 the user-specified command line options to generated C 1558 output file. 1559 1560 * Added a new function, Key_List::Print_Keylength_Table, 1561 which creates a table of lengths for use in speeding 1562 up the keyword search. This also meant that a new 1563 option, -l (LENTABLE) is recognized. It controls 1564 whether the length table is printed and the comparison 1565 made in the generated function ``in_word_set.'' 1566 1567 * Added a comment at the top of the generated C code 1568 output file that tells what version of gperf was used. 1569 Next, I'll also dump out the command line options 1570 as a comment too. Thanks to Michael Tiemann for the 1571 feedback on this. 1572 1573 * Fixed the -n option to make it work correctly with 1574 other parts of the program (most notably the Perfect::Hash 1575 function and the computation of minimum and maximum lengths. 1576 1577Fri Jan 13 21:25:27 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) 1578 1579 * Realized the the need to add a test that will enable 1580 optimziation of the generated C code in the ``hash'' function 1581 by checking whether all the requested key positions are 1582 guaranteed to exist due to the comparison in `in_word_set.'' 1583 I'll put this in soon.... 1584 1585Thu Jan 12 20:09:21 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1586 1587 * Added pascal, modula3, and modula2 tests inputs to the 1588 Makefile 1589 1590 * Recognised that there is a bug with the -n option. However 1591 I'm too busy to fix it properly, right now. The problem 1592 is that the generated #define end up being 0, since that's 1593 my hack to make -n work. This needs complete rethinking! 1594 1595Tue Jan 10 00:08:16 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1596 1597 * Added a new option, -n, that instructs gperf to not use the 1598 length of an identifier when computing the hash functions. 1599 I'm not sure how useful this is! 1600 1601 * Retransmitted the distribution to rocky.oswego.edu. Hopefully, 1602 this will work! 1603 1604 * Began fixing the indentation and capitalization to conform 1605 to the GNU coding guidelines. 1606 1607Mon Jan 9 22:23:18 1989 Doug Schmidt (schmidt at pompe.ics.uci.edu) 1608 1609 * Fixed horrible bug in Read_Line::Readln_Aux. This was 1610 a subtle and pernicous off-by-1 error, that overwrote 1611 past the last character of the input string buffer. I 1612 think this fault was killing the vax! 1613 1614 * Yow, fixed an oversight in List_Node::List_Node, where the 1615 pointer field Next was uninitialized. Luckily, the new routine 1616 seems to return 0 filled objects the first time through! 1617 1618Sun Jan 8 13:43:14 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1619 1620 * Modified the ``key linked'' diagnostic in Key_List::Read_Keys 1621 to be more helpful and easy to read. 1622 1623 * Fixed the List_Node::List_Node so that it would ignore trailing 1624 fields if the -t option was not enabled. 1625 1626 * Moved the List_Node declarations out of keylist.h and 1627 into a file of its own, called listnode.cc and listnode.h 1628 Made Set_Sort a member function of class List_Node. 1629 1630 * Massively updated the documentation in the gperf.texinfo file. 1631 1632 * Polished off the major revision to the print functions, 1633 added a few new tests in the Makefile to check for the 1634 validity of the program and ftp'ed the entire distribution 1635 off to Doug Lea for libg++. ( changed it to 1636 1.3 to reflect the major changes with the generated 1637 C code ). 1638 1639 * Fixed Key_List::Print_Switch to deal with the -p and -t options. 1640 This meant that the ``still-born'' function Key_List:: 1641 Print_Type_Switch was superflous, so I removed it. 1642 Also, removed the restriction in Option that the -p and 1643 -t options couldn't be used simultaneously. 1644 1645 * Modified List_Node::List_Node, to perform only 1 call to 1646 ``new'' when dynamically allocating memory for the Key_Set 1647 and the Uniq_Set. 1648 1649Sat Jan 7 14:10:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) 1650 1651 * Fixed a big bug with the new policy of nesting the 1652 wordlist inside of generated function ``in_word_set.'' 1653 I'd forgotten to declare the wordlist array as static! 1654 ( arrgh ). 1655 1656 * Added a new function Key_List::Set_Types, that figures out 1657 the return type for generated function ``in_word_set,'' 1658 the user-defined ``struct tag,'' if one is used, and also 1659 formates the array type for the static local array. 1660 1661 * Changed the print routines to take advantage of the 1662 new -p option. 1663 1664 * Began adding the hooks to allow the return of a pointer 1665 to a user defined struct location from the generated 1666 ``in_word_set'' function instead of the current 0 or 1 1667 return value. Created function Key_List::Print_Type_Switch 1668 and added option -p to class Option, allowing the user to 1669 request generation of the aforementioned pointers returned 1670 instead of booleans. 1671 1672 * Put in checks in class Option to make sure that -S and -t 1673 options are not used simultaneously. This restriction 1674 will be removed in subsequent releases, once I decide on 1675 a clean way to implement it. 1676 1677 * Sent version 1.2 to Doug Lea for possible inclusion into 1678 the libg++ distribution. 1679 1680 * Moved the static word_list array inside the generated function 1681 in_word_set. This supports better data hiding. 1682 1683 * Added a texinfo file, gperf.texinfo 1684 1685 * Revised the Makefile to cleanup the droppings from texinfo 1686 and changed the name of gperf.cc and gperf.h to perfect.cc 1687 and perfect.h. 1688 1689Fri Jan 6 13:04:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) 1690 1691 * Implemented the switch statement output format. Much better 1692 for large datasets in terms of space used. 1693 1694 * Added new functions to break up the Key_List::Output function. 1695 Functions added were Key_List::Print_Switch, Key_List::Print_Min_Max, 1696 Key_List::Print_Keyword_Table, Key_List::Print_Hash_Function, 1697 and Key_List::Print_Lookup_Function. This simplifies the 1698 big mess in Key_List::Output considerably! 1699 1700 * Added switch statement option to Options, which potentially 1701 trades time for space in the generated lookup code. 1702 1703Thu Jan 5 22:46:34 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) 1704 1705 * Released version 1.1 1706 1707 * Fixed a bug with Gperf::Merge_Set, it was skipping letters shared 1708 between the Set_1 and Set_2. 1709 1710 * Added the optimal min/max algorithm in Key_List::Output. This 1711 runs in O ( 3n/2 ), rather than O ( 2n ) time. 1712 1713 * Changed Gperf::Sort_Set to use insertion sort, rather than 1714 bubble sort. 1715 1716 * Added a check in Key_List::Output for the special case where 1717 the keys used are 1,$. It is possible to generate more 1718 efficient C code in this case. 1719