aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-01-02 12:17:31 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-02 23:36:58 +0100
commitbf3dfe64068d76f98a2176530e1158d5143e09b2 (patch)
treec50c3f52bef636474e851c010b0fff0e0eb936b3 /src/qml
parenteb3087e4b0b770200512925730c328a8bda7f3d7 (diff)
Fix property access to QQmlPropertyMap objects when addressed via id
Property access to id objects is optimized at compile time, but we cannot do that for QQmlPropertyMap instances (or generally fully dynamic types). This issue was a regression against Qt 5.1 Task-number: QTBUG-35906 Change-Id: I759a1a899f6a3a1f6466282f455b289ad7451086 Reviewed-by: Albert Astals Cid <albert.astals@canonical.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/compiler/qqmlcodegenerator.cpp6
-rw-r--r--src/qml/qml/qqmlcompiler.cpp5
2 files changed, 8 insertions, 3 deletions
diff --git a/src/qml/compiler/qqmlcodegenerator.cpp b/src/qml/compiler/qqmlcodegenerator.cpp
index ecb643e0f5..13b23fde68 100644
--- a/src/qml/compiler/qqmlcodegenerator.cpp
+++ b/src/qml/compiler/qqmlcodegenerator.cpp
@@ -1550,8 +1550,10 @@ V4IR::Expr *JSCodeGen::fallbackNameLookup(const QString &name, int line, int col
V4IR::Temp *result = _block->TEMP(_block->newTemp());
_block->MOVE(result, s);
result = _block->TEMP(result->index);
- initMetaObjectResolver(&result->memberResolver, mapping.type);
- result->memberResolver.flags |= AllPropertiesAreFinal;
+ if (mapping.type) {
+ initMetaObjectResolver(&result->memberResolver, mapping.type);
+ result->memberResolver.flags |= AllPropertiesAreFinal;
+ }
result->isReadOnly = true; // don't allow use as lvalue
return result;
}
diff --git a/src/qml/qml/qqmlcompiler.cpp b/src/qml/qml/qqmlcompiler.cpp
index 2e208f2f3b..3dd9d6a14d 100644
--- a/src/qml/qml/qqmlcompiler.cpp
+++ b/src/qml/qml/qqmlcompiler.cpp
@@ -3711,7 +3711,10 @@ bool QQmlCompiler::completeComponentBuild()
JSCodeGen::IdMapping m;
m.name = o->id;
m.idIndex = o->idIndex;
- m.type = o->metatype;
+ if (output->types[o->type].isFullyDynamicType)
+ m.type = 0;
+ else
+ m.type = o->metatype;
idMapping << m;
}
}