diff options
author | Erik Verbruggen <erik.verbruggen@qt.io> | 2016-08-08 13:25:15 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2016-08-24 11:20:49 +0000 |
commit | 4e9fc0129d6b4326c2159e4fafa42a3df9d35e0a (patch) | |
tree | 3baa0a667d84d6a9d667a7fa7a582e468d45da9b /src/qml/qml/qqmlpropertycache.cpp | |
parent | 92debe6b2c69c959cb2bc27bf788edcef5e9f292 (diff) |
QML: Switch from using accessors to static_metacall
Change-Id: I7a781eb3cb0af9c68b385af5752555bd9cb313d4
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlpropertycache.cpp')
-rw-r--r-- | src/qml/qml/qqmlpropertycache.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp index 5c53e342f3..ed00eddb30 100644 --- a/src/qml/qml/qqmlpropertycache.cpp +++ b/src/qml/qml/qqmlpropertycache.cpp @@ -150,7 +150,7 @@ void QQmlPropertyData::lazyLoad(const QMetaProperty &p) Q_ASSERT(p.revision() <= Q_INT16_MAX); setRevision(p.revision()); - _flags = fastFlagsForProperty(p); + setFlags(fastFlagsForProperty(p)); int type = static_cast<int>(p.type()); if (type == QMetaType::QObjectStar) { @@ -171,7 +171,7 @@ void QQmlPropertyData::load(const QMetaProperty &p, QQmlEngine *engine) setPropType(p.userType()); setCoreIndex(p.propertyIndex()); setNotifyIndex(QMetaObjectPrivate::signalIndex(p.notifySignal())); - _flags = fastFlagsForProperty(p); + setFlags(fastFlagsForProperty(p)); flagsForPropertyType(propType(), engine, _flags); Q_ASSERT(p.revision() <= Q_INT16_MAX); setRevision(p.revision()); @@ -344,7 +344,7 @@ void QQmlPropertyCache::appendProperty(const QString &name, QQmlPropertyData::Fl data.setPropType(propType); data.setCoreIndex(coreIndex); data.setNotifyIndex(notifyIndex); - data._flags = flags; + data.setFlags(flags); QQmlPropertyData *old = findNamedProperty(name); if (old) @@ -363,7 +363,7 @@ void QQmlPropertyCache::appendSignal(const QString &name, QQmlPropertyData::Flag QQmlPropertyData data; data.setPropType(QVariant::Invalid); data.setCoreIndex(coreIndex); - data._flags = flags; + data.setFlags(flags); data.setArguments(nullptr); QQmlPropertyData handler = data; @@ -409,7 +409,7 @@ void QQmlPropertyCache::appendMethod(const QString &name, QQmlPropertyData::Flag args->argumentsValid = true; data.setArguments(args); - data._flags = flags; + data.setFlags(flags); QQmlPropertyData *old = findNamedProperty(name); if (old) @@ -568,9 +568,9 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject, QQmlPropertyData *sigdata = 0; if (m.methodType() == QMetaMethod::Signal) - data->_flags = signalFlags; + data->setFlags(signalFlags); else - data->_flags = methodFlags; + data->setFlags(methodFlags); data->lazyLoad(m); data->_flags.isDirect = !dynamicMetaObject; @@ -650,7 +650,7 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject, QQmlPropertyData *data = &propertyIndexCache[ii - propertyIndexCacheStart]; - data->_flags = propertyFlags; + data->setFlags(propertyFlags); data->lazyLoad(p); data->_flags.isDirect = !dynamicMetaObject; @@ -672,16 +672,18 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject, setNamedProperty(propName, ii, data, (old != 0)); } - QQmlAccessorProperties::Property *accessorProperty = accessorProperties.property(str); - - // Fast properties may not be overrides or revisioned - Q_ASSERT(accessorProperty == 0 || (old == 0 && data->revision() == 0)); + bool isGadget = true; + for (const QMetaObject *it = metaObject; it != nullptr; it = it->superClass()) { + if (it == &QObject::staticMetaObject) + isGadget = false; + } - if (accessorProperty) { - data->setAccessors(accessorProperty->accessors); - } else if (old) { + if (isGadget) // always dispatch over a 'normal' meta-call so the QQmlValueType can intercept + data->_flags.isDirect = false; + else + data->trySetStaticMetaCallFunction(metaObject->d.static_metacall, ii - propOffset); + if (old) data->markAsOverrideOf(old); - } } } |