diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-09-19 13:32:13 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-20 14:27:49 +0200 |
commit | 3123a22ae66016a0d9cd600dbb6f636fd29fc312 (patch) | |
tree | de483a714d4ac3234de4b13e3c6bb00d437d0a32 /src/qml/qml/qqmltypeloader.cpp | |
parent | 4c953b1592956b712eca60eec070868a567c04c1 (diff) |
[new compiler] Initial support for alias properties
Aliases are resolved at "compile time", not rough JS expressions. This is
done right after we determined the scope of components in the QML file,
which is also where we collect object ids (that aliases use).
Change-Id: If5702337f2cca08d17f196c3b2fde3bbdfea5b3c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/qqmltypeloader.cpp')
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 24 |
1 files changed, 4 insertions, 20 deletions
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 096356126d..7b1935a447 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2281,28 +2281,12 @@ void QQmlTypeData::compile() } } - { - // Scan for anonymous components and determine their scopes. - QQmlAnonymousComponentResolver resolver(m_compiledData->url, m_compiledData->qmlUnit, m_compiledData->resolvedTypes, m_compiledData->propertyCaches); + if (errors.isEmpty()) { + // Scan for components, determine their scopes and resolve aliases within the scope. + QQmlComponentAndAliasResolver resolver(m_compiledData->url, m_compiledData->qmlUnit, m_compiledData->resolvedTypes, m_compiledData->propertyCaches, + &m_compiledData->datas, &m_compiledData->objectIndexToIdForRoot, &m_compiledData->objectIndexToIdPerComponent); if (!resolver.resolve()) errors << resolver.errors; - - for (quint32 i = 0; i < qmlUnit->nObjects; ++i) { - const QV4::CompiledData::Object *obj = qmlUnit->objectAt(i); - - QHash<int, int> *objectIndexToId = 0; - QHash<int, int>::ConstIterator componentIt = resolver.objectIndexToComponentIndex.find(i); - if (componentIt != resolver.objectIndexToComponentIndex.constEnd()) { - int indexOfComponent = resolver.componentRoots[*componentIt]; - objectIndexToId = &m_compiledData->objectIndexToIdPerComponent[indexOfComponent]; - } else - objectIndexToId = &m_compiledData->objectIndexToIdForRoot; - - const QString &id = qmlUnit->header.stringAt(obj->idIndex); - if (id.isEmpty()) - continue; - objectIndexToId->insert(i, objectIndexToId->count()); - } } if (!errors.isEmpty()) { |