diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-05-31 13:39:15 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-05-31 15:48:41 +0200 |
commit | 976051c491c9a79e5c34b97a0e3a37350a7c557c (patch) | |
tree | 261c9d9d15674e524ceea25bb7a65813e32431db /src | |
parent | e14b9dbee1260f799d1d2e175d106dbed79b6c49 (diff) |
Move Variant and QtObject over to new casting scheme
Change-Id: Ie9e5e40b4bea4d4379dc9bdd103852c32d6ae478
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqmlvaluetypewrapper.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlvmemetaobject.cpp | 8 | ||||
-rw-r--r-- | src/qml/qml/v4/qv4managed_p.h | 5 | ||||
-rw-r--r-- | src/qml/qml/v4/qv4value_p.h | 10 | ||||
-rw-r--r-- | src/qml/qml/v4/qv4variantobject.cpp | 15 | ||||
-rw-r--r-- | src/qml/qml/v4/qv4variantobject_p.h | 7 | ||||
-rw-r--r-- | src/qml/qml/v8/qjsvalue.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/v8/qqmlbuiltinfunctions.cpp | 8 | ||||
-rw-r--r-- | src/qml/qml/v8/qqmlbuiltinfunctions_p.h | 1 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8engine.cpp | 12 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8qobjectwrapper.cpp | 2 |
11 files changed, 33 insertions, 39 deletions
diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index 03e4639ae8..8248e479ec 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -194,7 +194,7 @@ bool QmlValueTypeWrapper::isEqualTo(Managed *m, Managed *other) QV4::QmlValueTypeWrapper *lv = m->as<QmlValueTypeWrapper>(); assert(lv); - if (QV4::VariantObject *rv = other->asVariantObject()) + if (QV4::VariantObject *rv = other->as<VariantObject>()) return lv->isEqual(rv->data); if (QV4::QmlValueTypeWrapper *v = other->as<QmlValueTypeWrapper>()) diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp index 09edd3af89..28e4c64f31 100644 --- a/src/qml/qml/qqmlvmemetaobject.cpp +++ b/src/qml/qml/qqmlvmemetaobject.cpp @@ -1018,7 +1018,7 @@ void QQmlVMEMetaObject::writeVarProperty(int id, const QV4::Value &value) // Importantly, if the current value is a scarce resource, we need to ensure that it // gets automatically released by the engine if no other references to it exist. QV4::Value oldv = varProperties.value().asObject()->getIndexed(id - firstVarPropertyIndex); - if (QV4::VariantObject *v = oldv.asVariantObject()) + if (QV4::VariantObject *v = oldv.as<QV4::VariantObject>()) v->removeVmePropertyReference(); QObject *valueObject = 0; @@ -1027,7 +1027,7 @@ void QQmlVMEMetaObject::writeVarProperty(int id, const QV4::Value &value) if (QV4::Object *o = value.asObject()) { // And, if the new value is a scarce resource, we need to ensure that it does not get // automatically released by the engine until no other references to it exist. - if (QV4::VariantObject *v = o->asVariantObject()) { + if (QV4::VariantObject *v = o->as<QV4::VariantObject>()) { v->addVmePropertyReference(); } else if (QV4::QObjectWrapper *wrapper = o->asQObjectWrapper()) { // We need to track this QObject to signal its deletion @@ -1059,13 +1059,13 @@ void QQmlVMEMetaObject::writeProperty(int id, const QVariant &value) // Importantly, if the current value is a scarce resource, we need to ensure that it // gets automatically released by the engine if no other references to it exist. QV4::Value oldv = varProperties.value().asObject()->getIndexed(id - firstVarPropertyIndex); - if (QV4::VariantObject *v = oldv.asVariantObject()) + if (QV4::VariantObject *v = oldv.as<QV4::VariantObject>()) v->removeVmePropertyReference(); // And, if the new value is a scarce resource, we need to ensure that it does not get // automatically released by the engine until no other references to it exist. QV4::Value newv = QQmlEnginePrivate::get(ctxt->engine)->v8engine()->fromVariant(value); - if (QV4::VariantObject *v = newv.asVariantObject()) + if (QV4::VariantObject *v = newv.as<QV4::VariantObject>()) v->addVmePropertyReference(); // Write the value and emit change signal as appropriate. diff --git a/src/qml/qml/v4/qv4managed_p.h b/src/qml/qml/v4/qv4managed_p.h index a942377163..702e620ff7 100644 --- a/src/qml/qml/v4/qv4managed_p.h +++ b/src/qml/qml/v4/qv4managed_p.h @@ -77,9 +77,7 @@ struct Value; class RegExp; struct Lookup; struct ExecutionEngine; -struct VariantObject; struct QObjectWrapper; -struct QtObject; #define Q_MANAGED_CHECK \ template <typename T> inline void qt_check_for_QMANAGED_macro(const T &_q_argument) const \ @@ -239,9 +237,6 @@ public: QQmlLocaleData *asQmlLocale() { return type == Type_QmlLocale ? reinterpret_cast<QQmlLocaleData *>(this) : 0; } QQuickJSContext2D *asQQuickJSContext2D() { return type == Type_QQuickJSContext2D ? reinterpret_cast<QQuickJSContext2D *>(this) : 0; } - VariantObject *asVariantObject() { return type == Type_QVariant ? reinterpret_cast<VariantObject *>(this) : 0; } - - QtObject *asQtObject() { return type == Type_QtObject ? reinterpret_cast<QtObject *>(this) : 0; } bool isListType() const { return type == Type_QmlSequence; } diff --git a/src/qml/qml/v4/qv4value_p.h b/src/qml/qml/v4/qv4value_p.h index af6f6ab64d..ea97229958 100644 --- a/src/qml/qml/v4/qv4value_p.h +++ b/src/qml/qml/v4/qv4value_p.h @@ -269,8 +269,11 @@ struct Q_QML_EXPORT Value RegExpObject *asRegExpObject() const; ArrayObject *asArrayObject() const; ErrorObject *asErrorObject() const; - VariantObject *asVariantObject() const; QObjectWrapper *asQObjectWrapper() const; + + template<typename T> + T *as() const { Managed *m = asObject(); return m ? m->as<T>() : 0; } + uint asArrayIndex() const; uint asArrayLength(bool *ok) const; @@ -543,11 +546,6 @@ inline ErrorObject *Value::asErrorObject() const return isObject() ? managed()->asErrorObject() : 0; } -inline VariantObject *Value::asVariantObject() const -{ - return isObject() ? managed()->asVariantObject() : 0; -} - inline QObjectWrapper *Value::asQObjectWrapper() const { return isObject() ? managed()->asQObjectWrapper() : 0; diff --git a/src/qml/qml/v4/qv4variantobject.cpp b/src/qml/qml/v4/qv4variantobject.cpp index 2348a93a6f..badc49c98b 100644 --- a/src/qml/qml/v4/qv4variantobject.cpp +++ b/src/qml/qml/v4/qv4variantobject.cpp @@ -56,6 +56,7 @@ VariantObject::VariantObject(ExecutionEngine *engine, const QVariant &value) , m_vmePropertyReferenceCount(0) { type = Type_QVariant; + vtbl = &static_vtbl; prototype = engine->variantPrototype; if (isScarce()) internalClass->engine->scarceResources.insert(this); @@ -63,7 +64,7 @@ VariantObject::VariantObject(ExecutionEngine *engine, const QVariant &value) QVariant VariantObject::toVariant(const QV4::Value &v) { - VariantObject *o = v.asVariantObject(); + VariantObject *o = v.as<QV4::VariantObject>(); return o ? o->data : QVariant(); } @@ -83,10 +84,10 @@ void VariantObject::destroy(Managed *that) bool VariantObject::isEqualTo(Managed *m, Managed *other) { - QV4::VariantObject *lv = m->asVariantObject(); + QV4::VariantObject *lv = m->as<QV4::VariantObject>(); assert(lv); - if (QV4::VariantObject *rv = other->asVariantObject()) + if (QV4::VariantObject *rv = other->as<QV4::VariantObject>()) return lv->data == rv->data; if (QV4::QmlValueTypeWrapper *v = other->as<QmlValueTypeWrapper>()) @@ -124,7 +125,7 @@ VariantPrototype::VariantPrototype(ExecutionEngine *engine) QV4::Value VariantPrototype::method_preserve(SimpleCallContext *ctx) { - VariantObject *o = ctx->thisObject.asVariantObject(); + VariantObject *o = ctx->thisObject.as<QV4::VariantObject>(); if (o && o->isScarce()) o->node.remove(); return Value::undefinedValue(); @@ -132,7 +133,7 @@ QV4::Value VariantPrototype::method_preserve(SimpleCallContext *ctx) QV4::Value VariantPrototype::method_destroy(SimpleCallContext *ctx) { - VariantObject *o = ctx->thisObject.asVariantObject(); + VariantObject *o = ctx->thisObject.as<QV4::VariantObject>(); if (o) { if (o->isScarce()) o->node.remove(); @@ -143,7 +144,7 @@ QV4::Value VariantPrototype::method_destroy(SimpleCallContext *ctx) QV4::Value VariantPrototype::method_toString(SimpleCallContext *ctx) { - VariantObject *o = ctx->thisObject.asVariantObject(); + VariantObject *o = ctx->thisObject.as<QV4::VariantObject>(); if (!o) return Value::undefinedValue(); QString result = o->data.toString(); @@ -154,7 +155,7 @@ QV4::Value VariantPrototype::method_toString(SimpleCallContext *ctx) QV4::Value VariantPrototype::method_valueOf(SimpleCallContext *ctx) { - VariantObject *o = ctx->thisObject.asVariantObject(); + VariantObject *o = ctx->thisObject.as<QV4::VariantObject>(); if (o) { QVariant v = o->data; switch (v.type()) { diff --git a/src/qml/qml/v4/qv4variantobject_p.h b/src/qml/qml/v4/qv4variantobject_p.h index b0ff5ad406..74aff80132 100644 --- a/src/qml/qml/v4/qv4variantobject_p.h +++ b/src/qml/qml/v4/qv4variantobject_p.h @@ -66,6 +66,7 @@ namespace QV4 { struct VariantObject : Object, public ExecutionEngine::ScarceResourceData { + Q_MANAGED public: VariantObject(ExecutionEngine *engine, const QVariant &value); @@ -78,9 +79,6 @@ public: static void destroy(Managed *that); static bool isEqualTo(Managed *m, Managed *other); - -private: - static const ManagedVTable static_vtbl; }; struct QV4_JS_CLASS(VariantPrototype) : VariantObject @@ -94,9 +92,6 @@ public: static Value method_destroy(SimpleCallContext *ctx); static Value method_toString(SimpleCallContext *ctx); static Value method_valueOf(SimpleCallContext *ctx); - -private: - static const QV4::ManagedVTable static_vtbl; }; } diff --git a/src/qml/qml/v8/qjsvalue.cpp b/src/qml/qml/v8/qjsvalue.cpp index 86673b6b25..c2e2f6e37d 100644 --- a/src/qml/qml/v8/qjsvalue.cpp +++ b/src/qml/qml/v8/qjsvalue.cpp @@ -319,7 +319,7 @@ bool QJSValue::isCallable() const bool QJSValue::isVariant() const { Managed *m = d->value.asManaged(); - return m ? m->asVariantObject() : 0; + return m ? m->as<QV4::VariantObject>() : 0; } /*! diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index 734d910d69..95b7aaf502 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -75,6 +75,8 @@ QT_BEGIN_NAMESPACE using namespace QV4; +DEFINE_MANAGED_VTABLE(QtObject); + struct StaticQtMetaObject : public QObject { static const QMetaObject *get() @@ -86,6 +88,8 @@ QV4::QtObject::QtObject(ExecutionEngine *v4, QQmlEngine *qmlEngine) , m_platform(0) , m_application(0) { + vtbl = &static_vtbl; + // Set all the enums from the "Qt" namespace const QMetaObject *qtMetaObject = StaticQtMetaObject::get(); for (int ii = 0; ii < qtMetaObject->enumeratorCount(); ++ii) { @@ -1233,7 +1237,7 @@ Value QtObject::method_get_platform(SimpleCallContext *ctx) Object *o = ctx->thisObject.asObject(); if (!o) ctx->throwTypeError(); - QtObject *qt = o->asQtObject(); + QtObject *qt = o->as<QtObject>(); if (!qt) ctx->throwTypeError(); @@ -1250,7 +1254,7 @@ Value QtObject::method_get_application(SimpleCallContext *ctx) Object *o = ctx->thisObject.asObject(); if (!o) ctx->throwTypeError(); - QtObject *qt = o->asQtObject(); + QtObject *qt = o->as<QtObject>(); if (!qt) ctx->throwTypeError(); diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions_p.h b/src/qml/qml/v8/qqmlbuiltinfunctions_p.h index caa5be86da..5b639089ea 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions_p.h +++ b/src/qml/qml/v8/qqmlbuiltinfunctions_p.h @@ -66,6 +66,7 @@ namespace QV4 { struct QtObject : Object { + Q_MANAGED QtObject(ExecutionEngine *v4, QQmlEngine *qmlEngine); static Value method_isQtObject(SimpleCallContext *ctx); diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index ec56f73845..2b4f4ce05b 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -134,7 +134,7 @@ QVariant QV8Engine::toVariant(const QV4::Value &value, int typeHint) if (value.isEmpty()) return QVariant(); - if (QV4::VariantObject *v = value.asVariantObject()) + if (QV4::VariantObject *v = value.as<QV4::VariantObject>()) return v->data; if (typeHint == QVariant::Bool) @@ -986,9 +986,9 @@ bool QV8Engine::metaTypeFromJS(const QV4::Value &value, int type, void *data) { QByteArray name = QMetaType::typeName(type); if (convertToNativeQObject(value, name, reinterpret_cast<void* *>(data))) return true; - if (value.asVariantObject() && name.endsWith('*')) { + if (value.as<QV4::VariantObject>() && name.endsWith('*')) { int valueType = QMetaType::type(name.left(name.size()-1)); - QVariant &var = value.asVariantObject()->data; + QVariant &var = value.as<QV4::VariantObject>()->data; if (valueType == var.userType()) { // We have T t, T* is requested, so return &t. *reinterpret_cast<void* *>(data) = var.data(); @@ -998,7 +998,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::Value &value, int type, void *data) { QV4::Object *proto = o->prototype; while (proto) { bool canCast = false; - if (QV4::VariantObject *vo = proto->asVariantObject()) { + if (QV4::VariantObject *vo = proto->as<QV4::VariantObject>()) { const QVariant &v = vo->data; canCast = (type == v.userType()) || (valueType && (valueType == v.userType())); } @@ -1068,7 +1068,7 @@ QVariant QV8Engine::variantFromJS(const QV4::Value &value, return d->toQDateTime(); if (QV4::RegExpObject *re = value.asRegExpObject()) return re->toQRegExp(); - if (QV4::VariantObject *v = value.asVariantObject()) + if (QV4::VariantObject *v = value.as<QV4::VariantObject>()) return v->data; if (isQObject(value)) return qVariantFromValue(qtObjectFromJS(value)); @@ -1128,7 +1128,7 @@ QObject *QV8Engine::qtObjectFromJS(const QV4::Value &value) return 0; - if (QV4::VariantObject *v = value.asVariantObject()) { + if (QV4::VariantObject *v = value.as<QV4::VariantObject>()) { QVariant variant = v->data; int type = variant.userType(); if (type == QMetaType::QObjectStar) diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp index b8f13d51a1..4157f8abc6 100644 --- a/src/qml/qml/v8/qv8qobjectwrapper.cpp +++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp @@ -1418,7 +1418,7 @@ static int MatchScore(v8::Handle<v8::Value> actual, int conversionType) QV4::Object *obj = actual->v4Value().asObject(); QV8Engine *engine = obj->engine()->publicEngine->handle(); - if (QV4::VariantObject *v = obj->asVariantObject()) { + if (QV4::VariantObject *v = obj->as<QV4::VariantObject>()) { if (conversionType == qMetaTypeId<QVariant>()) return 0; if (engine->toVariant(actual->v4Value(), -1).userType() == conversionType) |