mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-12 19:31:41 +00:00
Optimize variable-to-variable assignment
This commit is contained in:
parent
38c8e52c1d
commit
e99eadd61f
5 changed files with 96 additions and 9 deletions
|
|
@ -285,6 +285,24 @@ inline void ExprEvalState::setStringVariable(const char *val)
|
|||
currentVariable->setStringValue(val);
|
||||
}
|
||||
|
||||
inline void ExprEvalState::setCopyVariable()
|
||||
{
|
||||
if (copyVariable) {
|
||||
switch (copyVariable->value.type)
|
||||
{
|
||||
case ConsoleValue::TypeInternalInt:
|
||||
currentVariable->setIntValue(copyVariable->getIntValue());
|
||||
break;
|
||||
case ConsoleValue::TypeInternalFloat:
|
||||
currentVariable->setFloatValue(copyVariable->getFloatValue());
|
||||
break;
|
||||
default:
|
||||
currentVariable->setStringValue(copyVariable->getStringValue());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
|
||||
// Gets a component of an object's field value or a variable and returns it
|
||||
|
|
@ -1362,6 +1380,11 @@ breakContinue:
|
|||
STR.setStringValue(val);
|
||||
break;
|
||||
|
||||
case OP_LOADVAR_VAR:
|
||||
// Sets current source of OP_SAVEVAR_VAR
|
||||
gEvalState.copyVariable = gEvalState.currentVariable;
|
||||
break;
|
||||
|
||||
case OP_SAVEVAR_UINT:
|
||||
gEvalState.setIntVariable(intStack[_UINT]);
|
||||
break;
|
||||
|
|
@ -1373,6 +1396,11 @@ breakContinue:
|
|||
case OP_SAVEVAR_STR:
|
||||
gEvalState.setStringVariable(STR.getStringValue());
|
||||
break;
|
||||
|
||||
case OP_SAVEVAR_VAR:
|
||||
// this basically handles %var1 = %var2
|
||||
gEvalState.setCopyVariable();
|
||||
break;
|
||||
|
||||
case OP_SETCUROBJECT:
|
||||
// Save the previous object for parsing vector fields.
|
||||
|
|
@ -1560,6 +1588,11 @@ breakContinue:
|
|||
_UINT--;
|
||||
break;
|
||||
|
||||
case OP_COPYVAR_TO_NONE:
|
||||
// nop
|
||||
gEvalState.copyVariable = NULL;
|
||||
break;
|
||||
|
||||
case OP_LOADIMMED_UINT:
|
||||
intStack[_UINT+1] = code[ip++];
|
||||
_UINT++;
|
||||
|
|
@ -1940,6 +1973,13 @@ breakContinue:
|
|||
CSTK.pushFLT(floatStack[_FLT]);
|
||||
_FLT--;
|
||||
break;
|
||||
case OP_PUSH_VAR:
|
||||
//Con::printf("Pushing variable: %s",gEvalState.getCurrentVariable()]);
|
||||
if (gEvalState.currentVariable)
|
||||
CSTK.pushValue(gEvalState.currentVariable->value);
|
||||
else
|
||||
CSTK.pushString("");
|
||||
break;
|
||||
|
||||
case OP_PUSH_FRAME:
|
||||
STR.pushFrame();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue