size_type.patch   [plain text]


diff -up -r ./doc/gperf.1 ./doc/gperf.1
--- ./doc/gperf.1	2007-05-02 09:01:25.000000000 -0700
+++ ./doc/gperf.1	2011-10-06 14:21:41.000000000 -0700
@@ -1,7 +1,7 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
-.TH GPERF "1" "May 2007" "GNU gperf 3.0.3" FSF
+.TH GPERF "1" "October 2011" "GNU gperf 3.0.3" FSF
 .SH NAME
-gperf \- generate a perfect hash function from a key set
+gperf \- manual page for gperf 3.0.3
 .SH SYNOPSIS
 .B gperf
 [\fIOPTION\fR]... [\fIINPUT-FILE\fR]
@@ -129,6 +129,10 @@ binary search.
 Prevents the transfer of the type declaration to the
 output file. Use this option if the type is already
 defined elsewhere.
+.TP
+\fB\-\-size\-type\fR=\fITYPE\fR
+Specify the type for length parameters. Default type is
+\&'unsigned int'.
 .SS "Algorithm employed by gperf:"
 .TP
 \fB\-k\fR, \fB\-\-key\-positions\fR=\fIKEYS\fR
diff -up -r ./src/options.cc ./src/options.cc
--- ./src/options.cc	2007-03-31 08:22:16.000000000 -0700
+++ ./src/options.cc	2011-10-06 14:13:41.000000000 -0700
@@ -67,6 +67,8 @@ static const char *const DEFAULT_STRINGP
 /* Default delimiters that separate keywords from their attributes.  */
 static const char *const DEFAULT_DELIMITERS = ",";
 
+static const char *const DEFAULT_SIZE_TYPE = "unsigned int";
+
 /* Prints program usage to given stream.  */
 
 void
@@ -202,6 +204,9 @@ Options::long_usage (FILE * stream)
            "                         Prevents the transfer of the type declaration to the\n"
            "                         output file. Use this option if the type is already\n"
            "                         defined elsewhere.\n");
+  fprintf (stream,
+           "      --size-type=TYPE   Specify the type for length parameters. Default type is\n"
+	   "                         'unsigned int'.\n");
   fprintf (stream, "\n");
   fprintf (stream,
            "Algorithm employed by gperf:\n");
@@ -468,6 +473,7 @@ Options::Options ()
     _lengthtable_name (DEFAULT_LENGTHTABLE_NAME),
     _stringpool_name (DEFAULT_STRINGPOOL_NAME),
     _delimiters (DEFAULT_DELIMITERS),
+    _size_type (DEFAULT_SIZE_TYPE),
     _key_positions ()
 {
 }
@@ -512,6 +518,7 @@ Options::~Options ()
                "\nhash table size multiplier = %g"
                "\ninitial associated value = %d"
                "\ndelimiters = %s"
+	       "\nsize type = %s"
                "\nnumber of switch statements = %d\n",
                _option_word & TYPE ? "enabled" : "disabled",
                _option_word & UPPERLOWER ? "enabled" : "disabled",
@@ -537,7 +544,7 @@ Options::~Options ()
                _function_name, _hash_name, _wordlist_name, _lengthtable_name,
                _stringpool_name, _slot_name, _initializer_suffix,
                _asso_iterations, _jump, _size_multiple, _initial_asso_value,
-               _delimiters, _total_switches);
+               _delimiters, _size_type, _total_switches);
       if (_key_positions.is_useall())
         fprintf (stderr, "all characters are used in the hash function\n");
       else
@@ -666,6 +673,12 @@ Options::set_delimiters (const char *del
     _delimiters = delimiters;
 }
 
+void
+Options::set_size_type (const char *size_type)
+{
+  if (_size_type == DEFAULT_SIZE_TYPE) 
+    _size_type = size_type;
+}
 
 /* Parses the command line Options and sets appropriate flags in option_word.  */
 
@@ -691,6 +704,7 @@ static const struct option long_options[
   { "global-table", no_argument, NULL, 'G' },
   { "word-array-name", required_argument, NULL, 'W' },
   { "length-table-name", required_argument, NULL, CHAR_MAX + 4 },
+  { "size-type", required_argument, NULL, CHAR_MAX + 5 },
   { "switch", required_argument, NULL, 'S' },
   { "omit-struct-type", no_argument, NULL, 'T' },
   { "key-positions", required_argument, NULL, 'k' },
@@ -1044,6 +1058,11 @@ warranty; not even for MERCHANTABILITY o
             _lengthtable_name = /*getopt*/optarg;
             break;
           }
