diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-04-16 14:17:14 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-04-16 14:17:14 +0000 |
commit | 8b27d153d22a266d77f3bdfa98ff60a1bfa53322 (patch) | |
tree | 46d2b5cfc923aa18bc9f70405a0e6460252a4196 /class.c | |
parent | bded3bb726d1c2b052d20a1b1398a6ed8eebae6e (diff) | |
download | ruby-8b27d153d22a266d77f3bdfa98ff60a1bfa53322.tar.gz |
* 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.c | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -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 |