diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-06-15 22:57:11 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-06-15 22:57:11 +0900 |
| commit | 5353b8555cac47f1615899e5622acb411a501eab (patch) | |
| tree | d57817c1cfb48b3bcbd7b886fa41f2365e977446 | |
| parent | 49133111554a3e0d6a4ff415641cc5ec721d8df4 (diff) | |
| download | mruby-5353b8555cac47f1615899e5622acb411a501eab.tar.gz mruby-5353b8555cac47f1615899e5622acb411a501eab.zip | |
exception jump should not cross mrb_funcall border; close #276
| -rw-r--r-- | src/vm.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -1013,6 +1013,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) while (ci[0].ridx == ci[-1].ridx) { cipop(mrb); ci = mrb->ci; + if (ci->acc < 0) { + mrb->jmp = prev_jmp; + longjmp(*(jmp_buf*)mrb->jmp, 1); + } while (eidx > mrb->ci->eidx) { ecall(mrb, --eidx); } |
