Feature #12092 » 0001-Allow-clone-to-take-a-second-argument-passed-to-init.patch
| object.c | ||
|---|---|---|
|
/*
|
||
|
* call-seq:
|
||
|
* obj.clone -> an_object
|
||
|
* obj.clone(other=nil) -> an_object
|
||
|
*
|
||
|
* Produces a shallow copy of <i>obj</i>---the instance variables of
|
||
|
* <i>obj</i> are copied, but not the objects they reference.
|
||
| ... | ... | |
|
* s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
|
||
|
* s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">"
|
||
|
*
|
||
|
* You can provide another object to this method, which +initialize_clone+
|
||
|
* will be called with in addition to the object's clone, before the object's
|
||
|
* object is frozen.
|
||
|
*
|
||
|
* This method may have class-specific behavior. If so, that
|
||
|
* behavior will be documented under the #+initialize_copy+ method of
|
||
|
* the class.
|
||
|
*/
|
||
|
VALUE
|
||
|
rb_obj_clone(VALUE obj)
|
||
|
static VALUE
|
||
|
rb_obj_clone2(int argc, VALUE *argv, VALUE obj)
|
||
|
{
|
||
|
VALUE clone;
|
||
|
VALUE singleton;
|
||
| ... | ... | |
|
}
|
||
|
init_copy(clone, obj);
|
||
|
rb_funcall(clone, id_init_clone, 1, obj);
|
||
|
rb_check_arity(argc, 0, 1);
|
||
|
if (argc == 0) {
|
||
|
rb_funcall(clone, id_init_clone, 1, obj);
|
||
|
} else {
|
||
|
rb_funcall(clone, id_init_clone, 2, obj, argv[0]);
|
||
|
}
|
||
|
RBASIC(clone)->flags |= RBASIC(obj)->flags & FL_FREEZE;
|
||
|
return clone;
|
||
|
}
|
||
|
VALUE
|
||
|
rb_obj_clone(VALUE obj)
|
||
|
{
|
||
|
return rb_obj_clone2(0, NULL, obj);
|
||
|
}
|
||
|
/*
|
||
|
* call-seq:
|
||
|
* obj.dup -> an_object
|
||
| ... | ... | |
|
rb_define_method(rb_mKernel, "class", rb_obj_class, 0);
|
||
|
rb_define_method(rb_mKernel, "singleton_class", rb_obj_singleton_class, 0);
|
||
|
rb_define_method(rb_mKernel, "clone", rb_obj_clone, 0);
|
||
|
rb_define_method(rb_mKernel, "clone", rb_obj_clone2, -1);
|
||
|
rb_define_method(rb_mKernel, "dup", rb_obj_dup, 0);
|
||
|
rb_define_method(rb_mKernel, "itself", rb_obj_itself, 0);
|
||
|
rb_define_method(rb_mKernel, "initialize_copy", rb_obj_init_copy, 1);
|
||
- « Previous
- 1
- 2
- Next »