diff --git a/ChangeLog b/ChangeLog index f79edb3589..585fa25579 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Nov 16 23:45:07 2004 Yukihiro Matsumoto + + * numeric.c (flo_divmod): protect float values from GC by + assignment to local variables. [ruby-dev:24873] + Tue Nov 16 14:31:54 2004 Michael Neumann * test/xmlrpc/*: imported and refactored original test cases. diff --git a/hash.c b/hash.c index 270553005f..c9a26a0a80 100644 --- a/hash.c +++ b/hash.c @@ -1554,8 +1554,10 @@ rb_hash_update_block_i(key, value, hash) /* * call-seq: - * hsh.merge!(other_hash) => hsh - * hsh.update(other_hash) => hsh + * hsh.merge!(other_hash) => hsh + * hsh.update(other_hash) => hsh + * hsh.merge!(other_hash){|key, oldval, newval| block} => hsh + * hsh.update(other_hash){|key, oldval, newval| block} => hsh * * Adds the contents of other_hash to hsh, overwriting * entries with duplicate keys with those from other_hash. @@ -1581,7 +1583,8 @@ rb_hash_update(hash1, hash2) /* * call-seq: - * hsh.merge(other_hash) -> a_hash + * hsh.merge(other_hash) -> a_hash + * hsh.merge(other_hash){|key, oldval, newval| block} -> a_hash * * Returns a new hash containing the contents of other_hash and * the contents of hsh, overwriting entries in hsh with diff --git a/numeric.c b/numeric.c index 6b3c377001..a222bf3401 100644 --- a/numeric.c +++ b/numeric.c @@ -731,7 +731,9 @@ flo_divmod(x, y) return rb_num_coerce_bin(x, y); } flodivmod(RFLOAT(x)->value, fy, &div, &mod); - return rb_assoc_new(rb_float_new(div), rb_float_new(mod)); + x = rb_float_new(div); + y = rb_float_new(mod); + return rb_assoc_new(x, y); } /*