Fix enumerating QObject properties
authorSimon Hausmann <simon.hausmann@digia.com>
Fri, 21 Jun 2013 14:05:53 +0000 (16:05 +0200)
committerLars Knoll <lars.knoll@digia.com>
Fri, 21 Jun 2013 14:11:33 +0000 (16:11 +0200)
Make sure to enumerate the properties as well as the invokable methods.

Fixes various tests in qmltest

Change-Id: If40dbc8f2203f99d75523e40f78849224e301481
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/qml/v4/qv4qobjectwrapper.cpp

index 087458d..67f2e07 100644 (file)
@@ -650,7 +650,8 @@ Property *QObjectWrapper::advanceIterator(Managed *m, ObjectIterator *it, String
         return QV4::Object::advanceIterator(m, it, name, index, attributes);
 
     const QMetaObject *mo = that->m_object->metaObject();
-    if (it->arrayIndex < mo->propertyCount()) {
+    const int propertyCount = mo->propertyCount();
+    if (it->arrayIndex < propertyCount) {
         *name = that->engine()->newString(QString::fromUtf8(mo->property(it->arrayIndex).name()));
         ++it->arrayIndex;
         if (attributes)
@@ -658,6 +659,15 @@ Property *QObjectWrapper::advanceIterator(Managed *m, ObjectIterator *it, String
         it->tmpDynamicProperty.value = that->get(*name);
         return &it->tmpDynamicProperty;
     }
+    const int methodCount = mo->methodCount();
+    if (it->arrayIndex < propertyCount + methodCount) {
+        *name = that->engine()->newString(QString::fromUtf8(mo->method(it->arrayIndex - propertyCount).name()));
+        ++it->arrayIndex;
+        if (attributes)
+            *attributes = QV4::Attr_Data;
+        it->tmpDynamicProperty.value = that->get(*name);
+        return &it->tmpDynamicProperty;
+    }
     return QV4::Object::advanceIterator(m, it, name, index, attributes);
 }