optimizations

This commit is contained in:
Jeff Hutchinson 2021-04-30 01:20:01 -04:00
parent dcd01e1231
commit 55b0ecb487
3 changed files with 38 additions and 33 deletions

View file

@ -57,6 +57,7 @@ enum EvalConstants
MaxStackSize = 1024,
FieldBufferSizeString = 2048,
FieldBufferSizeNumeric = 128,
ConcatBufferInitialSize = 8192,
MethodOnComponent = -2
};
@ -118,6 +119,23 @@ S32 _STK = 0;
char curFieldArray[256];
char prevFieldArray[256];
const char* tsconcat(const char* strA, const char* strB, S32& outputLen)
{
S32 lenA = dStrlen(strA);
S32 lenB = dStrlen(strB);
S32 len = lenA + lenB + 1;
char* concatBuffer = (char*)dMalloc(len);
concatBuffer[len - 1] = '\0';
memcpy(concatBuffer, strA, lenA);
memcpy(concatBuffer + lenA, strB, lenB);
outputLen = lenA + lenB;
return concatBuffer;
}
namespace Con
{
// Current script file name and root, these are registered as
@ -1727,7 +1745,6 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
{
if (nsEntry->mFunctionOffset)
{
// TODO: not make this strings only for returns.
ConsoleValue returnFromFn = nsEntry->mCode->exec(nsEntry->mFunctionOffset, fnName, nsEntry->mNamespace, callArgc, callArgv, false, nsEntry->mPackage);
stack[_STK + 1] = std::move(returnFromFn);
}
@ -1834,34 +1851,28 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
case OP_ADVANCE_STR_APPENDCHAR:
{
// TODO: Create a better way to handle string concatination without
// heap allocating every time.
val = stack[_STK].getString();
dsize_t len = dStrlen(val) + 2;
char buff[2];
buff[0] = (char)code[ip++];
buff[1] = '\0';
char* concat = new char[len];
dMemset(concat, 0, len);
dStrcat(concat, val, len);
dStrcat(concat, buff, len);
stack[_STK].setString(concat);
delete[] concat;
S32 len;
const char* concat = tsconcat(stack[_STK].getString(), buff, len);
stack[_STK].setStringRef(concat, len);
break;
}
case OP_REWIND_STR:
TORQUE_CASE_FALLTHROUGH;
case OP_TERMINATE_REWIND_STR:
stack[_STK - 1].setString((String(stack[_STK - 1] + String(stack[_STK]))));
{
S32 len;
const char* concat = tsconcat(stack[_STK - 1].getString(), stack[_STK].getString(), len);
stack[_STK - 1].setStringRef(concat, len);
_STK--;
break;
}
case OP_COMPARE_STR:
stack[_STK - 1].setBool(!dStricmp(stack[_STK].getString(), stack[_STK - 1].getString()));