summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--hash.c9
-rw-r--r--version.h6
3 files changed, 14 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 46a3ca20b6..df14cb2377 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Mar 3 16:14:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_any_hash): shrinks all results in Fixnum range.
+ [ruby-core:15713]
+
Sat Mar 1 02:35:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* bignum.c (big2str_find_n1): check integer overflow.
diff --git a/hash.c b/hash.c
index 0878875ed3..290a253669 100644
--- a/hash.c
+++ b/hash.c
@@ -89,15 +89,16 @@ rb_any_hash(a)
VALUE a;
{
VALUE hval;
+ int hnum;
switch (TYPE(a)) {
case T_FIXNUM:
case T_SYMBOL:
- return (int)a;
+ hnum = (int)a;
break;
case T_STRING:
- return rb_str_hash(a);
+ hnum = rb_str_hash(a);
break;
default:
@@ -105,8 +106,10 @@ rb_any_hash(a)
if (!FIXNUM_P(hval)) {
hval = rb_funcall(hval, '%', 1, INT2FIX(536870923));
}
- return (int)FIX2LONG(hval);
+ hnum = (int)FIX2LONG(hval);
}
+ hnum <<= 1;
+ return RSHIFT(hnum, 1);
}
static struct st_hash_type objhash = {
diff --git a/version.h b/version.h
index 8e20e16819..a7cabf92f3 100644
--- a/version.h
+++ b/version.h
@@ -1,7 +1,7 @@
#define RUBY_VERSION "1.8.6"
-#define RUBY_RELEASE_DATE "2008-03-01"
+#define RUBY_RELEASE_DATE "2008-03-03"
#define RUBY_VERSION_CODE 186
-#define RUBY_RELEASE_CODE 20080301
+#define RUBY_RELEASE_CODE 20080303
#define RUBY_PATCHLEVEL 5000
#define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
#define RUBY_VERSION_TEENY 6
#define RUBY_RELEASE_YEAR 2008
#define RUBY_RELEASE_MONTH 3
-#define RUBY_RELEASE_DAY 1
+#define RUBY_RELEASE_DAY 3
#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];