aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2012-02-28 13:03:30 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-29 01:24:11 +0100
commitab727e6702e949c8f36649f16a81780746ebb2de (patch)
tree6e7bd6fa9743e345802738e0e62093d126b2936f
parentba3ac328ca721712c56f28a1fc6ae8e64b6ad7f2 (diff)
Add and use a method for querying whether a property is revisioned.
Accessor data and the revision are now unioned, so querying the value directly can give incorrect results. Change-Id: I0ba6c53d8bd6b012507bfb32d33dc414348379b0 Reviewed-by: Chris Adams <christopher.adams@nokia.com>
-rw-r--r--src/declarative/qml/qdeclarativepropertycache_p.h1
-rw-r--r--src/declarative/qml/v4/qv4irbuilder.cpp6
-rw-r--r--src/declarative/qml/v8/qv8qobjectwrapper.cpp4
3 files changed, 6 insertions, 5 deletions
diff --git a/src/declarative/qml/qdeclarativepropertycache_p.h b/src/declarative/qml/qdeclarativepropertycache_p.h
index d5d7095667..301f70bfe8 100644
--- a/src/declarative/qml/qdeclarativepropertycache_p.h
+++ b/src/declarative/qml/qdeclarativepropertycache_p.h
@@ -149,6 +149,7 @@ public:
bool hasOverride() const { return !(flags & IsValueTypeVirtual) &&
!(flags & HasAccessors) &&
overrideIndex >= 0; }
+ bool hasRevision() const { return !(flags & HasAccessors) && revision != 0; }
// Returns -1 if not a value type virtual property
inline int getValueTypeCoreIndex() const;
diff --git a/src/declarative/qml/v4/qv4irbuilder.cpp b/src/declarative/qml/v4/qv4irbuilder.cpp
index 604eeaa713..522bc01684 100644
--- a/src/declarative/qml/v4/qv4irbuilder.cpp
+++ b/src/declarative/qml/v4/qv4irbuilder.cpp
@@ -437,7 +437,7 @@ bool QV4IRBuilder::visit(AST::IdentifierExpression *ast)
QDeclarativePropertyData *data = cache->property(name);
- if (data && data->revision != 0) {
+ if (data && data->hasRevision()) {
if (qmlVerboseCompiler())
qWarning() << "*** versioned symbol:" << name;
discard();
@@ -458,7 +458,7 @@ bool QV4IRBuilder::visit(AST::IdentifierExpression *ast)
QDeclarativePropertyData *data = cache->property(name);
- if (data && data->revision != 0) {
+ if (data && data->hasRevision()) {
if (qmlVerboseCompiler())
qWarning() << "*** versioned symbol:" << name;
discard();
@@ -609,7 +609,7 @@ bool QV4IRBuilder::visit(AST::FieldMemberExpression *ast)
if (!data || data->isFunction())
return false; // Don't support methods (or non-existing properties ;)
- if (data->revision != 0) {
+ if (data->hasRevision()) {
if (qmlVerboseCompiler())
qWarning() << "*** versioned symbol:" << name;
discard();
diff --git a/src/declarative/qml/v8/qv8qobjectwrapper.cpp b/src/declarative/qml/v8/qv8qobjectwrapper.cpp
index 11733be5fd..9c4e07ae4f 100644
--- a/src/declarative/qml/v8/qv8qobjectwrapper.cpp
+++ b/src/declarative/qml/v8/qv8qobjectwrapper.cpp
@@ -513,7 +513,7 @@ v8::Handle<v8::Value> QV8QObjectWrapper::GetProperty(QV8Engine *engine, QObject
if (!result)
return v8::Handle<v8::Value>();
- if (revisionMode == QV8QObjectWrapper::CheckRevision && result->revision != 0) {
+ if (revisionMode == QV8QObjectWrapper::CheckRevision && result->hasRevision()) {
QDeclarativeData *ddata = QDeclarativeData::get(object);
if (ddata && ddata->propertyCache && !ddata->propertyCache->isAllowedInRevision(result))
return v8::Handle<v8::Value>();
@@ -673,7 +673,7 @@ bool QV8QObjectWrapper::SetProperty(QV8Engine *engine, QObject *object, const QH
if (!result)
return false;
- if (revisionMode == QV8QObjectWrapper::CheckRevision && result->revision != 0) {
+ if (revisionMode == QV8QObjectWrapper::CheckRevision && result->hasRevision()) {
QDeclarativeData *ddata = QDeclarativeData::get(object);
if (ddata && ddata->propertyCache && !ddata->propertyCache->isAllowedInRevision(result))
return false;