Hi,

At Tue, 29 Aug 2006 09:15:27 +0900,
Kent Sibilev wrote in [ruby-talk:211236]:
> Interesting. Does this patch fixes it?

Yes, and modified it slightly.


Index: hash.c =================================================================== RCS file: /cvs/ruby/src/ruby/hash.c,v retrieving revision 1.128.2.16 diff -p -U 2 -r1.128.2.16 hash.c --- hash.c 6 Jul 2006 15:44:26 -0000 1.128.2.16 +++ hash.c 29 Aug 2006 03:43:58 -0000 @@ -224,7 +224,8 @@ rb_hash_foreach(hash, func, farg) } +static VALUE hash_alloc0 _((VALUE)); static VALUE hash_alloc _((VALUE)); static VALUE -hash_alloc(klass) +hash_alloc0(klass) VALUE klass; { @@ -233,9 +234,19 @@ hash_alloc(klass) hash->ifnone = Qnil; - hash->tbl = st_init_table(&objhash); return (VALUE)hash; } +static VALUE +hash_alloc(klass) + VALUE klass; +{ + VALUE hash = hash_alloc0(klass); + + RHASH(hash)->tbl = st_init_table(&objhash); + + return hash; +} + VALUE rb_hash_new() @@ -326,7 +337,5 @@ rb_hash_s_create(argc, argv, klass) if (argc == 1 && TYPE(argv[0]) == T_HASH) { - hash = hash_alloc(klass); - - RHASH(hash)->ifnone = Qnil; + hash = hash_alloc0(klass); RHASH(hash)->tbl = st_copy(RHASH(argv[0])->tbl);
-- Nobu Nakada