summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-10-01 06:17:50 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-10-01 06:17:50 +0000
commit7d0787116d9aca851422acbc59c6488fff65850c (patch)
tree727aec13ad6843f89c289a0cd26b9168ce9ebfff
parent014d1ae20d939d2d522634ad54cc20036253314b (diff)
* gc.c (id2ref): T_VALUES is less than T_BLOCK. [ruby-dev:31911]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13581 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--bootstraptest/test_knownbug.rb14
-rw-r--r--bootstraptest/test_objectspace.rb13
-rw-r--r--gc.c2
4 files changed, 18 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 356a6e0a40..41a8cbaa71 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Mon Oct 1 15:17:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (id2ref): T_VALUES is less than T_BLOCK. [ruby-dev:31911]
+
Mon Oct 1 10:58:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ruby.c (require_libraries): use require method instead of calling
diff --git a/bootstraptest/test_knownbug.rb b/bootstraptest/test_knownbug.rb
index f75a714590..5ac0cd11fd 100644
--- a/bootstraptest/test_knownbug.rb
+++ b/bootstraptest/test_knownbug.rb
@@ -34,20 +34,6 @@ assert_normal_exit %q{
}
assert_normal_exit %q{
- eval("", TOPLEVEL_BINDING)
- minobj = ObjectSpace.to_enum(:each_object).min {|a,b| a.object_id <=> b.object_id }
- maxobj = ObjectSpace.to_enum(:each_object).max {|a,b| a.object_id <=> b.object_id }
- minobj.object_id.upto(maxobj.object_id) {|id|
- begin
- o = ObjectSpace._id2ref(id)
- rescue RangeError
- next
- end
- o.inspect
- }
-}, '[ruby-dev:31911]'
-
-assert_normal_exit %q{
require 'continuation'
Fiber.new{ callcc{|c| @c = c } }.resume
}, '[ruby-dev:31913]'
diff --git a/bootstraptest/test_objectspace.rb b/bootstraptest/test_objectspace.rb
new file mode 100644
index 0000000000..f138ac5f6c
--- /dev/null
+++ b/bootstraptest/test_objectspace.rb
@@ -0,0 +1,13 @@
+assert_normal_exit %q{
+ eval("", TOPLEVEL_BINDING)
+ minobj = ObjectSpace.to_enum(:each_object).min_by {|a| a.object_id }
+ maxobj = ObjectSpace.to_enum(:each_object).max_by {|a| a.object_id }
+ minobj.object_id.upto(maxobj.object_id) {|id|
+ begin
+ o = ObjectSpace._id2ref(id)
+ rescue RangeError
+ next
+ end
+ o.inspect if defined?(o.inspect)
+ }
+}, '[ruby-dev:31911]'
diff --git a/gc.c b/gc.c
index 7dd5c4e681..4b239b634a 100644
--- a/gc.c
+++ b/gc.c
@@ -2069,7 +2069,7 @@ id2ref(VALUE obj, VALUE objid)
return ID2SYM(symid);
}
- if (!is_pointer_to_heap((void *)ptr)|| BUILTIN_TYPE(ptr) >= T_BLOCK) {
+ if (!is_pointer_to_heap((void *)ptr) || BUILTIN_TYPE(ptr) >= T_VALUES) {
rb_raise(rb_eRangeError, "%p is not id value", p0);
}
if (BUILTIN_TYPE(ptr) == 0 || RBASIC(ptr)->klass == 0) {