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>
13#define COMPILE_EXCEPTION(token, desc) \
15 recordError((token)->location, desc); \
22 disableInternalDeferredProperties, QML_DISABLE_INTERNAL_DEFERRED_PROPERTIES);
29 : resolvedTypes(resolvedTypeCache)
31 , dependencyHasher(dependencyHasher)
33 , typeNameCache(typeNameCache)
46 customParsers.
insert(
it.key(), customParser);
64 if (
error.isValid()) {
76 pendingGroupPropertyBindings.
clear();
78 }
while (
result.canResume);
110 if (!deferredAndCustomParserBindingScanner.
scanObject())
139 qmlGenerator.
generate(*document, dependencyHasher);
147 compilationUnit->typeNameCache = typeNameCache;
149 compilationUnit->propertyCaches = std::move(m_propertyCaches);
150 Q_ASSERT(compilationUnit->propertyCaches.count() ==
static_cast<int>(compilationUnit->objectCount()));
151 return compilationUnit;
159 error.setDescription(description);
213 return &m_propertyCaches;
218 return &m_propertyCaches;
238 return object->bindingAsString(document, scriptIndex);
249 && existingImport->
uriIndex == moduleIdx
256 import->version = version;
257 import->uriIndex = moduleIdx;
258 import->qualifierIndex = qualifierIdx;
264 return typeData->
qmlType(inlineComponentName);
268 : compiler(typeCompiler)
274 , enginePrivate(typeCompiler->enginePrivate())
275 , qmlObjects(*typeCompiler->qmlObjects())
276 , imports(typeCompiler->imports())
277 , customParsers(typeCompiler->customParserCache())
278 , illegalNames(typeCompiler->enginePrivate()->v4engine()->illegalNames())
279 , propertyCaches(typeCompiler->propertyCaches())
285 for (
int objectIndex = 0; objectIndex < qmlObjects.size(); ++objectIndex) {
308 for (
QmlIR::Binding *binding =
obj->firstBinding(); binding; binding = binding->next) {
309 const QString bindingPropertyName =
stringAt(binding->propertyNameIndex);
314 auto *typeRef =
resolvedType(binding->propertyNameIndex);
317 imports->
resolveType(bindingPropertyName, &
type,
nullptr,
nullptr,
nullptr);
319 const QMetaObject *attachedType =
type.attachedPropertiesType(enginePrivate);
334 bindingPropertyName);
338 qPropertyName = signalName.
mid(0, signalName.
size() -
static_cast<int>(strlen(
"Changed")));
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()));
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) {
525 if (!
string.
at(
dot+1).isUpper())
540 int enumval = evaluateEnum(
typeName.toString(), scopedEnumName, enumValue, &
ok);
542 if (!assignEnumToBinding(binding, enumValue, enumval, isQtObject))
550 if (!
type.isValid() && !isQtObject)
559 bool useFastPath =
type.isValid() &&
tr &&
tr->type() ==
type;
563 mprop = propertyCache->firstCppMetaObject()->property(prop->
coreIndex());
568 useFastPath =
false;;
582 if (
type.isValid()) {
590 for (
int ii =
metaObject->enumeratorCount() - 1; !
ok && ii >= 0; --ii) {
600 return assignEnumToBinding(binding, enumValue,
value, isQtObject);
605 Q_ASSERT_X(
ok,
"QQmlEnumTypeResolver::evaluateEnum",
"ok must not be a null pointer");
619 int i =
mo->enumeratorCount();
631 , qmlObjects(*typeCompiler->qmlObjects())
632 , customParsers(typeCompiler->customParserCache())
638 scanObjectRecursively(0);
639 for (
int i = 0;
i < qmlObjects.size(); ++
i)
641 scanObjectRecursively(
i);
644void QQmlCustomParserScriptIndexer::scanObjectRecursively(
int objectIndex,
bool annotateScriptBindings)
647 if (!annotateScriptBindings)
648 annotateScriptBindings = customParsers.
contains(
obj->inheritedTypeNameIndex);
650 switch (binding->
type()) {
652 if (annotateScriptBindings) {
670 , qmlObjects(*typeCompiler->qmlObjects())
671 , propertyCaches(typeCompiler->propertyCaches())
677 for (
int i = 0;
i < qmlObjects.size(); ++
i) {
685 const QQmlPropertyData *defaultProperty =
obj->indexOfDefaultPropertyOrAlias != -1 ? propertyCache->parent()->defaultProperty() : propertyCache->defaultProperty();
690 bool notInRevision =
false;
700 , qmlObjects(*typeCompiler->qmlObjects())
701 , propertyCaches(typeCompiler->propertyCaches())
708 const QMetaType scriptStringMetaType = QMetaType::fromType<QQmlScriptString>();
709 for (
int i = 0;
i < qmlObjects.size(); ++
i) {
717 const QQmlPropertyData *defaultProperty =
obj->indexOfDefaultPropertyOrAlias != -1 ? propertyCache->parent()->defaultProperty() : propertyCache->defaultProperty();
722 bool notInRevision =
false;
724 if (!pd || pd->
propType() != scriptStringMetaType)
737 object->namedObjectsInComponent.allocate(m_compiler->memoryPool(), m_idToObjectIndex);
750 m_compiler->qmlObjects()->at(
index)->id = m_idToObjectIndex.size();
766 m_compiler->addImport(componentType.
module(), qualifier, componentType.
version());
769 syntheticComponent->
init(
771 m_compiler->registerString(
778 typeRef->
setType(componentType);
779 typeRef->setVersion(componentType.
version());
783 qmlObjects->
append(syntheticComponent);
784 const int componentIndex = qmlObjects->
size() - 1;
788 m_propertyCaches->append(componentCache);
791 *syntheticBinding = *binding;
803 m_componentRoots.append(componentIndex);
808typename QQmlComponentAndAliasResolver<QQmlTypeCompiler>::AliasResolutionResult
813 if (!
obj->aliasCount())
814 return AllAliasesResolved;
816 int numResolvedAliases = 0;
817 bool seenUnresolvedAlias =
false;
819 for (
QmlIR::Alias *alias =
obj->firstAlias(); alias; alias = alias->next) {
823 seenUnresolvedAlias =
true;
825 const int idIndex = alias->idIndex();
826 const int targetObjectIndex = m_idToObjectIndex.value(idIndex, -1);
827 if (targetObjectIndex == -1) {
829 alias->referenceLocation,
830 tr(
"Invalid alias reference. Unable to find id \"%1\"").
arg(stringAt(idIndex)));
834 const QmlIR::Object *targetObject = m_compiler->objectAt(targetObjectIndex);
836 alias->setTargetObjectId(targetObject->
id);
837 alias->setIsAliasToLocalAlias(
false);
839 const QString aliasPropertyValue = stringAt(alias->propertyNameIndex);
845 if (propertySeparator != -1) {
847 subProperty =
QStringView{aliasPropertyValue}.
mid(propertySeparator + 1);
859 alias->referenceLocation,
860 tr(
"Invalid alias target location: %1").
arg(
property.toString()));
869 if (!targetProperty) {
870 bool aliasPointsToOtherAlias =
false;
871 int localAliasIndex = 0;
872 for (
auto targetAlias = targetObject->
aliasesBegin(),
end = targetObject->
aliasesEnd(); targetAlias !=
end; ++targetAlias, ++localAliasIndex) {
873 if (stringAt(targetAlias->nameIndex()) ==
property) {
874 aliasPointsToOtherAlias =
true;
878 if (aliasPointsToOtherAlias) {
879 if (targetObjectIndex == objectIndex) {
880 alias->localAliasIndex = localAliasIndex;
881 alias->setIsAliasToLocalAlias(
true);
883 ++numResolvedAliases;
888 alias->setIdIndex(idIndex);
894 if (!targetProperty || targetProperty->
coreIndex() > 0x0000FFFF) {
896 alias->referenceLocation,
897 tr(
"Invalid alias target location: %1").
arg(
property.toString()));
905 if (!valueTypeMetaObject) {
907 bool isDeepAlias = subProperty.
at(0).
isLower();
915 if (actualProperty) {
924 alias->referenceLocation,
925 tr(
"Invalid alias target location: %1").
arg(subProperty.
toString()));
932 if (valueTypeIndex == -1) {
934 alias->referenceLocation,
935 tr(
"Invalid alias target location: %1").
arg(subProperty.
toString()));
938 Q_ASSERT(valueTypeIndex <= 0x0000FFFF);
948 alias->encodedMetaPropertyIndex = propIdx.
toEncoded();
950 numResolvedAliases++;
953 if (numResolvedAliases == 0)
954 return seenUnresolvedAlias ? NoAliasResolved : AllAliasesResolved;
956 return SomeAliasesResolved;
961 , qmlObjects(typeCompiler->qmlObjects())
962 , propertyCaches(typeCompiler->propertyCaches())
963 , customParsers(typeCompiler->customParserCache())
964 , _seenObjectWithId(
false)
970 for (
int i = 0;
i < qmlObjects->
size(); ++
i) {
980 int objectIndex, ScopeDeferred scopeDeferred)
985 if (
obj->idNameIndex != 0)
986 _seenObjectWithId =
true;
988 if (
obj->flags & Object::IsComponent) {
990 const Binding *componentBinding =
obj->firstBinding();
991 Q_ASSERT(componentBinding->
type() == Binding::Type_Object);
1002 if (
obj->indexOfDefaultPropertyOrAlias != -1) {
1004 defaultPropertyName =
cache->defaultPropertyName();
1005 defaultProperty =
cache->defaultProperty();
1007 defaultPropertyName = propertyCache->defaultPropertyName();
1008 defaultProperty = propertyCache->defaultProperty();
1018 const QMetaObject *
mo = propertyCache->firstCppMetaObject();
1019 const int deferredNamesIndex =
mo->indexOfClassInfo(
"DeferredPropertyNames");
1020 const int immediateNamesIndex =
mo->indexOfClassInfo(
"ImmediatePropertyNames");
1021 if (deferredNamesIndex != -1) {
1022 if (immediateNamesIndex != -1) {
1024 "ImmediatePropertyNames on the same type."));
1028 }
else if (immediateNamesIndex != -1) {
1033 if (immediatePropertyNames.isEmpty())
1034 immediatePropertyNames.append(
QString());
1042 if (binding->
type() == Binding::Type_AttachedProperty) {
1044 binding->
setFlag(Binding::IsCustomParserBinding);
1045 obj->flags |= Object::HasCustomParserBindings;
1050 obj->flags |= Object::HasCustomParserBindings;
1051 binding->
setFlag(Binding::IsCustomParserBinding);
1056 const bool hasPropertyData = [&]() {
1057 if (
name.isEmpty()) {
1058 name = defaultPropertyName;
1059 if (defaultProperty)
1061 }
else if (
name.constData()->isUpper()) {
1066 bool notInRevision =
false;
1067 if (propertyResolver.property(
1076 const Binding::Flags bindingFlags = binding->
flags();
1077 if (bindingFlags & Binding::IsSignalHandlerExpression
1078 || bindingFlags & Binding::IsSignalHandlerObject
1079 || bindingFlags & Binding::IsPropertyObserver) {
1086 obj->flags |= Object::HasCustomParserBindings;
1087 binding->
setFlag(Binding::IsCustomParserBinding);
1091 bool seenSubObjectWithId =
false;
1092 bool isExternal =
false;
1093 if (binding->
type() >= Binding::Type_Object) {
1096 if (isOwnProperty || isExternal) {
1097 qSwap(_seenObjectWithId, seenSubObjectWithId);
1100 (isExternal || scopeDeferred == ScopeDeferred::True)
1101 ? ScopeDeferred::True
1102 : ScopeDeferred::
False);
1103 qSwap(_seenObjectWithId, seenSubObjectWithId);
1104 if (!subObjectValid)
1106 _seenObjectWithId |= seenSubObjectWithId;
1110 bool isDeferred =
false;
1111 if (!immediatePropertyNames.isEmpty() && !immediatePropertyNames.contains(
name)) {
1112 if (seenSubObjectWithId) {
1114 "to a deferred property."));
1116 if (isExternal || !disableInternalDeferredProperties())
1118 }
else if (!deferredPropertyNames.isEmpty() && deferredPropertyNames.contains(
name)) {
1119 if (!seenSubObjectWithId && binding->
type() != Binding::Type_GroupProperty) {
1120 if (isExternal || !disableInternalDeferredProperties())
1125 if (binding->
type() >= Binding::Type_Object) {
1126 if (isExternal && !isDeferred && !customParser) {
1128 binding,
tr(
"Cannot assign to non-existent property \"%1\"").
arg(
name));
1133 binding->
setFlag(Binding::IsDeferredBinding);
1134 obj->flags |= Object::HasDeferredBindings;
1143 , qmlObjects(*typeCompiler->qmlObjects())
1144 , propertyCaches(typeCompiler->propertyCaches())
1151 for (
int i = 0;
i < qmlObjects.
size(); ++
i)
1163 QString defaultProperty =
object->indexOfDefaultPropertyOrAlias != -1 ? propertyCache->parent()->defaultPropertyName() : propertyCache->defaultPropertyName();
1171 previousBinding = binding;
1172 binding = binding->
next;
1177 binding =
object->unlinkBinding(previousBinding, binding);
1180 bindingsToReinsert = toReinsert;
1183 tail->
next = toReinsert;
1186 tail->
next =
nullptr;
1189 binding = bindingsToReinsert;
1192 binding = binding->
next;
1193 object->insertSorted(toReinsert);
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
constexpr bool isLower() const noexcept
Returns true if the character is a lowercase letter, for example category() is Letter_Lowercase.
const_iterator constFind(const Key &key) const noexcept
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
bool isEmpty() const noexcept
Returns true if the hash contains no items; otherwise returns false.
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.
bool isValid() const
Returns true if this error is valid, otherwise false.
The QQmlImports class encapsulates one QML document's import statements.
bool resolveType(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)
IncrementalResult buildMetaObjectsIncrementally()
QQmlError verifyNoICCycle()
QQmlPropertyCache::ConstPtr at(int index) const
QMetaType propType() const
QQmlScriptStringScanner(QQmlTypeCompiler *typeCompiler)
QQmlType qmlType(const QString &inlineComponentName=QString()) const
QByteArray typeClassName() const
const QQmlImports * imports() const
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}.
QByteArray toUtf8() const
Returns a UTF-8 representation of the string view as a QByteArray.
QString toString() const
Returns a deep copy of this string view's data as a QString.
constexpr QChar at(qsizetype n) const noexcept
Returns the character at position n in this string view.
constexpr QStringView mid(qsizetype pos, qsizetype n=-1) const noexcept
Returns the substring of length length starting at position start in this object.
\macro QT_RESTRICTED_CAST_FROM_ASCII
QStringList split(const QString &sep, Qt::SplitBehavior behavior=Qt::KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Splits the string into substrings wherever sep occurs, and returns the list of those strings.
const QChar * constData() const
Returns a pointer to the data stored in the QString.
qsizetype size() const
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...
QString mid(qsizetype position, qsizetype n=-1) const
Returns a string that contains n characters of this string, starting at the specified position index.
bool endsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string ends with s; otherwise returns false.
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
QString left(qsizetype n) const
Returns a substring that contains the n leftmost characters of the string.
static QString static QString qsizetype indexOf(QChar c, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
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...
QQmlJS::DiagnosticMessage error() const
QV4::CompiledData::CompilationUnit generateCompilationUnit(bool generateUnitData=true)
static QQmlRefPointer< ExecutableCompilationUnit > create()
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
QString enumValue(const QString &value)
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)
#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)
int qmlConvertSourceCoordinate< quint32, int >(quint32 n)
#define Q_ASSERT_X(cond, x, msg)
QLatin1StringView QLatin1String
#define QStringLiteral(str)
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)
const QV4::CompiledData::Unit * qmlUnit() const
QQmlType qmlTypeForComponent(const QString &inlineComponentName=QString()) const
QQmlPropertyCacheVector * propertyCaches()
QQmlJS::MemoryPool * memoryPool()
QV4::ResolvedTypeReferenceMap * resolvedTypes
QString bindingAsString(const QmlIR::Object *object, int scriptIndex) const
QQmlTypeCompiler(QQmlEnginePrivate *engine, QQmlTypeData *typeData, QmlIR::Document *document, const QQmlRefPointer< QQmlTypeNameCache > &typeNameCache, QV4::ResolvedTypeReferenceMap *resolvedTypeCache, const QV4::CompiledData::DependentTypesHasher &dependencyHasher)
QQmlRefPointer< QV4::ExecutableCompilationUnit > compile()
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)
QVector< QmlIR::Object * > * qmlObjects() const
QString stringAt(int idx) const
const QQmlImports * imports() const
@ AliasPointsToPointerObject
quint32_le propertyNameIndex
bool isAttachedProperty() const
union QV4::CompiledData::Binding::@543 value
bool hasFlag(Flag flag) const
bool isGroupProperty() const
bool isValueBinding() const
quint32_le constantValueIndex
@ InitializerForReadOnlyDeclaration
@ IsSignalHandlerExpression
quint32_le compiledScriptIndex
const Unit * unitData() const
quint32_le qualifierIndex
StringTableGenerator stringTable
int registerConstant(ReturnedValue v)
int registerString(const QString &str)
const QSet< QString > & illegalNames() const
QVector< Object * > objects
QString stringAt(int index) const
QV4::Compiler::Module jsModule
QV4::CompiledData::CompilationUnit javaScriptCompilationUnit
QV4::Compiler::JSUnitGenerator jsGenerator
QList< const QV4::CompiledData::Import * > imports
QQmlJS::Engine jsParserEngine
static QString signalNameFromSignalPropertyName(const QString &signalPropertyName)
static bool isSignalPropertyName(const QString &name)
bool generateRuntimeFunctions(QmlIR::Object *object)
PoolList< Binding >::Iterator bindingsEnd() const
QString appendBinding(Binding *b, bool isListBinding)
PoolList< Alias >::Iterator aliasesBegin() const
void init(QQmlJS::MemoryPool *pool, int typeNameIndex, int idIndex, const QV4::CompiledData::Location &location)
quint32 inheritedTypeNameIndex
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)