aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler/qqmljscompiler_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmlcompiler/qqmljscompiler_p.h')
-rw-r--r--src/qmlcompiler/qqmljscompiler_p.h127
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