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 | 28 | QScriptValue ScriptValueQtWrapper::fullUnwrap(const ScriptValue& value) const { |
| 29 | 29 | ScriptValueQtWrapper* unwrapped = unwrap(value); |
| 30 | 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 | 37 | QVariant varValue = value.toVariant(); |
| 34 | − return static_cast<QScriptEngine*>(_engine)->newVariant(varValue); | |
| 38 | + return _engine->castVariantToValue(varValue); | |
| 35 | 39 | } |
| 36 | 40 | |
| 37 | 41 | QScriptValue ScriptValueQtWrapper::fullUnwrap(ScriptEngineQtScript* engine, const ScriptValue& value) { |
| 38 | 42 | ScriptValueQtWrapper* unwrapped = unwrap(value); |
| 39 | 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 | 50 | QVariant varValue = value.toVariant(); |
| 43 | − return static_cast<QScriptEngine*>(engine)->newVariant(varValue); | |
| 51 | + return engine->castVariantToValue(varValue); | |
| 44 | 52 | } |
| 45 | 53 | |
| 46 | 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 | 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 | 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 | 187 | bool ScriptValueQtWrapper::equals(const ScriptValue& other) const { |