Get rid of QV8Engine::isQObject and QV8QObjectWrapper::isQObject
authorSimon Hausmann <simon.hausmann@digia.com>
Mon, 3 Jun 2013 13:23:20 +0000 (15:23 +0200)
committerLars Knoll <lars.knoll@digia.com>
Mon, 3 Jun 2013 18:31:45 +0000 (20:31 +0200)
The goal is to ultimately get rid of those wrapper instances

Change-Id: I77d806e09c163e4e41915dd6cee3082099f1a3b1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/qml/v4/qv4serialize.cpp
src/qml/qml/v8/qjsvalue.cpp
src/qml/qml/v8/qv8engine.cpp
src/qml/qml/v8/qv8engine_p.h
src/qml/qml/v8/qv8qobjectwrapper.cpp
src/qml/qml/v8/qv8qobjectwrapper_p.h

index 692f478..ab6a544 100644 (file)
@@ -223,10 +223,10 @@ void Serialize::serialize(QByteArray &data, const QV4::Value &v, QV8Engine *engi
         char *buffer = data.data() + offset;
 
         memcpy(buffer, pattern.constData(), length*sizeof(QChar));
-    } else if (engine->isQObject(v)) {
+    } else if (QV4::QObjectWrapper *qobjectWrapper = v.as<QV4::QObjectWrapper>()) {
         // XXX TODO: Generalize passing objects between the main thread and worker scripts so
         // that others can trivially plug in their elements.
-        QQmlListModel *lm = qobject_cast<QQmlListModel *>(engine->toQObject(v));
+        QQmlListModel *lm = qobject_cast<QQmlListModel *>(qobjectWrapper->object);
         if (lm && lm->agent()) {
             QQmlListModelWorkerAgent *agent = lm->agent();
             agent->addref();
index 32fd249..3e64942 100644 (file)
@@ -983,8 +983,7 @@ bool QJSValue::isQObject() const
     if (!o)
         return false;
 
-    QV8Engine *v8 = d->engine()->publicEngine->handle();
-    return v8->isQObject(d->value);
+    return o->as<QV4::QObjectWrapper>() != 0;
 }
 
 QT_END_NAMESPACE
index 1c00517..66eedc5 100644 (file)
@@ -809,7 +809,8 @@ bool QV8Engine::metaTypeFromJS(const QV4::Value &value, int type, void *data) {
             return true;
         } break;
     case QMetaType::QObjectStar: {
-        if (isQObject(value) || value.isNull()) {
+        QV4::QObjectWrapper *qobjectWrapper = value.as<QV4::QObjectWrapper>();
+        if (qobjectWrapper || value.isNull()) {
             *reinterpret_cast<QObject* *>(data) = qtObjectFromJS(value);
             return true;
         } break;
@@ -885,7 +886,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::Value &value, int type, void *data) {
                     const QVariant &v = vo->data;
                     canCast = (type == v.userType()) || (valueType && (valueType == v.userType()));
                 }
-                else if (isQObject(QV4::Value::fromObject(proto))) {
+                else if (proto->as<QV4::QObjectWrapper>()) {
                     QByteArray className = name.left(name.size()-1);
                     if (QObject *qobject = qtObjectFromJS(QV4::Value::fromObject(proto)))
                         canCast = qobject->qt_metacast(className) != 0;
@@ -953,7 +954,7 @@ QVariant QV8Engine::variantFromJS(const QV4::Value &value,
         return re->toQRegExp();
     if (QV4::VariantObject *v = value.as<QV4::VariantObject>())
         return v->data;
-    if (isQObject(value))
+    if (value.as<QV4::QObjectWrapper>())
         return qVariantFromValue(qtObjectFromJS(value));
     if (QV4::QmlValueTypeWrapper *v = value.as<QV4::QmlValueTypeWrapper>())
         return v->toVariant();
index 9c2d1d9..896650d 100644 (file)
@@ -259,7 +259,6 @@ public:
     // Return a JS wrapper for the given QObject \a object
     inline QV4::Value newQObject(QObject *object);
     inline QV4::Value newQObject(QObject *object, const ObjectOwnership ownership);
-    inline bool isQObject(const QV4::Value &value);
     inline QObject *toQObject(const QV4::Value &value);
 
     // Return a JS string for the given QString \a string
@@ -354,11 +353,6 @@ private:
     Q_DISABLE_COPY(QV8Engine)
 };
 
-bool QV8Engine::isQObject(const QV4::Value &value)
-{
-    return value.isObject() ? m_qobjectWrapper.isQObject(value) : false;
-}
-
 QObject *QV8Engine::toQObject(const QV4::Value &value)
 {
     return value.isObject() ? m_qobjectWrapper.toQObject(value) : 0;
index 86bbcf3..ee1a9b7 100644 (file)
@@ -417,11 +417,6 @@ void QV8QObjectWrapper::init(QV8Engine *engine)
     v4->functionPrototype->defineDefaultProperty(v4, QStringLiteral("disconnect"), Disconnect);
 }
 
-bool QV8QObjectWrapper::isQObject(v8::Handle<v8::Object> obj)
-{
-    return obj->v4Value().as<QObjectWrapper>() != 0;
-}
-
 QObject *QV8QObjectWrapper::toQObject(v8::Handle<v8::Object> obj)
 {
     QV4::QObjectWrapper *wrapper =  obj->v4Value().as<QObjectWrapper>();
index af84afb..65a3836 100644 (file)
@@ -167,7 +167,6 @@ public:
     void destroy();
 
     v8::Handle<v8::Value> newQObject(QObject *object);
-    bool isQObject(v8::Handle<v8::Object>);
     QObject *toQObject(v8::Handle<v8::Object>);
 
     enum RevisionMode { IgnoreRevision, CheckRevision };