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.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/qmlcompiler/qqmljscompiler_p.h b/src/qmlcompiler/qqmljscompiler_p.h
new file mode 100644
index 0000000000..94cf71b884
--- /dev/null
+++ b/src/qmlcompiler/qqmljscompiler_p.h
@@ -0,0 +1,144 @@
+// 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
+
+//
+// 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 <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/qqmljscompilerstats_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 <functional>
+
+QT_BEGIN_NAMESPACE
+
+QT_DECLARE_EXPORTED_QT_LOGGING_CATEGORY(lcAotCompiler, Q_QMLCOMPILER_EXPORT);
+
+struct Q_QMLCOMPILER_EXPORT QQmlJSCompileError
+{
+ QString message;
+ void print();
+ QQmlJSCompileError augment(const QString &contextErrorMessage) const;
+ void appendDiagnostics(const QString &inputFileName,
+ const QList<QQmlJS::DiagnosticMessage> &diagnostics);
+ void appendDiagnostic(const QString &inputFileName,
+ const QQmlJS::DiagnosticMessage &diagnostic);
+};
+
+struct Q_QMLCOMPILER_EXPORT QQmlJSAotFunction
+{
+ QStringList includes;
+ QString code;
+ QString signature;
+ int numArguments = 0;
+};
+
+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(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 QV4::Compiler::Context *context, const QmlIR::Binding &irBinding,
+ QQmlJS::AST::Node *astNode);
+ virtual std::variant<QQmlJSAotFunction, QQmlJS::DiagnosticMessage> compileFunction(
+ const QV4::Compiler::Context *context, const QString &name, QQmlJS::AST::Node *astNode);
+
+ virtual QQmlJSAotFunction globalCode() const;
+
+ Flags m_flags;
+
+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);
+ QQmlJSAotFunction doCompileAndRecordAotStats(const QV4::Compiler::Context *context,
+ QQmlJSCompilePass::Function *function,
+ QQmlJS::DiagnosticMessage *error,
+ const QString &name,
+ QQmlJS::SourceLocation location);
+};
+
+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 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
+
+#endif // QQMLJSCOMPILER_P_H