FreeBSD Bugzilla – Attachment 147710 Details for
Bug 193964
devel/gperf enhancements from Apple
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Add Apple's gperf enhancements
devel-gperf.diff (text/plain), 13.10 KB, created by
Pedro F. Giffuni
on 2014-09-27 04:18:11 UTC
(
hide
)
Description:
Add Apple's gperf enhancements
Filename:
MIME Type:
Creator:
Pedro F. Giffuni
Created:
2014-09-27 04:18:11 UTC
Size:
13.10 KB
patch
obsolete
>Index: devel/gperf/files/patch-offsetof >=================================================================== >--- devel/gperf/files/patch-offsetof (revision 0) >+++ devel/gperf/files/patch-offsetof (working copy) >@@ -0,0 +1,26 @@ >+--- src/output.cc 2007-03-31 08:16:05.000000000 -0700 >++++ src/output.cc 2008-05-27 16:07:01.000000000 -0700 >+@@ -1106,9 +1106,7 @@ output_keyword_entry (KeywordExt *temp, >+ if (option[TYPE]) >+ printf ("{"); >+ if (option[SHAREDLIB]) >+- printf ("(int)(long)&((struct %s_t *)0)->%s_str%d", >+- option.get_stringpool_name (), option.get_stringpool_name (), >+- stringpool_index); >++ printf("offsetof(struct %s_t, %s_str%d)", option.get_stringpool_name (), option.get_stringpool_name (), stringpool_index); >+ else >+ output_string (temp->_allchars, temp->_allchars_length); >+ if (option[TYPE]) >+@@ -2035,8 +2033,11 @@ Output::output () >+ printf ("%s\n", _struct_decl); >+ } >+ >+- if (option[INCLUDE]) >++ if (option[INCLUDE]) { >+ printf ("#include <string.h>\n"); /* Declare strlen(), strcmp(), strncmp(). */ >++ if (option[SHAREDLIB]) >++ printf("#include <stddef.h>\n"); /* Declare offsetof() */ >++ } >+ >+ if (!option[ENUM]) >+ { >Index: devel/gperf/files/patch-size_type >=================================================================== >--- devel/gperf/files/patch-size_type (revision 0) >+++ devel/gperf/files/patch-size_type (working copy) >@@ -0,0 +1,307 @@ >+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
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 193964
: 147710