There is no need for global working buffer in VM.
All checks were successful
The build was successful.
All checks were successful
The build was successful.
This commit is contained in:
parent
67ce98d924
commit
d9db6bbc26
33
engine/vm.c
33
engine/vm.c
@ -914,7 +914,6 @@ PH7_PRIVATE sxi32 PH7_VmInit(
|
||||
SySetAlloc(&pVm->aMemObj, 0xFF);
|
||||
/* Virtual machine internal containers */
|
||||
SyBlobInit(&pVm->sConsumer, &pVm->sAllocator);
|
||||
SyBlobInit(&pVm->sWorker, &pVm->sAllocator);
|
||||
SyBlobInit(&pVm->sArgv, &pVm->sAllocator);
|
||||
SySetInit(&pVm->aLitObj, &pVm->sAllocator, sizeof(ph7_value));
|
||||
SySetAlloc(&pVm->aLitObj, 0xFF);
|
||||
@ -1897,7 +1896,7 @@ PH7_PRIVATE sxi32 PH7_VmThrowError(
|
||||
sxi32 iErr, /* Severity level: [i.e: Error,Warning or Notice]*/
|
||||
const char *zMessage /* Null terminated error message */
|
||||
) {
|
||||
SyBlob *pWorker = &pVm->sWorker;
|
||||
SyBlob sWorker;
|
||||
SyString *pFile;
|
||||
const char *zErr;
|
||||
sxi32 rc;
|
||||
@ -1905,8 +1904,8 @@ PH7_PRIVATE sxi32 PH7_VmThrowError(
|
||||
/* Don't bother reporting errors */
|
||||
return SXRET_OK;
|
||||
}
|
||||
/* Reset the working buffer */
|
||||
SyBlobReset(pWorker);
|
||||
/* Initialize the working buffer */
|
||||
SyBlobInit(&sWorker, &pVm->sAllocator);
|
||||
/* Peek the processed file if available */
|
||||
pFile = (SyString *)SySetPeek(&pVm->aFiles);
|
||||
switch(iErr) {
|
||||
@ -1921,15 +1920,15 @@ PH7_PRIVATE sxi32 PH7_VmThrowError(
|
||||
zErr = "Error: ";
|
||||
break;
|
||||
}
|
||||
SyBlobAppend(pWorker, zErr, SyStrlen(zErr));
|
||||
SyBlobAppend(pWorker, zMessage, SyStrlen(zMessage));
|
||||
SyBlobAppend(&sWorker, zErr, SyStrlen(zErr));
|
||||
SyBlobAppend(&sWorker, zMessage, SyStrlen(zMessage));
|
||||
if(pFile) {
|
||||
/* Append file name */
|
||||
SyBlobAppend(pWorker, " in ", sizeof(" in ") - 1);
|
||||
SyBlobAppend(pWorker, pFile->zString, pFile->nByte);
|
||||
SyBlobAppend(&sWorker, " in ", sizeof(" in ") - 1);
|
||||
SyBlobAppend(&sWorker, pFile->zString, pFile->nByte);
|
||||
}
|
||||
/* Consume the error message */
|
||||
rc = VmCallErrorHandler(&(*pVm), pWorker);
|
||||
rc = VmCallErrorHandler(&(*pVm), &sWorker);
|
||||
if(iErr == PH7_CTX_ERR) {
|
||||
/* Error ocurred, release at least VM gracefully and exit */
|
||||
PH7_VmRelease(pVm);
|
||||
@ -1949,7 +1948,7 @@ static sxi32 VmThrowErrorAp(
|
||||
const char *zFormat, /* Format message */
|
||||
va_list ap /* Variable list of arguments */
|
||||
) {
|
||||
SyBlob *pWorker = &pVm->sWorker;
|
||||
SyBlob sWorker;
|
||||
SyString *pFile;
|
||||
const char *zErr;
|
||||
sxi32 rc;
|
||||
@ -1957,8 +1956,8 @@ static sxi32 VmThrowErrorAp(
|
||||
/* Don't bother reporting errors */
|
||||
return SXRET_OK;
|
||||
}
|
||||
/* Reset the working buffer */
|
||||
SyBlobReset(pWorker);
|
||||
/* Initialize the working buffer */
|
||||
SyBlobInit(&sWorker, &pVm->sAllocator);
|
||||
/* Peek the processed file if available */
|
||||
pFile = (SyString *)SySetPeek(&pVm->aFiles);
|
||||
switch(iErr) {
|
||||
@ -1973,15 +1972,15 @@ static sxi32 VmThrowErrorAp(
|
||||
zErr = "Error: ";
|
||||
break;
|
||||
}
|
||||
SyBlobAppend(pWorker, zErr, SyStrlen(zErr));
|
||||
SyBlobFormatAp(pWorker, zFormat, ap);
|
||||
SyBlobAppend(&sWorker, zErr, SyStrlen(zErr));
|
||||
SyBlobFormatAp(&sWorker, zFormat, ap);
|
||||
if(pFile) {
|
||||
/* Append file name */
|
||||
SyBlobAppend(pWorker, " in ", sizeof(" in ") - 1);
|
||||
SyBlobAppend(pWorker, pFile->zString, pFile->nByte);
|
||||
SyBlobAppend(&sWorker, " in ", sizeof(" in ") - 1);
|
||||
SyBlobAppend(&sWorker, pFile->zString, pFile->nByte);
|
||||
}
|
||||
/* Consume the error message */
|
||||
rc = VmCallErrorHandler(&(*pVm), pWorker);
|
||||
rc = VmCallErrorHandler(&(*pVm), &sWorker);
|
||||
if(iErr == PH7_CTX_ERR) {
|
||||
/* Error ocurred, release at least VM gracefully and exit */
|
||||
PH7_VmRelease(pVm);
|
||||
|
@ -1217,7 +1217,6 @@ struct ph7_vm {
|
||||
SyHash hSuper; /* Superglobals hashtable */
|
||||
SyHash hDBAL; /* DBAL installed drivers */
|
||||
SyBlob sConsumer; /* Default VM consumer [i.e Redirect all VM output to this blob] */
|
||||
SyBlob sWorker; /* General purpose working buffer */
|
||||
SyBlob sArgv; /* $argv[] collector [refer to the [getopt()] implementation for more information] */
|
||||
SySet aModules; /* Set of loaded modules */
|
||||
SySet aFiles; /* Stack of processed files */
|
||||
|
Loading…
Reference in New Issue
Block a user