+        case CHAR_MAX + 5:      /* Sets the name for the length table array.  */
+          {
+            _size_type = /*getopt*/optarg;
+            break;
+          }
         default:
           short_usage (stderr);
           exit (1);
Only in ./src: options.cc~
diff -up -r ./src/options.h ./src/options.h
--- ./src/options.h	2005-05-14 07:22:36.000000000 -0700
+++ ./src/options.h	2011-10-06 13:29:28.000000000 -0700
@@ -209,6 +209,9 @@ public:
   /* Sets the delimiters string, if not already set.  */
   void                  set_delimiters (const char *delimiters);
 
+  const char *		get_size_type() const;
+  void			set_size_type(const char*);
+
   /* Returns key positions.  */
   const Positions&      get_key_positions () const;
 
@@ -279,6 +282,8 @@ private:
   /* Separates keywords from other attributes.  */
   const char *          _delimiters;
 
+  const char *		_size_type;
+
   /* Contains user-specified key choices.  */
   Positions             _key_positions;
 };
Only in ./src: options.h~
diff -up -r ./src/options.icc ./src/options.icc
--- ./src/options.icc	2005-05-14 07:22:36.000000000 -0700
+++ ./src/options.icc	2011-10-06 13:42:59.000000000 -0700
@@ -155,3 +155,9 @@ Options::get_key_positions () const
 {
   return _key_positions;
 }
+
+INLINE const char *
+Options::get_size_type() const
+{
+	return _size_type;
+}
Only in ./src: options.icc~
diff -up -r ./src/output.cc ./src/output.cc
--- ./src/output.cc	2011-10-06 14:23:05.000000000 -0700
+++ ./src/output.cc	2011-10-06 13:41:53.000000000 -0700
@@ -772,14 +772,14 @@ Output::output_hash_function () const
   printf (option[KRC] ?
                  "(str, len)\n"
             "     register char *str;\n"
-            "     register unsigned int len;\n" :
+            "     register %s len;\n" :
           option[C] ?
                  "(str, len)\n"
             "     register const char *str;\n"
-            "     register unsigned int len;\n" :
+            "     register %s len;\n" :
           option[ANSIC] | option[CPLUSPLUS] ?
-                 "(register const char *str, register unsigned int len)\n" :
-          "");
+                 "(register const char *str, register %s len)\n" :
+          "", option.get_size_type());
 
   /* Note that when the hash function is called, it has already been verified
      that  min_key_len <= len <= max_key_len.  */
@@ -875,7 +875,7 @@ Output::output_hash_function () const
                   "  switch (%s)\n"
                   "    {\n"
                   "      default:\n",
-                  option[NOLENGTH] ? "0" : "len",
+                  option[NOLENGTH] ? "0" : "(int)len",
                   option[NOLENGTH] ? "len" : "hval");
 
           while (key_pos != Positions::LASTCHAR && key_pos >= _max_key_len)
@@ -1900,14 +1900,14 @@ Output::output_lookup_function () const
   printf (option[KRC] ?
                  "(str, len)\n"
             "     register char *str;\n"
-            "     register unsigned int len;\n" :
+            "     register %s len;\n" :
           option[C] ?
                  "(str, len)\n"
             "     register const char *str;\n"
-            "     register unsigned int len;\n" :
+            "     register %s len;\n" :
           option[ANSIC] | option[CPLUSPLUS] ?
-                 "(register const char *str, register unsigned int len)\n" :
-          "");
+                 "(register const char *str, register %s len)\n" :
+          "", option.get_size_type());
 
   /* Output the function's body.  */
   printf ("{\n");
@@ -2074,13 +2073,14 @@ Output::output ()
     printf ("class %s\n"
             "{\n"
             "private:\n"
-            "  static inline unsigned int %s (const char *str, unsigned int len);\n"
+            "  static inline unsigned int %s (const char *str, %s len);\n"
             "public:\n"
-            "  static %s%s%s (const char *str, unsigned int len);\n"
+            "  static %s%s%s (const char *str, %s len);\n"
             "};\n"
             "\n",
-            option.get_class_name (), option.get_hash_name (),
-            const_for_struct, _return_type, option.get_function_name ());
+            option.get_class_name (), option.get_hash_name (), option.get_size_type(),
+            const_for_struct, _return_type, option.get_function_name (),
+	    option.get_size_type());
 
   output_hash_function ();
 
