Browse Source

Always record last instruction.

release/v0.1
Rafal Kupiec 3 years ago
parent
commit
4dae0bcc9e
Signed by: belliash GPG Key ID: 4E829243E0CFE6B4
1 changed files with 8 additions and 6 deletions
  1. +8
    -6
      engine/vm.c

+ 8
- 6
engine/vm.c View File

@ -906,6 +906,7 @@ PH7_PRIVATE sxi32 PH7_VmInit(
pVm->pEngine = &(*pEngine);
SyMemBackendInitFromParent(&pVm->sAllocator, &pEngine->sAllocator);
/* Instructions containers */
SySetInit(&pVm->aInstrSet, &pVm->sAllocator, sizeof(VmInstr));
SySetInit(&pVm->aByteCode, &pVm->sAllocator, sizeof(VmInstr));
SySetAlloc(&pVm->aByteCode, 0xFF);
pVm->pByteContainer = &pVm->aByteCode;
@ -989,10 +990,9 @@ PH7_PRIVATE sxi32 PH7_VmInit(
SyStringInitFromBuf(&sBuiltin, PH7_BUILTIN_LIB, sizeof(PH7_BUILTIN_LIB) - 1);
/* Precompile the built-in library */
VmEvalChunk(&(*pVm), 0, &sBuiltin, PH7_AERSCRIPT_CODE);
/* Initialize instructions debug container */
if(bDebug) {
/* Enable debugging */
pVm->bDebug = TRUE;
SySetInit(&pVm->aInstrSet, &pVm->sAllocator, sizeof(VmInstr));
}
/* Reset the code generator */
PH7_ResetCodeGenerator(&(*pVm), pEngine->xConf.xErr, pEngine->xConf.pErrData);
@ -2054,13 +2054,15 @@ static sxi32 VmByteCodeExec(
pc = 0;
/* Execute as much as we can */
for(;;) {
if(!pVm->bDebug) {
/* Reset instructions set container */
SySetReset(&pVm->aInstrSet);
}
/* Fetch the instruction to execute */
pInstr = &aInstr[pc];
pInstr->bExec = TRUE;
if(pVm->bDebug) {
/* Record executed instruction in debug container */
SySetPut(&pVm->aInstrSet, (void *)pInstr);
}
/* Record executed instruction in global container */
SySetPut(&pVm->aInstrSet, (void *)pInstr);
rc = SXRET_OK;
/*
* What follows here is a massive switch statement where each case implements a


Loading…
Cancel
Save