aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-16 14:51:38 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-16 14:51:38 +0000
commit02f848f9a48129aca2b372a06a85da0e6c687923 (patch)
tree2f2f4078edee6f615332446ddaa3de62c2a51813
parenta74375b05f1e0b6b7ff5ab14b230b0818b4f76f2 (diff)
downloadruby-02f848f9a48129aca2b372a06a85da0e6c687923.tar.gz
* numeric.c (flo_divmod): protect float values from GC by
assignment to local variables. [ruby-dev:24873] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--hash.c9
-rw-r--r--numeric.c4
3 files changed, 14 insertions, 4 deletions
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 <matz@ruby-lang.org>
+
+ * 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 <mneumann@ruby-lang.org>
* 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 <i>other_hash</i> to <i>hsh</i>, overwriting
* entries with duplicate keys with those from <i>other_hash</i>.
@@ -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 <i>other_hash</i> and
* the contents of <i>hsh</i>, overwriting entries in <i>hsh</i> 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);
}
/*