Only in ./src: output.cc~
diff -up -r ./tests/c-parse.exp ./tests/c-parse.exp
--- ./tests/c-parse.exp	2007-04-06 08:38:50.000000000 -0700
+++ ./tests/c-parse.exp	2011-10-06 13:45:57.000000000 -0700
@@ -80,7 +80,7 @@ hash (str, len)
       126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
       126, 126, 126, 126, 126, 126
     };
-  register int hval = len;
+  register int hval = (int)len;
 
   switch (hval)
     {
diff -up -r ./tests/charsets.exp ./tests/charsets.exp
--- ./tests/charsets.exp	2007-04-19 04:13:42.000000000 -0700
+++ ./tests/charsets.exp	2011-10-06 13:47:31.000000000 -0700
@@ -89,7 +90,7 @@ hash (str, len)
       5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046,
       5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046
     };
-  register int hval = len;
+  register int hval = (int)len;
 
   switch (hval)
     {
diff -up -r ./tests/chill.exp ./tests/chill.exp
--- ./tests/chill.exp	2007-04-19 04:13:42.000000000 -0700
+++ ./tests/chill.exp	2011-10-06 13:46:47.000000000 -0700
@@ -78,7 +78,7 @@ hash (str, len)
       1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
       1050, 1050, 1050, 1050, 1050, 1050, 1050
     };
-  register int hval = len;
+  register int hval = (int)len;
 
   switch (hval)
     {
diff -up -r ./tests/cplusplus.exp ./tests/cplusplus.exp
--- ./tests/cplusplus.exp	2007-04-19 03:16:41.000000000 -0700
+++ ./tests/cplusplus.exp	2011-10-06 13:47:03.000000000 -0700
@@ -80,7 +80,7 @@ hash (str, len)
       164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
       164, 164, 164, 164, 164, 164
     };
-  register int hval = len;
+  register int hval = (int)len;
 
   switch (hval)
     {
diff -up -r ./tests/java.exp ./tests/java.exp
--- ./tests/java.exp	2007-04-19 03:16:41.000000000 -0700
+++ ./tests/java.exp	2011-10-06 13:47:19.000000000 -0700
@@ -104,7 +104,7 @@ hash (str, len)
       77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
       77, 77, 77, 77, 77, 77
     };
-  register int hval = len;
+  register int hval = (int)len;
 
   switch (hval)
     {
diff -up -r ./tests/languages.exp ./tests/languages.exp
--- ./tests/languages.exp	2007-04-19 03:16:41.000000000 -0700
+++ ./tests/languages.exp	2011-10-06 13:47:47.000000000 -0700
@@ -93,7 +94,7 @@ hash (str, len)
       3861, 3861, 3861, 3861, 3861, 3861, 3861, 3861, 3861, 3861,
       3861, 3861, 3861, 3861, 3861
     };
-  register int hval = len;
+  register int hval = (int)len;
 
   switch (hval)
     {
diff -up -r ./tests/objc.exp ./tests/objc.exp
--- ./tests/objc.exp	2007-04-19 03:16:41.000000000 -0700
+++ ./tests/objc.exp	2011-10-06 13:46:34.000000000 -0700
@@ -80,7 +80,7 @@ hash (str, len)
       96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
       96, 96, 96, 96, 96, 96
     };
-  register int hval = len;
+  register int hval = (int)len;
 
   switch (hval)
     {
--- tests/test-6.exp	2004-08-22 09:04:17.000000000 -0700
+++ tests/test-6.out	2011-10-06 14:31:09.000000000 -0700
@@ -88,6 +88,8 @@ Details in the output code:
                          Prevents the transfer of the type declaration to the
                          output file. Use this option if the type is already
                          defined elsewhere.
+      --size-type=TYPE   Specify the type for length parameters. Default type is
+                         'unsigned int'.
 
 Algorithm employed by gperf:
   -k, --key-positions=KEYS