diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-02-28 13:06:28 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-02 20:52:46 +0100 |
commit | 735cbe15c20f3a3fde23987b0e1a596d64324f20 (patch) | |
tree | 97790ac814e893d7987dddd50a0e77e03b7e17c6 /src/qml/compiler/qqmltypecompiler.cpp | |
parent | a283fab5bec49cc1588125b3130867796b04e0d0 (diff) |
[new compiler] Fix for tst_qqmlconnections
Make sure to pass onFooChanged handlers to QQmlConnection's custom parser by
not relying on the signal handler converter to set the
IsSignalHandlerExpression flag. That should only be set for real signal
handlers, the custom parser gets the raw bindings.
Also don't try to initialize bindings at creation time the custom parser
covers.
Change-Id: Iae22bc886c312843136f073959e59da440f4184c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/compiler/qqmltypecompiler.cpp')
-rw-r--r-- | src/qml/compiler/qqmltypecompiler.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp index b04c65c968..493eb504c3 100644 --- a/src/qml/compiler/qqmltypecompiler.cpp +++ b/src/qml/compiler/qqmltypecompiler.cpp @@ -344,7 +344,7 @@ QHash<int, QHash<int, int> > *QQmlTypeCompiler::objectIndexToIdPerComponent() return &compiledData->objectIndexToIdPerComponent; } -QHash<int, QByteArray> *QQmlTypeCompiler::customParserData() +QHash<int, QQmlCompiledData::CustomParserData> *QQmlTypeCompiler::customParserData() { return &compiledData->customParserData; } @@ -1485,6 +1485,8 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD groupProperties.insert(pos, binding); } + QBitArray customParserBindings(obj->nBindings); + PropertyResolver propertyResolver(propertyCache); QString defaultPropertyName; @@ -1500,20 +1502,24 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD binding = obj->bindingTable(); for (quint32 i = 0; i < obj->nBindings; ++i, ++binding) { + QString name = stringAt(binding->propertyNameIndex); if (customParser) { if (binding->type == QV4::CompiledData::Binding::Type_AttachedProperty) { if (customParser->flags() & QQmlCustomParser::AcceptsAttachedProperties) { customBindings << binding; + customParserBindings.setBit(i); continue; } - } else if ((binding->flags & QV4::CompiledData::Binding::IsSignalHandlerExpression) + } else if (QQmlCodeGenerator::isSignalPropertyName(name) && !(customParser->flags() & QQmlCustomParser::AcceptsSignalHandlers)) { customBindings << binding; + customParserBindings.setBit(i); continue; } else if (binding->type == QV4::CompiledData::Binding::Type_Object || binding->type == QV4::CompiledData::Binding::Type_GroupProperty) { customBindings << binding; + customParserBindings.setBit(i); continue; } } @@ -1523,8 +1529,6 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD || binding->flags & QV4::CompiledData::Binding::IsSignalHandlerObject) continue; - QString name = stringAt(binding->propertyNameIndex); - if (name.constData()->isUpper() && !binding->isAttachedProperty()) { QQmlType *type = 0; QQmlImportNamespace *typeNamespace = 0; @@ -1639,6 +1643,7 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD } else { if (customParser) { customBindings << binding; + customParserBindings.setBit(i); continue; } if (bindingToDefaultProperty) { @@ -1652,7 +1657,9 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD if (customParser && !customBindings.isEmpty()) { customParser->clearErrors(); customParser->compiler = this; - QByteArray data = customParser->compile(qmlUnit, customBindings); + QQmlCompiledData::CustomParserData data; + data.bindings = customParserBindings; + data.compilationArtifact = customParser->compile(qmlUnit, customBindings); customParser->compiler = 0; customParserData->insert(objectIndex, data); const QList<QQmlError> parserErrors = customParser->errors(); |