Do not try to resolve constants when OP_MEMBER is next instruction on the stack.
The build was successful. Details

This commit is contained in:
Rafal Kupiec 2019-05-06 18:42:06 +02:00
parent d3ae1c1bf4
commit 17e0fb4653
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
1 changed files with 33 additions and 31 deletions

View File

@ -2431,6 +2431,7 @@ static sxi32 VmByteCodeExec(
pTos++;
if((pObj = (ph7_value *)SySetAt(&pVm->aLitObj, pInstr->iP2)) != 0) {
if(pInstr->iP1 == 1 && SyBlobLength(&pObj->sBlob) <= 64) {
if(pInstr[1].iOp != PH7_OP_MEMBER && pInstr[1].iOp != PH7_OP_NEW) {
/* Point to the top active frame */
VmFrame *pFrame = pVm->pFrame;
while(pFrame->pParent && (pFrame->iFlags & VM_FRAME_EXCEPTION)) {
@ -2460,11 +2461,12 @@ static sxi32 VmByteCodeExec(
/* Mark as constant */
pTos->nIdx = SXU32_HIGH;
break;
} else if(pInstr[1].iOp != PH7_OP_MEMBER && pInstr[1].iOp != PH7_OP_NEW && pInstr[2].iOp != PH7_OP_MEMBER && pInstr[1].iOp != PH7_OP_NEW) {
} else if(pInstr[2].iOp != PH7_OP_MEMBER && pInstr[2].iOp != PH7_OP_NEW) {
PH7_VmThrowError(&(*pVm), PH7_CTX_ERR,
"Call to undefined constant %s", SyBlobData(&pObj->sBlob));
}
}
}
PH7_MemObjLoad(pObj, pTos);
} else {
/* Set a NULL value */