diff options
Diffstat (limited to 'src/qmlcompiler/qqmljscompiler_p.h')
-rw-r--r-- | src/qmlcompiler/qqmljscompiler_p.h | 127 |
1 files changed, 78 insertions, 49 deletions
diff --git a/src/qmlcompiler/qqmljscompiler_p.h b/src/qmlcompiler/qqmljscompiler_p.h index 2cf427d134..aace476cf1 100644 --- a/src/qmlcompiler/qqmljscompiler_p.h +++ b/src/qmlcompiler/qqmljscompiler_p.h @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2020 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:GPL-EXCEPT$ -** 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 General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** 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-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #ifndef QQMLJSCOMPILER_P_H #define QQMLJSCOMPILER_P_H @@ -39,18 +14,27 @@ // // We mean it. +#include <qtqmlcompilerexports.h> + #include <QtCore/qstring.h> #include <QtCore/qlist.h> +#include <QtCore/qloggingcategory.h> +#include <private/qqmlirbuilder_p.h> +#include <private/qqmljscompilepass_p.h> #include <private/qqmljsdiagnosticmessage_p.h> +#include <private/qqmljsimporter_p.h> +#include <private/qqmljslogger_p.h> +#include <private/qqmljstyperesolver_p.h> #include <private/qv4compileddata_p.h> -#include <private/qqmlirbuilder_p.h> #include <functional> QT_BEGIN_NAMESPACE -struct QQmlJSCompileError +Q_QMLCOMPILER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcAotCompiler); + +struct Q_QMLCOMPILER_EXPORT QQmlJSCompileError { QString message; void print(); @@ -61,7 +45,7 @@ struct QQmlJSCompileError const QQmlJS::DiagnosticMessage &diagnostic); }; -struct QQmlJSAotFunction +struct Q_QMLCOMPILER_EXPORT QQmlJSAotFunction { QStringList includes; QStringList argumentTypes; @@ -69,40 +53,85 @@ struct QQmlJSAotFunction QString returnType; }; -class QQmlJSAotCompiler +class Q_QMLCOMPILER_EXPORT QQmlJSAotCompiler { public: + enum Flag { + NoFlags = 0x0, + ValidateBasicBlocks = 0x1, + }; + Q_DECLARE_FLAGS(Flags, Flag) + + QQmlJSAotCompiler(QQmlJSImporter *importer, const QString &resourcePath, + const QStringList &qmldirFiles, QQmlJSLogger *logger); + virtual ~QQmlJSAotCompiler() = default; - virtual void setDocument(QmlIR::Document *document) = 0; - virtual void setScope(const QmlIR::Object *object, const QmlIR::Object *scope) = 0; + virtual void setDocument(const QmlIR::JSCodeGen *codegen, const QmlIR::Document *document); + virtual void setScope(const QmlIR::Object *object, const QmlIR::Object *scope); virtual std::variant<QQmlJSAotFunction, QQmlJS::DiagnosticMessage> compileBinding( - const QmlIR::Binding &binding) = 0; + const QV4::Compiler::Context *context, const QmlIR::Binding &irBinding, + QQmlJS::AST::Node *astNode); virtual std::variant<QQmlJSAotFunction, QQmlJS::DiagnosticMessage> compileFunction( - const QmlIR::Function &function) = 0; + const QV4::Compiler::Context *context, const QString &name, QQmlJS::AST::Node *astNode); + + virtual QQmlJSAotFunction globalCode() const; + + Flags m_flags; - virtual QQmlJSAotFunction globalCode() const = 0; +protected: + virtual QQmlJS::DiagnosticMessage diagnose( + const QString &message, QtMsgType type, const QQmlJS::SourceLocation &location) const; + + QQmlJSTypeResolver m_typeResolver; + + const QString m_resourcePath; + const QStringList m_qmldirFiles; + + const QmlIR::Document *m_document = nullptr; + const QmlIR::Object *m_currentObject = nullptr; + const QmlIR::Object *m_currentScope = nullptr; + const QV4::Compiler::JSUnitGenerator *m_unitGenerator = nullptr; + + QQmlJSImporter *m_importer = nullptr; + QQmlJSLogger *m_logger = nullptr; + +private: + QQmlJSAotFunction doCompile( + const QV4::Compiler::Context *context, QQmlJSCompilePass::Function *function, + QQmlJS::DiagnosticMessage *error); }; +Q_DECLARE_OPERATORS_FOR_FLAGS(QQmlJSAotCompiler::Flags); using QQmlJSAotFunctionMap = QMap<int, QQmlJSAotFunction>; using QQmlJSSaveFunction = std::function<bool(const QV4::CompiledData::SaveableUnitPointer &, const QQmlJSAotFunctionMap &, QString *)>; -bool qCompileQmlFile(const QString &inputFileName, QQmlJSSaveFunction saveFunction, - QQmlJSAotCompiler *aotCompiler, QQmlJSCompileError *error); -bool qCompileQmlFile(QmlIR::Document &irDocument, const QString &inputFileName, - QQmlJSSaveFunction saveFunction, QQmlJSAotCompiler *aotCompiler, - QQmlJSCompileError *error); -bool qCompileJSFile(const QString &inputFileName, const QString &inputFileUrl, - QQmlJSSaveFunction saveFunction, QQmlJSCompileError *error); - - -bool qSaveQmlJSUnitAsCpp(const QString &inputFileName, const QString &outputFileName, - const QV4::CompiledData::SaveableUnitPointer &unit, - const QQmlJSAotFunctionMap &aotFunctions, - QString *errorString); +bool Q_QMLCOMPILER_EXPORT qCompileQmlFile(const QString &inputFileName, + QQmlJSSaveFunction saveFunction, + QQmlJSAotCompiler *aotCompiler, QQmlJSCompileError *error, + bool storeSourceLocation = false, + QV4::Compiler::CodegenWarningInterface *interface = + QV4::Compiler::defaultCodegenWarningInterface(), + const QString *fileContents = nullptr); +bool Q_QMLCOMPILER_EXPORT qCompileQmlFile(QmlIR::Document &irDocument, const QString &inputFileName, + QQmlJSSaveFunction saveFunction, + QQmlJSAotCompiler *aotCompiler, QQmlJSCompileError *error, + bool storeSourceLocation = false, + QV4::Compiler::CodegenWarningInterface *interface = + QV4::Compiler::defaultCodegenWarningInterface(), + const QString *fileContents = nullptr); +bool Q_QMLCOMPILER_EXPORT qCompileJSFile(const QString &inputFileName, const QString &inputFileUrl, + QQmlJSSaveFunction saveFunction, + QQmlJSCompileError *error); + +bool Q_QMLCOMPILER_EXPORT qSaveQmlJSUnitAsCpp(const QString &inputFileName, + const QString &outputFileName, + const QV4::CompiledData::SaveableUnitPointer &unit, + const QQmlJSAotFunctionMap &aotFunctions, + QString *errorString); QT_END_NAMESPACE |