Port QObject bindings to use new cast
authorSimon Hausmann <simon.hausmann@digia.com>
Sat, 1 Jun 2013 12:07:44 +0000 (14:07 +0200)
committerLars Knoll <lars.knoll@digia.com>
Sun, 2 Jun 2013 13:11:28 +0000 (15:11 +0200)
Change-Id: Ib0a8ba76df51276d53cf251b0ed979176e1fba01
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/qml/qqmlvmemetaobject.cpp
src/qml/qml/v4/qv4managed_p.h
src/qml/qml/v4/qv4mm.cpp
src/qml/qml/v4/qv4value_p.h
src/qml/qml/v8/qqmlbuiltinfunctions.cpp
src/qml/qml/v8/qv8engine.cpp
src/qml/qml/v8/qv8qobjectwrapper.cpp
src/qml/qml/v8/qv8qobjectwrapper_p.h
src/qml/types/qqmllistmodel.cpp
tests/auto/qml/qqmlecmascript/testtypes.h

index 34a7874..86d4065 100644 (file)
@@ -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<QV4::VariantObject>()) {
             v->addVmePropertyReference();
-        } else if (QV4::QObjectWrapper *wrapper = o->asQObjectWrapper()) {
+        } else if (QV4::QObjectWrapper *wrapper = o->as<QV4::QObjectWrapper>()) {
             // We need to track this QObject to signal its deletion
             valueObject = wrapper->object;
 
index 9efc253..966410b 100644 (file)
@@ -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<ErrorObject *>(this) : 0; }
     ArgumentsObject *asArgumentsObject() { return type == Type_ArgumentsObject ? reinterpret_cast<ArgumentsObject *>(this) : 0; }
     JSONObject *asJSONObject() { return type == Type_JSONObject ? reinterpret_cast<JSONObject *>(this) : 0; }
-    QObjectWrapper *asQObjectWrapper() { return type == Type_QObject ? reinterpret_cast<QObjectWrapper*>(this) : 0; }
 
 
     bool isListType() const { return type == Type_QmlSequence; }
index cf37c69..4386382 100644 (file)
@@ -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<QObjectWrapper>();
         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<QObjectWrapper>()) {
             weak->ref();
             qobjectWrapper->deleteQObject(/*deleteInstantly*/ true);
             PersistentValuePrivate *n = weak->next;
index 53e1c1d..bbca1ac 100644 (file)
@@ -268,7 +268,6 @@ struct Q_QML_EXPORT Value
     DateObject *asDateObject() const;
     ArrayObject *asArrayObject() const;
     ErrorObject *asErrorObject() const;
-    QObjectWrapper *asQObjectWrapper() const;
 
     template<typename T>
     T *as() const { Managed *m = asObject(); return m ? m->as<T>() : 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);
index f5ee22c..60fa680 100644 (file)
@@ -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<QV4::QObjectWrapper>() != 0);
 }
 
 /*!
index b52d85e..260f609 100644 (file)
@@ -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<QV4::QObjectWrapper>()) {
             return qVariantFromValue<QObject *>(wrapper->object);
         } else if (QV4::QmlContextWrapper *wrapper = object->as<QV4::QmlContextWrapper>()) {
             return QVariant();
@@ -1019,7 +1019,7 @@ QObject *QV8Engine::qtObjectFromJS(const QV4::Value &value)
         if (type == QMetaType::QObjectStar)
             return *reinterpret_cast<QObject* const *>(variant.constData());
     }
-    QV4::QObjectWrapper *wrapper = value.asQObjectWrapper();
+    QV4::QObjectWrapper *wrapper = value.as<QV4::QObjectWrapper>();
     if (!wrapper)
         return 0;
     return wrapper->object;
index 4090e9c..0a6f15b 100644 (file)
@@ -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<v8::Object> obj)
 {
-    return obj->v4Value().asQObjectWrapper() != 0;
+    return obj->v4Value().as<QObjectWrapper>() != 0;
 }
 
 QObject *QV8QObjectWrapper::toQObject(v8::Handle<v8::Object> obj)
 {
-    QV4::QObjectWrapper *wrapper =  obj->v4Value().asQObjectWrapper();
+    QV4::QObjectWrapper *wrapper =  obj->v4Value().as<QObjectWrapper>();
     return wrapper?wrapper->object:0;
 }
 
@@ -789,7 +788,7 @@ bool QV8QObjectWrapper::SetProperty(QV8Engine *engine, QObject *object, const QH
 static void FastValueSetter(v8::Handle<v8::String>, v8::Handle<v8::Value> value,
                             const v8::AccessorInfo& info)
 {
-    QV4::QObjectWrapper *wrapper = info.This()->v4Value().asQObjectWrapper();
+    QV4::QObjectWrapper *wrapper = info.This()->v4Value().as<QObjectWrapper>();
 
     if (QQmlData::wasDeleted(wrapper->object))
         return; 
@@ -816,7 +815,7 @@ static void FastValueSetter(v8::Handle<v8::String>, v8::Handle<v8::Value> value,
 static void FastValueSetterReadOnly(v8::Handle<v8::String> property, v8::Handle<v8::Value>,
                                     const v8::AccessorInfo& info)
 {
-    QV4::QObjectWrapper *wrapper = info.This()->v4Value().asQObjectWrapper();
+    QV4::QObjectWrapper *wrapper = info.This()->v4Value().as<QObjectWrapper>();
 
     if (QQmlData::wasDeleted(wrapper->object))
         return; 
@@ -1428,7 +1427,7 @@ static int MatchScore(v8::Handle<v8::Value> actual, int conversionType)
                 return 10;
         }
 
-        if (obj->asQObjectWrapper()) {
+        if (obj->as<QObjectWrapper>()) {
             switch (conversionType) {
             case QMetaType::QObjectStar:
                 return 0;
index 965e7ed..44a402a 100644 (file)
@@ -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<QObjectWrapper *>(that)->~QObjectWrapper();
     }
-
-    static const QV4::ManagedVTable static_vtbl;
 };
 
 struct QObjectMethod : public QV4::FunctionObject
index 98d828c..daaf430 100644 (file)
@@ -453,7 +453,7 @@ void ListModel::set(int elementIndex, v8::Handle<v8::Object> object, QVector<int
             QDateTime dt = propertyValue->v4Value().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<QV4::QObjectWrapper>()) {
                 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<v8::Object> object, QV8Engine *
                 e->setDateTimePropertyFast(r, dt);
             }
         } else if (propertyValue->IsObject()) {
-            if (QV4::QObjectWrapper *wrapper = propertyValue->v4Value().asQObjectWrapper()) {
+            if (QV4::QObjectWrapper *wrapper = propertyValue->v4Value().as<QV4::QObjectWrapper>()) {
                 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::Handle<v8::Valu
         QDateTime dt = d->v4Value().asDateObject()->toQDateTime();;
         roleIndex = setDateTimeProperty(role, dt);
     } else if (d->IsObject()) {
-        QV4::QObjectWrapper *wrapper = d->v4Value().asQObjectWrapper();
+        QV4::QObjectWrapper *wrapper = d->v4Value().as<QV4::QObjectWrapper>();
         if (role.type == ListLayout::Role::QObject && wrapper) {
             QObject *o = wrapper->object;
             roleIndex = setQObjectProperty(role, o);
index 2c5a0f9..3752dd8 100644 (file)
@@ -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<QV4::QObjectWrapper>();
         assert(thisObject);
 
         QQmlData *otherDData = QQmlData::get(other);