diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-05-21 09:00:30 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-05-21 09:00:30 +0900 |
| commit | a6f26514a5494117b79730fbbacb7cb4ca35ba24 (patch) | |
| tree | 231422f01fe908efac572409033b3bda0ec1a531 /src/vm.c | |
| parent | abbb8c5c319d2ea6d809e5a963d7564fd9452440 (diff) | |
| download | mruby-a6f26514a5494117b79730fbbacb7cb4ca35ba24.tar.gz mruby-a6f26514a5494117b79730fbbacb7cb4ca35ba24.zip | |
break in blocks cannot cross C function boundaries; fix #2298
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -1481,7 +1481,15 @@ RETRY_TRY_BLOCK: mrb->c = c->prev; c->prev = NULL; } - ci = mrb->c->ci = mrb->c->cibase + proc->env->cioff + 1; + ci = mrb->c->ci; + mrb->c->ci = mrb->c->cibase + proc->env->cioff + 1; + while (ci > mrb->c->ci) { + if (ci[-1].acc == CI_ACC_SKIP) { + mrb->c->ci = ci; + break; + } + ci--; + } break; default: /* cannot happen */ |
