From ae0c88ba3ea9d5a64854b4d93c925dbeb65752db Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 22 Jul 2011 17:23:16 +1000 Subject: Faster check for revisioned properties. Change-Id: I8122c15d0467019bcd333ca111d2b248c5ca2d91 Reviewed-on: http://codereview.qt.nokia.com/3774 Reviewed-by: Roberto Raggi Reviewed-by: Qt Sanity Bot --- src/declarative/qml/qdeclarativemetatype.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/declarative/qml/qdeclarativemetatype.cpp') 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 #include #include +#include + #include #include #include @@ -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(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; } -- cgit v1.2.3