aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmltypeloader.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-09-13 15:03:51 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-20 14:26:18 +0200
commitb4b4a646800fabbb31b4b261ea4b802d78d6501f (patch)
tree285d3553373500e4cf9b882275604002c93870ba /src/qml/qml/qqmltypeloader.cpp
parent4a59984e0d024b88a1b556870b6c183816bb1d22 (diff)
[new compiler] Initial implementation of signal handler support
Signal handlers start out in the parser as binding expressions. A new SignalHandlerConverter converts the bindings then so that the expression is turned into a function declaration where the function parameters match the parameters of the signal. Change-Id: I3ea5aa3b80a6ee3b095c6841c63c3e3bb0b47e4f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/qqmltypeloader.cpp')
-rw-r--r--src/qml/qml/qqmltypeloader.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index db68631bbf..9ca41f6071 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -2173,13 +2173,29 @@ void QQmlTypeData::compile()
m_imports.populateCache(m_compiledData->importCache);
m_compiledData->importCache->addref();
+ QQmlEngine *engine = typeLoader()->engine();
+
+ QHash<int, QQmlPropertyCache*> resolvedPropertyCaches;
+
for (QHash<int, TypeReference>::ConstIterator resolvedType = m_resolvedTypes.constBegin(), end = m_resolvedTypes.constEnd();
resolvedType != end; ++resolvedType) {
QQmlCompiledData::TypeReference ref;
ref.type = resolvedType->type;
+ Q_ASSERT(ref.type);
+ resolvedPropertyCaches.insert(resolvedType.key(), ref.createPropertyCache(engine));
m_compiledData->resolvedTypes.insert(resolvedType.key(), ref);
}
+ {
+ SignalHandlerConverter converter(parsedQML.data(), resolvedPropertyCaches, m_compiledData);
+ if (!converter.convertSignalHandlerExpressionsToFunctionDeclarations()) {
+ setError(converter.errors);
+ m_compiledData->release();
+ m_compiledData = 0;
+ return;
+ }
+ }
+
JSCodeGen jsCodeGen;
jsCodeGen.generateJSCodeForFunctionsAndBindings(finalUrlString(), parsedQML.data());