Showing the changes to libraries/script-engine/src/qtscript/ScriptValueQtWrapper.cpp (1 of 63 files). Show all
Unified · Split
| @@ -28,19 +28,27 @@ ScriptValueQtWrapper* ScriptValueQtWrapper::unwrap(const ScriptValue& val) { · 27 unmodified lines | |||
| 28 | QScriptValue ScriptValueQtWrapper::fullUnwrap(const ScriptValue& value) const { | 28 | QScriptValue ScriptValueQtWrapper::fullUnwrap(const ScriptValue& value) const { |
| 29 | ScriptValueQtWrapper* unwrapped = unwrap(value); | 29 | ScriptValueQtWrapper* unwrapped = unwrap(value); |
| 30 | if (unwrapped) { | 30 | if (unwrapped) { |
| 31 | return unwrapped->toQtValue(); | 31 | if (unwrapped->engine().get() != _engine) { |
| 32 | return static_cast<QScriptEngine*>(_engine)->toScriptValue(unwrapped->toVariant()); | ||
| 33 | } else { | ||
| 34 | return unwrapped->toQtValue(); | ||
| 35 | } | ||
| 32 | } | 36 | } |
| 33 | QVariant varValue = value.toVariant(); | 37 | QVariant varValue = value.toVariant(); |
| 34 | return static_cast<QScriptEngine*>(_engine)->newVariant(varValue); | 38 | return _engine->castVariantToValue(varValue); |
| 35 | } | 39 | } |
| 36 | 40 | ||
| 37 | QScriptValue ScriptValueQtWrapper::fullUnwrap(ScriptEngineQtScript* engine, const ScriptValue& value) { | 41 | QScriptValue ScriptValueQtWrapper::fullUnwrap(ScriptEngineQtScript* engine, const ScriptValue& value) { |
| 38 | ScriptValueQtWrapper* unwrapped = unwrap(value); | 42 | ScriptValueQtWrapper* unwrapped = unwrap(value); |
| 39 | if (unwrapped) { | 43 | if (unwrapped) { |
| 40 | return unwrapped->toQtValue(); | 44 | if (unwrapped->engine().get() != engine) { |
| 45 | return static_cast<QScriptEngine*>(engine)->toScriptValue(unwrapped->toVariant()); | ||
| 46 | } else { | ||
| 47 | return unwrapped->toQtValue(); | ||
| 48 | } | ||
| 41 | } | 49 | } |
| 42 | QVariant varValue = value.toVariant(); | 50 | QVariant varValue = value.toVariant(); |
| 43 | return static_cast<QScriptEngine*>(engine)->newVariant(varValue); | 51 | return engine->castVariantToValue(varValue); |
| 44 | } | 52 | } |
| 45 | 53 | ||
| 46 | ScriptValue ScriptValueQtWrapper::call(const ScriptValue& thisObject, const ScriptValueList& args) { | 54 | ScriptValue ScriptValueQtWrapper::call(const ScriptValue& thisObject, const ScriptValueList& args) { |
| @@ -157,11 +165,23 @@ quint32 ScriptValueQtWrapper::toUInt32() const { · 110 unmodified lines | |||
| 157 | } | 165 | } |
| 158 | 166 | ||
| 159 | QVariant ScriptValueQtWrapper::toVariant() const { | 167 | QVariant ScriptValueQtWrapper::toVariant() const { |
| 160 | return _value.toVariant(); | 168 | QVariant dest; |
| 169 | if (_engine->castValueToVariant(_value, dest, QMetaType::UnknownType)) { | ||
| 170 | return dest; | ||
| 171 | } else { | ||
| 172 | Q_ASSERT(false); | ||
| 173 | return QVariant(); | ||
| 174 | } | ||
| 161 | } | 175 | } |
| 162 | 176 | ||
| 163 | QObject* ScriptValueQtWrapper::toQObject() const { | 177 | QObject* ScriptValueQtWrapper::toQObject() const { |
| 164 | return _value.toQObject(); | 178 | QVariant dest; |
| 179 | if (_engine->castValueToVariant(_value, dest, QMetaType::QObjectStar)) { | ||
| 180 | return dest.value<QObject*>(); | ||
| 181 | } else { | ||
| 182 | Q_ASSERT(false); | ||
| 183 | return nullptr; | ||
| 184 | } | ||
| 165 | } | 185 | } |
| 166 | 186 | ||
| 167 | bool ScriptValueQtWrapper::equals(const ScriptValue& other) const { | 187 | bool ScriptValueQtWrapper::equals(const ScriptValue& other) const { |