Rename LFB/LFE operators.
The build was successful.
Details
The build was successful.
Details
This commit is contained in:
parent
f323e3cb57
commit
f3972a9ca2
|
@ -1381,8 +1381,8 @@ static sxi32 PH7_CompileContinue(ph7_gen_state *pGen) {
|
||||||
} else {
|
} else {
|
||||||
sxu32 nInstrIdx = 0;
|
sxu32 nInstrIdx = 0;
|
||||||
if(!pLoop->bPostContinue) {
|
if(!pLoop->bPostContinue) {
|
||||||
/* Emit the OP_JMPLFE instruction to leave the loop frame */
|
/* Emit the OP_LF_STOP instruction to leave the loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFE, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_STOP, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
PH7_VmEmitInstr(pGen->pVm, 0, PH7_OP_JMP, 0, pLoop->nFirstInstr, 0, &nInstrIdx);
|
PH7_VmEmitInstr(pGen->pVm, 0, PH7_OP_JMP, 0, pLoop->nFirstInstr, 0, &nInstrIdx);
|
||||||
if(pLoop->bPostContinue) {
|
if(pLoop->bPostContinue) {
|
||||||
|
@ -1421,8 +1421,8 @@ static sxi32 PH7_CompileBreak(ph7_gen_state *pGen) {
|
||||||
PH7_GenCompileError(pGen, E_ERROR, pGen->pIn->nLine, "A 'break' statement may only be used within a loop or switch");
|
PH7_GenCompileError(pGen, E_ERROR, pGen->pIn->nLine, "A 'break' statement may only be used within a loop or switch");
|
||||||
} else {
|
} else {
|
||||||
sxu32 nInstrIdx;
|
sxu32 nInstrIdx;
|
||||||
/* Emit the OP_JMPLFE instruction to leave the loop frame */
|
/* Emit the OP_LF_STOP instruction to leave the loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFE, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_STOP, 0, 0, 0, 0);
|
||||||
rc = PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMP, 0, 0, 0, &nInstrIdx);
|
rc = PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMP, 0, 0, 0, &nInstrIdx);
|
||||||
if(rc == SXRET_OK) {
|
if(rc == SXRET_OK) {
|
||||||
/* Fix the jump later when the jump destination is resolved */
|
/* Fix the jump later when the jump destination is resolved */
|
||||||
|
@ -1548,7 +1548,7 @@ static sxi32 PH7_CompileGoto(ph7_gen_state *pGen)
|
||||||
sJump.pFunc = 0;
|
sJump.pFunc = 0;
|
||||||
}
|
}
|
||||||
/* Make sure there will not stay any loop frame opened (i.e. goto inside a loop) */
|
/* Make sure there will not stay any loop frame opened (i.e. goto inside a loop) */
|
||||||
PH7_VmEmitInstr(pGen->pVm, sJump.nLine, PH7_OP_JMPLFE, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, sJump.nLine, PH7_OP_LF_STOP, 0, 0, 0, 0);
|
||||||
/* Emit the unconditional jump */
|
/* Emit the unconditional jump */
|
||||||
if(SXRET_OK == PH7_VmEmitInstr(pGen->pVm, sJump.nLine, PH7_OP_JMP, 0, 0, 0, &sJump.nInstrIdx)) {
|
if(SXRET_OK == PH7_VmEmitInstr(pGen->pVm, sJump.nLine, PH7_OP_JMP, 0, 0, 0, &sJump.nInstrIdx)) {
|
||||||
SySetPut(&pGen->aGoto, (const void *)&sJump);
|
SySetPut(&pGen->aGoto, (const void *)&sJump);
|
||||||
|
@ -1700,15 +1700,15 @@ static sxi32 PH7_CompileWhile(ph7_gen_state *pGen) {
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPZ, 0, 0, 0, &nFalseJump);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPZ, 0, 0, 0, &nFalseJump);
|
||||||
/* Save the instruction index so we can fix it later when the jump destination is resolved */
|
/* Save the instruction index so we can fix it later when the jump destination is resolved */
|
||||||
PH7_GenStateNewJumpFixup(pWhileBlock, PH7_OP_JMPZ, nFalseJump);
|
PH7_GenStateNewJumpFixup(pWhileBlock, PH7_OP_JMPZ, nFalseJump);
|
||||||
/* Emit the OP_JMPLFB instruction to enter a loop frame */
|
/* Emit the OP_LF_START instruction to enter a loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFB, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_START, 0, 0, 0, 0);
|
||||||
/* Compile the loop body */
|
/* Compile the loop body */
|
||||||
rc = PH7_CompileBlock(&(*pGen));
|
rc = PH7_CompileBlock(&(*pGen));
|
||||||
if(rc == SXERR_ABORT) {
|
if(rc == SXERR_ABORT) {
|
||||||
return SXERR_ABORT;
|
return SXERR_ABORT;
|
||||||
}
|
}
|
||||||
/* Emit the OP_JMPLFE instruction to leave the loop frame */
|
/* Emit the OP_LF_STOP instruction to leave the loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFE, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_STOP, 0, 0, 0, 0);
|
||||||
/* Emit the unconditional jump to the start of the loop */
|
/* Emit the unconditional jump to the start of the loop */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMP, 0, pWhileBlock->nFirstInstr, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMP, 0, pWhileBlock->nFirstInstr, 0, 0);
|
||||||
/* Fix all jumps now the destination is resolved */
|
/* Fix all jumps now the destination is resolved */
|
||||||
|
@ -1755,8 +1755,8 @@ static sxi32 PH7_CompileDoWhile(ph7_gen_state *pGen) {
|
||||||
}
|
}
|
||||||
/* Deffer 'continue;' jumps until we compile the block */
|
/* Deffer 'continue;' jumps until we compile the block */
|
||||||
pDoBlock->bPostContinue = TRUE;
|
pDoBlock->bPostContinue = TRUE;
|
||||||
/* Emit the OP_JMPLFB instruction to enter a loop frame */
|
/* Emit the OP_LF_START instruction to enter a loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFB, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_START, 0, 0, 0, 0);
|
||||||
rc = PH7_CompileBlock(&(*pGen));
|
rc = PH7_CompileBlock(&(*pGen));
|
||||||
if(rc == SXERR_ABORT) {
|
if(rc == SXERR_ABORT) {
|
||||||
return SXERR_ABORT;
|
return SXERR_ABORT;
|
||||||
|
@ -1814,8 +1814,8 @@ static sxi32 PH7_CompileDoWhile(ph7_gen_state *pGen) {
|
||||||
}
|
}
|
||||||
pGen->pIn = &pEnd[1];
|
pGen->pIn = &pEnd[1];
|
||||||
pGen->pEnd = pTmp;
|
pGen->pEnd = pTmp;
|
||||||
/* Emit the OP_JMPLFE instruction to leave the loop frame */
|
/* Emit the OP_LF_STOP instruction to leave the loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFE, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_STOP, 0, 0, 0, 0);
|
||||||
/* Emit the true jump to the beginning of the loop */
|
/* Emit the true jump to the beginning of the loop */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPNZ, 0, pDoBlock->nFirstInstr, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPNZ, 0, pDoBlock->nFirstInstr, 0, 0);
|
||||||
/* Fix all jumps now the destination is resolved */
|
/* Fix all jumps now the destination is resolved */
|
||||||
|
@ -1918,8 +1918,8 @@ static sxi32 PH7_CompileFor(ph7_gen_state *pGen) {
|
||||||
PH7_GenCompileError(pGen, E_ERROR, pGen->pIn->nLine,
|
PH7_GenCompileError(pGen, E_ERROR, pGen->pIn->nLine,
|
||||||
"for: Expected ';' after conditionals expressions");
|
"for: Expected ';' after conditionals expressions");
|
||||||
}
|
}
|
||||||
/* Emit the OP_JMPLFB instruction to enter a loop frame */
|
/* Emit the OP_LF_START instruction to enter a loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFB, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_START, 0, 0, 0, 0);
|
||||||
/* Jump the trailing ';' */
|
/* Jump the trailing ';' */
|
||||||
pGen->pIn++;
|
pGen->pIn++;
|
||||||
/* Save the post condition stream */
|
/* Save the post condition stream */
|
||||||
|
@ -1968,8 +1968,8 @@ static sxi32 PH7_CompileFor(ph7_gen_state *pGen) {
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_POP, 1, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_POP, 1, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Emit the OP_JMPLFE instruction to leave the loop frame */
|
/* Emit the OP_LF_STOP instruction to leave the loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFE, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_STOP, 0, 0, 0, 0);
|
||||||
/* Emit the unconditional jump to the start of the loop */
|
/* Emit the unconditional jump to the start of the loop */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMP, 0, pForBlock->nFirstInstr, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMP, 0, pForBlock->nFirstInstr, 0, 0);
|
||||||
/* Fix all jumps now the destination is resolved */
|
/* Fix all jumps now the destination is resolved */
|
||||||
|
@ -2158,8 +2158,8 @@ static sxi32 PH7_CompileForeach(ph7_gen_state *pGen) {
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_FOREACH_STEP, 0, 0, pInfo, &nFalseJump);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_FOREACH_STEP, 0, 0, pInfo, &nFalseJump);
|
||||||
/* Save the instruction index so we can fix it later when the jump destination is resolved */
|
/* Save the instruction index so we can fix it later when the jump destination is resolved */
|
||||||
PH7_GenStateNewJumpFixup(pForeachBlock, PH7_OP_FOREACH_STEP, nFalseJump);
|
PH7_GenStateNewJumpFixup(pForeachBlock, PH7_OP_FOREACH_STEP, nFalseJump);
|
||||||
/* Emit the OP_JMPLFB instruction to enter a loop frame */
|
/* Emit the OP_LF_START instruction to enter a loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFB, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_START, 0, 0, 0, 0);
|
||||||
/* Compile the loop body */
|
/* Compile the loop body */
|
||||||
pGen->pIn = &pEnd[1];
|
pGen->pIn = &pEnd[1];
|
||||||
pGen->pEnd = pTmp;
|
pGen->pEnd = pTmp;
|
||||||
|
@ -2168,8 +2168,8 @@ static sxi32 PH7_CompileForeach(ph7_gen_state *pGen) {
|
||||||
/* Don't worry about freeing memory, everything will be released shortly */
|
/* Don't worry about freeing memory, everything will be released shortly */
|
||||||
return SXERR_ABORT;
|
return SXERR_ABORT;
|
||||||
}
|
}
|
||||||
/* Emit the OP_JMPLFE instruction to leave the loop frame */
|
/* Emit the OP_LF_STOP instruction to leave the loop frame */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMPLFE, 0, 0, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_LF_STOP, 0, 0, 0, 0);
|
||||||
/* Emit the unconditional jump to the start of the loop */
|
/* Emit the unconditional jump to the start of the loop */
|
||||||
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMP, 0, pForeachBlock->nFirstInstr, 0, 0);
|
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_JMP, 0, pForeachBlock->nFirstInstr, 0, 0);
|
||||||
/* Fix all jumps now the destination is resolved */
|
/* Fix all jumps now the destination is resolved */
|
||||||
|
|
16
engine/vm.c
16
engine/vm.c
|
@ -2120,11 +2120,11 @@ static sxi32 VmByteCodeExec(
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
* JMPLFB: * * *
|
* LF_START: * * *
|
||||||
*
|
*
|
||||||
* Creates and enters the jump loop frame on the beginning of each iteration.
|
* Creates and enters the jump loop frame on the beginning of each iteration.
|
||||||
*/
|
*/
|
||||||
case PH7_OP_JMPLFB: {
|
case PH7_OP_LF_START: {
|
||||||
VmFrame *pFrame = 0;
|
VmFrame *pFrame = 0;
|
||||||
/* Enter the jump loop frame */
|
/* Enter the jump loop frame */
|
||||||
rc = VmEnterFrame(&(*pVm), pVm->pFrame->pUserData, pVm->pFrame->pThis, &pFrame);
|
rc = VmEnterFrame(&(*pVm), pVm->pFrame->pUserData, pVm->pFrame->pThis, &pFrame);
|
||||||
|
@ -2135,10 +2135,12 @@ static sxi32 VmByteCodeExec(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
* LF_STOP: * * *
|
||||||
|
*
|
||||||
* Leaves and destroys the jump loop frame at the end of each iteration
|
* Leaves and destroys the jump loop frame at the end of each iteration
|
||||||
* as well as on 'break' and 'continue' instructions.
|
* as well as on 'break' and 'continue' instructions.
|
||||||
*/
|
*/
|
||||||
case PH7_OP_JMPLFE: {
|
case PH7_OP_LF_STOP: {
|
||||||
/* Leave the jump loop frame */
|
/* Leave the jump loop frame */
|
||||||
if(pVm->pFrame->iFlags & VM_FRAME_LOOP) {
|
if(pVm->pFrame->iFlags & VM_FRAME_LOOP) {
|
||||||
VmLeaveFrame(&(*pVm));
|
VmLeaveFrame(&(*pVm));
|
||||||
|
@ -5215,11 +5217,11 @@ static const char *VmInstrToString(sxi32 nOp) {
|
||||||
case PH7_OP_JMPNZ:
|
case PH7_OP_JMPNZ:
|
||||||
zOp = "JMPNZ";
|
zOp = "JMPNZ";
|
||||||
break;
|
break;
|
||||||
case PH7_OP_JMPLFB:
|
case PH7_OP_LF_START:
|
||||||
zOp = "JMPLFB";
|
zOp = "LF_START";
|
||||||
break;
|
break;
|
||||||
case PH7_OP_JMPLFE:
|
case PH7_OP_LF_STOP:
|
||||||
zOp = "JMPLFE";
|
zOp = "LF_STOP";
|
||||||
break;
|
break;
|
||||||
case PH7_OP_POP:
|
case PH7_OP_POP:
|
||||||
zOp = "POP";
|
zOp = "POP";
|
||||||
|
|
|
@ -1393,8 +1393,8 @@ enum ph7_vm_op {
|
||||||
PH7_OP_JMP, /* Unconditional jump */
|
PH7_OP_JMP, /* Unconditional jump */
|
||||||
PH7_OP_JMPZ, /* Jump on zero (FALSE jump) */
|
PH7_OP_JMPZ, /* Jump on zero (FALSE jump) */
|
||||||
PH7_OP_JMPNZ, /* Jump on non-zero (TRUE jump) */
|
PH7_OP_JMPNZ, /* Jump on non-zero (TRUE jump) */
|
||||||
PH7_OP_JMPLFB, /* Jump loop frame begin */
|
PH7_OP_LF_START, /* Loop frame start */
|
||||||
PH7_OP_JMPLFE, /* Jump loop frame end */
|
PH7_OP_LF_STOP, /* Loop frame stop */
|
||||||
PH7_OP_POP, /* Stack POP */
|
PH7_OP_POP, /* Stack POP */
|
||||||
PH7_OP_CVT_INT, /* Integer cast */
|
PH7_OP_CVT_INT, /* Integer cast */
|
||||||
PH7_OP_CVT_STR, /* String cast */
|
PH7_OP_CVT_STR, /* String cast */
|
||||||
|
|
Loading…
Reference in New Issue