3#ifndef QQMLTYPECOMPILER_P_H
4#define QQMLTYPECOMPILER_P_H
20#include <private/qqmltypeloader_p.h>
21#include <private/qqmlirbuilder_p.h>
22#include <private/qqmlpropertyresolver_p.h>
23#include <private/qqmlpropertycachecreator_p.h>
70 for (
const QmlIR::Pragma *pragma: document->pragmas) {
71 if (pragma->type == QmlIR::Pragma::ListPropertyAssignBehavior)
72 return pragma->listPropertyAssignBehavior;
74 return ListPropertyAssignBehavior::Append;
82 void recordError(
const QQmlJS::DiagnosticMessage &message);
90 QUrl url()
const {
return typeData->finalUrl(); }
92 const QQmlImports *
imports()
const;
104 void addImport(
const QString &module,
const QString &qualifier, QTypeRevision version);
108 return resolvedTypes->value(id);
113 for (QV4::ResolvedTypeReference *ref : std::as_const(*resolvedTypes)) {
114 if (ref->type().typeId() == type)
123 QList<QQmlError> errors;
124 QQmlTypeLoader *loader;
125 const QV4::CompiledData::DependentTypesHasher &dependencyHasher;
126 QmlIR::Document *document;
128 QHash<
int, QQmlCustomParser*> customParsers;
131 QQmlPropertyCacheVector m_propertyCaches;
133 QQmlTypeData *typeData;
146 {
return compiler->resolvedType(id); }
163 bool resolveSignalHandlerExpressions(
164 const QmlIR::Object *obj,
const QString &typeName,
165 const QQmlPropertyCache::ConstPtr &propertyCache,
166 QQmlPropertyResolver::RevisionCheck revisionCheck
167 = QQmlPropertyResolver::CheckRevision);
169 QQmlTypeLoader *typeLoader;
170 const QVector<QmlIR::Object*> &qmlObjects;
171 const QQmlImports *imports;
172 const QHash<
int, QQmlCustomParser*> &customParsers;
173 const QQmlPropertyCacheVector *
const propertyCaches;
188 bool assignEnumToBinding(QmlIR::Binding *binding, QStringView enumName,
int enumValue,
bool isQtObject);
189 bool assignEnumToBinding(QmlIR::Binding *binding,
const QString &enumName,
int enumValue,
bool isQtObject)
191 return assignEnumToBinding(binding, QStringView(enumName), enumValue, isQtObject);
193 bool tryQualifiedEnumAssignment(
194 const QmlIR::Object *obj,
const QQmlPropertyCache::ConstPtr &propertyCache,
195 const QQmlPropertyData *prop, QmlIR::Binding *binding);
196 int evaluateEnum(
const QString &scope, QStringView enumName, QStringView enumValue,
bool *ok)
const;
199 const QVector<QmlIR::Object*> &qmlObjects;
200 const QQmlPropertyCacheVector *
const propertyCaches;
201 const QQmlImports *imports;
212 void scanObjectRecursively(
int objectIndex,
bool annotateScriptBindings =
false);
214 const QVector<QmlIR::Object*> &qmlObjects;
215 const QHash<
int, QQmlCustomParser*> &customParsers;
226 const QVector<QmlIR::Object*> &qmlObjects;
227 const QQmlPropertyCacheVector *
const propertyCaches;
238 const QVector<QmlIR::Object*> &qmlObjects;
239 const QQmlPropertyCacheVector *
const propertyCaches;
251 enum class ScopeDeferred { False, True };
252 bool scanObject(
int objectIndex, ScopeDeferred scopeDeferred);
254 QVector<QmlIR::Object*> *qmlObjects;
255 const QQmlPropertyCacheVector *
const propertyCaches;
256 const QHash<
int, QQmlCustomParser*> &customParsers;
258 bool _seenObjectWithId;
269 void mergeDefaultProperties(
int objectIndex);
271 const QVector<QmlIR::Object*> &qmlObjects;
272 const QQmlPropertyCacheVector *
const propertyCaches;
void annotateBindingsToAliases()
QQmlAliasAnnotator(QQmlTypeCompiler *typeCompiler)
void annotateBindingsWithScriptStrings()
QQmlCustomParserScriptIndexer(QQmlTypeCompiler *typeCompiler)
void mergeDefaultProperties()
QQmlDefaultPropertyMerger(QQmlTypeCompiler *typeCompiler)
bool resolveEnumBindings()
friend class QQmlEnginePrivate
QQmlScriptStringScanner(QQmlTypeCompiler *typeCompiler)
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
#define COMPILE_EXCEPTION(location, desc)
void recordError(const QV4::CompiledData::Location &location, const QString &description) const
QQmlCompilePass(QQmlTypeCompiler *typeCompiler)
QV4::ResolvedTypeReference * resolvedType(int id) const
QQmlTypeCompiler * compiler
QString stringAt(int idx) const
const QmlIR::Object * objectAt(int index) const
int registerConstant(QV4::ReturnedValue v)
QmlIR::Object CompiledObject
void recordError(const QQmlJS::DiagnosticMessage &message)
QQmlTypeLoader * typeLoader() const
QV4::ResolvedTypeReference * resolvedType(int id) const
QList< QQmlError > compilationErrors() const
const QHash< int, QQmlCustomParser * > & customParserCache() const
const QV4::CompiledData::Unit * qmlUnit() const
QmlIR::Object * objectAt(int index)
QQmlType qmlTypeForComponent(const QString &inlineComponentName=QString()) const
QQmlPropertyCacheVector * propertyCaches()
QQmlJS::MemoryPool * memoryPool()
void recordError(const QQmlError &e)
QString bindingAsString(const QmlIR::Object *object, int scriptIndex) const
ListPropertyAssignBehavior listPropertyAssignBehavior() const
const QQmlPropertyCacheVector * propertyCaches() const
int registerString(const QString &str)
const QV4::Compiler::StringTableGenerator * stringPool() const
void recordError(const QV4::CompiledData::Location &location, const QString &description)
QStringView newStringRef(const QString &string)
QmlIR::Binding CompiledBinding
void addImport(const QString &module, const QString &qualifier, QTypeRevision version)
QQmlRefPointer< QV4::CompiledData::CompilationUnit > compile()
QVector< QmlIR::Object * > * qmlObjects() const
QString stringAt(int idx) const
const QQmlImports * imports() const
bool resolveSignalHandlerExpressions()