From b00c1ae91b5758a3d961063f073f6878dcdbea03 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Fri, 19 Aug 2022 15:41:03 +0200 Subject: [PATCH] Fixes to scripting-related warnings (lambdas) --- .../GraphicsScriptingInterface.cpp | 26 +++++++++---------- .../script-engine/src/ScriptEngineCast.h | 21 ++++++++++++++- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp index efd85b657e..e3afc41a86 100644 --- a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp +++ b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp @@ -328,13 +328,17 @@ namespace scriptable { scriptRegisterSequenceMetaType>>(engine); return scriptRegisterMetaTypeWithLambdas>( engine, - [](ScriptEngine* engine, const QPointer& object) -> ScriptValue { + [](ScriptEngine* engine, const void* p) -> ScriptValue { + Q_ASSERT(p != NULL); + const QPointer& object = *(reinterpret_cast* >(p)); if (!object) { return engine->nullValue(); } return engine->newQObject(object, ScriptEngine::QtOwnership, ScriptEngine::AutoCreateDynamicProperties); }, - [](const ScriptValue& value, QPointer& out) -> bool { + [](const ScriptValue& value, void* p) -> 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(); @@ -670,24 +674,18 @@ namespace scriptable { static const DebugEnums& instance = debugEnums; return scriptRegisterMetaTypeWithLambdas( engine, - [](ScriptEngine* engine, const T& topology) -> ScriptValue { + [](ScriptEngine* engine, const void* p) -> ScriptValue { + Q_ASSERT(p != NULL); + const T& topology = *(reinterpret_cast(p)); return engine->newValue(instance.value(topology)); }, - [](const ScriptValue& value, T& topology) -> bool { + [](const ScriptValue& value, void* p) -> bool { + Q_ASSERT(p != NULL); + T& topology = *(reinterpret_cast(p)); topology = instance.key(value.toString()); return true; } ); - //return scriptRegisterMetaType( - // engine, - // [](ScriptEngine* engine, const T& topology) -> ScriptValue { - // return engine->newValue(instance.value(topology)); - // }, - // [](const ScriptValue& value, T& topology) -> bool { - // topology = instance.key(value.toString()); - // return true; - // } - //); } } diff --git a/libraries/script-engine/src/ScriptEngineCast.h b/libraries/script-engine/src/ScriptEngineCast.h index f8ca6c411a..a83ac7e8ec 100644 --- a/libraries/script-engine/src/ScriptEngineCast.h +++ b/libraries/script-engine/src/ScriptEngineCast.h @@ -97,6 +97,25 @@ int scriptRegisterMetaType(ScriptEngine* eng, const char* name = "", return id; } +// This can be safely removed and replaced with scriptRegisterMetaType once we use C++20 everywhere +template +int scriptRegisterMetaTypeWithLambdas(ScriptEngine* eng, + ScriptValue (*toScriptValue)(ScriptEngine*, const void *), + bool (*fromScriptValue)(const ScriptValue&, void *), const char* name = "", + T* = 0) +{ + int id; + if (strlen(name) > 0) { // make sure it's registered + id = qRegisterMetaType(name); + } else { + id = qRegisterMetaType(); + } + eng->registerCustomType(id, toScriptValue, + fromScriptValue); + return id; +} + +/* template int scriptRegisterMetaTypeWithLambdas(ScriptEngine* eng, ScriptValue (*toScriptValue)(ScriptEngine*, const T& t), @@ -112,7 +131,7 @@ int scriptRegisterMetaTypeWithLambdas(ScriptEngine* eng, eng->registerCustomType(id, reinterpret_cast(toScriptValue), reinterpret_cast(fromScriptValue)); return id; -} +}*/ template ScriptValue scriptValueFromSequence(ScriptEngine* eng, const Container& cont) {