* object.c (rb_obj_id): always return positive value.

* object.c (rb_obj_hash): separated from rb_obj_id.

Index: object.c
===================================================================
RCS file: /cvs/ruby/src/ruby/object.c,v
retrieving revision 1.138
diff -u -2 -p -r1.138 object.c
--- object.c	2 Jan 2004 05:59:46 -0000	1.138
+++ object.c	6 Jan 2004 15:40:34 -0000
@@ -116,4 +116,14 @@ rb_obj_equal(obj1, obj2)
  */
 
+VALUE
+rb_obj_id(obj)
+    VALUE obj;
+{
+    if (SPECIAL_CONST_P(obj)) {
+	return LONG2NUM((long)obj);
+    }
+    if ((long)obj < 0) return ULONG2NUM(obj);
+    return (VALUE)((long)obj|FIXNUM_FLAG);
+}
 
 
@@ -130,5 +140,5 @@ rb_obj_equal(obj1, obj2)
 
 VALUE
-rb_obj_id(obj)
+rb_obj_hash(obj)
     VALUE obj;
 {
@@ -2479,5 +2489,5 @@ Init_Object()
     rb_define_method(rb_mKernel, "eql?", rb_obj_equal, 1);
 
-    rb_define_method(rb_mKernel, "hash", rb_obj_id, 0);
+    rb_define_method(rb_mKernel, "hash", rb_obj_hash, 0);
     rb_define_method(rb_mKernel, "id", rb_obj_id_obsolete, 0);
     rb_define_method(rb_mKernel, "__id__", rb_obj_id, 0);
