summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-04-16 14:17:14 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-04-16 14:17:14 +0000
commit8b27d153d22a266d77f3bdfa98ff60a1bfa53322 (patch)
tree46d2b5cfc923aa18bc9f70405a0e6460252a4196 /class.c
parentbded3bb726d1c2b052d20a1b1398a6ed8eebae6e (diff)
* 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
Diffstat (limited to 'class.c')
-rw-r--r--class.c19
1 files changed, 15 insertions, 4 deletions
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