diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-04-09 15:06:57 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-04-09 15:06:57 +0000 |
commit | 8e09f5b907868d3524e3e0557ca7bdf7cd2d73c8 (patch) | |
tree | c07eb72f3c2a4adb96e66164d986b09419d4cc60 /eval.c | |
parent | e5877f1c96b759a7468341c354027638ca7ced33 (diff) |
* variable.c (rb_obj_remove_instance_variable): better message.
[ruby-talk:68987]
* variable.c (rb_mod_remove_const): ditto.
* object.c (rb_obj_ivar_get): ditto.
* object.c (rb_obj_ivar_set): ditto.
* parse.y (yylex): ditto.
* eval.c (rb_mod_define_method): Allow UnboundMethod as
parameter.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 29 |
1 files changed, 17 insertions, 12 deletions
@@ -5083,7 +5083,7 @@ backtrace(lev) { struct FRAME *frame = ruby_frame; char buf[BUFSIZ]; - volatile VALUE ary; + VALUE ary; NODE *n; ary = rb_ary_new(); @@ -6086,7 +6086,12 @@ top_include(argc, argv) VALUE *argv; { rb_secure(4); - return rb_mod_include(argc, argv, rb_cObject); + if (ruby_wrapper) { + return rb_mod_include(argc, argv, ruby_wrapper); + } + else { + return rb_mod_include(argc, argv, rb_cObject); + } } void @@ -7180,19 +7185,10 @@ umethod_bind(method, recv) st_lookup(RCLASS(CLASS_OF(recv))->m_tbl, data->oid, 0)) { rb_raise(rb_eTypeError, "method `%s' overridden", rb_id2name(data->oid)); } -#if 0 - if (!((TYPE(data->rklass) == T_MODULE) ? - rb_obj_is_kind_of(recv, data->rklass) : - rb_obj_is_instance_of(recv, data->rklass))) { - rb_raise(rb_eTypeError, "bind argument must be an instance of %s", - rb_class2name(data->rklass)); - } -#else if(!rb_obj_is_kind_of(recv, data->rklass)) { rb_raise(rb_eTypeError, "bind argument must be an instance of %s", rb_class2name(data->rklass)); } -#endif } method = Data_Make_Struct(rb_cMethod,struct METHOD,bm_mark,free,bound); @@ -7344,6 +7340,15 @@ umethod_proc(method) } static VALUE +rb_obj_is_method(m) + VALUE m; +{ + if (TYPE(m) == T_DATA && RDATA(m)->dmark == (RUBY_DATA_FUNC)bm_mark) { + return Qtrue; + } +} + +static VALUE rb_mod_define_method(argc, argv, mod) int argc; VALUE *argv; @@ -7361,7 +7366,7 @@ rb_mod_define_method(argc, argv, mod) else if (argc == 2) { id = rb_to_id(argv[0]); body = argv[1]; - if (!rb_obj_is_kind_of(body, rb_cMethod) && !rb_obj_is_proc(body)) { + if (!rb_obj_is_method(body) && !rb_obj_is_proc(body)) { rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Method)", rb_obj_classname(body)); } |