From: Roberto Raggi Date: Thu, 4 Aug 2011 09:21:19 +0000 (+0200) Subject: Fix wrong usage of QStringHash iterators. X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=8a660a7f684f0a0d8aa03a57fad1ad399110e2f5;p=konrad%2Fqtdeclarative.git Fix wrong usage of QStringHash iterators. The code was creating circular lists of overloads. Change-Id: I126140dae90fbdf71a53fc8163fe2b56bb069312 Reviewed-on: http://codereview.qt.nokia.com/3782 Reviewed-by: Roberto Raggi Reviewed-by: Qt Sanity Bot --- diff --git a/src/declarative/qml/qdeclarativepropertycache.cpp b/src/declarative/qml/qdeclarativepropertycache.cpp index bc3811a..6ccb5c6 100644 --- a/src/declarative/qml/qdeclarativepropertycache.cpp +++ b/src/declarative/qml/qdeclarativepropertycache.cpp @@ -330,6 +330,7 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb Data *data = &methodIndexCache[ii - methodIndexCacheStart]; data->lazyLoad(m); + if (data->isSignal()) data->flags |= signalFlags; else @@ -340,24 +341,26 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb data->metaObjectOffset = allowedRevisionCache.count() - 1; - Data **old = 0; + Data *old = 0; if (utf8) { QHashedString methodName(QString::fromUtf8(signature, cptr - signature)); - old = stringCache.value(methodName); + if (Data **it = stringCache.value(methodName)) + old = *it; stringCache.insert(methodName, data); } else { QHashedCStringRef methodName(signature, cptr - signature); - old = stringCache.value(methodName); + if (Data **it = stringCache.value(methodName)) + old = *it; stringCache.insert(methodName, data); } if (old) { // We only overload methods in the same class, exactly like C++ - if ((*old)->flags & Data::IsFunction && (*old)->coreIndex >= methodOffset) - data->relatedIndex = (*old)->coreIndex; - data->overrideIndexIsProperty = !bool((*old)->flags & Data::IsFunction); - data->overrideIndex = (*old)->coreIndex; + if (old->flags & Data::IsFunction && old->coreIndex >= methodOffset) + data->relatedIndex = old->coreIndex; + data->overrideIndexIsProperty = !bool(old->flags & Data::IsFunction); + data->overrideIndex = old->coreIndex; } } @@ -385,21 +388,23 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb data->metaObjectOffset = allowedRevisionCache.count() - 1; - Data **old = 0; + Data *old = 0; if (utf8) { QHashedString propName(QString::fromUtf8(str, cptr - str)); - old = stringCache.value(propName); + if (Data **it = stringCache.value(propName)) + old = *it; stringCache.insert(propName, data); } else { QHashedCStringRef propName(str, cptr - str); - old = stringCache.value(propName); + if (Data **it = stringCache.value(propName)) + old = *it; stringCache.insert(propName, data); } if (old) { - data->overrideIndexIsProperty = !bool((*old)->flags & Data::IsFunction); - data->overrideIndex = (*old)->coreIndex; + data->overrideIndexIsProperty = !bool(old->flags & Data::IsFunction); + data->overrideIndex = old->coreIndex; } } }