From 6cbd18d7ef28ab2eebc07dfb1badc9c02fba8a15 Mon Sep 17 00:00:00 2001
From: ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date: Wed, 24 Oct 2012 01:21:13 +0000
Subject: [PATCH] * ext/objspace/objspace.c (Init_objspace): add a new method  
 `ObjectSpace::InternalObjectWrapper#internal_object_id' which returns   an
 object id of a wrapped internal object.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37308 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
---
 ChangeLog               | 6 ++++++
 ext/objspace/objspace.c | 8 ++++++++
 2 files changed, 14 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 5e4ccc2ac7..4cb7a38ff5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Oct 24 10:17:45 2012  Koichi Sasada  <ko1@atdot.net>
+
+	* ext/objspace/objspace.c (Init_objspace): add a new method
+	  `ObjectSpace::InternalObjectWrapper#internal_object_id' which returns
+	  an object id of a wrapped internal object.
+
 Wed Oct 24 08:55:04 2012  Koichi Sasada  <ko1@atdot.net>
 
 	* ext/objspace/objspace.c (ObjectSpace.reachable_objects_from):
diff --git a/ext/objspace/objspace.c b/ext/objspace/objspace.c
index 6e2da9aef1..1fbf148ef8 100644
--- a/ext/objspace/objspace.c
+++ b/ext/objspace/objspace.c
@@ -668,6 +668,13 @@ iow_inspect(VALUE self)
     return rb_sprintf("#<InternalObject:%p %s>", (void *)obj, rb_id2name(SYM2ID(type)));
 }
 
+static VALUE
+iow_internal_object_id(VALUE self)
+{
+    VALUE obj = (VALUE)DATA_PTR(self);
+    return rb_obj_id(obj);
+}
+
 struct rof_data {
     st_table *refs;
     VALUE internals;
@@ -787,4 +794,5 @@ Init_objspace(void)
     rb_mInternalObjectWrapper = rb_define_class_under(rb_mObjSpace, "InternalObjectWrapper", rb_cObject);
     rb_define_method(rb_mInternalObjectWrapper, "type", iow_type, 0);
     rb_define_method(rb_mInternalObjectWrapper, "inspect", iow_inspect, 0);
+    rb_define_method(rb_mInternalObjectWrapper, "internal_object_id", iow_internal_object_id, 0);
 }