summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-05-20 22:33:25 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-05-20 22:33:25 +0900
commit58b25fdcb3bf92050296a624abc4934b83fab01c (patch)
treec639a65d5a92326ea519803cc2e73efb1a39a2bd /src/vm.c
parent7320139fd91ce86a6e58d56a25e04136b87bbd9a (diff)
downloadmruby-58b25fdcb3bf92050296a624abc4934b83fab01c.tar.gz
mruby-58b25fdcb3bf92050296a624abc4934b83fab01c.zip
avoid unnecessary pool/syms restoration
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/vm.c b/src/vm.c
index 31fdfe816..de0afb41a 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -920,10 +920,12 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
if (mrb->exc) goto L_RAISE;
/* pop stackpos */
ci = mrb->c->ci;
- if (!MRB_PROC_CFUNC_P(ci[-1].proc)) {
- irep = ci[-1].proc->body.irep;
- pool = irep->pool;
- syms = irep->syms;
+ if (!ci->target_class) { /* return from context modifying method (resume/yield) */
+ if (!MRB_PROC_CFUNC_P(ci[-1].proc)) {
+ irep = ci[-1].proc->body.irep;
+ pool = irep->pool;
+ syms = irep->syms;
+ }
}
regs = mrb->c->stack = mrb->c->stbase + ci->stackidx;
pc = ci->pc;