diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-01-02 12:17:31 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-02 23:36:58 +0100 |
commit | bf3dfe64068d76f98a2176530e1158d5143e09b2 (patch) | |
tree | c50c3f52bef636474e851c010b0fff0e0eb936b3 /src/qml | |
parent | eb3087e4b0b770200512925730c328a8bda7f3d7 (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.cpp | 6 | ||||
-rw-r--r-- | src/qml/qml/qqmlcompiler.cpp | 5 |
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; } } |