소스 검색

more console refactor.

Jeff Hutchinson 4 년 전
부모
커밋
50df52ecfc

+ 2 - 2
Engine/source/T3D/assets/assetImporter.cpp

@@ -2546,8 +2546,8 @@ void AssetImporter::importAssets(AssetImportObject* assetItem)
             processCommand += childItem->assetType;
             if (isMethod(processCommand.c_str()))
             {
-               ConsoleValueRef importReturnVal = Con::executef(this, processCommand.c_str(), childItem);
-               assetPath = Torque::Path(importReturnVal.getStringValue());
+               const char* importReturnVal = Con::executef(this, processCommand.c_str(), childItem).getString();
+               assetPath = Torque::Path(importReturnVal);
             }
          }
 

+ 1 - 1
Engine/source/afx/afxSelectron.cpp

@@ -1070,7 +1070,7 @@ afxSelectron::start_selectron(SceneObject* picked, U8 subcode, SimObject* extra)
   // CALL SCRIPT afxSelectronData::onPreactivate(%params, %extra)
   const char* result = Con::executef(datablock, "onPreactivate",
                                      Con::getIntArg(param_holder->getId()),
-                                     (extra) ? Con::getIntArg(extra->getId()) : "");
+                                     (extra) ? Con::getIntArg(extra->getId()) : "").getString();
   if (result && result[0] != '\0' && !dAtob(result))
   {
 #if defined(TORQUE_DEBUG)

+ 2 - 2
Engine/source/console/ICallMethod.h

@@ -27,7 +27,7 @@ class ICallMethod
 {
 public:
    virtual const char* callMethod( S32 argc, const char* methodName, ... ) = 0;
-   virtual const char* callMethodArgList( U32 argc, ConsoleValueRef argv[], bool callThis = true ) = 0;
+   virtual const char* callMethodArgList( U32 argc, ConsoleValue argv[], bool callThis = true ) = 0;
 };
 
-#endif
+#endif

+ 2 - 2
Engine/source/console/console.cpp

@@ -2592,7 +2592,7 @@ ConsoleValue _BaseEngineConsoleCallbackHelper::_exec()
       {
          ConsoleValue returnValue = std::move(Con::_internalExecute( mThis, mArgc, mArgv, false ));
          mArgc = mInitialArgc; // reset
-         return returnValue;
+         return std::move(returnValue);
       }
 
       STR.clearFunctionOffset();
@@ -2609,7 +2609,7 @@ ConsoleValue _BaseEngineConsoleCallbackHelper::_execLater(SimConsoleThreadExecEv
 {
    mArgc = mInitialArgc; // reset args
    Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
-   return evt->getCB().waitForResult();
+   return std::move(evt->getCB().waitForResult());
 }
 
 //------------------------------------------------------------------------------

+ 9 - 9
Engine/source/console/console.h

@@ -1254,9 +1254,9 @@ public:
       static ConsoleConstructor cfg_ConsoleFunctionGroup_##groupName##_GroupBegin(NULL,#groupName,usage)
 
 #  define ConsoleToolFunction(name,returnType,minArgs,maxArgs,usage1) \
-   returnType ctf_##name(SimObject *, S32, ConsoleValueRef *argv); \
+   returnType ctf_##name(SimObject *, S32, ConsoleValue *argv); \
    ConsoleConstructor cc_##name##_obj(NULL,#name,ctf_##name,usage1,minArgs,maxArgs, true); \
-   returnType ctf_##name(SimObject *, S32 argc, ConsoleValueRef *argv)
+   returnType ctf_##name(SimObject *, S32 argc, ConsoleValue *argv)
 
 #  define ConsoleFunctionGroupEnd(groupName) \
       static ConsoleConstructor cfg_##groupName##_GroupEnd(NULL,#groupName,NULL)
@@ -1289,23 +1289,23 @@ public:
 
 // These are identical to what's above, we just want to null out the usage strings.
 #  define ConsoleFunction(name,returnType,minArgs,maxArgs,usage1)                   \
-      static returnType c##name(SimObject *, S32, ConsoleValueRef*);                   \
+      static returnType c##name(SimObject *, S32, ConsoleValue*);                   \
       static ConsoleConstructor g##name##obj(NULL,#name,c##name,"",minArgs,maxArgs);\
-      static returnType c##name(SimObject *, S32 argc, ConsoleValueRef *argv)
+      static returnType c##name(SimObject *, S32 argc, ConsoleValue *argv)
 
 #  define ConsoleToolFunction(name,returnType,minArgs,maxArgs,usage1)                   \
-   static returnType c##name(SimObject *, S32, ConsoleValueRef*);                   \
+   static returnType c##name(SimObject *, S32, ConsoleValue*);                   \
    static ConsoleConstructor g##name##obj(NULL,#name,c##name,"",minArgs,maxArgs, true);\
-   static returnType c##name(SimObject *, S32 argc, ConsoleValueRef *argv)
+   static returnType c##name(SimObject *, S32 argc, ConsoleValue *argv)
 
 #  define ConsoleMethod(className,name,returnType,minArgs,maxArgs,usage1)                             \
-      static inline returnType c##className##name(className *, S32, ConsoleValueRef *argv);               \
-      static returnType c##className##name##caster(SimObject *object, S32 argc, ConsoleValueRef *argv) {  \
+      static inline returnType c##className##name(className *, S32, ConsoleValue *argv);               \
+      static returnType c##className##name##caster(SimObject *object, S32 argc, ConsoleValue *argv) {  \
          conmethod_return_##returnType ) c##className##name(static_cast<className*>(object),argc,argv);              \
       };                                                                                              \
       static ConsoleConstructor                                                                       \
          className##name##obj(#className,#name,c##className##name##caster,"",minArgs,maxArgs);        \
-      static inline returnType c##className##name(className *object, S32 argc, ConsoleValueRef *argv)
+      static inline returnType c##className##name(className *object, S32 argc, ConsoleValue *argv)
 
 #define ConsoleDoc( text )
 

+ 18 - 12
Engine/source/console/consoleInternal.cpp

@@ -613,7 +613,7 @@ void Dictionary::validate()
       "Dictionary::validate() - Dictionary not owner of own hashtable!");
 }
 
