Let the compiler use OP_ADD instead of OP_CAT
All checks were successful
The build was successful.

This commit is contained in:
Rafal Kupiec 2018-08-07 07:47:25 +02:00
parent 9a56751879
commit e4ab5974fa
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
2 changed files with 9 additions and 4 deletions

View File

@ -778,7 +778,7 @@ static sxi32 GenStateCompileString(ph7_gen_state *pGen) {
}/*for(;;)*/ }/*for(;;)*/
if(iCons > 1) { if(iCons > 1) {
/* Concatenate all compiled constants */ /* Concatenate all compiled constants */
PH7_VmEmitInstr(pGen->pVm, PH7_OP_CAT, iCons, 0, 0, 0); PH7_VmEmitInstr(pGen->pVm, PH7_OP_ADD, iCons, 1, 0, 0);
} }
/* Node successfully compiled */ /* Node successfully compiled */
return SXRET_OK; return SXRET_OK;

View File

@ -3394,19 +3394,24 @@ static sxi32 VmByteCodeExec(
VmPopOperand(&pTos, 1); VmPopOperand(&pTos, 1);
break; break;
} }
/* OP_ADD * * * /* OP_ADD P1 P2 *
* *
* Pop the top two elements from the stack, add them together, * Pop the top two elements from the stack, add them together,
* and push the result back onto the stack. * and push the result back onto the stack.
*/ */
case PH7_OP_ADD: { case PH7_OP_ADD: {
ph7_value *pNos = &pTos[-1]; ph7_value *pNos;
if(pInstr->iP1 < 1) {
pNos = &pTos[-1];
} else {
pNos = &pTos[-pInstr->iP1 + 1];
}
#ifdef UNTRUST #ifdef UNTRUST
if(pNos < pStack) { if(pNos < pStack) {
goto Abort; goto Abort;
} }
#endif #endif
if(pNos->iFlags & MEMOBJ_STRING || pTos->iFlags & MEMOBJ_STRING) { if(pInstr->iP2 || pNos->iFlags & MEMOBJ_STRING || pTos->iFlags & MEMOBJ_STRING) {
/* Perform the string addition */ /* Perform the string addition */
ph7_value *pCur; ph7_value *pCur;
if((pNos->iFlags & MEMOBJ_STRING) == 0) { if((pNos->iFlags & MEMOBJ_STRING) == 0) {