aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qqmlirbuilder_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/compiler/qqmlirbuilder_p.h')
-rw-r--r--src/qml/compiler/qqmlirbuilder_p.h58
1 files changed, 38 insertions, 20 deletions
diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h
index d4599c3757..ffd3ad72f7 100644
--- a/src/qml/compiler/qqmlirbuilder_p.h
+++ b/src/qml/compiler/qqmlirbuilder_p.h
@@ -167,6 +167,9 @@ struct PoolList
bool operator!=(const Iterator &rhs) const {
return ptr != rhs.ptr;
}
+
+ operator T *() { return ptr; }
+ operator const T *() const { return ptr; }
};
Iterator begin() { return Iterator(first); }
@@ -224,7 +227,7 @@ struct Parameter : public QV4::CompiledData::Parameter
return initType(type, annotationString, idGenerator(annotationString), Flag::NoFlag);
}
- static QV4::CompiledData::BuiltinType stringToBuiltinType(const QString &typeName);
+ static QV4::CompiledData::CommonType stringToBuiltinType(const QString &typeName);
private:
static bool initType(
@@ -293,7 +296,7 @@ struct Function
Function *next;
};
-struct Q_QML_COMPILER_PRIVATE_EXPORT CompiledFunctionOrExpression
+struct Q_QML_COMPILER_EXPORT CompiledFunctionOrExpression
{
CompiledFunctionOrExpression()
{}
@@ -304,7 +307,7 @@ struct Q_QML_COMPILER_PRIVATE_EXPORT CompiledFunctionOrExpression
CompiledFunctionOrExpression *next = nullptr;
};
-struct Q_QML_COMPILER_PRIVATE_EXPORT Object
+struct Q_QML_COMPILER_EXPORT Object
{
Q_DECLARE_TR_FUNCTIONS(Object)
public:
@@ -397,7 +400,7 @@ private:
PoolList<RequiredPropertyExtraData> *requiredPropertyExtraDatas;
};
-struct Q_QML_COMPILER_PRIVATE_EXPORT Pragma
+struct Q_QML_COMPILER_EXPORT Pragma
{
enum PragmaType
{
@@ -408,6 +411,7 @@ struct Q_QML_COMPILER_PRIVATE_EXPORT Pragma
FunctionSignatureBehavior,
NativeMethodBehavior,
ValueTypeBehavior,
+ Translator,
};
enum ListPropertyAssignBehaviorValue
@@ -437,9 +441,11 @@ struct Q_QML_COMPILER_PRIVATE_EXPORT Pragma
enum ValueTypeBehaviorValue
{
- Reference,
- Copy
+ Copy = 0x1,
+ Addressable = 0x2,
+ Assertable = 0x4,
};
+ Q_DECLARE_FLAGS(ValueTypeBehaviorValues, ValueTypeBehaviorValue);
PragmaType type;
@@ -448,13 +454,14 @@ struct Q_QML_COMPILER_PRIVATE_EXPORT Pragma
ComponentBehaviorValue componentBehavior;
FunctionSignatureBehaviorValue functionSignatureBehavior;
NativeMethodBehaviorValue nativeMethodBehavior;
- ValueTypeBehaviorValue valueTypeBehavior;
+ ValueTypeBehaviorValues::Int valueTypeBehavior;
+ uint translationContextIndex;
};
QV4::CompiledData::Location location;
};
-struct Q_QML_COMPILER_PRIVATE_EXPORT Document
+struct Q_QML_COMPILER_EXPORT Document
{
Document(bool debugMode);
QString code;
@@ -466,7 +473,13 @@ struct Q_QML_COMPILER_PRIVATE_EXPORT Document
QVector<Object*> objects;
QV4::Compiler::JSUnitGenerator jsGenerator;
- QV4::CompiledData::CompilationUnit javaScriptCompilationUnit;
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> javaScriptCompilationUnit;
+
+ bool isSingleton() const {
+ return std::any_of(pragmas.constBegin(), pragmas.constEnd(), [](const Pragma *pragma) {
+ return pragma->type == Pragma::Singleton;
+ });
+ }
int registerString(const QString &str) { return jsGenerator.registerString(str); }
QString stringAt(int index) const { return jsGenerator.stringForIndex(index); }
@@ -475,7 +488,7 @@ struct Q_QML_COMPILER_PRIVATE_EXPORT Document
Object* objectAt(int i) const {return objects.at(i);}
};
-class Q_QML_COMPILER_PRIVATE_EXPORT ScriptDirectivesCollector : public QQmlJS::Directives
+class Q_QML_COMPILER_EXPORT ScriptDirectivesCollector : public QQmlJS::Directives
{
QmlIR::Document *document;
QQmlJS::Engine *engine;
@@ -489,16 +502,13 @@ public:
void importModule(const QString &uri, const QString &version, const QString &module, int lineNumber, int column) override;
};
-struct Q_QML_COMPILER_PRIVATE_EXPORT IRBuilder : public QQmlJS::AST::Visitor
+struct Q_QML_COMPILER_EXPORT IRBuilder : public QQmlJS::AST::Visitor
{
Q_DECLARE_TR_FUNCTIONS(QQmlCodeGenerator)
public:
IRBuilder(const QSet<QString> &illegalNames);
bool generateFromQml(const QString &code, const QString &url, Document *output);
- static bool isSignalPropertyName(const QString &name);
- static QString signalNameFromSignalPropertyName(const QString &signalPropertyName);
-
using QQmlJS::AST::Visitor::visit;
using QQmlJS::AST::Visitor::endVisit;
@@ -611,7 +621,7 @@ public:
bool insideInlineComponent = false;
};
-struct Q_QML_COMPILER_PRIVATE_EXPORT QmlUnitGenerator
+struct Q_QML_COMPILER_EXPORT QmlUnitGenerator
{
void generate(Document &output, const QV4::CompiledData::DependentTypesHasher &dependencyHasher = QV4::CompiledData::DependentTypesHasher());
@@ -620,7 +630,7 @@ private:
char *writeBindings(char *bindingPtr, const Object *o, BindingFilter filter) const;
};
-struct Q_QML_COMPILER_PRIVATE_EXPORT JSCodeGen : public QV4::Compiler::Codegen
+struct Q_QML_COMPILER_EXPORT JSCodeGen : public QV4::Compiler::Codegen
{
JSCodeGen(Document *document, const QSet<QString> &globalNames,
QV4::Compiler::CodegenWarningInterface *iface =
@@ -665,8 +675,12 @@ void tryGeneratingTranslationBindingBase(QStringView base, QQmlJS::AST::Argument
if (base == QLatin1String("qsTr")) {
QV4::CompiledData::TranslationData translationData;
translationData.number = -1;
- translationData.commentIndex = 0; // empty string
- translationData.contextIndex = 0;
+
+ // empty string
+ translationData.commentIndex = 0;
+
+ // No context (not empty string)
+ translationData.contextIndex = QV4::CompiledData::TranslationData::NoContextIndex;
if (!args || !args->expression)
return; // no arguments, stop
@@ -706,8 +720,12 @@ void tryGeneratingTranslationBindingBase(QStringView base, QQmlJS::AST::Argument
} else if (base == QLatin1String("qsTrId")) {
QV4::CompiledData::TranslationData translationData;
translationData.number = -1;
- translationData.commentIndex = 0; // empty string, but unused
- translationData.contextIndex = 0;
+
+ // empty string, but unused
+ translationData.commentIndex = 0;
+
+ // No context (not empty string)
+ translationData.contextIndex = QV4::CompiledData::TranslationData::NoContextIndex;
if (!args || !args->expression)
return; // no arguments, stop