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 »