diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-03-17 08:58:21 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-03-17 08:58:21 +0000 |
commit | 5c13dd59db1ee6c04cdac4ce2ee97d5934115439 (patch) | |
tree | b7027454a641e7c51404b316cb9b0b28f66acd3d /eval.c | |
parent | d8f981b972aab02d1432abe1c9cadf0507945e77 (diff) | |
download | ruby-5c13dd59db1ee6c04cdac4ce2ee97d5934115439.tar.gz |
2000-03-17
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@646 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -1804,7 +1804,10 @@ call_trace_func(event, file, line, self, id, klass) ruby_frame->file = ruby_sourcefile = file; } if (klass) { - if (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) { + if (TYPE(klass) == T_ICLASS) { + klass = RBASIC(klass)->klass; + } + else if (FL_TEST(klass, FL_SINGLETON)) { klass = self; } } @@ -1814,7 +1817,7 @@ call_trace_func(event, file, line, self, id, klass) proc_call(trace_func, rb_ary_new3(6, rb_str_new2(event), srcfile, INT2FIX(ruby_sourceline), - INT2FIX(id), + id?ID2SYM(id):Qnil, self?rb_f_binding(self):Qnil, klass)); } @@ -4002,7 +4005,7 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper) line = ruby_sourceline; } - call_trace_func("c-call", 0, 0, 0, id, klass); + call_trace_func("c-call", 0, 0, recv, id, klass); PUSH_TAG(PROT_FUNC); if ((state = EXEC_TAG()) == 0) { result = call_cfunc(body->nd_cfnc, recv, len, argc, argv); @@ -4563,7 +4566,12 @@ rb_f_eval(argc, argv, self) line = NUM2INT(vline); } - Check_SafeStr(src); + if (ruby_safe_level >= 3) { + Check_Type(src, T_STRING); + } + else { + Check_SafeStr(src); + } if (NIL_P(scope) && ruby_frame->prev) { struct FRAME *prev; VALUE val; |