-void ExprEvalState::pushFrame(StringTableEntry frameName, Namespace *ns)
+void ExprEvalState::pushFrame(StringTableEntry frameName, Namespace *ns, S32 registerCount)
 {
 #ifdef DEBUG_SPEW
    validate();
@@ -1266,7 +1266,7 @@ void Namespace::markGroup(const char* name, const char* usage)
 
 extern S32 executeBlock(StmtNode *block, ExprEvalState *state);
 
-ConsoleValueRef Namespace::Entry::execute(S32 argc, ConsoleValueRef *argv, ExprEvalState *state)
+ConsoleValue Namespace::Entry::execute(S32 argc, ConsoleValue *argv, ExprEvalState *state)
 {
    STR.clearFunctionOffset();
 
@@ -1274,11 +1274,11 @@ ConsoleValueRef Namespace::Entry::execute(S32 argc, ConsoleValueRef *argv, ExprE
    {
       if (mFunctionOffset)
       {
-         return mCode->exec(mFunctionOffset, argv[0], mNamespace, argc, argv, false, mPackage);
+         return std::move(mCode->exec(mFunctionOffset, argv[0].getString(), mNamespace, argc, argv, false, mPackage));
       }
       else
       {
-         return ConsoleValueRef();
+         return std::move(ConsoleValue());
       }
    }
 
@@ -1288,7 +1288,7 @@ ConsoleValueRef Namespace::Entry::execute(S32 argc, ConsoleValueRef *argv, ExprE
    if (mToolOnly && !Con::isCurrentScriptToolScript())
    {
       Con::errorf(ConsoleLogEntry::Script, "%s::%s - attempting to call tools only function from outside of tools", mNamespace->mName, mFunctionName);
-      return ConsoleValueRef();
+      return std::move(ConsoleValue());
    }
 #endif
 
@@ -1296,25 +1296,31 @@ ConsoleValueRef Namespace::Entry::execute(S32 argc, ConsoleValueRef *argv, ExprE
    {
       Con::warnf(ConsoleLogEntry::Script, "%s::%s - wrong number of arguments.", mNamespace->mName, mFunctionName);
       Con::warnf(ConsoleLogEntry::Script, "usage: %s", mUsage);
-      return ConsoleValueRef();
+      return std::move(ConsoleValue());
    }
 
+   ConsoleValue result;
    switch (mType)
    {
       case StringCallbackType:
-         return ConsoleValueRef::fromValue(CSTK.pushStackString(cb.mStringCallbackFunc(state->thisObject, argc, argv)));
+         const char* str = cb.mStringCallbackFunc(state->thisObject, argc, argv);
+         result.setString(str, dStrlen(str));
+         break;
       case IntCallbackType:
-         return ConsoleValueRef::fromValue(CSTK.pushUINT((U32)cb.mBoolCallbackFunc(state->thisObject, argc, argv)));
+         result.setInt(cb.mIntCallbackFunc(state->thisObject, argc, argv));
+         break;
       case FloatCallbackType:
-         return ConsoleValueRef::fromValue(CSTK.pushFLT((U32)cb.mBoolCallbackFunc(state->thisObject, argc, argv)));
+         result.setFloat(cb.mBoolCallbackFunc(state->thisObject, argc, argv));
+         break;
       case VoidCallbackType:
          cb.mVoidCallbackFunc(state->thisObject, argc, argv);
-         return ConsoleValueRef();
+         break;
       case BoolCallbackType:
-         return ConsoleValueRef::fromValue(CSTK.pushUINT((U32)cb.mBoolCallbackFunc(state->thisObject, argc, argv)));
+         result.setBool(cb.mBoolCallbackFunc(state->thisObject, argc, argv));
+         break;
    }
 
-   return ConsoleValueRef();
+   return std::move(result);
 }
 
 //-----------------------------------------------------------------------------

+ 1 - 1
Engine/source/console/consoleInternal.h

@@ -150,7 +150,7 @@ public:
       void clear();
 
       ///
-      ConsoleValueRef execute(S32 argc, ConsoleValueRef* argv, ExprEvalState* state);
+      ConsoleValue execute(S32 argc, ConsoleValue* argv, ExprEvalState* state);
 
       /// Return a one-line documentation text string for the function.
       String getBriefDescription(String* outRemainingDocText = NULL) const;

+ 62 - 73
Engine/source/console/engineAPI.h

@@ -148,55 +148,45 @@ inline const char* EngineMarshallData( U32 value )
 /// Marshal data from native into client form stored directly in
 /// client function invocation vector.
 template< typename T >
-inline void EngineMarshallData( const T& arg, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( const T& arg, S32& argc, ConsoleValue *argv )
 {
-   argv[ argc ] = castConsoleTypeToString( arg );
-   argc ++;
+   const char* str = castConsoleTypeToString(arg);;
+   argv[ argc++ ].setString(str, dStrlen(str));
 }
-inline void EngineMarshallData( bool arg, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( bool arg, S32& argc, ConsoleValue *argv )
 {
-   if( arg )
-      argv[ argc ] = 1;
-   else
-      argv[ argc ] = 0;
-   argc ++;
+   argv[ argc++ ].setBool(arg);
 }
-inline void EngineMarshallData( S32 arg, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( S32 arg, S32& argc, ConsoleValue *argv )
 {
-   argv[ argc ] = arg;
-   argc ++;
+   argv[ argc++ ].setInt(arg);
 }
-inline void EngineMarshallData( U32 arg, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( U32 arg, S32& argc, ConsoleValue *argv )
 {
    EngineMarshallData( S32( arg ), argc, argv );
 }
-inline void EngineMarshallData( F32 arg, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( F32 arg, S32& argc, ConsoleValue *argv )
 {
-   argv[ argc ] = arg;
-   argc ++;
+   argv[ argc++ ].setFloat(arg);
 }
-inline void EngineMarshallData( const char* arg, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( const char* arg, S32& argc, ConsoleValue *argv )
 {
-   argv[ argc ] = arg;
-   argc ++;
+   argv[ argc++ ].setString(arg, dStrlen(arg));
 }
-inline void EngineMarshallData( char* arg, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( char* arg, S32& argc, ConsoleValue *argv )
 {
-   argv[ argc ] = arg;
-   argc ++;
+   argv[ argc++ ].setString(arg, dStrlen(arg));
 }
 
 template< typename T >
-inline void EngineMarshallData( T* object, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( T* object, S32& argc, ConsoleValue *argv )
 {
-   argv[ argc ] = object ? object->getId() : 0;
-   argc ++;
+   argv[ argc++ ].setInt(object ? object->getId() : 0);
 }
 template< typename T >
-inline void EngineMarshallData( const T* object, S32& argc, ConsoleValueRef *argv )
+inline void EngineMarshallData( const T* object, S32& argc, ConsoleValue *argv )
 {
-   argv[ argc ] = object ? object->getId() : 0;
-   argc ++;
+   argv[ argc++ ].setInt(object ? object->getId() : 0);
 }
 
 /// Unmarshal data from client form to engine form.
@@ -216,9 +206,9 @@ struct EngineUnmarshallData
 template<>
 struct EngineUnmarshallData< S32 >
 {
-   S32 operator()( ConsoleValueRef &ref ) const
+   S32 operator()( ConsoleValue &ref ) const
    {
-      return (S32)ref;
+      return (S32)ref.getInt();
    }
 
    S32 operator()( const char* str ) const
@@ -229,9 +219,9 @@ struct EngineUnmarshallData< S32 >
 template<>
 struct EngineUnmarshallData< U32 >
 {
-   U32 operator()( ConsoleValueRef &ref ) const
+   U32 operator()( ConsoleValue &ref ) const
    {
-      return (U32)((S32)ref);
+      return (U32)ref.getInt();
    }
 
    U32 operator()( const char* str ) const
@@ -242,9 +232,9 @@ struct EngineUnmarshallData< U32 >
 template<>
 struct EngineUnmarshallData< F32 >
 {
-   F32 operator()( ConsoleValueRef &ref ) const
+   F32 operator()( ConsoleValue &ref ) const
    {
-      return (F32)ref;
+      return (F32)ref.getFloat();
    }
 
    F32 operator()( const char* str ) const
@@ -255,9 +245,9 @@ struct EngineUnmarshallData< F32 >
 template<>
 struct EngineUnmarshallData< U8 >
 {
-   U8 operator()( ConsoleValueRef &ref ) const
+   U8 operator()( ConsoleValue &ref ) const
    {
-      return (U8)((S32)ref);
+      return (U8)((S32)ref.getInt());
    }
 
    U8 operator()( const char* str ) const
@@ -268,9 +258,9 @@ struct EngineUnmarshallData< U8 >
 template<>
 struct EngineUnmarshallData< const char* >
 {
-   const char* operator()( ConsoleValueRef &ref ) const
+   const char* operator()( ConsoleValue &ref ) const
    {
-      return ref.getStringValue();
+      return ref.getString();
    }
 
    const char* operator()( const char* str ) const
@@ -281,9 +271,9 @@ struct EngineUnmarshallData< const char* >
 template< typename T >
 struct EngineUnmarshallData< T* >
 {
-   T* operator()( ConsoleValueRef &ref ) const
+   T* operator()( ConsoleValue &ref ) const
    {
-      return dynamic_cast< T* >( Sim::findObject( ref.getStringValue() ) );
+      return dynamic_cast< T* >( Sim::findObject( ref ) );
    }
 
    T* operator()( const char* str ) const
@@ -294,17 +284,17 @@ struct EngineUnmarshallData< T* >
 template<>
 struct EngineUnmarshallData< void >
 {
-   void operator()( ConsoleValueRef& ) const {}
+   void operator()( ConsoleValue& ) const {}
    void operator()( const char* ) const {}
 };
 
 
 template<>
-struct EngineUnmarshallData< ConsoleValueRef >
+struct EngineUnmarshallData< ConsoleValue >
 {
-   ConsoleValueRef operator()( ConsoleValueRef ref ) const
+   ConsoleValue operator()( ConsoleValue &ref ) const
    {
-      return ref;
+      return std::move(ref);
    }
 };
 
@@ -548,7 +538,7 @@ namespace engineAPI{
          static const S32 NUM_ARGS = sizeof...(ArgTs) + startArgc;
          
          template<size_t index, size_t method_offset = 0, typename ...RealArgTs>
-         static IthArgType<index> getRealArgValue(S32 argc, ConsoleValueRef *argv, const _EngineFunctionDefaultArguments< void(RealArgTs...) >& defaultArgs)
+         static IthArgType<index> getRealArgValue(S32 argc, ConsoleValue *argv, const _EngineFunctionDefaultArguments< void(RealArgTs...) >& defaultArgs)
          {
             if((startArgc + index) < argc)
             {
@@ -559,12 +549,12 @@ namespace engineAPI{
          }
          
          template<size_t ...I>
-         static R dispatchHelper(S32 argc, ConsoleValueRef *argv, FunctionType fn, const _EngineFunctionDefaultArguments< void(ArgTs...) >& defaultArgs, Seq<I...>){
+         static R dispatchHelper(S32 argc, ConsoleValue *argv, FunctionType fn, const _EngineFunctionDefaultArguments< void(ArgTs...) >& defaultArgs, Seq<I...>){
             return fn(SelfType::getRealArgValue<I>(argc, argv, defaultArgs) ...);
          }
          
          template<typename Frame, size_t ...I>
-         static R dispatchHelper(S32 argc, ConsoleValueRef *argv, MethodType<Frame> fn, Frame* frame, const _EngineFunctionDefaultArguments< void( typename Frame::ObjectType*, ArgTs...) >& defaultArgs, Seq<I...>){
+         static R dispatchHelper(S32 argc, ConsoleValue *argv, MethodType<Frame> fn, Frame* frame, const _EngineFunctionDefaultArguments< void( typename Frame::ObjectType*, ArgTs...) >& defaultArgs, Seq<I...>){
             return (frame->*fn)(SelfType::getRealArgValue<I,1>(argc, argv, defaultArgs) ...);
          }
          
@@ -579,9 +569,9 @@ namespace engineAPI{
          }
       };
       
-      template<> struct MarshallHelpers<ConsoleValueRef> {
-         template<typename ...ArgTs> static void marshallEach(S32 &argc, ConsoleValueRef *argv, const ArgTs& ...args){}
-         template<typename H, typename ...Tail> static void marshallEach(S32 &argc, ConsoleValueRef *argv, const H& head, const Tail& ...tail){
+      template<> struct MarshallHelpers<ConsoleValue> {
+         template<typename ...ArgTs> static void marshallEach(S32 &argc, ConsoleValue *argv, const ArgTs& ...args){}
+         template<typename H, typename ...Tail> static void marshallEach(S32 &argc, ConsoleValue *argv, const H& head, const Tail& ...tail){
             EngineMarshallData(head, argc, argv);
             marshallEach(argc, argv, tail...);
          }
@@ -604,12 +594,12 @@ public:
    template<typename Frame> using MethodType = typename Helper::template MethodType<Frame>;
    static const S32 NUM_ARGS = Helper::NUM_ARGS;
    
-   static ReturnType thunk( S32 argc, ConsoleValueRef *argv, FunctionType fn, const _EngineFunctionDefaultArguments< void(ArgTs...) >& defaultArgs)
+   static ReturnType thunk( S32 argc, ConsoleValue *argv, FunctionType fn, const _EngineFunctionDefaultArguments< void(ArgTs...) >& defaultArgs)
    {
       return _EngineConsoleThunkReturnValue( Helper::dispatchHelper(argc, argv, fn, defaultArgs, SeqType()));
    }
    template< typename Frame >
-   static ReturnType thunk( S32 argc, ConsoleValueRef *argv, MethodType<Frame> fn, Frame* frame, const _EngineFunctionDefaultArguments< void( typename Frame::ObjectType*, ArgTs...) >& defaultArgs)
+   static ReturnType thunk( S32 argc, ConsoleValue *argv, MethodType<Frame> fn, Frame* frame, const _EngineFunctionDefaultArguments< void( typename Frame::ObjectType*, ArgTs...) >& defaultArgs)
    {
       return _EngineConsoleThunkReturnValue( Helper::dispatchHelper(argc, argv, fn, frame, defaultArgs, SeqType()));
    }
@@ -627,12 +617,12 @@ public:
    template<typename Frame> using MethodType = typename Helper::template MethodType<Frame>;
    static const S32 NUM_ARGS = Helper::NUM_ARGS;
    
-   static void thunk( S32 argc, ConsoleValueRef *argv, FunctionType fn, const _EngineFunctionDefaultArguments< void(ArgTs...) >& defaultArgs)
+   static void thunk( S32 argc, ConsoleValue *argv, FunctionType fn, const _EngineFunctionDefaultArguments< void(ArgTs...) >& defaultArgs)
    {
       Helper::dispatchHelper(argc, argv, fn, defaultArgs, SeqType());
    }
    template< typename Frame >
-   static void thunk( S32 argc, ConsoleValueRef *argv, MethodType<Frame> fn, Frame* frame, const _EngineFunctionDefaultArguments< void( typename Frame::ObjectType*, ArgTs...) >& defaultArgs)
+   static void thunk( S32 argc, ConsoleValue *argv, MethodType<Frame> fn, Frame* frame, const _EngineFunctionDefaultArguments< void( typename Frame::ObjectType*, ArgTs...) >& defaultArgs)
    {
       Helper::dispatchHelper(argc, argv, fn, frame, defaultArgs, SeqType());
    }
@@ -705,7 +695,7 @@ public:
       ( void* ) &fn ## name,                                                                                                     \
       0                                                                                                                          \
    );                                                                                                                            \
-   static _EngineConsoleThunkType< returnType >::ReturnType _ ## name ## caster( SimObject*, S32 argc, ConsoleValueRef *argv )   \
+   static _EngineConsoleThunkType< returnType >::ReturnType _ ## name ## caster( SimObject*, S32 argc, ConsoleValue *argv )      \
    {                                                                                                                             \
       return _EngineConsoleThunkType< returnType >::ReturnType( _EngineConsoleThunk< 1, returnType args >::thunk(                \
          argc, argv, &_fn ## name ## impl, _fn ## name ## DefaultArgs                                                            \
@@ -785,7 +775,7 @@ public:
       ( void* ) &fn ## className ## _ ## name,                                                                                                  \
       0                                                                                                                                         \
    );                                                                                                                                           \
-   static _EngineConsoleThunkType< returnType >::ReturnType _ ## className ## name ## caster( SimObject* object, S32 argc, ConsoleValueRef *argv )  \
+   static _EngineConsoleThunkType< returnType >::ReturnType _ ## className ## name ## caster( SimObject* object, S32 argc, ConsoleValue *argv )  \
    {                                                                                                                                            \
       _ ## className ## name ## frame frame;                                                                                                    \
       frame.object = static_cast< className* >( object );                                                                                       \
@@ -842,7 +832,7 @@ public:
       ( void* ) &fn ## className ## _ ## name,                                                                                         \
       0                                                                                                                                \
    );                                                                                                                                  \
-   static _EngineConsoleThunkType< returnType >::ReturnType _ ## className ## name ## caster( SimObject*, S32 argc, ConsoleValueRef *argv )\
+   static _EngineConsoleThunkType< returnType >::ReturnType _ ## className ## name ## caster( SimObject*, S32 argc, ConsoleValue *argv )\
    {                                                                                                                                   \
       return _EngineConsoleThunkType< returnType >::ReturnType( _EngineConsoleThunk< 1, returnType args >::thunk(                      \
          argc, argv, &_fn ## className ## name ## impl, _fn ## className ## name ## DefaultArgs                                        \
@@ -859,7 +849,7 @@ public:
    static inline returnType _fn ## className ## name ## impl args
 
 #  define DefineEngineStringlyVariadicFunction(name,returnType,minArgs,maxArgs,usage)                                            \
-   static inline returnType _fn ## name ## impl (SimObject *, S32 argc, ConsoleValueRef *argv);                                  \
+   static inline returnType _fn ## name ## impl (SimObject *, S32 argc, ConsoleValue *argv);                                     \
    TORQUE_API EngineTypeTraits< returnType >::ReturnValueType fn ## name                                                         \
       (Vector<const char*>* vec)                                                                                                 \
    {                                                                                                                             \
@@ -882,14 +872,14 @@ public:
       0                                                                                                                          \
    );                                                                                                                            \
    ConsoleConstructor cc_##name##_obj(NULL,#name,_fn ## name ## impl,usage,minArgs,maxArgs); \
-      returnType _fn ## name ## impl(SimObject *, S32 argc, ConsoleValueRef *argv)
+      returnType _fn ## name ## impl(SimObject *, S32 argc, ConsoleValue *argv)
 
 #  define DefineEngineStringlyVariadicMethod(className, name,returnType,minArgs,maxArgs,usage)                                   \
    struct _ ## className ## name ## frame                                                                                        \
    {                                                                                                                             \
       typedef className ObjectType;                                                                                              \
       className* object;                                                                                                         \
-      inline returnType _exec (S32 argc, ConsoleValueRef* argv) const;                                                           \
+      inline returnType _exec (S32 argc, ConsoleValue* argv) const;                                                              \
    };                                                                                                                            \
    TORQUE_API EngineTypeTraits< returnType >::ReturnValueType fn ## className ## _ ## name                                       \
       (className* object, Vector<const char*>* vec)                                                                              \
@@ -915,14 +905,14 @@ public:
       ( void* ) &fn ## className ## _ ## name,                                                                                   \
       0                                                                                                                          \
    );                                                                                                                            \
-   returnType cm_##className##_##name##_caster(SimObject* object, S32 argc, ConsoleValueRef* argv) {                             \
+   returnType cm_##className##_##name##_caster(SimObject* object, S32 argc, ConsoleValue* argv) {                                \
       AssertFatal( dynamic_cast<className*>( object ), "Object passed to " #name " is not a " #className "!" );                  \
       _ ## className ## name ## frame frame {};                                                                                  \
       frame.object = static_cast< className* >( object );                                                                        \
       conmethod_return_##returnType ) frame._exec(argc,argv);                                                                    \
    };                                                                                                                            \
    ConsoleConstructor cc_##className##_##name##_obj(#className,#name,cm_##className##_##name##_caster,usage,minArgs,maxArgs);    \
-   inline returnType _ ## className ## name ## frame::_exec(S32 argc, ConsoleValueRef *argv) const
+   inline returnType _ ## className ## name ## frame::_exec(S32 argc, ConsoleValue *argv) const
 
 
 
@@ -1167,10 +1157,10 @@ public:
    S32 mInitialArgc;
    S32 mArgc;
    StringTableEntry mCallbackName;
-   ConsoleValueRef mArgv[ MAX_ARGUMENTS + 2 ];
+   ConsoleValue mArgv[ MAX_ARGUMENTS + 2 ];
 
-   ConsoleValueRef _exec();
-   ConsoleValueRef _execLater(SimConsoleThreadExecEvent *evt);
+   ConsoleValue _exec();
+   ConsoleValue _execLater(SimConsoleThreadExecEvent *evt);
 
    _BaseEngineConsoleCallbackHelper(): mThis(NULL), mInitialArgc(0), mArgc(0), mCallbackName(StringTable->EmptyString()){;}
 };
@@ -1181,7 +1171,7 @@ public:
 struct _EngineConsoleCallbackHelper : public _BaseEngineConsoleCallbackHelper
 {
 private:
-   using Helper = engineAPI::detail::MarshallHelpers<ConsoleValueRef>;
+   using Helper = engineAPI::detail::MarshallHelpers<ConsoleValue>;
 public:
 
    _EngineConsoleCallbackHelper( StringTableEntry callbackName, SimObject* pThis )
@@ -1244,7 +1234,7 @@ public:
       {
          ConsoleStackFrameSaver sav; sav.save();
          CSTK.reserveValues(mArgc+sizeof...(ArgTs), mArgv);
-         mArgv[ 0 ].value->setStackStringValue(simCB);
+         mArgv[ 0 ].setString(simCB, dStrlen(simCB));
 
         Helper::marshallEach(mArgc, mArgv, args...);
 
@@ -1255,7 +1245,7 @@ public:
          SimConsoleThreadExecCallback cb;
          SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+sizeof...(ArgTs), NULL, true, &cb);
          evt->populateArgs(mArgv);
-         mArgv[ 0 ].value->setStackStringValue(simCB);
+         mArgv[ 0 ].setString(simCB, dStrlen(simCB));
         
         Helper::marshallEach(mArgc, mArgv, args...);
 
@@ -1270,7 +1260,7 @@ public:
 template<> struct _EngineConsoleExecCallbackHelper<const char*> : public _BaseEngineConsoleCallbackHelper
 {
 private:
-   using Helper = engineAPI::detail::MarshallHelpers<ConsoleValueRef>;
+   using Helper = engineAPI::detail::MarshallHelpers<ConsoleValue>;
 public:
    _EngineConsoleExecCallbackHelper( const char *callbackName )
    {
@@ -1285,10 +1275,9 @@ public:
       if (Con::isMainThread())
       {
          ConsoleStackFrameSaver sav; sav.save();
-         CSTK.reserveValues(mArgc+sizeof...(ArgTs), mArgv);
-         mArgv[ 0 ].value->setStackStringValue(mCallbackName);
+         mArgv[ 0 ].setStringTableEntry(mCallbackName);
         
-        Helper::marshallEach(mArgc, mArgv, args...);
+         Helper::marshallEach(mArgc, mArgv, args...);
         
          return R( EngineUnmarshallData< R >()( _exec() ) );
       }
@@ -1297,7 +1286,7 @@ public:
          SimConsoleThreadExecCallback cb;
          SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+sizeof...(ArgTs), NULL, false, &cb);
          evt->populateArgs(mArgv);
-         mArgv[ 0 ].value->setStackStringValue(mCallbackName);
+         mArgv[ 0 ].setStringTableEntry(mCallbackName);
         
         Helper::marshallEach(mArgc, mArgv, args...);
 

+ 29 - 30
Engine/source/console/simEvents.cpp

@@ -28,30 +28,23 @@
 // Stupid globals not declared in a header
 extern ExprEvalState gEvalState;
 
-SimConsoleEvent::SimConsoleEvent(S32 argc, ConsoleValueRef *argv, bool onObject)
+SimConsoleEvent::SimConsoleEvent(S32 argc, ConsoleValue *argv, bool onObject)
 {
    mOnObject = onObject;
    mArgc = argc;
 
-   mArgv = new ConsoleValueRef[argc];
+   mArgv = new ConsoleValue[argc];
    for (int i=0; i<argc; i++)
    {
-      mArgv[i].value = new ConsoleValue();
-      mArgv[i].value->type = ConsoleValue::TypeInternalString;
-      mArgv[i].value->init();
-     if (argv)
-     {
-      mArgv[i].value->setStringValue((const char*)argv[i]);
-     }
+      if (argv)
+      {
+         mArgv->setString(argv[i].getString(), dStrlen(argv[i].getString()));
+      }
    }
 }
 
 SimConsoleEvent::~SimConsoleEvent()
 {
-   for (int i=0; i<mArgc; i++)
-   {
-      delete mArgv[i].value;
-   }
    delete[] mArgv;
 }
 
@@ -67,7 +60,7 @@ void SimConsoleEvent::process(SimObject* object)
       // Grab the function name. If '::' doesn't exist, then the schedule is
       // on a global function.
       char funcName[256];
-      dStrncpy(funcName, (const char*)mArgv[0], 256);
+      dStrncpy(funcName, mArgv[0].getString(), 256);
       char* func = dStrstr( funcName, (char*)"::" );
       if( func )
       {
@@ -95,11 +88,11 @@ void SimConsoleEvent::process(SimObject* object)
    }
 }
 
-void SimConsoleEvent::populateArgs(ConsoleValueRef *argv)
+void SimConsoleEvent::populateArgs(ConsoleValue *argv)
 {
    for (U32 i=0; i<mArgc; i++)
    {
-      argv[i].value = mArgv[i].value;
+      argv[i].setString(mArgv[i].getString(), dStrlen(mArgv[i].getString()));
    }
 }
 
@@ -107,7 +100,6 @@ void SimConsoleEvent::populateArgs(ConsoleValueRef *argv)
 
 SimConsoleThreadExecCallback::SimConsoleThreadExecCallback()
 {
-   retVal.value = NULL;
    sem = new Semaphore(0);
 }
 
@@ -116,37 +108,44 @@ SimConsoleThreadExecCallback::~SimConsoleThreadExecCallback()
    delete sem;
 }
 
-void SimConsoleThreadExecCallback::handleCallback(ConsoleValueRef ret)
+void SimConsoleThreadExecCallback::handleCallback(ConsoleValue ret)
 {
-   retVal = ret;
+   // can we move this pls?
+   retVal.setString(ret.getString(), dStrlen(ret.getString()));
    sem->release();
 }
 
-ConsoleValueRef SimConsoleThreadExecCallback::waitForResult()
+ConsoleValue SimConsoleThreadExecCallback::waitForResult()
 {
    if(sem->acquire(true))
    {
-      return retVal;
+      return std::move(retVal);
    }
 
-   return ConsoleValueRef();
+   return ConsoleValue();
 }
 
 //-----------------------------------------------------------------------------
 
-SimConsoleThreadExecEvent::SimConsoleThreadExecEvent(S32 argc, ConsoleValueRef *argv, bool onObject, SimConsoleThreadExecCallback *callback) :
+SimConsoleThreadExecEvent::SimConsoleThreadExecEvent(S32 argc, ConsoleValue *argv, bool onObject, SimConsoleThreadExecCallback *callback) :
    SimConsoleEvent(argc, argv, onObject), cb(callback)
 {
 }
 
 void SimConsoleThreadExecEvent::process(SimObject* object)
 {
-   ConsoleValueRef retVal;
-   if(mOnObject)
-      retVal = Con::execute(object, mArgc, mArgv);
+   if (cb)
+   {
+      if (mOnObject)
+         cb->handleCallback(std::move(Con::execute(object, mArgc, mArgv)));
+      else
+         cb->handleCallback(std::move(Con::execute(mArgc, mArgv)));
+   }
    else
-      retVal = Con::execute(mArgc, mArgv);
-
-   if(cb)
-      cb->handleCallback(retVal);
+   {
+      if (mOnObject)
+         Con::execute(object, mArgc, mArgv);
+      else
+         Con::execute(mArgc, mArgv);
+   }
 }

+ 7 - 7
Engine/source/console/simEvents.h

@@ -91,7 +91,7 @@ class SimConsoleEvent : public SimEvent
 {
 protected:
    S32 mArgc;
-   ConsoleValueRef *mArgv;
+   ConsoleValue *mArgv;
    bool mOnObject;
 public:
 
@@ -108,13 +108,13 @@ public:
    ///
    /// @see Con::execute(S32 argc, const char *argv[])
    /// @see Con::execute(SimObject *object, S32 argc, const char *argv[])
-   SimConsoleEvent(S32 argc, ConsoleValueRef *argv, bool onObject);
+   SimConsoleEvent(S32 argc, ConsoleValue *argv, bool onObject);
 
    ~SimConsoleEvent();
    virtual void process(SimObject *object);
 
    /// Creates a reference to our internal args list in argv
-   void populateArgs(ConsoleValueRef *argv);
+   void populateArgs(ConsoleValue *argv);
 };
 
 
@@ -123,13 +123,13 @@ public:
 struct SimConsoleThreadExecCallback
 {
    Semaphore   *sem;
-   ConsoleValueRef retVal;
+   ConsoleValue retVal;
 
    SimConsoleThreadExecCallback();
    ~SimConsoleThreadExecCallback();
 
-   void handleCallback(ConsoleValueRef ret);
-   ConsoleValueRef waitForResult();
+   void handleCallback(ConsoleValue ret);
+   ConsoleValue waitForResult();
 };
 
 class SimConsoleThreadExecEvent : public SimConsoleEvent
@@ -137,7 +137,7 @@ class SimConsoleThreadExecEvent : public SimConsoleEvent
    SimConsoleThreadExecCallback *cb;
 
 public:
-   SimConsoleThreadExecEvent(S32 argc, ConsoleValueRef *argv, bool onObject, SimConsoleThreadExecCallback *callback);
+   SimConsoleThreadExecEvent(S32 argc, ConsoleValue *argv, bool onObject, SimConsoleThreadExecCallback *callback);
 
    SimConsoleThreadExecCallback& getCB() { return *cb; }
    virtual void process(SimObject *object);

+ 1 - 1
Engine/source/console/simObject.cpp

@@ -141,7 +141,7 @@ SimObject::~SimObject()
 
 //-----------------------------------------------------------------------------
 
-bool SimObject::processArguments(S32 argc, ConsoleValueRef *argv)
+bool SimObject::processArguments(S32 argc, ConsoleValue *argv)
 {
    return argc == 0;
 }

+ 1 - 1
Engine/source/console/simObject.h

@@ -587,7 +587,7 @@ class SimObject: public ConsoleObject, public TamlCallbacks
       
       virtual ~SimObject();
 
-      virtual bool processArguments(S32 argc, ConsoleValueRef *argv);  ///< Process constructor options. (ie, new SimObject(1,2,3))
+      virtual bool processArguments(S32 argc, ConsoleValue *argv);  ///< Process constructor options. (ie, new SimObject(1,2,3))
 
       /// @}
 

+ 1 - 1
Engine/source/console/simPersistSet.cpp

@@ -47,7 +47,7 @@ SimPersistSet::SimPersistSet()
 
 //-----------------------------------------------------------------------------
 
-bool SimPersistSet::processArguments( S32 argc, ConsoleValueRef *argv )
+bool SimPersistSet::processArguments( S32 argc, ConsoleValue *argv )
 {
    for( U32 i = 0; i < argc; ++ i )
    {

+ 1 - 1
Engine/source/console/simPersistSet.h

@@ -58,7 +58,7 @@ class SimPersistSet : public SimSet
       // SimSet.
       virtual void addObject( SimObject* );
       virtual void write( Stream &stream, U32 tabStop, U32 flags = 0 );
-      virtual bool processArguments( S32 argc, ConsoleValueRef *argv );
+      virtual bool processArguments( S32 argc, ConsoleValue *argv );
       
       DECLARE_CONOBJECT( SimPersistSet );
       DECLARE_CATEGORY( "Console" );

+ 13 - 15
Engine/source/console/test/ScriptTest.cpp

@@ -20,7 +20,6 @@
 // IN THE SOFTWARE.
 //-----------------------------------------------------------------------------
 
-#ifdef 0
 #ifdef TORQUE_TESTS_ENABLED
 #include "testing/unitTesting.h"
 #include "platform/platform.h"
@@ -32,40 +31,40 @@
 #include "console/stringStack.h"
 
 template<typename T>
-inline T Convert(ConsoleValueRef);
+inline T Convert(ConsoleValue&);
 
 template<>
-inline U32 Convert(ConsoleValueRef val)
+inline U32 Convert(ConsoleValue &val)
 {
-   return val.getIntValue();
+   return val.getInt();
 }
 
 template<>
-inline S32 Convert(ConsoleValueRef val)
+inline S32 Convert(ConsoleValue &val)
 {
-   return val.getSignedIntValue();
+   return val.getInt();
 }
 
 template<>
-inline bool Convert(ConsoleValueRef val)
+inline bool Convert(ConsoleValue &val)
 {
-   return val.getBoolValue();
+   return val.getBool();
 }
 
 template<>
-inline F32 Convert(ConsoleValueRef val)
+inline F32 Convert(ConsoleValue &val)
 {
-   return val.getFloatValue();
+   return val.getFloat();
 }
 
 template<>
-inline const char* Convert(ConsoleValueRef val)
+inline const char* Convert(ConsoleValue &val)
 {
-   return val.getStringValue();
+   return val.getString();
 }
 
 template<>
-inline SimObject* Convert(ConsoleValueRef val)
+inline SimObject* Convert(ConsoleValue &val)
 {
    return Sim::findObject(val);
 }
@@ -73,7 +72,7 @@ inline SimObject* Convert(ConsoleValueRef val)
 template<typename T>
 inline T RunScript(const char* str)
 {
-   return Convert<T>(Con::evaluate(str, false, NULL));
+   return Convert<T>(std::move(Con::evaluate(str, false, NULL)));
 }
 
 TEST(Script, Basic_Arithmetic)
@@ -394,4 +393,3 @@ TEST(Script, Basic_Package)
 }
 
 #endif
-#endif