diff options
-rw-r--r-- | src/imports/localstorage/plugin.cpp | 6 | ||||
-rw-r--r-- | src/qml/jsapi/qjsengine.cpp | 9 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 14 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4variantobject.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlbinding.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlexpression.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlproperty.cpp | 6 | ||||
-rw-r--r-- | src/qml/qml/qqmlvaluetypewrapper.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlvmemetaobject.cpp | 4 | ||||
-rw-r--r-- | src/qml/qml/v8/qqmlbuiltinfunctions.cpp | 28 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8engine.cpp | 42 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8engine_p.h | 14 | ||||
-rw-r--r-- | src/qml/types/qqmldelegatemodel.cpp | 2 | ||||
-rw-r--r-- | src/qml/util/qqmladaptormodel.cpp | 6 | ||||
-rw-r--r-- | src/qmltest/quicktestresult.cpp | 5 | ||||
-rw-r--r-- | src/quick/items/context2d/qquickcontext2d.cpp | 14 | ||||
-rw-r--r-- | tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 2 |
17 files changed, 71 insertions, 89 deletions
diff --git a/src/imports/localstorage/plugin.cpp b/src/imports/localstorage/plugin.cpp index f40d37973a..17a27bf8e3 100644 --- a/src/imports/localstorage/plugin.cpp +++ b/src/imports/localstorage/plugin.cpp @@ -295,7 +295,7 @@ static ReturnedValue qmlsqldatabase_executeSql(CallContext *ctx) quint32 size = array->getLength(); QV4::ScopedValue v(scope); for (quint32 ii = 0; ii < size; ++ii) - query.bindValue(ii, engine->toVariant((v = array->getIndexed(ii)), -1)); + query.bindValue(ii, QV8Engine::toVariant(scope.engine, (v = array->getIndexed(ii)), -1)); } else if (values->asObject()) { ScopedObject object(scope, values); ObjectIterator it(scope, object, ObjectIterator::WithProtoChain|ObjectIterator::EnumerableOnly); @@ -305,7 +305,7 @@ static ReturnedValue qmlsqldatabase_executeSql(CallContext *ctx) key = it.nextPropertyName(val); if (key->isNull()) break; - QVariant v = engine->toVariant(val, -1); + QVariant v = QV8Engine::toVariant(scope.engine, val, -1); if (key->isString()) { query.bindValue(key->stringValue()->toQString(), v); } else { @@ -314,7 +314,7 @@ static ReturnedValue qmlsqldatabase_executeSql(CallContext *ctx) } } } else { - query.bindValue(0, engine->toVariant(values, -1)); + query.bindValue(0, QV8Engine::toVariant(scope.engine, values, -1)); } } if (query.exec()) { diff --git a/src/qml/jsapi/qjsengine.cpp b/src/qml/jsapi/qjsengine.cpp index 8525aedb6c..0a90be9cda 100644 --- a/src/qml/jsapi/qjsengine.cpp +++ b/src/qml/jsapi/qjsengine.cpp @@ -421,11 +421,10 @@ QJSValue QJSEngine::create(int type, const void *ptr) bool QJSEngine::convertV2(const QJSValue &value, int type, void *ptr) { QJSValuePrivate *vp = QJSValuePrivate::get(value); - QV8Engine *engine = vp->engine ? vp->engine->v8Engine : 0; - if (engine) { - QV4::Scope scope(engine->m_v4Engine); - QV4::ScopedValue v(scope, vp->getValue(engine->m_v4Engine)); - return engine->metaTypeFromJS(v, type, ptr); + if (vp->engine) { + QV4::Scope scope(vp->engine); + QV4::ScopedValue v(scope, vp->getValue(scope.engine)); + return QV8Engine::metaTypeFromJS(scope.engine, v, type, ptr); } else if (vp->value.isEmpty()) { if (vp->unboundData.userType() == QMetaType::QString) { QString string = vp->unboundData.toString(); diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 5ade6e1299..8235f871db 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -550,9 +550,9 @@ void QObjectWrapper::setProperty(QObject *object, ExecutionContext *ctx, QQmlPro } else { QVariant v; if (property->isQList()) - v = ctx->d()->engine->v8Engine->toVariant(value, qMetaTypeId<QList<QObject *> >()); + v = QV8Engine::toVariant(ctx->d()->engine, value, qMetaTypeId<QList<QObject *> >()); else - v = ctx->d()->engine->v8Engine->toVariant(value, property->propType); + v = QV8Engine::toVariant(ctx->d()->engine, value, property->propType); QQmlContextData *callingQmlContext = QV4::QmlContextWrapper::callingContext(ctx->d()->engine); if (!QQmlPropertyPrivate::write(object, *property, v, callingQmlContext)) { @@ -1268,12 +1268,10 @@ static int MatchScore(const QV4::ValueRef actual, int conversionType) } } } else if (QV4::Object *obj = actual->asObject()) { - QV8Engine *engine = obj->engine()->v8Engine; - if (obj->as<QV4::VariantObject>()) { if (conversionType == qMetaTypeId<QVariant>()) return 0; - if (engine->toVariant(actual, -1).userType() == conversionType) + if (QV8Engine::toVariant(obj->engine(), actual, -1).userType() == conversionType) return 0; else return 10; @@ -1289,7 +1287,7 @@ static int MatchScore(const QV4::ValueRef actual, int conversionType) } if (obj->as<QV4::QQmlValueTypeWrapper>()) { - if (engine->toVariant(actual, -1).userType() == conversionType) + if (QV8Engine::toVariant(obj->engine(), actual, -1).userType() == conversionType) return 0; return 10; } else if (conversionType == QMetaType::QJsonObject) { @@ -1606,7 +1604,7 @@ void CallArgument::fromValue(int callType, QV8Engine *engine, const QV4::ValueRe queryEngine = qmlTypeWrapper->isSingleton(); type = callType; } else if (callType == qMetaTypeId<QVariant>()) { - qvariantPtr = new (&allocData) QVariant(engine->toVariant(value, -1)); + qvariantPtr = new (&allocData) QVariant(QV8Engine::toVariant(scope.engine, value, -1)); type = callType; } else if (callType == qMetaTypeId<QList<QObject*> >()) { qlistPtr = new (&allocData) QList<QObject *>(); @@ -1654,7 +1652,7 @@ void CallArgument::fromValue(int callType, QV8Engine *engine, const QV4::ValueRe type = -1; QQmlEnginePrivate *ep = engine->engine() ? QQmlEnginePrivate::get(engine->engine()) : 0; - QVariant v = engine->toVariant(value, callType); + QVariant v = QV8Engine::toVariant(scope.engine, value, callType); if (v.userType() == callType) { *qvariantPtr = v; diff --git a/src/qml/jsruntime/qv4variantobject.cpp b/src/qml/jsruntime/qv4variantobject.cpp index efd0452a18..4ed9162dbb 100644 --- a/src/qml/jsruntime/qv4variantobject.cpp +++ b/src/qml/jsruntime/qv4variantobject.cpp @@ -54,7 +54,7 @@ Heap::VariantObject::VariantObject(QV4::ExecutionEngine *engine, const QVariant QVariant VariantObject::toVariant(const QV4::ValueRef v) { if (v->asObject()) - return v->engine()->v8Engine->toVariant(v, /*typeHint*/ -1, /*createJSValueForObjects*/ false); + return QV8Engine::toVariant(v->engine(), v, /*typeHint*/ -1, /*createJSValueForObjects*/ false); if (v->isString()) return QVariant(v->stringValue()->toQString()); diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp index 9589ec63cb..a4e614f934 100644 --- a/src/qml/qml/qqmlbinding.cpp +++ b/src/qml/qml/qqmlbinding.cpp @@ -260,7 +260,7 @@ QVariant QQmlBinding::evaluate() ep->dereferenceScarceResources(); - return ep->v8engine()->toVariant(result, qMetaTypeId<QList<QObject*> >()); + return QV8Engine::toVariant(scope.engine, result, qMetaTypeId<QList<QObject*> >()); } QString QQmlBinding::expressionIdentifier(QQmlJavaScriptExpression *e) diff --git a/src/qml/qml/qqmlexpression.cpp b/src/qml/qml/qqmlexpression.cpp index 8c7c31d86c..a99ecde0e9 100644 --- a/src/qml/qml/qqmlexpression.cpp +++ b/src/qml/qml/qqmlexpression.cpp @@ -276,7 +276,7 @@ QVariant QQmlExpressionPrivate::value(bool *isUndefined) QV4::Scope scope(QV8Engine::getV4(ep->v8engine())); QV4::ScopedValue result(scope, v4value(isUndefined)); if (!hasError()) - rv = ep->v8engine()->toVariant(result, -1); + rv = QV8Engine::toVariant(scope.engine, result, -1); } ep->dereferenceScarceResources(); // "release" scarce resources if top-level expression evaluation is complete. diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index b85208322a..32114254e8 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -1513,13 +1513,13 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object, if (isUndefined) { } else if (core.isQList()) { - value = v8engine->toVariant(result, qMetaTypeId<QList<QObject *> >()); + value = QV8Engine::toVariant(QV8Engine::getV4(v8engine), result, qMetaTypeId<QList<QObject *> >()); } else if (result->isNull() && core.isQObject()) { value = QVariant::fromValue((QObject *)0); } else if (core.propType == qMetaTypeId<QList<QUrl> >()) { - value = resolvedUrlSequence(v8engine->toVariant(result, qMetaTypeId<QList<QUrl> >()), context); + value = resolvedUrlSequence(QV8Engine::toVariant(QV8Engine::getV4(v8engine), result, qMetaTypeId<QList<QUrl> >()), context); } else if (!isVarProperty && type != qMetaTypeId<QJSValue>()) { - value = v8engine->toVariant(result, type); + value = QV8Engine::toVariant(QV8Engine::getV4(v8engine), result, type); } if (expression->hasError()) { diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index 00b206f0dc..19160fa94b 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -396,7 +396,7 @@ void QQmlValueTypeWrapper::put(Managed *m, String *name, const ValueRef value) if (newBinding) return; - QVariant v = v4->v8Engine->toVariant(value, property.userType()); + QVariant v = QV8Engine::toVariant(v4, value, property.userType()); if (property.isEnumType() && (QMetaType::Type)v.type() == QMetaType::Double) v = v.toInt(); diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp index 622e05fe7c..e75ccb5a66 100644 --- a/src/qml/qml/qqmlvmemetaobject.cpp +++ b/src/qml/qml/qqmlvmemetaobject.cpp @@ -955,7 +955,7 @@ int QQmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) ep->warning(error); if (a[0]) *(QVariant *)a[0] = QVariant(); } else { - if (a[0]) *(QVariant *)a[0] = ep->v8engine()->toVariant(result, 0); + if (a[0]) *(QVariant *)a[0] = QV8Engine::toVariant(scope.engine, result, 0); } ep->dereferenceScarceResources(); // "release" scarce resources if top-level expression evaluation is complete. @@ -1004,7 +1004,7 @@ QVariant QQmlVMEMetaObject::readPropertyAsVariant(int id) QV4::Scope scope(v4); QV4::ScopedObject o(scope, varProperties.value()); QV4::ScopedValue val(scope, o->getIndexed(id - firstVarPropertyIndex)); - return v4->v8Engine->toVariant(val, -1); + return QV8Engine::toVariant(scope.engine, val, -1); } return QVariant(); } else { diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index 8485576477..4bfcb879e6 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -230,9 +230,7 @@ ReturnedValue QtObject::method_colorEqual(QV4::CallContext *ctx) bool ok = false; - QV8Engine *v8engine = ctx->d()->engine->v8Engine; - - QVariant lhs = v8engine->toVariant(ctx->d()->callData->args[0], -1); + QVariant lhs = QV8Engine::toVariant(ctx->d()->engine, ctx->d()->callData->args[0], -1); if (lhs.userType() == QVariant::String) { lhs = QQmlStringConverters::colorFromString(lhs.toString(), &ok); if (!ok) { @@ -242,7 +240,7 @@ ReturnedValue QtObject::method_colorEqual(QV4::CallContext *ctx) V4THROW_ERROR("Qt.colorEqual(): Invalid arguments"); } - QVariant rhs = v8engine->toVariant(ctx->d()->callData->args[1], -1); + QVariant rhs = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[1], -1); if (rhs.userType() == QVariant::String) { rhs = QQmlStringConverters::colorFromString(rhs.toString(), &ok); if (!ok) { @@ -470,7 +468,7 @@ ReturnedValue QtObject::method_lighter(QV4::CallContext *ctx) V4THROW_ERROR("Qt.lighter(): Invalid arguments"); QV8Engine *v8engine = ctx->d()->engine->v8Engine; - QVariant v = v8engine->toVariant(ctx->d()->callData->args[0], -1); + QVariant v = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[0], -1); if (v.userType() == QVariant::String) { bool ok = false; v = QQmlStringConverters::colorFromString(v.toString(), &ok); @@ -509,7 +507,7 @@ ReturnedValue QtObject::method_darker(QV4::CallContext *ctx) V4THROW_ERROR("Qt.darker(): Invalid arguments"); QV8Engine *v8engine = ctx->d()->engine->v8Engine; - QVariant v = v8engine->toVariant(ctx->d()->callData->args[0], -1); + QVariant v = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[0], -1); if (v.userType() == QVariant::String) { bool ok = false; v = QQmlStringConverters::colorFromString(v.toString(), &ok); @@ -559,7 +557,7 @@ ReturnedValue QtObject::method_tint(QV4::CallContext *ctx) QV8Engine *v8engine = ctx->d()->engine->v8Engine; // base color - QVariant v1 = v8engine->toVariant(ctx->d()->callData->args[0], -1); + QVariant v1 = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[0], -1); if (v1.userType() == QVariant::String) { bool ok = false; v1 = QQmlStringConverters::colorFromString(v1.toString(), &ok); @@ -571,7 +569,7 @@ ReturnedValue QtObject::method_tint(QV4::CallContext *ctx) } // tint color - QVariant v2 = v8engine->toVariant(ctx->d()->callData->args[1], -1); + QVariant v2 = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[1], -1); if (v2.userType() == QVariant::String) { bool ok = false; v2 = QQmlStringConverters::colorFromString(v2.toString(), &ok); @@ -607,10 +605,8 @@ ReturnedValue QtObject::method_formatDate(QV4::CallContext *ctx) V4THROW_ERROR("Qt.formatDate(): Invalid arguments"); QV4::Scope scope(ctx); - QV8Engine *v8engine = ctx->d()->engine->v8Engine; - Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate; - QDate date = v8engine->toVariant(ctx->d()->callData->args[0], -1).toDateTime().date(); + QDate date = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[0], -1).toDateTime().date(); QString formattedDate; if (ctx->d()->callData->argc == 2) { QV4::ScopedString s(scope, ctx->d()->callData->args[1]); @@ -652,9 +648,7 @@ ReturnedValue QtObject::method_formatTime(QV4::CallContext *ctx) V4THROW_ERROR("Qt.formatTime(): Invalid arguments"); QV4::Scope scope(ctx); - QV8Engine *v8engine = ctx->d()->engine->v8Engine; - - QVariant argVariant = v8engine->toVariant(ctx->d()->callData->args[0], -1); + QVariant argVariant = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[0], -1); QTime time; if (ctx->d()->callData->args[0].asDateObject() || (argVariant.type() == QVariant::String)) time = argVariant.toDateTime().time(); @@ -778,10 +772,8 @@ ReturnedValue QtObject::method_formatDateTime(QV4::CallContext *ctx) V4THROW_ERROR("Qt.formatDateTime(): Invalid arguments"); QV4::Scope scope(ctx); - QV8Engine *v8engine = ctx->d()->engine->v8Engine; - Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate; - QDateTime dt = v8engine->toVariant(ctx->d()->callData->args[0], -1).toDateTime(); + QDateTime dt = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[0], -1).toDateTime(); QString formattedDt; if (ctx->d()->callData->argc == 2) { QV4::ScopedString s(scope, ctx->d()->callData->args[1]); @@ -825,7 +817,7 @@ ReturnedValue QtObject::method_resolvedUrl(QV4::CallContext *ctx) { QV8Engine *v8engine = ctx->d()->engine->v8Engine; - QUrl url = v8engine->toVariant(ctx->d()->callData->args[0], -1).toUrl(); + QUrl url = QV8Engine::toVariant(ctx->engine(), ctx->d()->callData->args[0], -1).toUrl(); QQmlEngine *e = v8engine->engine(); QQmlEnginePrivate *p = 0; if (e) p = QQmlEnginePrivate::get(e); diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index 0a309c2775..d4ceaad351 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -160,10 +160,10 @@ QV8Engine::~QV8Engine() delete m_v4Engine; } -QVariant QV8Engine::toVariant(const QV4::ValueRef value, int typeHint, bool createJSValueForObjects, V8ObjectSet *visitedObjects) +QVariant QV8Engine::toVariant(QV4::ExecutionEngine *e, const QV4::ValueRef value, int typeHint, bool createJSValueForObjects, V8ObjectSet *visitedObjects) { Q_ASSERT (!value->isEmpty()); - QV4::Scope scope(m_v4Engine); + QV4::Scope scope(e); if (QV4::VariantObject *v = value->as<QV4::VariantObject>()) return v->d()->data; @@ -175,7 +175,7 @@ QVariant QV8Engine::toVariant(const QV4::ValueRef value, int typeHint, bool crea return QVariant::fromValue(QV4::JsonObject::toJsonValue(value)); if (typeHint == qMetaTypeId<QJSValue>()) - return QVariant::fromValue(QJSValue(new QJSValuePrivate(m_v4Engine, value))); + return QVariant::fromValue(QJSValue(new QJSValuePrivate(e, value))); if (value->asObject()) { QV4::ScopedObject object(scope, value); @@ -249,10 +249,10 @@ QVariant QV8Engine::toVariant(const QV4::ValueRef value, int typeHint, bool crea if (createJSValueForObjects) return QVariant::fromValue(QJSValue(new QJSValuePrivate(o->asReturnedValue()))); - return objectToVariant(o, visitedObjects); + return objectToVariant(e, o, visitedObjects); } -QVariant QV8Engine::objectToVariant(QV4::Object *o, V8ObjectSet *visitedObjects) +QVariant QV8Engine::objectToVariant(QV4::ExecutionEngine *e, QV4::Object *o, V8ObjectSet *visitedObjects) { Q_ASSERT(o); @@ -272,7 +272,7 @@ QVariant QV8Engine::objectToVariant(QV4::Object *o, V8ObjectSet *visitedObjects) QVariant result; if (o->asArrayObject()) { - QV4::Scope scope(m_v4Engine); + QV4::Scope scope(e); QV4::ScopedArrayObject a(scope, o->asReturnedValue()); QV4::ScopedValue v(scope); QVariantList list; @@ -280,13 +280,13 @@ QVariant QV8Engine::objectToVariant(QV4::Object *o, V8ObjectSet *visitedObjects) int length = a->getLength(); for (int ii = 0; ii < length; ++ii) { v = a->getIndexed(ii); - list << toVariant(v, -1, /*createJSValueForObjects*/false, visitedObjects); + list << toVariant(e, v, -1, /*createJSValueForObjects*/false, visitedObjects); } result = list; } else if (!o->asFunctionObject()) { QVariantMap map; - QV4::Scope scope(m_v4Engine); + QV4::Scope scope(e); QV4::ObjectIterator it(scope, o, QV4::ObjectIterator::EnumerableOnly); QV4::ScopedValue name(scope); QV4::ScopedValue val(scope); @@ -296,7 +296,7 @@ QVariant QV8Engine::objectToVariant(QV4::Object *o, V8ObjectSet *visitedObjects) break; QString key = name->toQStringNoThrow(); - map.insert(key, toVariant(val, /*type hint*/-1, /*createJSValueForObjects*/false, visitedObjects)); + map.insert(key, toVariant(e, val, /*type hint*/-1, /*createJSValueForObjects*/false, visitedObjects)); } result = map; @@ -717,9 +717,9 @@ QV4::ReturnedValue QV8Engine::metaTypeToJS(int type, const void *data) // Converts a JS value to a meta-type. // data must point to a place that can store a value of the given type. // Returns true if conversion succeeded, false otherwise. -bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) +bool QV8Engine::metaTypeFromJS(QV4::ExecutionEngine *engine, const QV4::ValueRef value, int type, void *data) { - QV4::Scope scope(QV8Engine::getV4(this)); + QV4::Scope scope(engine); // check if it's one of the types we know switch (QMetaType::Type(type)) { @@ -788,7 +788,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) case QMetaType::QObjectStar: { QV4::QObjectWrapper *qobjectWrapper = value->as<QV4::QObjectWrapper>(); if (qobjectWrapper || value->isNull()) { - *reinterpret_cast<QObject* *>(data) = qtObjectFromJS(value); + *reinterpret_cast<QObject* *>(data) = qtObjectFromJS(scope.engine, value); return true; } break; } @@ -803,7 +803,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) case QMetaType::QVariantList: { QV4::ScopedArrayObject a(scope, value); if (a) { - *reinterpret_cast<QVariantList *>(data) = toVariant(a, /*typeHint*/-1, /*createJSValueForObjects*/false).toList(); + *reinterpret_cast<QVariantList *>(data) = toVariant(scope.engine, a, /*typeHint*/-1, /*createJSValueForObjects*/false).toList(); return true; } break; @@ -817,7 +817,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) break; } case QMetaType::QVariant: - *reinterpret_cast<QVariant*>(data) = toVariant(value, /*typeHint*/-1, /*createJSValueForObjects*/false); + *reinterpret_cast<QVariant*>(data) = toVariant(scope.engine, value, /*typeHint*/-1, /*createJSValueForObjects*/false); return true; case QMetaType::QJsonValue: *reinterpret_cast<QJsonValue *>(data) = QV4::JsonObject::toJsonValue(value); @@ -869,7 +869,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) // Try to use magic; for compatibility with qscriptvalue_cast. QByteArray name = QMetaType::typeName(type); - if (convertToNativeQObject(value, name, reinterpret_cast<void* *>(data))) + if (convertToNativeQObject(engine, value, name, reinterpret_cast<void* *>(data))) return true; if (value->as<QV4::VariantObject>() && name.endsWith('*')) { int valueType = QMetaType::type(name.left(name.size()-1)); @@ -890,7 +890,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) else if (proto->as<QV4::QObjectWrapper>()) { QByteArray className = name.left(name.size()-1); QV4::ScopedObject p(scope, proto.getPointer()); - if (QObject *qobject = qtObjectFromJS(p)) + if (QObject *qobject = qtObjectFromJS(scope.engine, p)) canCast = qobject->qt_metacast(className) != 0; } if (canCast) { @@ -908,7 +908,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) *reinterpret_cast<void* *>(data) = 0; return true; } else if (type == qMetaTypeId<QJSValue>()) { - *reinterpret_cast<QJSValue*>(data) = QJSValuePrivate::get(new QJSValuePrivate(m_v4Engine, value)); + *reinterpret_cast<QJSValue*>(data) = QJSValuePrivate::get(new QJSValuePrivate(engine, value)); return true; } @@ -921,11 +921,11 @@ QV4::ReturnedValue QV8Engine::variantToJS(const QVariant &value) return metaTypeToJS(value.userType(), value.constData()); } -bool QV8Engine::convertToNativeQObject(const QV4::ValueRef value, const QByteArray &targetType, void **result) +bool QV8Engine::convertToNativeQObject(QV4::ExecutionEngine *e, const QV4::ValueRef value, const QByteArray &targetType, void **result) { if (!targetType.endsWith('*')) return false; - if (QObject *qobject = qtObjectFromJS(value)) { + if (QObject *qobject = qtObjectFromJS(e, value)) { int start = targetType.startsWith("const ") ? 6 : 0; QByteArray className = targetType.mid(start, targetType.size()-start-1); if (void *instance = qobject->qt_metacast(className)) { @@ -936,12 +936,12 @@ bool QV8Engine::convertToNativeQObject(const QV4::ValueRef value, const QByteArr return false; } -QObject *QV8Engine::qtObjectFromJS(const QV4::ValueRef value) +QObject *QV8Engine::qtObjectFromJS(QV4::ExecutionEngine *engine, const QV4::ValueRef value) { if (!value->isObject()) return 0; - QV4::Scope scope(m_v4Engine); + QV4::Scope scope(engine); QV4::Scoped<QV4::VariantObject> v(scope, value); if (v) { diff --git a/src/qml/qml/v8/qv8engine_p.h b/src/qml/qml/v8/qv8engine_p.h index 18b59f0157..b63a052bb7 100644 --- a/src/qml/qml/v8/qv8engine_p.h +++ b/src/qml/qml/v8/qv8engine_p.h @@ -197,12 +197,12 @@ public: void freezeObject(const QV4::ValueRef value); - QVariant toVariant(const QV4::ValueRef value, int typeHint, bool createJSValueForObjects = true, V8ObjectSet *visitedObjects = 0); - QVariant objectToVariant(QV4::Object *o, V8ObjectSet *visitedObjects = 0); + static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::ValueRef value, int typeHint, bool createJSValueForObjects = true, V8ObjectSet *visitedObjects = 0); + static QVariant objectToVariant(QV4::ExecutionEngine *e, QV4::Object *o, V8ObjectSet *visitedObjects = 0); QV4::ReturnedValue fromVariant(const QVariant &); - QVariantMap variantMapFromJS(QV4::Object *o) - { return objectToVariant(o).toMap(); } + static QVariantMap variantMapFromJS(QV4::Object *o) + { return objectToVariant(o->engine(), o).toMap(); } // Return a JS string for the given QString \a string QV4::ReturnedValue toString(const QString &string); @@ -226,9 +226,9 @@ public: QV4::ReturnedValue variantToJS(const QVariant &value); QV4::ReturnedValue metaTypeToJS(int type, const void *data); - bool metaTypeFromJS(const QV4::ValueRef value, int type, void *data); + static bool metaTypeFromJS(QV4::ExecutionEngine *e, const QV4::ValueRef value, int type, void *data); - bool convertToNativeQObject(const QV4::ValueRef value, + static bool convertToNativeQObject(QV4::ExecutionEngine *e, const QV4::ValueRef value, const QByteArray &targetType, void **result); @@ -239,7 +239,7 @@ public: // used for console.count() int consoleCountHelper(const QString &file, quint16 line, quint16 column); - QObject *qtObjectFromJS(const QV4::ValueRef value); + static QObject *qtObjectFromJS(QV4::ExecutionEngine *engine, const QV4::ValueRef value); protected: QJSEngine* q; diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp index 919f926bc2..d72ac4227c 100644 --- a/src/qml/types/qqmldelegatemodel.cpp +++ b/src/qml/types/qqmldelegatemodel.cpp @@ -1646,7 +1646,7 @@ bool QQmlDelegateModelPrivate::insert(Compositor::insert_iterator &before, const propertyName = it.nextPropertyNameAsString(v); if (propertyName->isNull()) break; - cacheItem->setValue(propertyName->toQStringNoThrow(), m_cacheMetaType->v8Engine->toVariant(v, QVariant::Invalid)); + cacheItem->setValue(propertyName->toQStringNoThrow(), QV8Engine::toVariant(scope.engine, v, QVariant::Invalid)); } cacheItem->groups = groups | Compositor::UnresolvedFlag | Compositor::CacheFlag; diff --git a/src/qml/util/qqmladaptormodel.cpp b/src/qml/util/qqmladaptormodel.cpp index 5c60487574..45c89631b1 100644 --- a/src/qml/util/qqmladaptormodel.cpp +++ b/src/qml/util/qqmladaptormodel.cpp @@ -368,10 +368,10 @@ QV4::ReturnedValue QQmlDMCachedModelData::set_property(QV4::CallContext *ctx, ui QQmlDMCachedModelData *modelData = static_cast<QQmlDMCachedModelData *>(o->d()->item); if (!modelData->cachedData.isEmpty()) { if (modelData->cachedData.count() > 1) { - modelData->cachedData[propertyId] = scope.engine->v8Engine->toVariant(ctx->d()->callData->args[0], QVariant::Invalid); + modelData->cachedData[propertyId] = QV8Engine::toVariant(scope.engine, ctx->d()->callData->args[0], QVariant::Invalid); QMetaObject::activate(o->d()->item, o->d()->item->metaObject(), propertyId, 0); } else if (modelData->cachedData.count() == 1) { - modelData->cachedData[0] = scope.engine->v8Engine->toVariant(ctx->d()->callData->args[0], QVariant::Invalid); + modelData->cachedData[0] = QV8Engine::toVariant(scope.engine, ctx->d()->callData->args[0], QVariant::Invalid); QMetaObject::activate(o->d()->item, o->d()->item->metaObject(), 0, 0); QMetaObject::activate(o->d()->item, o->d()->item->metaObject(), 1, 0); } @@ -596,7 +596,7 @@ public: if (!ctx->d()->callData->argc) return ctx->engine()->throwTypeError(); - static_cast<QQmlDMListAccessorData *>(o->d()->item)->setModelData(scope.engine->v8Engine->toVariant(ctx->d()->callData->args[0], QVariant::Invalid)); + static_cast<QQmlDMListAccessorData *>(o->d()->item)->setModelData(QV8Engine::toVariant(scope.engine, ctx->d()->callData->args[0], QVariant::Invalid)); return QV4::Encode::undefined(); } diff --git a/src/qmltest/quicktestresult.cpp b/src/qmltest/quicktestresult.cpp index 868a378318..6e64979385 100644 --- a/src/qmltest/quicktestresult.cpp +++ b/src/qmltest/quicktestresult.cpp @@ -475,13 +475,12 @@ void QuickTestResult::stringify(QQmlV4Function *args) QV4::ScopedValue value(scope, (*args)[0]); QString result; - QV8Engine *engine = args->engine(); //Check for Object Type if (value->isObject() && !value->asFunctionObject() && !value->asArrayObject()) { - QVariant v = engine->toVariant(value, QMetaType::UnknownType); + QVariant v = QV8Engine::toVariant(scope.engine, value, QMetaType::UnknownType); if (v.isValid()) { switch (v.type()) { case QVariant::Vector3D: @@ -505,7 +504,7 @@ void QuickTestResult::stringify(QQmlV4Function *args) result.append(tmp); } - args->setReturnValue(args->engine()->toString(result)); + args->setReturnValue(args->v4engine()->v8Engine->toString(result)); } bool QuickTestResult::compare diff --git a/src/quick/items/context2d/qquickcontext2d.cpp b/src/quick/items/context2d/qquickcontext2d.cpp index 77f75d796d..d8e45305cf 100644 --- a/src/quick/items/context2d/qquickcontext2d.cpp +++ b/src/quick/items/context2d/qquickcontext2d.cpp @@ -1385,10 +1385,9 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_fillStyle(QV4::CallContext *ctx CHECK_CONTEXT_SETTER(r) QV4::ScopedValue value(scope, ctx->argument(0)); - QV8Engine *engine = scope.engine->v8Engine; if (value->asObject()) { - QColor color = engine->toVariant(value, qMetaTypeId<QColor>()).value<QColor>(); + QColor color = QV8Engine::toVariant(scope.engine, value, qMetaTypeId<QColor>()).value<QColor>(); if (color.isValid()) { r->d()->context->state.fillStyle = color; r->d()->context->buffer()->setFillStyle(color); @@ -1495,11 +1494,10 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_strokeStyle(QV4::CallContext *c QV4::Scoped<QQuickJSContext2D> r(scope, ctx->d()->callData->thisObject.as<QQuickJSContext2D>()); CHECK_CONTEXT_SETTER(r) - QV8Engine *engine = scope.engine->v8Engine; QV4::ScopedValue value(scope, ctx->argument(0)); if (value->asObject()) { - QColor color = engine->toVariant(value, qMetaTypeId<QColor>()).value<QColor>(); + QColor color = QV8Engine::toVariant(scope.engine, value, qMetaTypeId<QColor>()).value<QColor>(); if (color.isValid()) { r->d()->context->state.fillStyle = color; r->d()->context->buffer()->setStrokeStyle(color); @@ -1724,12 +1722,10 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createPattern(QV4::CallCon QV4::Scoped<QQuickJSContext2D> r(scope, ctx->d()->callData->thisObject); CHECK_CONTEXT(r) - QV8Engine *engine = scope.engine->v8Engine; - if (ctx->d()->callData->argc >= 2) { QV4::Scoped<QQuickContext2DStyle> pattern(scope, scope.engine->memoryManager->alloc<QQuickContext2DStyle>(scope.engine)); - QColor color = engine->toVariant(ctx->d()->callData->args[0], qMetaTypeId<QColor>()).value<QColor>(); + QColor color = QV8Engine::toVariant(scope.engine, ctx->d()->callData->args[0], qMetaTypeId<QColor>()).value<QColor>(); if (color.isValid()) { int patternMode = ctx->d()->callData->args[1].toInt32(); Qt::BrushStyle style = Qt::SolidPattern; @@ -3373,8 +3369,6 @@ QV4::ReturnedValue QQuickContext2DStyle::gradient_proto_addColorStop(QV4::CallCo if (!style) V4THROW_ERROR("Not a CanvasGradient object"); - QV8Engine *engine = scope.engine->v8Engine; - if (ctx->d()->callData->argc == 2) { if (!style->d()->brush.gradient()) @@ -3384,7 +3378,7 @@ QV4::ReturnedValue QQuickContext2DStyle::gradient_proto_addColorStop(QV4::CallCo QColor color; if (ctx->d()->callData->args[1].asObject()) { - color = engine->toVariant(ctx->d()->callData->args[1], qMetaTypeId<QColor>()).value<QColor>(); + color = QV8Engine::toVariant(scope.engine, ctx->d()->callData->args[1], qMetaTypeId<QColor>()).value<QColor>(); } else { color = qt_color_from_string(ctx->d()->callData->args[1]); } diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index b816edda6b..8627c3d1ec 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -2464,7 +2464,7 @@ void tst_qqmlecmascript::callQtInvokables() { QV4::ScopedValue ret(scope, EVALUATE("object.method_NoArgs_QPointF()")); QVERIFY(!ret->isUndefined()); - QCOMPARE(engine->toVariant(ret, -1), QVariant(QPointF(123, 4.5))); + QCOMPARE(QV8Engine::toVariant(scope.engine, ret, -1), QVariant(QPointF(123, 4.5))); QCOMPARE(o->error(), false); QCOMPARE(o->invoked(), 3); QCOMPARE(o->actuals().count(), 0); |