aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler/qqmljsregistercontent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmlcompiler/qqmljsregistercontent.cpp')
-rw-r--r--src/qmlcompiler/qqmljsregistercontent.cpp49
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;
}