diff options
Diffstat (limited to 'src/qml/compiler/qqmlirbuilder_p.h')
-rw-r--r-- | src/qml/compiler/qqmlirbuilder_p.h | 58 |
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 |