diff --git a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp index e3afc41a86..ba886978f2 100644 --- a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp +++ b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp @@ -336,15 +336,16 @@ namespace scriptable { } return engine->newQObject(object, ScriptEngine::QtOwnership, ScriptEngine::AutoCreateDynamicProperties); }, - [](const ScriptValue& value, void* p) -> bool { - Q_ASSERT(p != NULL); - QPointer& out = *(reinterpret_cast* >(p)); + [](const ScriptValue& value, QVariant &dest) -> bool { + //Q_ASSERT(p != NULL); + //QPointer& out = *(reinterpret_cast* >(p)); auto obj = value.toQObject(); #ifdef SCRIPTABLE_MESH_DEBUG qCInfo(graphics_scripting) << "qpointer_qobject_cast" << obj << value.toString(); #endif if (auto tmp = qobject_cast(obj)) { - out = QPointer(tmp); + //out = QPointer(tmp); + dest.template setValue(QPointer(tmp)); return true; } #if 0 @@ -356,7 +357,7 @@ namespace scriptable { return true; } #endif - out = nullptr; + //out = nullptr; return false; } ); @@ -676,13 +677,14 @@ namespace scriptable { engine, [](ScriptEngine* engine, const void* p) -> ScriptValue { Q_ASSERT(p != NULL); + // V8TODO: I'm not sure if this is safe const T& topology = *(reinterpret_cast(p)); return engine->newValue(instance.value(topology)); }, - [](const ScriptValue& value, void* p) -> bool { - Q_ASSERT(p != NULL); - T& topology = *(reinterpret_cast(p)); - topology = instance.key(value.toString()); + [](const ScriptValue& value, QVariant &dest) -> bool { + //Q_ASSERT(p != NULL); + //T& topology = *(reinterpret_cast(p)); + dest.setValue(instance.key(value.toString())); return true; } ); diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index 065337f0e7..bee7d21134 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -49,7 +49,7 @@ class ScriptEngine { public: typedef ScriptValue (*FunctionSignature)(ScriptContext*, ScriptEngine*); typedef ScriptValue (*MarshalFunction)(ScriptEngine*, const void*); - typedef bool (*DemarshalFunction)(const ScriptValue&, void*); + typedef bool (*DemarshalFunction)(const ScriptValue&, QVariant &dest); enum ValueOwnership { QtOwnership = 0, diff --git a/libraries/script-engine/src/ScriptEngineCast.h b/libraries/script-engine/src/ScriptEngineCast.h index 5f5b0bb689..e1b37273bd 100644 --- a/libraries/script-engine/src/ScriptEngineCast.h +++ b/libraries/script-engine/src/ScriptEngineCast.h @@ -76,10 +76,12 @@ ScriptValue toScriptValueWrapper(ScriptEngine* engine, const void *p) { } template -bool fromScriptValueWrapper(const ScriptValue& val, void* p) { - Q_ASSERT(p != NULL); - auto &dest = *(reinterpret_cast(p)); - return f(val, dest); +bool fromScriptValueWrapper(const ScriptValue& val, QVariant &destV) { + //auto &dest = *(reinterpret_cast(p)); + T dest; + bool result = f(val, dest); + destV.setValue(dest); + return result; } template @@ -101,7 +103,7 @@ int scriptRegisterMetaType(ScriptEngine* eng, const char* name = "", template int scriptRegisterMetaTypeWithLambdas(ScriptEngine* eng, ScriptValue (*toScriptValue)(ScriptEngine*, const void *), - bool (*fromScriptValue)(const ScriptValue&, void *), const char* name = "", + bool (*fromScriptValue)(const ScriptValue&, QVariant &dest), const char* name = "", T* = 0) { int id; diff --git a/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp b/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp index cf5512df8b..1d51439456 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp +++ b/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp @@ -344,9 +344,8 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de if (demarshalFunc) { dest = QVariant(destTypeId, static_cast(NULL)); ScriptValue wrappedVal(new ScriptValueV8Wrapper(this, v8Val)); - Q_ASSERT(dest.constData() != nullptr); - //V8TODO: Data should never be written to dest.constData() according to Qt documentation. - bool success = demarshalFunc(wrappedVal, const_cast(dest.constData())); + //Q_ASSERT(dest.constData() != nullptr); + bool success = demarshalFunc(wrappedVal, dest); if(!success) dest = QVariant(); return success; } else {