Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qqmljscompiler_p.h
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef QQMLJSCOMPILER_P_H
5#define QQMLJSCOMPILER_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16
17#include <qtqmlcompilerexports.h>
18
19#include <QtCore/qstring.h>
20#include <QtCore/qlist.h>
21#include <QtCore/qloggingcategory.h>
22
23#include <private/qqmlirbuilder_p.h>
24#include <private/qqmljscompilepass_p.h>
25#include <private/qqmljsdiagnosticmessage_p.h>
26#include <private/qqmljsimporter_p.h>
27#include <private/qqmljslogger_p.h>
28#include <private/qqmljstyperesolver_p.h>
29#include <private/qv4compileddata_p.h>
30
31#include <functional>
32
34
35Q_QMLCOMPILER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcAotCompiler);
36
37struct Q_QMLCOMPILER_EXPORT QQmlJSCompileError
38{
40 void print();
41 QQmlJSCompileError augment(const QString &contextErrorMessage) const;
42 void appendDiagnostics(const QString &inputFileName,
43 const QList<QQmlJS::DiagnosticMessage> &diagnostics);
44 void appendDiagnostic(const QString &inputFileName,
45 const QQmlJS::DiagnosticMessage &diagnostic);
46};
47
48struct Q_QMLCOMPILER_EXPORT QQmlJSAotFunction
49{
53 int numArguments = 0;
54};
55
56class Q_QMLCOMPILER_EXPORT QQmlJSAotCompiler
57{
58public:
59 enum Flag {
60 NoFlags = 0x0,
61 ValidateBasicBlocks = 0x1,
62 };
64
65 QQmlJSAotCompiler(QQmlJSImporter *importer, const QString &resourcePath,
66 const QStringList &qmldirFiles, QQmlJSLogger *logger);
67
68 virtual ~QQmlJSAotCompiler() = default;
69
70 virtual void setDocument(const QmlIR::JSCodeGen *codegen, const QmlIR::Document *document);
71 virtual void setScope(const QmlIR::Object *object, const QmlIR::Object *scope);
72 virtual std::variant<QQmlJSAotFunction, QQmlJS::DiagnosticMessage> compileBinding(
73 const QV4::Compiler::Context *context, const QmlIR::Binding &irBinding,
74 QQmlJS::AST::Node *astNode);
75 virtual std::variant<QQmlJSAotFunction, QQmlJS::DiagnosticMessage> compileFunction(
77
78 virtual QQmlJSAotFunction globalCode() const;
79
81
82protected:
85
87
90
91 const QmlIR::Document *m_document = nullptr;
92 const QmlIR::Object *m_currentObject = nullptr;
93 const QmlIR::Object *m_currentScope = nullptr;
94 const QV4::Compiler::JSUnitGenerator *m_unitGenerator = nullptr;
95
96 QQmlJSImporter *m_importer = nullptr;
97 QQmlJSLogger *m_logger = nullptr;
98
99private:
100 QQmlJSAotFunction doCompile(
103};
104
105Q_DECLARE_OPERATORS_FOR_FLAGS(QQmlJSAotCompiler::Flags);
106
107using QQmlJSAotFunctionMap = QMap<int, QQmlJSAotFunction>;
109 = std::function<bool(const QV4::CompiledData::SaveableUnitPointer &,
110 const QQmlJSAotFunctionMap &, QString *)>;
111
112bool Q_QMLCOMPILER_EXPORT qCompileQmlFile(const QString &inputFileName,
113 QQmlJSSaveFunction saveFunction,
115 bool storeSourceLocation = false,
118 const QString *fileContents = nullptr);
119bool Q_QMLCOMPILER_EXPORT qCompileQmlFile(QmlIR::Document &irDocument, const QString &inputFileName,
120 QQmlJSSaveFunction saveFunction,
122 bool storeSourceLocation = false,
125 const QString *fileContents = nullptr);
126bool Q_QMLCOMPILER_EXPORT qCompileJSFile(const QString &inputFileName, const QString &inputFileUrl,
127 QQmlJSSaveFunction saveFunction,
129
130bool Q_QMLCOMPILER_EXPORT qSaveQmlJSUnitAsCpp(const QString &inputFileName,
131 const QString &outputFileName,
133 const QQmlJSAotFunctionMap &aotFunctions,
134 QString *errorString);
135
137
138#endif // QQMLJSCOMPILER_P_H
Definition qmap.h:187
QQmlJSTypeResolver m_typeResolver
const QString m_resourcePath
const QStringList m_qmldirFiles
virtual ~QQmlJSAotCompiler()=default
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
Combined button and popup list for selecting options.
CodegenWarningInterface * defaultCodegenWarningInterface()
static void * context
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char * interface
DBusConnection const char DBusError * error
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition qflags.h:174
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Definition qflags.h:194
Flags
QtMsgType
Definition qlogging.h:29
#define Q_DECLARE_LOGGING_CATEGORY(name)
GLint location
GLenum type
GLuint GLsizei const GLchar * message
GLuint name
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 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)
std::function< bool(const QV4::CompiledData::SaveableUnitPointer &, const QQmlJSAotFunctionMap &, QString *)> QQmlJSSaveFunction
static void diagnose(const QString &message, QtMsgType type, const QQmlJS::SourceLocation &location, QQmlJS::DiagnosticMessage *error)