summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-04-09 15:06:57 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-04-09 15:06:57 +0000
commit8e09f5b907868d3524e3e0557ca7bdf7cd2d73c8 (patch)
treec07eb72f3c2a4adb96e66164d986b09419d4cc60 /eval.c
parente5877f1c96b759a7468341c354027638ca7ced33 (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.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/eval.c b/eval.c
index c2fdd158dd..d6ddaa3202 100644
--- a/eval.c
+++ b/eval.c
@@ -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));
}