There is no need for global working buffer in VM.
All checks were successful
The build was successful.

This commit is contained in:
Rafal Kupiec 2018-08-31 23:34:35 +02:00
parent 67ce98d924
commit d9db6bbc26
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
2 changed files with 16 additions and 18 deletions

View File

@ -914,7 +914,6 @@ PH7_PRIVATE sxi32 PH7_VmInit(
SySetAlloc(&pVm->aMemObj, 0xFF); SySetAlloc(&pVm->aMemObj, 0xFF);
/* Virtual machine internal containers */ /* Virtual machine internal containers */
SyBlobInit(&pVm->sConsumer, &pVm->sAllocator); SyBlobInit(&pVm->sConsumer, &pVm->sAllocator);
SyBlobInit(&pVm->sWorker, &pVm->sAllocator);
SyBlobInit(&pVm->sArgv, &pVm->sAllocator); SyBlobInit(&pVm->sArgv, &pVm->sAllocator);
SySetInit(&pVm->aLitObj, &pVm->sAllocator, sizeof(ph7_value)); SySetInit(&pVm->aLitObj, &pVm->sAllocator, sizeof(ph7_value));
SySetAlloc(&pVm->aLitObj, 0xFF); SySetAlloc(&pVm->aLitObj, 0xFF);
@ -1897,7 +1896,7 @@ PH7_PRIVATE sxi32 PH7_VmThrowError(
sxi32 iErr, /* Severity level: [i.e: Error,Warning or Notice]*/ sxi32 iErr, /* Severity level: [i.e: Error,Warning or Notice]*/
const char *zMessage /* Null terminated error message */ const char *zMessage /* Null terminated error message */
) { ) {
SyBlob *pWorker = &pVm->sWorker; SyBlob sWorker;
SyString *pFile; SyString *pFile;
const char *zErr; const char *zErr;
sxi32 rc; sxi32 rc;
@ -1905,8 +1904,8 @@ PH7_PRIVATE sxi32 PH7_VmThrowError(
/* Don't bother reporting errors */ /* Don't bother reporting errors */
return SXRET_OK; return SXRET_OK;
} }
/* Reset the working buffer */ /* Initialize the working buffer */
SyBlobReset(pWorker); SyBlobInit(&sWorker, &pVm->sAllocator);
/* Peek the processed file if available */ /* Peek the processed file if available */
pFile = (SyString *)SySetPeek(&pVm->aFiles); pFile = (SyString *)SySetPeek(&pVm->aFiles);
switch(iErr) { switch(iErr) {
@ -1921,15 +1920,15 @@ PH7_PRIVATE sxi32 PH7_VmThrowError(
zErr = "Error: "; zErr = "Error: ";
break; break;
} }
SyBlobAppend(pWorker, zErr, SyStrlen(zErr)); SyBlobAppend(&sWorker, zErr, SyStrlen(zErr));
SyBlobAppend(pWorker, zMessage, SyStrlen(zMessage)); SyBlobAppend(&sWorker, zMessage, SyStrlen(zMessage));
if(pFile) { if(pFile) {
/* Append file name */ /* Append file name */
SyBlobAppend(pWorker, " in ", sizeof(" in ") - 1); SyBlobAppend(&sWorker, " in ", sizeof(" in ") - 1);
SyBlobAppend(pWorker, pFile->zString, pFile->nByte); SyBlobAppend(&sWorker, pFile->zString, pFile->nByte);
} }
/* Consume the error message */ /* Consume the error message */
rc = VmCallErrorHandler(&(*pVm), pWorker); rc = VmCallErrorHandler(&(*pVm), &sWorker);
if(iErr == PH7_CTX_ERR) { if(iErr == PH7_CTX_ERR) {
/* Error ocurred, release at least VM gracefully and exit */ /* Error ocurred, release at least VM gracefully and exit */
PH7_VmRelease(pVm); PH7_VmRelease(pVm);
@ -1949,7 +1948,7 @@ static sxi32 VmThrowErrorAp(
const char *zFormat, /* Format message */ const char *zFormat, /* Format message */
va_list ap /* Variable list of arguments */ va_list ap /* Variable list of arguments */
) { ) {
SyBlob *pWorker = &pVm->sWorker; SyBlob sWorker;
SyString *pFile; SyString *pFile;
const char *zErr; const char *zErr;
sxi32 rc; sxi32 rc;
@ -1957,8 +1956,8 @@ static sxi32 VmThrowErrorAp(
/* Don't bother reporting errors */ /* Don't bother reporting errors */
return SXRET_OK; return SXRET_OK;
} }
/* Reset the working buffer */ /* Initialize the working buffer */
SyBlobReset(pWorker); SyBlobInit(&sWorker, &pVm->sAllocator);
/* Peek the processed file if available */ /* Peek the processed file if available */
pFile = (SyString *)SySetPeek(&pVm->aFiles); pFile = (SyString *)SySetPeek(&pVm->aFiles);
switch(iErr) { switch(iErr) {
@ -1973,15 +1972,15 @@ static sxi32 VmThrowErrorAp(
zErr = "Error: "; zErr = "Error: ";
break; break;
} }
SyBlobAppend(pWorker, zErr, SyStrlen(zErr)); SyBlobAppend(&sWorker, zErr, SyStrlen(zErr));
SyBlobFormatAp(pWorker, zFormat, ap); SyBlobFormatAp(&sWorker, zFormat, ap);
if(pFile) { if(pFile) {
/* Append file name */ /* Append file name */
SyBlobAppend(pWorker, " in ", sizeof(" in ") - 1); SyBlobAppend(&sWorker, " in ", sizeof(" in ") - 1);
SyBlobAppend(pWorker, pFile->zString, pFile->nByte); SyBlobAppend(&sWorker, pFile->zString, pFile->nByte);
} }
/* Consume the error message */ /* Consume the error message */
rc = VmCallErrorHandler(&(*pVm), pWorker); rc = VmCallErrorHandler(&(*pVm), &sWorker);
if(iErr == PH7_CTX_ERR) { if(iErr == PH7_CTX_ERR) {
/* Error ocurred, release at least VM gracefully and exit */ /* Error ocurred, release at least VM gracefully and exit */
PH7_VmRelease(pVm); PH7_VmRelease(pVm);

View File

@ -1217,7 +1217,6 @@ struct ph7_vm {
SyHash hSuper; /* Superglobals hashtable */ SyHash hSuper; /* Superglobals hashtable */
SyHash hDBAL; /* DBAL installed drivers */ SyHash hDBAL; /* DBAL installed drivers */
SyBlob sConsumer; /* Default VM consumer [i.e Redirect all VM output to this blob] */ 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] */ SyBlob sArgv; /* $argv[] collector [refer to the [getopt()] implementation for more information] */
SySet aModules; /* Set of loaded modules */ SySet aModules; /* Set of loaded modules */
SySet aFiles; /* Stack of processed files */ SySet aFiles; /* Stack of processed files */