_id2ref(p1)
  public
  
    
    
Converts an object id to a reference to the object. May not be called on an
object id passed as a parameter to a finalizer.
s = "I am a string"                    
r = ObjectSpace._id2ref(s.object_id)   
r == s                                 
   
  
    Show source    
    
      static VALUE
id2ref(VALUE obj, VALUE objid)
{
    rb_objspace_t *objspace = &rb_objspace;
    VALUE ptr;
    void *p0;
    rb_secure(4);
    ptr = NUM2PTR(objid);
    p0 = (void *)ptr;
    if (ptr == Qtrue) return Qtrue;
    if (ptr == Qfalse) return Qfalse;
    if (ptr == Qnil) return Qnil;
    if (FIXNUM_P(ptr)) return (VALUE)ptr;
    ptr = obj_id_to_ref(objid);
    if ((ptr % sizeof(RVALUE)) == (4 << 2)) {
        ID symid = ptr / sizeof(RVALUE);
        if (rb_id2name(symid) == 0)
            rb_raise(rb_eRangeError, "%p is not symbol id value", p0);
        return ID2SYM(symid);
    }
    if (!is_pointer_to_heap(objspace, (void *)ptr) ||
        BUILTIN_TYPE(ptr) > T_FIXNUM || BUILTIN_TYPE(ptr) == T_ICLASS) {
        rb_raise(rb_eRangeError, "%p is not id value", p0);
    }
    if (BUILTIN_TYPE(ptr) == 0 || RBASIC(ptr)->klass == 0) {
        rb_raise(rb_eRangeError, "%p is recycled object", p0);
    }
    return (VALUE)ptr;
}