Accessors cannot overload properties and are not available on value
types so can be safely union'd together.
Change-Id: Iae34f8b2935d010ca43365238a7514c0e26953f0
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
QDeclarativeAccessorProperties::Property *accessorProperty = accessorProperties.property(str);
QDeclarativeAccessorProperties::Property *accessorProperty = accessorProperties.property(str);
- // Fast properties may not be overrides
- Q_ASSERT(accessorProperty == 0 || old == 0);
+ // Fast properties may not be overrides or revisioned
+ Q_ASSERT(accessorProperty == 0 || (old == 0 && data->revision == 0));
if (accessorProperty) {
data->flags |= QDeclarativePropertyData::HasAccessors;
if (accessorProperty) {
data->flags |= QDeclarativePropertyData::HasAccessors;
bool isSignalHandler() const { return flags & IsSignalHandler; }
bool isOverload() const { return flags & IsOverload; }
bool isSignalHandler() const { return flags & IsSignalHandler; }
bool isOverload() const { return flags & IsOverload; }
- bool hasOverride() const { return !(flags & IsValueTypeVirtual) && overrideIndex >= 0; }
+ bool hasOverride() const { return !(flags & IsValueTypeVirtual) &&
+ !(flags & HasAccessors) &&
+ overrideIndex >= 0; }
// Returns -1 if not a value type virtual property
inline int getValueTypeCoreIndex() const;
// Returns -1 if not a value type virtual property
inline int getValueTypeCoreIndex() const;
int notifyIndex; // When !IsFunction
void *arguments; // When IsFunction && HasArguments
};
int notifyIndex; // When !IsFunction
void *arguments; // When IsFunction && HasArguments
};
- struct { // When !IsValueTypeVirtual
- uint overrideIndexIsProperty : 1;
- signed int overrideIndex : 31;
+ struct { // When !HasAccessors
+ qint16 revision;
+ qint16 metaObjectOffset;
+
+ union {
+ struct { // When IsValueTypeVirtual
+ quint16 valueTypeFlags; // flags of the access property on the value type proxy
+ // object
+ quint8 valueTypePropType; // The QVariant::Type of access property on the value
+ // type proxy object
+ quint8 valueTypeCoreIndex; // The prop index of the access property on the value
+ // type proxy object
+ };
+
+ struct { // When !IsValueTypeVirtual
+ uint overrideIndexIsProperty : 1;
+ signed int overrideIndex : 31;
+ };
+ };
- struct { // When IsValueTypeVirtual
- quint16 valueTypeFlags; // flags of the access property on the value type proxy object
- quint8 valueTypePropType; // The QVariant::Type of access property on the value type
- // proxy object
- quint8 valueTypeCoreIndex; // The prop index of the access property on the value type
- //proxy object
+ struct { // When HasAccessors
+ QDeclarativeAccessors *accessors;
+ intptr_t accessorData;
- qint16 revision;
- qint16 metaObjectOffset;
-
- struct { // When HasAccessors
- QDeclarativeAccessors *accessors;
- intptr_t accessorData;
- };
-
private:
friend class QDeclarativePropertyData;
friend class QDeclarativePropertyCache;
private:
friend class QDeclarativePropertyData;
friend class QDeclarativePropertyCache;
overrideIndex = -1;
revision = 0;
metaObjectOffset = -1;
overrideIndex = -1;
revision = 0;
metaObjectOffset = -1;
- accessors = 0;
- accessorData = 0;
bool QDeclarativePropertyCache::isAllowedInRevision(QDeclarativePropertyData *data) const
{
bool QDeclarativePropertyCache::isAllowedInRevision(QDeclarativePropertyData *data) const
{
- return (data->metaObjectOffset == -1 && data->revision == 0) ||
+ return (data->hasAccessors() || data->metaObjectOffset == -1 && data->revision == 0) ||
(allowedRevisionCache[data->metaObjectOffset] >= data->revision);
}
(allowedRevisionCache[data->metaObjectOffset] >= data->revision);
}