From 8b27d153d22a266d77f3bdfa98ff60a1bfa53322 Mon Sep 17 00:00:00 2001 From: akr Date: Thu, 16 Apr 2009 14:17:14 +0000 Subject: * class.c (rb_define_method_id): use rb_define_notimplement_method_id if rb_f_notimplement is given. (rb_define_protected_method): ditto. (rb_define_private_method): ditto. (rb_define_method): use rb_define_method_id. * include/ruby/intern.h (rb_f_notimplement): declared. (rb_define_notimplement_method_id): declared. * proc.c (method_inspect): show not-implemented. * vm_method.c (notimplement_body): new variable. (rb_notimplement_body_p): new function. (rb_method_boundp): return false if not implemented. (rb_f_notimplement): new function. (rb_define_notimplement_method_id): new function. * process.c (rb_f_fork): use rb_f_notimplement if not implemented. * file.c (rb_file_s_lchmod): use rb_f_notimplement if not implemented. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- class.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'class.c') diff --git a/class.c b/class.c index 18d5f0d702..2a5dc61794 100644 --- a/class.c +++ b/class.c @@ -807,25 +807,36 @@ rb_obj_singleton_methods(int argc, VALUE *argv, VALUE obj) void rb_define_method_id(VALUE klass, ID name, VALUE (*func)(ANYARGS), int argc) { - rb_add_method(klass, name, NEW_CFUNC(func,argc), NOEX_PUBLIC); + if (func == rb_f_notimplement) + rb_define_notimplement_method_id(klass, name, NOEX_PUBLIC); + else + rb_add_method(klass, name, NEW_CFUNC(func,argc), NOEX_PUBLIC); } void rb_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PUBLIC); + rb_define_method_id(klass, rb_intern(name), func, argc); } void rb_define_protected_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PROTECTED); + ID id = rb_intern(name); + if (func == rb_f_notimplement) + rb_define_notimplement_method_id(klass, id, NOEX_PROTECTED); + else + rb_add_method(klass, id, NEW_CFUNC(func, argc), NOEX_PROTECTED); } void rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE); + ID id = rb_intern(name); + if (func == rb_f_notimplement) + rb_define_notimplement_method_id(klass, id, NOEX_PRIVATE); + else + rb_add_method(klass, id, NEW_CFUNC(func, argc), NOEX_PRIVATE); } void -- cgit v1.2.3