This commit is contained in:
Jeff Hutchinson 2021-04-02 00:57:49 -04:00
parent 02447f0996
commit f776e73b04
11 changed files with 50 additions and 54 deletions

View file

@ -1076,7 +1076,7 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
STR.rewind();
returnValue.setString(retVal, STR.mLen);
//STR.setStringValue(returnValue); // Not nice but works.
STR.setStringValue(retVal); // Not nice but works.
}
goto execFinished;
@ -2070,9 +2070,6 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
}
}
execFinished:
#ifdef TORQUE_DEBUG
AssertFatal(returnValue.getType() == ConsoleValueType::cvNone, "returnValue was never set during script exec");
#endif
if (telDebuggerOn && setFrame < 0)
TelDebugger->popStackFrame();
@ -2129,8 +2126,6 @@ execFinished:
AssertFatal(!(STR.mStartStackSize < stackStart), "String stack popped too much in script exec");
#endif
if (returnValue.getType() == ConsoleValueType::cvNone)
returnValue.setStringTableEntry(StringTable->EmptyString());
return std::move(returnValue);
}

View file

@ -1555,7 +1555,7 @@ ConsoleValue _internalExecute(S32 argc, ConsoleValue argv[])
if (result)
{
ConsoleValue ret;
ret.setString(methodRes, dStrlen(methodRes));
ret.setString(methodRes);
return std::move(ret);
}
@ -1644,7 +1644,7 @@ static ConsoleValue _internalExecute(SimObject *object, S32 argc, ConsoleValue a
if (result)
{
ConsoleValue val;
val.setString(methodRes, dStrlen(methodRes));
val.setString(methodRes);
return std::move(val);
}
@ -1672,7 +1672,7 @@ static ConsoleValue _internalExecute(SimObject *object, S32 argc, ConsoleValue a
gEvalState.thisObject = save;
// Twiddle it back
argv[1].setString(oldIdent, dStrlen(oldIdent));
argv[1].setString(oldIdent);
return std::move(ret);
}
@ -1934,8 +1934,8 @@ void postConsoleInput( RawData data )
// TODO(JTH): Mem leak
// Schedule this to happen at the next time event.
ConsoleValue* argv = new ConsoleValue[2];
argv[0].setString("eval", 4);
argv[1].setString(reinterpret_cast<const char*>(data.data), dStrlen(reinterpret_cast<const char*>(data.data)));
argv[0].setString("eval");
argv[1].setString(reinterpret_cast<const char*>(data.data));
Sim::postCurrentEvent(Sim::getRootGroup(), new SimConsoleEvent(2, argv, false));
}
@ -2577,7 +2577,7 @@ StringArrayToConsoleValueWrapper::StringArrayToConsoleValueWrapper(int targc, co
for (int i=0; i<targc; i++)
{
argv[i].setString(targv[i], dStrlen(targv[i]));
argv[i].setString(targv[i]);
}
}

View file

