Feature #13904 ยป poc.diff
enumerator.c | ||
---|---|---|
return e->size;
|
||
}
|
||
static VALUE
|
||
enumerator_receiver(VALUE obj)
|
||
{
|
||
struct enumerator *e;
|
||
VALUE eobj;
|
||
TypedData_Get_Struct(obj, struct enumerator, &enumerator_data_type, e);
|
||
eobj = rb_attr_get(obj, id_receiver);
|
||
if (NIL_P(eobj)) {
|
||
eobj = e->obj;
|
||
}
|
||
return eobj;
|
||
}
|
||
static VALUE
|
||
enumerator_method_name(VALUE obj)
|
||
{
|
||
struct enumerator *e;
|
||
TypedData_Get_Struct(obj, struct enumerator, &enumerator_data_type, e);
|
||
return ID2SYM(e->meth);
|
||
}
|
||
static VALUE
|
||
enumerator_arguments(VALUE obj)
|
||
{
|
||
struct enumerator *e;
|
||
TypedData_Get_Struct(obj, struct enumerator, &enumerator_data_type, e);
|
||
return e->args;
|
||
}
|
||
/*
|
||
* Yielder
|
||
*/
|
||
... | ... | |
rb_define_method(rb_cEnumerator, "rewind", enumerator_rewind, 0);
|
||
rb_define_method(rb_cEnumerator, "inspect", enumerator_inspect, 0);
|
||
rb_define_method(rb_cEnumerator, "size", enumerator_size, 0);
|
||
rb_define_method(rb_cEnumerator, "receiver", enumerator_receiver, 0);
|
||
rb_define_method(rb_cEnumerator, "method_name", enumerator_method_name, 0);
|
||
rb_define_method(rb_cEnumerator, "arguments", enumerator_arguments, 0);
|
||
/* Lazy */
|
||
rb_cLazy = rb_define_class_under(rb_cEnumerator, "Lazy", rb_cEnumerator);
|