summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'string.c')
-rw-r--r--string.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/string.c b/string.c
index 29c3cea63b..2d991f6e53 100644
--- a/string.c
+++ b/string.c
@@ -744,9 +744,13 @@ rb_str_hash(str)
}
#elif HASH_PERL
while (len--) {
- key = key*33 + *p++;
+ key += *p++;
+ key += (key << 10);
+ key ^= (key >> 6);
}
- key = key + (key>>5);
+ key += (key << 3);
+ key ^= (key >> 11);
+ key += (key << 15);
#else
while (len--) {
key = key*65599 + *p;