@ -36,6 +36,7 @@
#include "core/util/str.h"
#include "core/util/journal/journaledSignal.h"
#include "core/stringTable.h"
class SimObject;
class Namespace;
@ -119,7 +120,6 @@ extern char *typeValueEmpty;
enum ConsoleValueType
{
cvNone = -5,
cvInteger = -4,
cvFloat = -3,
cvString = -2,
@ -160,7 +160,7 @@ class ConsoleValue
TORQUE_FORCEINLINE bool hasAllocatedData() const
{
return type == ConsoleValueType::cvString || isConsoleType();
return (type == ConsoleValueType::cvString || isConsoleType()) && data != NULL;
}
const char* getConsoleData() const;
@ -170,13 +170,14 @@ class ConsoleValue
if (hasAllocatedData())
{
dFree(data);
data = NULL;
}
}
public:
ConsoleValue()
{
type = ConsoleValueType::cvNone;
setEmptyString();
}
ConsoleValue(ConsoleValue&& ref) noexcept
@ -186,9 +187,6 @@ public:
switch (ref.type)
{
TORQUE_UNLIKELY
case cvNone:
break;
case cvInteger:
i = ref.i;
break;
@ -205,7 +203,7 @@ public:
break;
}
ref.type = cvNone;
ref.setEmptyString();
}
ConsoleValue(const ConsoleValue&) = delete;
@ -219,12 +217,11 @@ public:
TORQUE_FORCEINLINE void reset()
{
cleanupData();
type = ConsoleValueType::cvNone;
setEmptyString();
}
TORQUE_FORCEINLINE F64 getFloat() const
{
AssertFatal(type == ConsoleValueType::cvNone, "Attempted to access ConsoleValue when it has no value!");
if (type == ConsoleValueType::cvFloat)
return f;
if (type == ConsoleValueType::cvInteger)
@ -236,7 +233,6 @@ public:
TORQUE_FORCEINLINE S64 getInt() const
{
AssertFatal(type == ConsoleValueType::cvNone, "Attempted to access ConsoleValue when it has no value!");
if (type == ConsoleValueType::cvInteger)
return i;
if (type == ConsoleValueType::cvFloat)
@ -248,7 +244,6 @@ public:
TORQUE_FORCEINLINE const char* getString() const
{
AssertFatal(type == ConsoleValueType::cvNone, "Attempted to access ConsoleValue when it has no value!");
if (isStringType())
return s;
if (isNumberType())
@ -263,7 +258,6 @@ public:
TORQUE_FORCEINLINE bool getBool() const
{
AssertFatal(type == ConsoleValueType::cvNone, "Attempted to access ConsoleValue when it has no value!");
if (type == ConsoleValueType::cvInteger)
return (bool)i;
if (type == ConsoleValueType::cvFloat)
@ -275,7 +269,6 @@ public:
TORQUE_FORCEINLINE void setFloat(const F64 val)
{
AssertFatal(type == ConsoleValueType::cvNone, "Attempted to access ConsoleValue when it has no value!");
cleanupData();
type = ConsoleValueType::cvFloat;
f = val;
@ -290,11 +283,17 @@ public:
TORQUE_FORCEINLINE void setString(const char* val)
{
setString(val, dStrlen(val));
setString(val, dStrlen(val) + 1);
}
TORQUE_FORCEINLINE void setString(const char* val, S32 len)
{
if (len == 0)
{
setEmptyString();
return;
}
cleanupData();
type = ConsoleValueType::cvString;
@ -318,6 +317,11 @@ public:
s = const_cast<char*>(val);
}
TORQUE_FORCEINLINE void setEmptyString()
{
setStringTableEntry(StringTable->EmptyString());
}
TORQUE_FORCEINLINE void setConsoleData(S32 consoleType, void* dataPtr, const EnumTable* enumTable)
{
cleanupData();

View file

@ -633,6 +633,10 @@ void ExprEvalState::pushFrame(StringTableEntry frameName, Namespace *ns, S32 reg
AssertFatal(!newFrame.getCount(), "ExprEvalState::pushFrame - Dictionary not empty!");
ConsoleValue* consoleValArray = new ConsoleValue[registerCount];
localStack.push_back(ConsoleValueFrame(consoleValArray, false));
currentRegisterArray = &localStack.last();
#ifdef DEBUG_SPEW
validate();
#endif
@ -653,6 +657,13 @@ void ExprEvalState::popFrame()
stack[mStackDepth]->reset();
currentVariable = NULL;
const ConsoleValueFrame& frame = localStack.last();
localStack.pop_back();
if (!frame.isReference)
delete[] frame.values;
currentRegisterArray = localStack.size() ? &localStack.last() : NULL;
#ifdef DEBUG_SPEW
validate();
#endif
@ -1296,7 +1307,7 @@ ConsoleValue Namespace::Entry::execute(S32 argc, ConsoleValue *argv, ExprEvalSta
case StringCallbackType:
{
const char* str = cb.mStringCallbackFunc(state->thisObject, argc, argv);
result.setString(str, dStrlen(str));
result.setString(str);
break;
}
case IntCallbackType:

View file

@ -372,7 +372,7 @@ public:
return;
}
value.setString(newValue, dStrlen(newValue));
value.setString(newValue);
// Fire off the notification if we have one.
if (notify)
@ -456,6 +456,9 @@ struct ConsoleValueFrame
ConsoleValue* values;
bool isReference;
ConsoleValueFrame() : values(NULL), isReference(false)
{}
ConsoleValueFrame(ConsoleValue* vals, bool isRef)
{
values = vals;

View file

@ -171,11 +171,11 @@ inline void EngineMarshallData( F32 arg, S32& argc, ConsoleValue *argv )
}
inline void EngineMarshallData( const char* arg, S32& argc, ConsoleValue *argv )
{
argv[ argc++ ].setString(arg, dStrlen(arg));
argv[ argc++ ].setString(arg);
}
inline void EngineMarshallData( char* arg, S32& argc, ConsoleValue *argv )
{
argv[ argc++ ].setString(arg, dStrlen(arg));
argv[ argc++ ].setString(arg);
}
template< typename T >
@ -1232,7 +1232,7 @@ public:
if (Con::isMainThread())
{
ConsoleStackFrameSaver sav; sav.save();
mArgv[ 0 ].setString(simCB, dStrlen(simCB));
mArgv[ 0 ].setString(simCB);
Helper::marshallEach(mArgc, mArgv, args...);
@ -1243,7 +1243,7 @@ public:
SimConsoleThreadExecCallback cb;
SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+sizeof...(ArgTs), NULL, true, &cb);
evt->populateArgs(mArgv);
mArgv[ 0 ].setString(simCB, dStrlen(simCB));
mArgv[ 0 ].setString(simCB);
Helper::marshallEach(mArgc, mArgv, args...);

View file

@ -38,7 +38,7 @@ SimConsoleEvent::SimConsoleEvent(S32 argc, ConsoleValue *argv, bool onObject)
{
if (argv)
{
mArgv->setString(argv[i].getString(), dStrlen(argv[i].getString()));
mArgv->setString(argv[i].getString());
}
}
}
@ -92,7 +92,7 @@ void SimConsoleEvent::populateArgs(ConsoleValue *argv)
{
for (U32 i=0; i<mArgc; i++)
{
argv[i].setString(mArgv[i].getString(), dStrlen(mArgv[i].getString()));
argv[i].setString(mArgv[i].getString());
}
}
@ -111,7 +111,7 @@ SimConsoleThreadExecCallback::~SimConsoleThreadExecCallback()
void SimConsoleThreadExecCallback::handleCallback(ConsoleValue ret)
{
// can we move this pls?
retVal.setString(ret.getString(), dStrlen(ret.getString()));
retVal.setString(ret.getString());
sem->release();
}

View file

@ -388,8 +388,6 @@ SimObject* findObject(const char* name)
SimObject* findObject(const ConsoleValue &val)
{
if (val.getType() == ConsoleValueType::cvNone)
return NULL;
if (val.getType() == ConsoleValueType::cvInteger)
return findObject((SimObjectId)val.getInt());
return findObject(val.getString());
@ -397,8 +395,6 @@ SimObject* findObject(const ConsoleValue &val)
SimObject* findObject(ConsoleValue* val)
{
if (val->getType() == ConsoleValueType::cvNone)
return NULL;
if (val->getType() == ConsoleValueType::cvInteger)
return findObject((SimObjectId)val->getInt());
return findObject(val->getString());

View file

@ -2962,7 +2962,7 @@ DefineEngineStringlyVariadicMethod( SimObject, call, const char*, 3, 0, "( strin
"@param args Zero or more arguments for the method.\n"
"@return The result of the method call." )
{
argv[1].setString(argv[2], dStrlen(argv[2]));
argv[1].setString(argv[2]);
return Con::execute( object, argc - 1, argv + 1 );
}

View file

@ -82,7 +82,7 @@ void StringStack::setIntValue(U32 i)
void StringStack::setFloatValue(F64 v)
{
validateBufferSize(mStart + 32);
dSprintf(mBuffer + mStart, 32, "%g", v);
dSprintf(mBuffer + mStart, 32, "%.9g", v);
mLen = dStrlen(mBuffer + mStart);
}

View file

@ -138,16 +138,6 @@ struct StringStack
return mBuffer + mStartOffsets[mStartStackSize-1];
}
inline StringStackPtr getStringValuePtr()
{
return (getStringValue() - mBuffer);
}
inline StringStackPtr getPreviousStringValuePtr()
{
return (getPreviousStringValue() - mBuffer);
}
/// Advance the start stack, placing a zero length string on the top.
///
/// @note You should use StringStack::push, not this, if you want to
@ -184,9 +174,6 @@ struct StringStack
void popFrame();
void clearFrames();
/// Get the arguments for a function call from the stack.
void getArgcArgv(StringTableEntry name, U32 *argc, const char ***in_argv, bool popStackFrame = false);
};
extern StringStack STR;