From: Simon Hausmann Date: Sat, 1 Jun 2013 12:07:44 +0000 (+0200) Subject: Port QObject bindings to use new cast X-Git-Tag: upstream/5.2.1~669^2~357 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4b63f9b2344213cd96622e9c0929011d252f1714;p=platform%2Fupstream%2Fqtdeclarative.git Port QObject bindings to use new cast Change-Id: Ib0a8ba76df51276d53cf251b0ed979176e1fba01 Reviewed-by: Lars Knoll --- diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp index 34a7874..86d4065 100644 --- a/src/qml/qml/qqmlvmemetaobject.cpp +++ b/src/qml/qml/qqmlvmemetaobject.cpp @@ -1029,7 +1029,7 @@ void QQmlVMEMetaObject::writeVarProperty(int id, const QV4::Value &value) // automatically released by the engine until no other references to it exist. if (QV4::VariantObject *v = o->as()) { v->addVmePropertyReference(); - } else if (QV4::QObjectWrapper *wrapper = o->asQObjectWrapper()) { + } else if (QV4::QObjectWrapper *wrapper = o->as()) { // We need to track this QObject to signal its deletion valueObject = wrapper->object; diff --git a/src/qml/qml/v4/qv4managed_p.h b/src/qml/qml/v4/qv4managed_p.h index 9efc253..966410b 100644 --- a/src/qml/qml/v4/qv4managed_p.h +++ b/src/qml/qml/v4/qv4managed_p.h @@ -175,7 +175,6 @@ public: Type_MathObject, Type_ForeachIteratorObject, Type_RegExp, - Type_QObject, Type_QmlSequence }; @@ -206,7 +205,6 @@ public: ErrorObject *asErrorObject() { return type == Type_ErrorObject ? reinterpret_cast(this) : 0; } ArgumentsObject *asArgumentsObject() { return type == Type_ArgumentsObject ? reinterpret_cast(this) : 0; } JSONObject *asJSONObject() { return type == Type_JSONObject ? reinterpret_cast(this) : 0; } - QObjectWrapper *asQObjectWrapper() { return type == Type_QObject ? reinterpret_cast(this) : 0; } bool isListType() const { return type == Type_QmlSequence; } diff --git a/src/qml/qml/v4/qv4mm.cpp b/src/qml/qml/v4/qv4mm.cpp index cf37c69..4386382 100644 --- a/src/qml/qml/v4/qv4mm.cpp +++ b/src/qml/qml/v4/qv4mm.cpp @@ -297,7 +297,7 @@ void MemoryManager::mark() for (PersistentValuePrivate *weak = m_weakValues; weak; weak = weak->next) { if (!weak->refcount) continue; - QObjectWrapper *qobjectWrapper = weak->value.asQObjectWrapper(); + QObjectWrapper *qobjectWrapper = weak->value.as(); if (!qobjectWrapper) continue; QObject *qobject = qobjectWrapper->object; @@ -452,7 +452,7 @@ MemoryManager::~MemoryManager() { PersistentValuePrivate *weak = m_weakValues; while (weak) { - if (QObjectWrapper *qobjectWrapper = weak->value.asQObjectWrapper()) { + if (QObjectWrapper *qobjectWrapper = weak->value.as()) { weak->ref(); qobjectWrapper->deleteQObject(/*deleteInstantly*/ true); PersistentValuePrivate *n = weak->next; diff --git a/src/qml/qml/v4/qv4value_p.h b/src/qml/qml/v4/qv4value_p.h index 53e1c1d..bbca1ac 100644 --- a/src/qml/qml/v4/qv4value_p.h +++ b/src/qml/qml/v4/qv4value_p.h @@ -268,7 +268,6 @@ struct Q_QML_EXPORT Value DateObject *asDateObject() const; ArrayObject *asArrayObject() const; ErrorObject *asErrorObject() const; - QObjectWrapper *asQObjectWrapper() const; template T *as() const { Managed *m = asObject(); return m ? m->as() : 0; } @@ -540,11 +539,6 @@ inline ErrorObject *Value::asErrorObject() const return isObject() ? managed()->asErrorObject() : 0; } -inline QObjectWrapper *Value::asQObjectWrapper() const -{ - return isObject() ? managed()->asQObjectWrapper() : 0; -} - // ### inline Value Managed::construct(ExecutionContext *context, Value *args, int argc) { return vtbl->construct(this, context, args, argc); diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index f5ee22c..60fa680 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -171,7 +171,7 @@ Value QtObject::method_isQtObject(QV4::SimpleCallContext *ctx) if (ctx->argumentCount == 0) return QV4::Value::fromBoolean(false); - return QV4::Value::fromBoolean(ctx->arguments[0].asQObjectWrapper() != 0); + return QV4::Value::fromBoolean(ctx->arguments[0].as() != 0); } /*! diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index b52d85e..260f609 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -158,7 +158,7 @@ QVariant QV8Engine::toVariant(const QV4::Value &value, int typeHint) } else if (typeHint == QMetaType::QJsonObject && !value.asArrayObject() && !value.asFunctionObject()) { return QVariant::fromValue(jsonObjectFromJS(value)); - } else if (QV4::QObjectWrapper *wrapper = object->asQObjectWrapper()) { + } else if (QV4::QObjectWrapper *wrapper = object->as()) { return qVariantFromValue(wrapper->object); } else if (QV4::QmlContextWrapper *wrapper = object->as()) { return QVariant(); @@ -1019,7 +1019,7 @@ QObject *QV8Engine::qtObjectFromJS(const QV4::Value &value) if (type == QMetaType::QObjectStar) return *reinterpret_cast(variant.constData()); } - QV4::QObjectWrapper *wrapper = value.asQObjectWrapper(); + QV4::QObjectWrapper *wrapper = value.as(); if (!wrapper) return 0; return wrapper->object; diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp index 4090e9c..0a6f15b 100644 --- a/src/qml/qml/v8/qv8qobjectwrapper.cpp +++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp @@ -87,7 +87,6 @@ QObjectWrapper::QObjectWrapper(ExecutionEngine *engine, QObject *object) , object(object) { this->v8Engine = QV8Engine::get(engine->publicEngine); - type = Type_QObject; vtbl = &static_vtbl; m_destroy = engine->newIdentifier(QStringLiteral("destroy")); @@ -448,12 +447,12 @@ void QV8QObjectWrapper::init(QV8Engine *engine) bool QV8QObjectWrapper::isQObject(v8::Handle obj) { - return obj->v4Value().asQObjectWrapper() != 0; + return obj->v4Value().as() != 0; } QObject *QV8QObjectWrapper::toQObject(v8::Handle obj) { - QV4::QObjectWrapper *wrapper = obj->v4Value().asQObjectWrapper(); + QV4::QObjectWrapper *wrapper = obj->v4Value().as(); return wrapper?wrapper->object:0; } @@ -789,7 +788,7 @@ bool QV8QObjectWrapper::SetProperty(QV8Engine *engine, QObject *object, const QH static void FastValueSetter(v8::Handle, v8::Handle value, const v8::AccessorInfo& info) { - QV4::QObjectWrapper *wrapper = info.This()->v4Value().asQObjectWrapper(); + QV4::QObjectWrapper *wrapper = info.This()->v4Value().as(); if (QQmlData::wasDeleted(wrapper->object)) return; @@ -816,7 +815,7 @@ static void FastValueSetter(v8::Handle, v8::Handle value, static void FastValueSetterReadOnly(v8::Handle property, v8::Handle, const v8::AccessorInfo& info) { - QV4::QObjectWrapper *wrapper = info.This()->v4Value().asQObjectWrapper(); + QV4::QObjectWrapper *wrapper = info.This()->v4Value().as(); if (QQmlData::wasDeleted(wrapper->object)) return; @@ -1428,7 +1427,7 @@ static int MatchScore(v8::Handle actual, int conversionType) return 10; } - if (obj->asQObjectWrapper()) { + if (obj->as()) { switch (conversionType) { case QMetaType::QObjectStar: return 0; diff --git a/src/qml/qml/v8/qv8qobjectwrapper_p.h b/src/qml/qml/v8/qv8qobjectwrapper_p.h index 965e7ed..44a402a 100644 --- a/src/qml/qml/v8/qv8qobjectwrapper_p.h +++ b/src/qml/qml/v8/qv8qobjectwrapper_p.h @@ -81,6 +81,8 @@ namespace QV4 { struct Q_QML_EXPORT QObjectWrapper : public QV4::Object { + Q_MANAGED + QObjectWrapper(ExecutionEngine *v8Engine, QObject *object); ~QObjectWrapper(); @@ -103,8 +105,6 @@ private: { static_cast(that)->~QObjectWrapper(); } - - static const QV4::ManagedVTable static_vtbl; }; struct QObjectMethod : public QV4::FunctionObject diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index 98d828c..daaf430 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -453,7 +453,7 @@ void ListModel::set(int elementIndex, v8::Handle object, QVectorv4Value().asDateObject()->toQDateTime(); roleIndex = e->setDateTimeProperty(r, dt); } else if (propertyValue->IsObject()) { - if (QV4::QObjectWrapper *wrapper = propertyValue->v4Value().asQObjectWrapper()) { + if (QV4::QObjectWrapper *wrapper = propertyValue->v4Value().as()) { QObject *o = wrapper->object; const ListLayout::Role &role = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::QObject); if (role.type == ListLayout::Role::QObject) @@ -528,7 +528,7 @@ void ListModel::set(int elementIndex, v8::Handle object, QV8Engine * e->setDateTimePropertyFast(r, dt); } } else if (propertyValue->IsObject()) { - if (QV4::QObjectWrapper *wrapper = propertyValue->v4Value().asQObjectWrapper()) { + if (QV4::QObjectWrapper *wrapper = propertyValue->v4Value().as()) { QObject *o = wrapper->object; const ListLayout::Role &r = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::QObject); if (r.type == ListLayout::Role::QObject) @@ -1188,7 +1188,7 @@ int ListElement::setJsProperty(const ListLayout::Role &role, v8::Handlev4Value().asDateObject()->toQDateTime();; roleIndex = setDateTimeProperty(role, dt); } else if (d->IsObject()) { - QV4::QObjectWrapper *wrapper = d->v4Value().asQObjectWrapper(); + QV4::QObjectWrapper *wrapper = d->v4Value().as(); if (role.type == ListLayout::Role::QObject && wrapper) { QObject *o = wrapper->object; roleIndex = setQObjectProperty(role, o); diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h index 2c5a0f9..3752dd8 100644 --- a/tests/auto/qml/qqmlecmascript/testtypes.h +++ b/tests/auto/qml/qqmlecmascript/testtypes.h @@ -1205,7 +1205,7 @@ public: { QQmlData *ddata = QQmlData::get(this); assert(ddata); - QV4::QObjectWrapper *thisObject = ddata->v8object.value().asQObjectWrapper(); + QV4::QObjectWrapper *thisObject = ddata->v8object.value().as(); assert(thisObject); QQmlData *otherDData = QQmlData::get(other);