diff options
author | Bruno Haible <bruno@clisp.org> | 2000-08-19 08:47:58 +0000 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2000-08-19 08:47:58 +0000 |
commit | 891da43ca2137e918e93c09d9bfa1ab16f5015d2 (patch) | |
tree | a991573aaf901fe75cfdb3f0676fbbdf29967211 | |
parent | 018913610b93959da99e6dbea06c2d29310d556a (diff) | |
download | gperf-891da43ca2137e918e93c09d9bfa1ab16f5015d2.tar.gz |
Add option "-F", initializer suffix, to avoid warnings in gcc.
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | doc/gperf.texi | 9 | ||||
-rw-r--r-- | src/key-list.cc | 16 | ||||
-rw-r--r-- | src/options.cc | 24 | ||||
-rw-r--r-- | src/options.h | 4 | ||||
-rw-r--r-- | src/options.icc | 10 |
6 files changed, 69 insertions, 10 deletions
@@ -1,5 +1,21 @@ 2000-08-19 Bruno Haible <bruno@linuix.math.u-bordeaux.fr> + Make the structure initializers customizable. Based on a patch by + Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. + * src/options.h (Options::get_initializer_suffix, + Options::initializer_suffix): New declarations. + * src/options.icc (Options::get_initializer_suffix): New function. + * src/options.cc (DEFAULT_INITIALIZER_SUFFIX): New constant. + (Options::initializer_suffix): New variable. + (Options::long_usage): Document option "-F". + (Options constructor): Initialize initializer_suffix. + (Options destructor): Dump initializer_suffix. + (long_options): Add option "-F". + (Options::operator()): Accept option "-F". Sets initializer_suffix. + * src/key-list.cc (output_keyword_blank_entries): Output + initializer_suffix. + * doc/gperf.texi: Document option "-F". + * COPYING: Replace with GPL version 2 (with new FSF address and Y2K safe year format). diff --git a/doc/gperf.texi b/doc/gperf.texi index c9a9549..ac129b2 100644 --- a/doc/gperf.texi +++ b/doc/gperf.texi @@ -517,7 +517,7 @@ the literal tab character. @item -t Allows you to include a @code{struct} type declaration for generated -code. Any text before a pair of consecutive %% is consider part of the +code. Any text before a pair of consecutive %% is considered part of the type declaration. Key words and additional fields may follow this, one group of fields per line. A set of examples for generating perfect hash tables and functions for Ada, C, and G++, Pascal, and Modula 2 and 3 @@ -578,6 +578,13 @@ the keyword is @samp{name}. This option allows an arbitrary choice of identifier for this component, although it still must occur as the first field in your supplied @code{struct}. +@item -F @var{initializers} +This option is only useful when option @samp{-t} has been given. +It permits to specify initializers for the structure members following +@var{key name} in empty hash table entries. The list of initializers +should start with a comma. By default, the emitted code will +zero-initialize structure members following @var{key name}. + @item -H @var{hash function name} Allows you to specify the name for the generated hash function. Default name is @samp{hash}. This option permits the use of two hash tables in the diff --git a/src/key-list.cc b/src/key-list.cc index 38341f3..8867dcd 100644 --- a/src/key-list.cc +++ b/src/key-list.cc @@ -1,5 +1,5 @@ /* Routines for building, ordering, and printing the keyword list. - Copyright (C) 1989-1998 Free Software Foundation, Inc. + Copyright (C) 1989-1998, 2000 Free Software Foundation, Inc. written by Douglas C. Schmidt (schmidt@ics.uci.edu) This file is part of GNU GPERF. @@ -1053,7 +1053,17 @@ output_keyword_entry (List_Node *temp, const char *indent) static void output_keyword_blank_entries (int count, const char *indent) { - const int columns = 9; + int columns; + if (option[TYPE]) + { + columns = 58 / (6 + strlen (option.get_initializer_suffix())); + if (columns == 0) + columns = 1; + } + else + { + columns = 9; + } int column = 0; for (int i = 0; i < count; i++) { @@ -1069,7 +1079,7 @@ output_keyword_blank_entries (int count, const char *indent) printf (", "); } if (option[TYPE]) - printf ("{\"\"}"); + printf ("{\"\"%s}", option.get_initializer_suffix()); else printf ("\"\""); column++; diff --git a/src/options.cc b/src/options.cc index 7be9746..85fe275 100644 --- a/src/options.cc +++ b/src/options.cc @@ -1,5 +1,5 @@ /* Handles parsing the Options provided to the user. - Copyright (C) 1989-1998 Free Software Foundation, Inc. + Copyright (C) 1989-1998, 2000 Free Software Foundation, Inc. written by Douglas C. Schmidt (schmidt@ics.uci.edu) This file is part of GNU GPERF. @@ -43,6 +43,9 @@ static const char *const DEFAULT_NAME = "in_word_set"; /* Default name for the key component. */ static const char *const DEFAULT_KEY = "name"; +/* Default struct initializer suffix. */ +static const char *const DEFAULT_INITIALIZER_SUFFIX = ""; + /* Default name for the generated class. */ static const char *const DEFAULT_CLASS_NAME = "Perfect_Hash"; @@ -67,6 +70,7 @@ int Options::iterations; char **Options::argument_vector; const char *Options::function_name; const char *Options::key_name; +const char *Options::initializer_suffix; const char *Options::class_name; const char *Options::hash_name; const char *Options::wordlist_name; @@ -116,6 +120,9 @@ Options::long_usage (FILE * strm) "Details in the output code:\n" " -K, --slot-name=NAME Select name of the keyword component in the keyword\n" " structure.\n" + " -F, --initializer-suffix=INITIALIZERS\n" + " Initializers for additional components in the keyword\n" + " structure.\n" " -H, --hash-fn-name=NAME\n" " Specify name of generated hash function. Default is\n" " `hash'.\n" @@ -266,6 +273,7 @@ Options::Options (void) option_word = DEFAULTCHARS | C; function_name = DEFAULT_NAME; key_name = DEFAULT_KEY; + initializer_suffix = DEFAULT_INITIALIZER_SUFFIX; hash_name = DEFAULT_HASH_NAME; wordlist_name = DEFAULT_WORDLIST_NAME; class_name = DEFAULT_CLASS_NAME; @@ -309,6 +317,7 @@ Options::~Options (void) "\nhash function name = %s" "\nword list name = %s" "\nkey name = %s" + "\ninitializer suffix = %s" "\njump value = %d" "\nmax associated value = %d" "\ninitial associated value = %d" @@ -337,7 +346,8 @@ Options::~Options (void) option_word & SEVENBIT ? "enabled" : "disabled", iterations, function_name, hash_name, wordlist_name, key_name, - jump, size - 1, initial_asso_value, delimiters, total_switches); + initializer_suffix, jump, size - 1, initial_asso_value, + delimiters, total_switches); if (option_word & ALLCHARS) fprintf (stderr, "all characters are used in the hash function\n"); @@ -363,6 +373,7 @@ static const struct option long_options[] = { "struct-type", no_argument, 0, 't' }, { "language", required_argument, 0, 'L' }, { "slot-name", required_argument, 0, 'K' }, + { "initializer-suffix", required_argument, 0, 'F' }, { "hash-fn-name", required_argument, 0, 'H' }, { "lookup-fn-name", required_argument, 0, 'N' }, { "class-name", required_argument, 0, 'Z' }, @@ -403,7 +414,7 @@ Options::operator() (int argc, char *argv[]) while ((option_char = getopt_long (argument_count, argument_vector, - "adcCDe:Ef:gGhH:i:Ij:k:K:lL:nN:oprs:S:tTvW:Z:7", + "adcCDe:Ef:F:gGhH:i:Ij:k:K:lL:nN:oprs:S:tTvW:Z:7", long_options, (int *)0)) != -1) { @@ -453,11 +464,16 @@ Options::operator() (int argc, char *argv[]) } break; } + case 'F': + { + initializer_suffix = /*getopt*/optarg; + break; + } case 'g': /* Use the ``inline'' keyword for generated sub-routines, ifdef __GNUC__. */ break; /* This is now the default. */ case 'G': /* Make the keyword table a global variable. */ { - option_word |= GLOBAL; + option_word |= GLOBAL; break; } case 'h': /* Displays a list of helpful Options to the user. */ diff --git a/src/options.h b/src/options.h index a81afe6..9025c86 100644 --- a/src/options.h +++ b/src/options.h @@ -2,7 +2,7 @@ /* Handles parsing the Options provided to the user. - Copyright (C) 1989-1998 Free Software Foundation, Inc. + Copyright (C) 1989-1998, 2000 Free Software Foundation, Inc. written by Douglas C. Schmidt (schmidt@ics.uci.edu) This file is part of GNU GPERF. @@ -98,6 +98,7 @@ public: static int get_total_switches (void); static const char *get_function_name (void); static const char *get_key_name (void); + static const char *get_initializer_suffix (void); static const char *get_class_name (void); static const char *get_hash_name (void); static const char *get_wordlist_name (void); @@ -116,6 +117,7 @@ private: static char **argument_vector; /* Stores a pointer to command-line vector. */ static const char *function_name; /* Names used for generated lookup function. */ static const char *key_name; /* Name used for keyword key. */ + static const char *initializer_suffix; /* Suffix for empty struct initializers. */ static const char *class_name; /* Name used for generated C++ class. */ static const char *hash_name; /* Name used for generated hash function. */ static const char *wordlist_name; /* Name used for hash table array. */ diff --git a/src/options.icc b/src/options.icc index 0d9668f..82fe537 100644 --- a/src/options.icc +++ b/src/options.icc @@ -1,6 +1,6 @@ /* Inline Functions for options.{h,cc}. - Copyright (C) 1989-1998 Free Software Foundation, Inc. + Copyright (C) 1989-1998, 2000 Free Software Foundation, Inc. written by Douglas C. Schmidt (schmidt@ics.uci.edu) This file is part of GNU GPERF. @@ -118,6 +118,14 @@ Options::get_key_name (void) return key_name; } +/* Returns the struct initializer suffix. */ +INLINE const char * +Options::get_initializer_suffix (void) +{ + T (Trace t ("Options::get_initializer_suffix");) + return initializer_suffix; +} + /* Returns the hash function name. */ INLINE const char * Options::get_hash_name (void) |