diff options
Diffstat (limited to 'src/qmlcompiler/qqmljsregistercontent.cpp')
-rw-r--r-- | src/qmlcompiler/qqmljsregistercontent.cpp | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/src/qmlcompiler/qqmljsregistercontent.cpp b/src/qmlcompiler/qqmljsregistercontent.cpp index 1573f889a1..2c5d562e5b 100644 --- a/src/qmlcompiler/qqmljsregistercontent.cpp +++ b/src/qmlcompiler/qqmljsregistercontent.cpp @@ -13,7 +13,6 @@ QString QQmlJSRegisterContent::descriptiveName() const if (m_storedType.isNull()) return u"(invalid type)"_s; - QString result = m_storedType->internalName() + u" of "_s; const auto scope = [this]() -> QString { if (m_scope.isNull()) return u"(invalid type)::"_s; @@ -25,35 +24,46 @@ QString QQmlJSRegisterContent::descriptiveName() const + u"::"_s; }; + QString result; switch (m_content.index()) { - case Type: - return result + std::get<QQmlJSScope::ConstPtr>(m_content)->internalName(); + case Type: { + auto contained = std::get<std::pair<QQmlJSScope::ConstPtr, int>>(m_content).first; + result += contained->internalName(); + if (m_storedType->internalName() != contained->internalName()) + result += u" stored as "_s + m_storedType->internalName(); + return result; + } case Property: { - const QQmlJSMetaProperty prop = std::get<QQmlJSMetaProperty>(m_content); - return result + scope() + prop.propertyName() + u" with type "_s + prop.typeName(); + const QQmlJSMetaProperty prop = std::get<PropertyLookup>(m_content).property; + result += scope() + prop.propertyName() + u" with type "_s + prop.typeName(); + if (m_storedType->internalName() != prop.typeName()) + result += u" (stored as "_s + m_storedType->internalName() + u")"; + return result; } case Method: { const auto methods = std::get<QList<QQmlJSMetaMethod>>(m_content); if (methods.isEmpty()) - return result + scope() + u"(unknown method)"_s; + result = scope() + u"(unknown method)"_s; else - return result + scope() + methods[0].methodName() + u"(...)"_s; + result = scope() + methods[0].methodName() + u"(...)"_s; + return result + u" (stored as "_s + m_storedType->internalName() + u")"; } case Enum: { const auto e = std::get<std::pair<QQmlJSMetaEnum, QString>>(m_content); if (e.second.isEmpty()) - return result + scope() + e.first.name(); + result = scope() + e.first.name(); else - return result + scope() + e.first.name() + u"::"_s + e.second; + result = scope() + e.first.name() + u"::"_s + e.second; + return result + u" (stored as "_s + m_storedType->internalName() + u")"; } case ImportNamespace: { return u"import namespace %1"_s.arg(std::get<uint>(m_content)); } case Conversion: { - return u"conversion to %1"_s.arg( - std::get<ConvertedTypes>(m_content).result->internalName()); + return u"conversion to %1"_s.arg(std::get<ConvertedTypes>(m_content).result->internalName()); } } + Q_UNREACHABLE_RETURN(result + u"wat?"_s); } @@ -61,10 +71,10 @@ bool QQmlJSRegisterContent::isList() const { switch (m_content.index()) { case Type: - return std::get<QQmlJSScope::ConstPtr>(m_content)->accessSemantics() + return std::get<std::pair<QQmlJSScope::ConstPtr, int>>(m_content).first->accessSemantics() == QQmlJSScope::AccessSemantics::Sequence; case Property: - return std::get<QQmlJSMetaProperty>(m_content).type()->accessSemantics() + return std::get<PropertyLookup>(m_content).property.type()->accessSemantics() == QQmlJSScope::AccessSemantics::Sequence; case Conversion: return std::get<ConvertedTypes>(m_content).result->accessSemantics() @@ -78,7 +88,7 @@ bool QQmlJSRegisterContent::isWritable() const { switch (m_content.index()) { case Property: - return std::get<QQmlJSMetaProperty>(m_content).isWritable(); + return std::get<PropertyLookup>(m_content).property.isWritable(); // TODO: What can we actually write? default: @@ -90,21 +100,23 @@ bool QQmlJSRegisterContent::isWritable() const QQmlJSRegisterContent QQmlJSRegisterContent::create(const QQmlJSScope::ConstPtr &storedType, const QQmlJSScope::ConstPtr &type, + int resultLookupIndex, QQmlJSRegisterContent::ContentVariant variant, const QQmlJSScope::ConstPtr &scope) { QQmlJSRegisterContent result(storedType, scope, variant); - result.m_content = type; + result.m_content = std::make_pair(type, resultLookupIndex); return result; } QQmlJSRegisterContent QQmlJSRegisterContent::create(const QQmlJSScope::ConstPtr &storedType, const QQmlJSMetaProperty &property, + int baseLookupIndex, int resultLookupIndex, QQmlJSRegisterContent::ContentVariant variant, const QQmlJSScope::ConstPtr &scope) { QQmlJSRegisterContent result(storedType, scope, variant); - result.m_content = property; + result.m_content = PropertyLookup { property, baseLookupIndex, resultLookupIndex}; return result; } @@ -140,13 +152,14 @@ QQmlJSRegisterContent QQmlJSRegisterContent::create(const QQmlJSScope::ConstPtr } QQmlJSRegisterContent QQmlJSRegisterContent::create(const QQmlJSScope::ConstPtr &storedType, - const QList<QQmlJSScope::ConstPtr> origins, + const QList<QQmlJSScope::ConstPtr> &origins, const QQmlJSScope::ConstPtr &conversion, + const QQmlJSScope::ConstPtr &conversionScope, ContentVariant variant, const QQmlJSScope::ConstPtr &scope) { QQmlJSRegisterContent result(storedType, scope, variant); - result.m_content = ConvertedTypes { origins, conversion }; + result.m_content = ConvertedTypes { origins, conversion, conversionScope }; return result; } |