6#include <private/qqmlobjectcreator_p.h>
7#include <private/qqmlcustomparser_p.h>
8#include <private/qqmlvmemetaobject_p.h>
9#include <private/qqmlcomponent_p.h>
10#include <private/qqmlpropertyresolver_p.h>
11#include <private/qqmlcomponentandaliasresolver_p.h>
12#include <private/qqmlsignalnames_p.h>
14#define COMPILE_EXCEPTION(token, desc) \
16 recordError((token)->location, desc); \
23 disableInternalDeferredProperties, QML_DISABLE_INTERNAL_DEFERRED_PROPERTIES);
31 : resolvedTypes(resolvedTypeCache)
33 , dependencyHasher(dependencyHasher)
47 customParsers.
insert(
it.key(), customParser);
54 QQmlPropertyCacheCreator<QQmlTypeCompiler> propertyCacheBuilder(&m_propertyCaches, &pendingGroupPropertyBindings,
56 QQmlError cycleError = propertyCacheBuilder.verifyNoICCycle();
57 if (cycleError.isValid()) {
63 result = propertyCacheBuilder.buildMetaObjectsIncrementally();
65 if (
error.isValid()) {
77 pendingGroupPropertyBindings.
clear();
79 }
while (
result.canResume);
84 merger.mergeDefaultProperties();
95 if (!enumResolver.resolveEnumBindings())
101 cpi.annotateBindingsWithScriptStrings();
106 annotator.annotateBindingsToAliases();
111 if (!deferredAndCustomParserBindingScanner.scanObject())
128 if (!v4CodeGenerator.generateRuntimeFunctions(
object)) {
129 Q_ASSERT(v4CodeGenerator.hasError());
140 qmlGenerator.
generate(*document, dependencyHasher);
151 error.setLine(qmlConvertSourceCoordinate<quint32, int>(
location.line()));
152 error.setColumn(qmlConvertSourceCoordinate<quint32, int>(
location.column()));
153 error.setDescription(description);
162 error.setLine(qmlConvertSourceCoordinate<quint32, int>(
message.loc.startLine));
163 error.setColumn(qmlConvertSourceCoordinate<quint32, int>(
message.loc.startColumn));
207 return &m_propertyCaches;
212 return &m_propertyCaches;
232 return object->bindingAsString(document, scriptIndex);
243 && existingImport->uriIndex == moduleIdx
244 && existingImport->qualifierIndex == qualifierIdx)
250 import->version = version;
251 import->uriIndex = moduleIdx;
252 import->qualifierIndex = qualifierIdx;
258 return typeData->
qmlType(inlineComponentName);
262 : compiler(typeCompiler)
268 , enginePrivate(typeCompiler->enginePrivate())
269 , qmlObjects(*typeCompiler->qmlObjects())
270 , imports(typeCompiler->imports())
271 , customParsers(typeCompiler->customParserCache())
272 , illegalNames(typeCompiler->enginePrivate()->v4engine()->illegalNames())
273 , propertyCaches(typeCompiler->propertyCaches())
279 for (
int objectIndex = 0; objectIndex < qmlObjects.size(); ++objectIndex) {
300 QHash<QString, QStringList> customSignals;
302 for (
QmlIR::Binding *binding =
obj->firstBinding(); binding; binding = binding->next) {
303 const QString bindingPropertyName =
stringAt(binding->propertyNameIndex);
308 auto *typeRef =
resolvedType(binding->propertyNameIndex);
310 if (!
type.isValid()) {
316 const QMetaObject *attachedType =
type.attachedPropertiesType(enginePrivate);
327 if (
auto propertyName =
329 qPropertyName = *propertyName;
335 if (signalName.isEmpty())
340 bool notInRevision =
false;
342 const QQmlPropertyData *
const signalPropertyData = resolver.property(signalName,
nullptr);
343 const QQmlPropertyData *
const qPropertyData = !qPropertyName.isEmpty() ? resolver.property(qPropertyName) :
nullptr;
344 QString finalSignalHandlerPropertyName = signalName;
348 const bool isPropertyObserver = !signalPropertyData && qPropertyData && qPropertyData->isBindable();
349 if (
signal && !(qPropertyData && qPropertyData->isAlias() && isPropertyObserver)) {
350 int sigIndex = propertyCache->methodIndexToSignalIndex(
signal->coreIndex());
351 sigIndex = propertyCache->originalClone(sigIndex);
353 bool unnamedParameter =
false;
355 QList<QByteArray> parameterNames = propertyCache->signalParameterNames(sigIndex);
356 for (
int i = 0;
i < parameterNames.size(); ++
i) {
359 unnamedParameter =
true;
360 else if (unnamedParameter) {
361 COMPILE_EXCEPTION(binding,
tr(
"Signal uses unnamed parameter followed by named parameter."));
366 }
else if (isPropertyObserver) {
367 finalSignalHandlerPropertyName = qPropertyName;
372 if (signalPropertyData)
375 const QString &originalPropertyName =
stringAt(binding->propertyNameIndex);
379 if (
type.isValid()) {
382 .arg(
type.version().majorVersion())
383 .arg(
type.version().minorVersion()));
392 if (customSignals.isEmpty()) {
405 if (
entry == customSignals.constEnd() && !qPropertyName.isEmpty())
406 entry = customSignals.constFind(qPropertyName);
408 if (
entry == customSignals.constEnd()) {
423 COMPILE_EXCEPTION(binding,
tr(
"Cannot assign a value to a signal (expecting a script to be run)"));
430 binding->setFlag(flag);
437 , qmlObjects(*typeCompiler->qmlObjects())
438 , propertyCaches(typeCompiler->propertyCaches())
439 , imports(typeCompiler->imports())
445 for (
int i = 0;
i < qmlObjects.size(); ++
i) {
453 for (
QmlIR::Binding *binding =
obj->firstBinding(); binding; binding = binding->next) {
454 const QV4::CompiledData::Binding::Flags bindingFlags = binding->flags();
464 bool notInRevision =
false;
472 if (!tryQualifiedEnumAssignment(
obj, propertyCache, pd, binding))
489bool QQmlEnumTypeResolver::tryQualifiedEnumAssignment(
493 bool isIntProp = (prop->
propType().
id() == QMetaType::Int) && !prop->
isEnum();
494 if (!prop->
isEnum() && !isIntProp)
499 COMPILE_EXCEPTION(binding,
tr(
"Invalid property assignment: \"%1\" is a read-only property")
505 if (!
string.constData()->
isUpper())
512 if (!(
c.isLetterOrNumber() ||
c == u
'.' ||
c == u
'_' ||
c.isSpace()))
524 if (dot2 != -1 && dot2 !=
string.
size()-1) {
540 int enumval = evaluateEnum(
typeName.toString(), scopedEnumName, enumValue, &
ok);
542 if (!assignEnumToBinding(binding, enumValue, enumval, isQtObject))
551 if (!
type.isValid() && !isQtObject)
560 bool useFastPath =
type.isValid() &&
tr &&
tr->type() ==
type;
564 mprop = propertyCache->firstCppMetaObject()->property(prop->
coreIndex());
565 menum = mprop.enumerator();
569 useFastPath =
false;;
573 if (menum.
isScoped() && !scopedEnumName.isEmpty() && enumName != scopedEnumName.toUtf8())
576 if (mprop.isFlagType()) {
583 if (
type.isValid()) {
584 if (!scopedEnumName.isEmpty())
591 for (
int ii =
metaObject->enumeratorCount() - 1; !
ok && ii >= 0; --ii) {
601 return assignEnumToBinding(binding, enumValue,
value, isQtObject);
606 Q_ASSERT_X(
ok,
"QQmlEnumTypeResolver::evaluateEnum",
"ok must not be a null pointer");
621 int i =
mo->enumeratorCount();
633 , qmlObjects(*typeCompiler->qmlObjects())
634 , customParsers(typeCompiler->customParserCache())
640 scanObjectRecursively(0);
641 for (
int i = 0;
i < qmlObjects.size(); ++
i)
643 scanObjectRecursively(
i);
646void QQmlCustomParserScriptIndexer::scanObjectRecursively(
int objectIndex,
bool annotateScriptBindings)
649 if (!annotateScriptBindings)
650 annotateScriptBindings = customParsers.
contains(
obj->inheritedTypeNameIndex);
652 switch (binding->
type()) {
654 if (annotateScriptBindings) {
662 scanObjectRecursively(binding->
value.objectIndex, annotateScriptBindings);
672 , qmlObjects(*typeCompiler->qmlObjects())
673 , propertyCaches(typeCompiler->propertyCaches())
679 for (
int i = 0;
i < qmlObjects.size(); ++
i) {
687 const QQmlPropertyData *defaultProperty =
obj->indexOfDefaultPropertyOrAlias != -1 ? propertyCache->parent()->defaultProperty() : propertyCache->defaultProperty();
692 bool notInRevision =
false;
702 , qmlObjects(*typeCompiler->qmlObjects())
703 , propertyCaches(typeCompiler->propertyCaches())
710 const QMetaType scriptStringMetaType = QMetaType::fromType<QQmlScriptString>();
711 for (
int i = 0;
i < qmlObjects.size(); ++
i) {
719 const QQmlPropertyData *defaultProperty =
obj->indexOfDefaultPropertyOrAlias != -1 ? propertyCache->parent()->defaultProperty() : propertyCache->defaultProperty();
724 bool notInRevision =
false;
726 if (!pd || pd->
propType() != scriptStringMetaType)
739 object->namedObjectsInComponent.allocate(m_compiler->memoryPool(), m_idToObjectIndex);
752 m_compiler->qmlObjects()->at(
index)->id = m_idToObjectIndex.size();
759 QVector<QmlIR::Object *> *qmlObjects = m_compiler->qmlObjects();
768 m_compiler->addImport(componentType.
module(), qualifier, componentType.
version());
771 syntheticComponent->
init(
773 m_compiler->registerString(
778 if (!m_compiler->resolvedTypes->contains(syntheticComponent->inheritedTypeNameIndex)) {
780 typeRef->
setType(componentType);
781 typeRef->setVersion(componentType.
version());
782 m_compiler->resolvedTypes->insert(syntheticComponent->inheritedTypeNameIndex, typeRef);
785 qmlObjects->append(syntheticComponent);
786 const int componentIndex = qmlObjects->size() - 1;
790 m_propertyCaches->append(componentCache);
793 *syntheticBinding = *binding;
799 QString error = syntheticComponent->appendBinding(syntheticBinding,
false);
803 binding->
value.objectIndex = componentIndex;
805 m_componentRoots.append(componentIndex);
811 const CompiledObject &
component, CompiledBinding *binding)
815 const int targetObjectIndex = m_idToObjectIndex.value(binding->propertyNameIndex, -1);
816 if (targetObjectIndex != -1)
817 m_propertyCaches->set(binding->value.objectIndex, m_propertyCaches->at(targetObjectIndex));
821typename QQmlComponentAndAliasResolver<QQmlTypeCompiler>::AliasResolutionResult
828 if (!
obj->aliasCount())
829 return AllAliasesResolved;
831 int numResolvedAliases = 0;
832 bool seenUnresolvedAlias =
false;
834 for (
QmlIR::Alias *alias =
obj->firstAlias(); alias; alias = alias->next) {
838 seenUnresolvedAlias =
true;
840 const int idIndex = alias->idIndex();
841 const int targetObjectIndex = m_idToObjectIndex.value(idIndex, -1);
842 if (targetObjectIndex == -1) {
844 alias->referenceLocation,
845 tr(
"Invalid alias reference. Unable to find id \"%1\"").
arg(stringAt(idIndex)));
849 const QmlIR::Object *targetObject = m_compiler->objectAt(targetObjectIndex);
851 alias->setTargetObjectId(targetObject->
id);
852 alias->setIsAliasToLocalAlias(
false);
854 const QString aliasPropertyValue = stringAt(alias->propertyNameIndex);
860 if (propertySeparator != -1) {
862 subProperty =
QStringView{aliasPropertyValue}.
mid(propertySeparator + 1);
874 alias->referenceLocation,
875 tr(
"Invalid alias target location: %1").
arg(
property.toString()));
884 if (!targetProperty) {
885 bool aliasPointsToOtherAlias =
false;
886 int localAliasIndex = 0;
887 for (
auto targetAlias = targetObject->
aliasesBegin(),
end = targetObject->
aliasesEnd(); targetAlias !=
end; ++targetAlias, ++localAliasIndex) {
888 if (stringAt(targetAlias->nameIndex()) ==
property) {
889 aliasPointsToOtherAlias =
true;
893 if (aliasPointsToOtherAlias) {
894 if (targetObjectIndex == objectIndex) {
895 alias->localAliasIndex = localAliasIndex;
896 alias->setIsAliasToLocalAlias(
true);
898 ++numResolvedAliases;
903 alias->setIdIndex(idIndex);
909 if (!targetProperty || targetProperty->
coreIndex() > 0x0000FFFF) {
911 alias->referenceLocation,
912 tr(
"Invalid alias target location: %1").
arg(
property.toString()));
918 if (!subProperty.isEmpty()) {
920 if (!valueTypeMetaObject) {
922 bool isDeepAlias = subProperty.at(0).isLower();
927 if (m_compiler->stringAt(binding.propertyNameIndex) ==
property) {
929 const QQmlPropertyData *actualProperty = resolver.property(subProperty.toString());
930 if (actualProperty) {
939 alias->referenceLocation,
940 tr(
"Invalid alias target location: %1").
arg(subProperty.toString()));
946 valueTypeMetaObject->indexOfProperty(subProperty.toString().toUtf8().constData());
947 if (valueTypeIndex == -1) {
949 alias->referenceLocation,
950 tr(
"Invalid alias target location: %1").
arg(subProperty.toString()));
953 Q_ASSERT(valueTypeIndex <= 0x0000FFFF);
963 alias->encodedMetaPropertyIndex = propIdx.toEncoded();
965 numResolvedAliases++;
968 if (numResolvedAliases == 0)
969 return seenUnresolvedAlias ? NoAliasResolved : AllAliasesResolved;
971 return SomeAliasesResolved;
976 , qmlObjects(typeCompiler->qmlObjects())
977 , propertyCaches(typeCompiler->propertyCaches())
978 , customParsers(typeCompiler->customParserCache())
979 , _seenObjectWithId(
false)
985 for (
int i = 0;
i < qmlObjects->size(); ++
i) {
995 int objectIndex, ScopeDeferred scopeDeferred)
1000 if (
obj->idNameIndex != 0)
1001 _seenObjectWithId =
true;
1003 if (
obj->flags & Object::IsComponent) {
1005 const Binding *componentBinding =
obj->firstBinding();
1006 Q_ASSERT(componentBinding->type() == Binding::Type_Object);
1008 return scanObject(componentBinding->value.objectIndex, ScopeDeferred::False);
1017 if (
obj->indexOfDefaultPropertyOrAlias != -1) {
1019 defaultPropertyName =
cache->defaultPropertyName();
1020 defaultProperty =
cache->defaultProperty();
1022 defaultPropertyName = propertyCache->defaultPropertyName();
1023 defaultProperty = propertyCache->defaultProperty();
1033 const QMetaObject *
mo = propertyCache->firstCppMetaObject();
1034 const int deferredNamesIndex =
mo->indexOfClassInfo(
"DeferredPropertyNames");
1035 const int immediateNamesIndex =
mo->indexOfClassInfo(
"ImmediatePropertyNames");
1036 if (deferredNamesIndex != -1) {
1037 if (immediateNamesIndex != -1) {
1039 "ImmediatePropertyNames on the same type."));
1043 }
else if (immediateNamesIndex != -1) {
1048 if (immediatePropertyNames.isEmpty())
1049 immediatePropertyNames.append(
QString());
1053 for (
QmlIR::Binding *binding =
obj->firstBinding(); binding; binding = binding->next) {
1057 if (binding->type() == Binding::Type_AttachedProperty) {
1059 binding->setFlag(Binding::IsCustomParserBinding);
1060 obj->flags |= Object::HasCustomParserBindings;
1065 obj->flags |= Object::HasCustomParserBindings;
1066 binding->setFlag(Binding::IsCustomParserBinding);
1071 const bool hasPropertyData = [&]() {
1072 if (
name.isEmpty()) {
1073 name = defaultPropertyName;
1074 if (defaultProperty)
1076 }
else if (
name.constData()->isUpper()) {
1081 bool notInRevision =
false;
1082 if (propertyResolver.property(
1091 const Binding::Flags bindingFlags = binding->flags();
1092 if (bindingFlags & Binding::IsSignalHandlerExpression
1093 || bindingFlags & Binding::IsSignalHandlerObject
1094 || bindingFlags & Binding::IsPropertyObserver) {
1101 obj->flags |= Object::HasCustomParserBindings;
1102 binding->setFlag(Binding::IsCustomParserBinding);
1106 bool seenSubObjectWithId =
false;
1107 bool isExternal =
false;
1108 if (binding->type() >= Binding::Type_Object) {
1109 const bool isOwnProperty = hasPropertyData || binding->isAttachedProperty();
1110 isExternal = !isOwnProperty && binding->isGroupProperty();
1111 if (isOwnProperty || isExternal) {
1112 qSwap(_seenObjectWithId, seenSubObjectWithId);
1114 binding->value.objectIndex,
1115 (isExternal || scopeDeferred == ScopeDeferred::True)
1116 ? ScopeDeferred::True
1117 : ScopeDeferred::
False);
1118 qSwap(_seenObjectWithId, seenSubObjectWithId);
1119 if (!subObjectValid)
1121 _seenObjectWithId |= seenSubObjectWithId;
1125 bool isDeferred =
false;
1126 if (!immediatePropertyNames.isEmpty() && !immediatePropertyNames.contains(
name)) {
1127 if (seenSubObjectWithId) {
1129 "to a deferred property."));
1131 if (isExternal || !disableInternalDeferredProperties())
1133 }
else if (!deferredPropertyNames.isEmpty() && deferredPropertyNames.contains(
name)) {
1134 if (!seenSubObjectWithId && binding->type() != Binding::Type_GroupProperty) {
1135 if (isExternal || !disableInternalDeferredProperties())
1140 if (binding->type() >= Binding::Type_Object) {
1141 if (isExternal && !isDeferred && !customParser) {
1143 binding,
tr(
"Cannot assign to non-existent property \"%1\"").
arg(
name));
1148 binding->setFlag(Binding::IsDeferredBinding);
1149 obj->flags |= Object::HasDeferredBindings;
1158 , qmlObjects(*typeCompiler->qmlObjects())
1159 , propertyCaches(typeCompiler->propertyCaches())
1166 for (
int i = 0;
i < qmlObjects.size(); ++
i)
1178 QString defaultProperty =
object->indexOfDefaultPropertyOrAlias != -1 ? propertyCache->parent()->defaultPropertyName() : propertyCache->defaultPropertyName();
1186 previousBinding = binding;
1187 binding = binding->
next;
1192 binding =
object->unlinkBinding(previousBinding, binding);
1195 bindingsToReinsert = toReinsert;
1198 tail->
next = toReinsert;
1201 tail->
next =
nullptr;
1204 binding = bindingsToReinsert;
1207 binding = binding->
next;
1208 object->insertSorted(toReinsert);
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
const_iterator constEnd() const noexcept
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item after the ...
const_iterator constBegin() const noexcept
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item in the hash.
bool contains(const Key &key) const noexcept
Returns true if the hash contains an item with the key; otherwise returns false.
T value(const Key &key) const noexcept
iterator insert(const Key &key, const T &value)
Inserts a new item with the key and a value of value.
qsizetype size() const noexcept
bool isEmpty() const noexcept
const_reference at(qsizetype i) const noexcept
void append(parameter_type t)
void annotateBindingsToAliases()
QQmlAliasAnnotator(QQmlTypeCompiler *typeCompiler)
QQmlError resolve(int root=0)
void annotateBindingsWithScriptStrings()
QQmlCustomParserScriptIndexer(QQmlTypeCompiler *typeCompiler)
The QQmlCustomParser class allows you to add new arbitrary types to QML.
@ AcceptsAttachedProperties
QString finalUrlString() const
Returns the finalUrl() as a string.
QString urlString() const
void mergeDefaultProperties()
QQmlDefaultPropertyMerger(QQmlTypeCompiler *typeCompiler)
QQmlDeferredAndCustomParserBindingScanner(QQmlTypeCompiler *typeCompiler)
QV4::ExecutionEngine * v4engine() const
QQmlEnumTypeResolver(QQmlTypeCompiler *typeCompiler)
bool resolveEnumBindings()
The QQmlError class encapsulates a QML error.
The QQmlImports class encapsulates one QML document's import statements.
bool resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef &type, QQmlType *type_return, QTypeRevision *version_return, QQmlImportNamespace **ns_return, QList< QQmlError > *errors=nullptr, QQmlType::RegistrationType registrationType=QQmlType::AnyRegistrationType, bool *typeRecursionDetected=nullptr) const
QStringView newStringRef(const QString &text)
QQmlPropertyCache::ConstPtr at(int index) const
QMetaType propType() const
QQmlScriptStringScanner(QQmlTypeCompiler *typeCompiler)
static std::optional< QString > changedHandlerNameToSignalName(QStringView changedHandler)
static std::optional< QString > changedHandlerNameToPropertyName(QStringView handler)
static bool isHandlerName(QStringView signalName)
static std::optional< QString > handlerNameToSignalName(QStringView handler)
QQmlType qmlType(const QString &inlineComponentName=QString()) const
QByteArray typeClassName() const
const QQmlImports * imports() const
static QQmlTypeLoader * get(Engine *engine)
QTypeRevision version() const
QHashedString module() const
QString elementName() const
bool contains(const T &value) const
constexpr bool isEmpty() const noexcept
Returns whether this string view is empty - that is, whether {size() == 0}.
constexpr QStringView left(qsizetype n) const noexcept
constexpr QStringView mid(qsizetype pos, qsizetype n=-1) const noexcept
Returns the substring of length length starting at position start in this object.
qsizetype indexOf(QChar c, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
\macro QT_RESTRICTED_CAST_FROM_ASCII
const QChar * constData() const
Returns a pointer to the data stored in the QString.
qsizetype size() const noexcept
Returns the number of characters in this string.
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QByteArray toUtf8() const &
static constexpr QTypeRevision fromVersion(Major majorVersion, Minor minorVersion)
Produces a QTypeRevision from the given majorVersion and minorVersion, both of which need to be a val...
void setType(QQmlType type)
QCache< int, Employee > cache
[0]
QSet< QString >::iterator it
const char * classInfo(const QMetaObject *metaObject, const char *key)
Combined button and popup list for selecting options.
std::function< QByteArray()> DependentTypesHasher
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isUpper(QStringView s) noexcept
QString enumValue(const QString &value)
QList< QString > QStringList
Constructs a string list that contains the given string, str.
DBusConnection const char DBusError * error
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define Q_LOGGING_CATEGORY(name,...)
GLsizei const GLfloat * v
[13]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLenum GLsizei count
GLuint GLsizei const GLchar * message
GLenum const GLint * param
GLsizei const GLchar *const * string
[0]
static qreal dot(const QPointF &a, const QPointF &b)
static qreal component(const QPointF &point, unsigned int i)
#define DEFINE_BOOL_CONFIG_OPTION(name, var)
#define COMPILE_EXCEPTION(location, desc)
QT_BEGIN_NAMESPACE QQmlError qQmlCompileError(const QV4::CompiledData::Location &location, const QString &description)
#define Q_ASSERT_X(cond, x, msg)
QLatin1StringView QLatin1String
#define QStringLiteral(str)
QT_BEGIN_NAMESPACE constexpr void qSwap(T &value1, T &value2) noexcept(std::is_nothrow_swappable_v< T >)
if(qFloatDistance(a, b)<(1<< 7))
[0]
obj metaObject() -> className()
\inmodule QtCore \reentrant
QQmlCompilePass(QQmlTypeCompiler *typeCompiler)
QV4::ResolvedTypeReference * resolvedType(int id) const
QQmlTypeCompiler * compiler
QString stringAt(int idx) const
void resolveMissingPropertyCaches(QQmlPropertyCacheVector *propertyCaches) const
const QQmlPropertyData * property(int index) const
QQmlEnginePrivate * enginePrivate() const
int registerConstant(QV4::ReturnedValue v)
QQmlTypeCompiler(QQmlEnginePrivate *engine, QQmlTypeData *typeData, QmlIR::Document *document, QV4::CompiledData::ResolvedTypeReferenceMap *resolvedTypeCache, const QV4::CompiledData::DependentTypesHasher &dependencyHasher)
QV4::CompiledData::ResolvedTypeReferenceMap * resolvedTypes
const QV4::CompiledData::Unit * qmlUnit() const
QQmlType qmlTypeForComponent(const QString &inlineComponentName=QString()) const
QQmlPropertyCacheVector * propertyCaches()
QQmlJS::MemoryPool * memoryPool()
QString bindingAsString(const QmlIR::Object *object, int scriptIndex) 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)
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
@ AliasPointsToPointerObject
quint32_le propertyNameIndex
bool hasFlag(Flag flag) const
union QV4::CompiledData::Binding::@545 value
bool isValueBinding() const
@ InitializerForReadOnlyDeclaration
@ IsSignalHandlerExpression
const Unit * unitData() const
StringTableGenerator stringTable
int registerConstant(ReturnedValue v)
int registerString(const QString &str)
const QSet< QString > & illegalNames() const
QQmlRefPointer< QV4::CompiledData::CompilationUnit > javaScriptCompilationUnit
QVector< Object * > objects
QString stringAt(int index) const
QV4::Compiler::Module jsModule
QV4::Compiler::JSUnitGenerator jsGenerator
QList< const QV4::CompiledData::Import * > imports
QQmlJS::Engine jsParserEngine
PoolList< Binding >::Iterator bindingsEnd() const
PoolList< Alias >::Iterator aliasesBegin() const
void init(QQmlJS::MemoryPool *pool, int typeNameIndex, int idIndex, const QV4::CompiledData::Location &location)
PoolList< Binding >::Iterator bindingsBegin() const
PoolList< Alias >::Iterator aliasesEnd() const
void generate(Document &output, const QV4::CompiledData::DependentTypesHasher &dependencyHasher=QV4::CompiledData::DependentTypesHasher())
bool resolveSignalHandlerExpressions()
SignalHandlerResolver(QQmlTypeCompiler *typeCompiler)