aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qqmlirbuilder.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-06-20 12:35:18 +0200
committerErik Verbruggen <erik.verbruggen@qt.io>2017-06-20 11:02:19 +0000
commit5a90fac1a61c1510cd98ea1f147659003c16dae5 (patch)
tree0177634851e8d645188375b58016d0f5694a9f04 /src/qml/compiler/qqmlirbuilder.cpp
parentc9989e48989ce243fa1e87423d104efac98876d4 (diff)
Simplify the code for lookupQmlCompliantProperty
Change-Id: Id76294a9276f85b9791a4126ae4fa80964d0091f Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Diffstat (limited to 'src/qml/compiler/qqmlirbuilder.cpp')
-rw-r--r--src/qml/compiler/qqmlirbuilder.cpp62
1 files changed, 22 insertions, 40 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp
index fade4148c5..24f2ef6ebe 100644
--- a/src/qml/compiler/qqmlirbuilder.cpp
+++ b/src/qml/compiler/qqmlirbuilder.cpp
@@ -1654,30 +1654,18 @@ QVector<int> JSCodeGen::generateJSCodeForFunctionsAndBindings(const QList<Compil
}
#ifndef V4_BOOTSTRAP
-QQmlPropertyData *JSCodeGen::lookupQmlCompliantProperty(QQmlPropertyCache *cache, const QString &name, bool *propertyExistsButForceNameLookup)
+int JSCodeGen::lookupQmlCompliantProperty(QQmlPropertyCache *cache, const QString &name)
{
- if (propertyExistsButForceNameLookup)
- *propertyExistsButForceNameLookup = false;
QQmlPropertyData *pd = cache->property(name, /*object*/0, /*context*/0);
// Q_INVOKABLEs can't be FINAL, so we have to look them up at run-time
- if (pd && pd->isFunction()) {
- if (propertyExistsButForceNameLookup)
- *propertyExistsButForceNameLookup = true;
- pd = 0;
- }
+ if (!pd || pd->isFunction())
+ return -1;
- if (pd && !cache->isAllowedInRevision(pd))
- pd = 0;
+ if (!cache->isAllowedInRevision(pd))
+ return -1;
- // Return a copy allocated from our memory pool. Property data pointers can change
- // otherwise when the QQmlPropertyCache changes later in the QML type compilation process.
- if (pd) {
- QQmlPropertyData *copy = pd;
- pd = _function->New<QQmlPropertyData>();
- *pd = *copy;
- }
- return pd;
+ return pd->coreIndex();
}
enum MetaObjectResolverFlags {
@@ -2034,37 +2022,31 @@ QQmlJS::Codegen::Reference JSCodeGen::fallbackNameLookup(const QString &name)
}
if (_scopeObject) {
- bool propertyExistsButForceNameLookup = false;
- QQmlPropertyData *pd = lookupQmlCompliantProperty(_scopeObject, name, &propertyExistsButForceNameLookup);
- if (propertyExistsButForceNameLookup)
+ int qmlIndex = lookupQmlCompliantProperty(_scopeObject, name);
+ if (qmlIndex < 0)
return Reference::fromName(this, name);
- if (pd) {
#if 0
- QV4::IR::Temp *base = _block->TEMP(_qmlContextTemp);
- base->memberResolver = _function->New<QV4::IR::MemberExpressionResolver>();
- base->memberResolver->owner = _function;
- initMetaObjectResolver(base->memberResolver, _scopeObject);
+ QV4::IR::Temp *base = _block->TEMP(_qmlContextTemp);
+ base->memberResolver = _function->New<QV4::IR::MemberExpressionResolver>();
+ base->memberResolver->owner = _function;
+ initMetaObjectResolver(base->memberResolver, _scopeObject);
#endif
- Reference base = Reference::fromTemp(this, _qmlContextTemp);
- return Reference::fromQmlScopeObject(base, pd->coreIndex());
- }
+ Reference base = Reference::fromTemp(this, _qmlContextTemp);
+ return Reference::fromQmlScopeObject(base, qmlIndex);
}
if (_contextObject) {
- bool propertyExistsButForceNameLookup = false;
- QQmlPropertyData *pd = lookupQmlCompliantProperty(_contextObject, name, &propertyExistsButForceNameLookup);
- if (propertyExistsButForceNameLookup)
+ int qmlIndex = lookupQmlCompliantProperty(_contextObject, name);
+ if (qmlIndex < 0)
return Reference::fromName(this, name);
- if (pd) {
#if 0
- QV4::IR::Temp *base = _block->TEMP(_qmlContextTemp);
- base->memberResolver = _function->New<QV4::IR::MemberExpressionResolver>();
- base->memberResolver->owner = _function;
- initMetaObjectResolver(base->memberResolver, _contextObject);
+ QV4::IR::Temp *base = _block->TEMP(_qmlContextTemp);
+ base->memberResolver = _function->New<QV4::IR::MemberExpressionResolver>();
+ base->memberResolver->owner = _function;
+ initMetaObjectResolver(base->memberResolver, _contextObject);
#endif
- Reference base = Reference::fromTemp(this, _qmlContextTemp);
- return Reference::fromQmlContextObject(base, pd->coreIndex());
- }
+ Reference base = Reference::fromTemp(this, _qmlContextTemp);
+ return Reference::fromQmlContextObject(base, qmlIndex);
}
#else
Q_UNUSED(name)