diff options
| author | Cremno <[email protected]> | 2013-02-26 02:41:32 +0100 |
|---|---|---|
| committer | Cremno <[email protected]> | 2013-02-26 10:04:29 +0100 |
| commit | 5de62ac23ddd35d027567aec9b7a023ed6698577 (patch) | |
| tree | ca9d4aab9ce07f1784e1249051df31fe131c00eb /src/vm.c | |
| parent | a3135e80afc56f49396f556bce838b8a08b6d879 (diff) | |
| download | mruby-5de62ac23ddd35d027567aec9b7a023ed6698577.tar.gz mruby-5de62ac23ddd35d027567aec9b7a023ed6698577.zip | |
mrb_funcall_with_block: adj. ci & sp after error
see #894 / [ruby-talk:404969]
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -316,8 +316,13 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mr if (!mrb->jmp) { jmp_buf c_jmp; + mrb_callinfo *old_ci = mrb->ci; if (setjmp(c_jmp) != 0) { /* error */ + while (old_ci != mrb->ci) { + mrb->stack = mrb->stbase + mrb->ci->stackidx; + cipop(mrb); + } mrb->jmp = 0; return mrb_nil_value(); } |
