void rb_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { VALUE vmethod, v[2] = {value_buf_string, dummy_proc}; struct METHOD *method; set_buf_string(name); rb_mod_define_method(2, v, klass); vmethod = rb_mod_instance_method(klass, value_buf_string); method = (struct METHOD*)RTYPEDDATA_DATA(vmethod); method->me.def->type = VM_METHOD_TYPE_CFUNC; method->me.def->body.cfunc.func = func; method->me.def->body.cfunc.argc = argc; rb_mod_public(1, &value_buf_string, klass); }
void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE)) { rb_method_definition_t *def = ALLOC(rb_method_definition_t); st_table *mtbl; klass = rb_singleton_class(klass); mtbl = RCLASS_M_TBL(klass); rb_method_entry_t *me = ALLOC(rb_method_entry_t); me->flag = NOEX_PRIVATE; me->mark = 0; me->called_id = ID_ALLOCATOR; me->klass = klass; me->def = def; def->type = VM_METHOD_TYPE_CFUNC; def->original_id = ID_ALLOCATOR; def->alias_count = 0; def->body.cfunc.func = func; def->body.cfunc.argc = 0; st_insert(mtbl, ID_ALLOCATOR, (st_data_t) me); set_buf_string("object_id"); rb_mod_public(1, &value_buf_string, klass); }
static VALUE top_public(int argc, VALUE *argv) { return rb_mod_public(argc, argv, rb_cObject); }
static VALUE top_public(VALUE recv, SEL sel, int argc, VALUE *argv) { return rb_mod_public(rb_cObject, 0, argc, argv); }