aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qdeclarativemetatype.cpp
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2011-07-22 17:23:16 +1000
committerQt by Nokia <qt-info@nokia.com>2011-08-30 13:18:28 +0200
commitae0c88ba3ea9d5a64854b4d93c925dbeb65752db (patch)
tree06fe43ef9fdd7868e6cf6a57ac143f7fd936ee9d /src/declarative/qml/qdeclarativemetatype.cpp
parentb048a40d7aab29b44d9c548292ab4b307d8d40c0 (diff)
Faster check for revisioned properties.
Change-Id: I8122c15d0467019bcd333ca111d2b248c5ca2d91 Reviewed-on: http://codereview.qt.nokia.com/3774 Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com> Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Diffstat (limited to 'src/declarative/qml/qdeclarativemetatype.cpp')
-rw-r--r--src/declarative/qml/qdeclarativemetatype.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp
index 97b0391c0b..a084bd37df 100644
--- a/src/declarative/qml/qdeclarativemetatype.cpp
+++ b/src/declarative/qml/qdeclarativemetatype.cpp
@@ -52,6 +52,8 @@
#include <QtCore/qmetaobject.h>
#include <QtCore/qbitarray.h>
#include <QtCore/qreadwritelock.h>
+#include <QtCore/private/qmetaobject_p.h>
+
#include <qmetatype.h>
#include <qobjectdefs.h>
#include <qdatetime.h>
@@ -398,6 +400,24 @@ static void clone(QMetaObjectBuilder &builder, const QMetaObject *mo,
}
}
+static bool isPropertyRevisioned(const QMetaObject *mo, int index)
+{
+ int i = index;
+ i -= mo->propertyOffset();
+ if (i < 0 && mo->d.superdata)
+ return isPropertyRevisioned(mo->d.superdata, index);
+
+ const QMetaObjectPrivate *mop = reinterpret_cast<const QMetaObjectPrivate*>(mo->d.data);
+ if (i >= 0 && i < mop->propertyCount) {
+ int handle = mop->propertyData + 3*i;
+ int flags = mo->d.data[handle + 2];
+
+ return (flags & Revisioned);
+ }
+
+ return false;
+}
+
void QDeclarativeTypePrivate::init() const
{
if (m_isSetup) return;
@@ -451,7 +471,7 @@ void QDeclarativeTypePrivate::init() const
mo = m_metaObjects.first().metaObject;
for (int ii = 0; !m_containsRevisionedAttributes && ii < mo->propertyCount(); ++ii) {
- if (mo->property(ii).revision() != 0)
+ if (isPropertyRevisioned(mo, ii))
m_containsRevisionedAttributes = true;
}