diff --git a/engine/compiler.c b/engine/compiler.c index 3b9d87d..6420160 100644 --- a/engine/compiler.c +++ b/engine/compiler.c @@ -1406,7 +1406,7 @@ static sxi32 PH7_CompileConstant(ph7_gen_state *pGen) { /* Compile constant value */ rc = PH7_CompileExpr(&(*pGen), 0, 0); /* Emit the done instruction */ - PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_DONE, (rc != SXERR_EMPTY ? 1 : 0), 0, 0, 0); + PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_DONE, (rc != SXERR_EMPTY ? 1 : 0), 1, 0, 0); PH7_VmSetByteCodeContainer(pGen->pVm, pInstrContainer); if(rc == SXERR_ABORT) { /* Don't worry about freeing memory, everything will be released shortly */ diff --git a/engine/vm.c b/engine/vm.c index ad68062..15343d9 100644 --- a/engine/vm.c +++ b/engine/vm.c @@ -2010,7 +2010,7 @@ static sxi32 VmByteCodeExec( */ switch(pInstr->iOp) { /* - * DONE: P1 * * + * DONE: P1 P2 * * * Program execution completed: Clean up the mess left behind * and return immediately. @@ -2028,7 +2028,7 @@ static sxi32 VmByteCodeExec( if(pResult) { /* Execution result */ PH7_MemObjStore(pTos, pResult); - if(pVm->pFrame->iFlags & VM_FRAME_ACTIVE) { + if(!pInstr->iP2 && pVm->pFrame->iFlags & VM_FRAME_ACTIVE) { ph7_vm_func *pFunc = (ph7_vm_func *)pVm->pFrame->pUserData; if(pFunc->nType) { if((pFunc->nType & MEMOBJ_MIXED) == 0) {