aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qqmltypecompiler_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/compiler/qqmltypecompiler_p.h')
-rw-r--r--src/qml/compiler/qqmltypecompiler_p.h347
1 files changed, 0 insertions, 347 deletions
diff --git a/src/qml/compiler/qqmltypecompiler_p.h b/src/qml/compiler/qqmltypecompiler_p.h
deleted file mode 100644
index f588909c42..0000000000
--- a/src/qml/compiler/qqmltypecompiler_p.h
+++ /dev/null
@@ -1,347 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef QQMLTYPECOMPILER_P_H
-#define QQMLTYPECOMPILER_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qglobal.h>
-#include <qqmlerror.h>
-#include <qhash.h>
-#include <private/qqmltypeloader_p.h>
-#include <private/qqmlirbuilder_p.h>
-#include <private/qqmlpropertycachecreator_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class QQmlEnginePrivate;
-class QQmlError;
-class QQmlTypeData;
-class QQmlImports;
-
-namespace QmlIR {
-struct Document;
-}
-
-namespace QV4 {
-namespace CompiledData {
-struct QmlUnit;
-struct Location;
-}
-}
-
-struct QQmlTypeCompiler
-{
- Q_DECLARE_TR_FUNCTIONS(QQmlTypeCompiler)
-public:
- QQmlTypeCompiler(QQmlEnginePrivate *engine, QQmlTypeData *typeData, QmlIR::Document *document,
- const QQmlRefPointer<QQmlTypeNameCache> &typeNameCache,
- QV4::ResolvedTypeReferenceMap *resolvedTypeCache,
- const QV4::CompiledData::DependentTypesHasher &dependencyHasher);
-
- // --- interface used by QQmlPropertyCacheCreator
- typedef QmlIR::Object CompiledObject;
- const QmlIR::Object *objectAt(int index) const { return document->objects.at(index); }
- int objectCount() const { return document->objects.count(); }
- QString stringAt(int idx) const;
- QmlIR::PoolList<QmlIR::Function>::Iterator objectFunctionsBegin(const QmlIR::Object *object) const { return object->functionsBegin(); }
- QmlIR::PoolList<QmlIR::Function>::Iterator objectFunctionsEnd(const QmlIR::Object *object) const { return object->functionsEnd(); }
- QV4::ResolvedTypeReferenceMap *resolvedTypes = nullptr;
- // ---
-
- QQmlRefPointer<QV4::ExecutableCompilationUnit> compile();
-
- QList<QQmlError> compilationErrors() const { return errors; }
- void recordError(QQmlError error);
- void recordError(const QV4::CompiledData::Location &location, const QString &description);
- void recordError(const QQmlCompileError &error);
-
- int registerString(const QString &str);
- int registerConstant(QV4::ReturnedValue v);
-
- const QV4::CompiledData::Unit *qmlUnit() const;
-
- QUrl url() const { return typeData->finalUrl(); }
- QQmlEnginePrivate *enginePrivate() const { return engine; }
- const QQmlImports *imports() const;
- QVector<QmlIR::Object *> *qmlObjects() const;
- void setPropertyCaches(QQmlPropertyCacheVector &&caches);
- const QQmlPropertyCacheVector *propertyCaches() const;
- QQmlPropertyCacheVector &&takePropertyCaches();
- void setComponentRoots(const QVector<quint32> &roots) { m_componentRoots = roots; }
- const QVector<quint32> &componentRoots() const { return m_componentRoots; }
- QQmlJS::MemoryPool *memoryPool();
- QStringRef newStringRef(const QString &string);
- const QV4::Compiler::StringTableGenerator *stringPool() const;
-
- const QHash<int, QQmlCustomParser*> &customParserCache() const { return customParsers; }
-
- QString bindingAsString(const QmlIR::Object *object, int scriptIndex) const;
-
- void addImport(const QString &module, const QString &qualifier, int majorVersion, int minorVersion);
-
- QV4::ResolvedTypeReference *resolvedType(int id) const
- {
- return resolvedTypes->value(id);
- }
-
-private:
- QList<QQmlError> errors;
- QQmlEnginePrivate *engine;
- QQmlTypeData *typeData;
- const QV4::CompiledData::DependentTypesHasher &dependencyHasher;
- QQmlRefPointer<QQmlTypeNameCache> typeNameCache;
- QmlIR::Document *document;
- // index is string index of type name (use obj->inheritedTypeNameIndex)
- QHash<int, QQmlCustomParser*> customParsers;
-
- // index in first hash is component index, vector inside contains object indices of objects with id property
- QVector<quint32> m_componentRoots;
- QQmlPropertyCacheVector m_propertyCaches;
-};
-
-struct QQmlCompilePass
-{
- QQmlCompilePass(QQmlTypeCompiler *typeCompiler);
-
- QString stringAt(int idx) const { return compiler->stringAt(idx); }
-protected:
- void recordError(const QV4::CompiledData::Location &location, const QString &description) const
- { compiler->recordError(location, description); }
- void recordError(const QQmlCompileError &error)
- { compiler->recordError(error); }
-
- QV4::ResolvedTypeReference *resolvedType(int id) const
- { return compiler->resolvedType(id); }
- bool containsResolvedType(int id) const
- { return compiler->resolvedTypes->contains(id); }
- QV4::ResolvedTypeReferenceMap::iterator insertResolvedType(
- int id, QV4::ResolvedTypeReference *value)
- { return compiler->resolvedTypes->insert(id, value); }
-
- QQmlTypeCompiler *compiler;
-};
-
-// "Converts" signal expressions to full-fleged function declarations with
-// parameters taken from the signal declarations
-// It also updates the QV4::CompiledData::Binding objects to set the property name
-// to the final signal name (onTextChanged -> textChanged) and sets the IsSignalExpression flag.
-struct SignalHandlerConverter : public QQmlCompilePass
-{
- Q_DECLARE_TR_FUNCTIONS(SignalHandlerConverter)
-public:
- SignalHandlerConverter(QQmlTypeCompiler *typeCompiler);
-
- bool convertSignalHandlerExpressionsToFunctionDeclarations();
-
-private:
- bool convertSignalHandlerExpressionsToFunctionDeclarations(const QmlIR::Object *obj, const QString &typeName, QQmlPropertyCache *propertyCache);
-
- QQmlEnginePrivate *enginePrivate;
- const QVector<QmlIR::Object*> &qmlObjects;
- const QQmlImports *imports;
- const QHash<int, QQmlCustomParser*> &customParsers;
- const QSet<QString> &illegalNames;
- const QQmlPropertyCacheVector * const propertyCaches;
-};
-
-// ### This will go away when the codegen resolves all enums to constant expressions
-// and we replace the constant expression with a literal binding instead of using
-// a script.
-class QQmlEnumTypeResolver : public QQmlCompilePass
-{
- Q_DECLARE_TR_FUNCTIONS(QQmlEnumTypeResolver)
-public:
- QQmlEnumTypeResolver(QQmlTypeCompiler *typeCompiler);
-
- bool resolveEnumBindings();
-
-private:
- bool assignEnumToBinding(QmlIR::Binding *binding, const QStringRef &enumName, int enumValue, bool isQtObject);
- bool assignEnumToBinding(QmlIR::Binding *binding, const QString &enumName, int enumValue, bool isQtObject)
- {
- return assignEnumToBinding(binding, QStringRef(&enumName), enumValue, isQtObject);
- }
- bool tryQualifiedEnumAssignment(const QmlIR::Object *obj, const QQmlPropertyCache *propertyCache,
- const QQmlPropertyData *prop,
- QmlIR::Binding *binding);
- int evaluateEnum(const QString &scope, const QStringRef &enumName, const QStringRef &enumValue, bool *ok) const;
-
-
- const QVector<QmlIR::Object*> &qmlObjects;
- const QQmlPropertyCacheVector * const propertyCaches;
- const QQmlImports *imports;
-};
-
-class QQmlCustomParserScriptIndexer: public QQmlCompilePass
-{
-public:
- QQmlCustomParserScriptIndexer(QQmlTypeCompiler *typeCompiler);
-
- void annotateBindingsWithScriptStrings();
-
-private:
- void scanObjectRecursively(int objectIndex, bool annotateScriptBindings = false);
-
- const QVector<QmlIR::Object*> &qmlObjects;
- const QHash<int, QQmlCustomParser*> &customParsers;
-};
-
-// Annotate properties bound to aliases with a flag
-class QQmlAliasAnnotator : public QQmlCompilePass
-{
-public:
- QQmlAliasAnnotator(QQmlTypeCompiler *typeCompiler);
-
- void annotateBindingsToAliases();
-private:
- const QVector<QmlIR::Object*> &qmlObjects;
- const QQmlPropertyCacheVector * const propertyCaches;
-};
-
-class QQmlScriptStringScanner : public QQmlCompilePass
-{
-public:
- QQmlScriptStringScanner(QQmlTypeCompiler *typeCompiler);
-
- void scan();
-
-private:
- const QVector<QmlIR::Object*> &qmlObjects;
- const QQmlPropertyCacheVector * const propertyCaches;
-};
-
-class QQmlComponentAndAliasResolver : public QQmlCompilePass
-{
- Q_DECLARE_TR_FUNCTIONS(QQmlAnonymousComponentResolver)
-public:
- QQmlComponentAndAliasResolver(QQmlTypeCompiler *typeCompiler);
-
- bool resolve();
-
-protected:
- void findAndRegisterImplicitComponents(const QmlIR::Object *obj, QQmlPropertyCache *propertyCache);
- bool collectIdsAndAliases(int objectIndex);
- bool resolveAliases(int componentIndex);
- void propertyDataForAlias(QmlIR::Alias *alias, int *type, quint32 *propertyFlags);
-
- enum AliasResolutionResult {
- NoAliasResolved,
- SomeAliasesResolved,
- AllAliasesResolved
- };
-
- AliasResolutionResult resolveAliasesInObject(int objectIndex, QQmlCompileError *error);
-
- QQmlEnginePrivate *enginePrivate;
- QQmlJS::MemoryPool *pool;
-
- QVector<QmlIR::Object*> *qmlObjects;
-
- // indices of the objects that are actually Component {}
- QVector<quint32> componentRoots;
-
- // Deliberate choice of map over hash here to ensure stable generated output.
- QMap<int, int> _idToObjectIndex;
- QVector<int> _objectsWithAliases;
-
- QQmlPropertyCacheVector propertyCaches;
-};
-
-class QQmlDeferredAndCustomParserBindingScanner : public QQmlCompilePass
-{
-public:
- QQmlDeferredAndCustomParserBindingScanner(QQmlTypeCompiler *typeCompiler);
-
- bool scanObject();
-
-private:
- bool scanObject(int objectIndex);
-
- QVector<QmlIR::Object*> *qmlObjects;
- const QQmlPropertyCacheVector * const propertyCaches;
- const QHash<int, QQmlCustomParser*> &customParsers;
-
- bool _seenObjectWithId;
-};
-
-// ### merge with QtQml::JSCodeGen and operate directly on object->functionsAndExpressions once old compiler is gone.
-class QQmlJSCodeGenerator : public QQmlCompilePass
-{
-public:
- QQmlJSCodeGenerator(QQmlTypeCompiler *typeCompiler, QmlIR::JSCodeGen *v4CodeGen);
-
- bool generateCodeForComponents();
-
-private:
- bool compileComponent(int componentRoot);
- bool compileJavaScriptCodeInObjectsRecursively(int objectIndex, int scopeObjectIndex);
-
- const QHash<int, QQmlCustomParser*> &customParsers;
- const QVector<QmlIR::Object*> &qmlObjects;
- const QQmlPropertyCacheVector * const propertyCaches;
- QmlIR::JSCodeGen * const v4CodeGen;
-};
-
-class QQmlDefaultPropertyMerger : public QQmlCompilePass
-{
-public:
- QQmlDefaultPropertyMerger(QQmlTypeCompiler *typeCompiler);
-
- void mergeDefaultProperties();
-
-private:
- void mergeDefaultProperties(int objectIndex);
-
- const QVector<QmlIR::Object*> &qmlObjects;
- const QQmlPropertyCacheVector * const propertyCaches;
-};
-
-QT_END_NAMESPACE
-
-#endif // QQMLTYPECOMPILER_P_H