diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-10 21:46:43 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-10 21:46:43 +0000 |
commit | 9e324fdd3ef0b858f6c5dfea1d0055d77979a3a2 (patch) | |
tree | 7c83dc40c7b9a926cf9efc8f0abef1cd7267b3d4 /proc.c | |
parent | e6697a6405f1330ef071220396b8afef1cd1079a (diff) | |
download | ruby-9e324fdd3ef0b858f6c5dfea1d0055d77979a3a2.tar.gz |
* vm.c, eval_intern.h (PASS_PASSED_BLOCK):
set a VM_FRAME_FLAG_PASSED flag to skip this frame when
searching ruby-level-cfp.
* eval.c, eval_intern.h, proc.c: fix to check cfp. if there is
no valid ruby-level-cfp, cause RuntimeError exception.
[ruby-dev:34128]
* vm_core.h, vm_evalbody.c, vm.c, vm_dump.c, vm_insnhelper.c,
insns.def: rename FRAME_MAGIC_* to VM_FRAME_MAGIC_*.
* KNOWNBUGS.rb, bootstraptest/test*.rb: move solved bugs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'proc.c')
-rw-r--r-- | proc.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -275,10 +275,14 @@ VALUE rb_binding_new(void) { rb_thread_t *th = GET_THREAD(); - rb_control_frame_t *cfp = vm_get_ruby_level_cfp(th, th->cfp); + rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(th, th->cfp); VALUE bindval = binding_alloc(rb_cBinding); rb_binding_t *bind; + if (cfp == 0) { + rb_raise(rb_eRuntimeError, "Can't create Binding Object on top of Fiber."); + } + GetBindingPtr(bindval, bind); bind->env = vm_make_env_object(th, cfp); return bindval; @@ -1187,11 +1191,12 @@ rb_method_call(int argc, VALUE *argv, VALUE method) } } if ((state = EXEC_TAG()) == 0) { + rb_thread_t *th = GET_THREAD(); VALUE rb_vm_call(rb_thread_t * th, VALUE klass, VALUE recv, VALUE id, ID oid, int argc, const VALUE *argv, const NODE *body, int nosuper); - PASS_PASSED_BLOCK(); - result = rb_vm_call(GET_THREAD(), data->oclass, data->recv, data->id, data->oid, + PASS_PASSED_BLOCK_TH(th); + result = rb_vm_call(th, data->oclass, data->recv, data->id, data->oid, argc, argv, data->body, 0); } POP_TAG(); |