diff options
Diffstat (limited to 'src/qml/compiler/qv4isel_p.cpp')
-rw-r--r-- | src/qml/compiler/qv4isel_p.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/qml/compiler/qv4isel_p.cpp b/src/qml/compiler/qv4isel_p.cpp index b9341163de..1a56ddabf1 100644 --- a/src/qml/compiler/qv4isel_p.cpp +++ b/src/qml/compiler/qv4isel_p.cpp @@ -46,6 +46,7 @@ #include "qv4isel_util_p.h" #include "qv4functionobject_p.h" #include "qv4function_p.h" +#include <private/qqmlpropertycache_p.h> #include <QString> @@ -100,8 +101,12 @@ void IRDecoder::visitMove(V4IR::Move *s) } } else if (V4IR::Temp *t = s->target->asTemp()) { if (V4IR::Name *n = s->source->asName()) { - if (*n->id == QStringLiteral("this")) // TODO: `this' should be a builtin. + if (n->id && *n->id == QStringLiteral("this")) // TODO: `this' should be a builtin. loadThisObject(t); + else if (n->builtin == V4IR::Name::builtin_qml_context_object) + loadQmlContextObject(t); + else if (n->builtin == V4IR::Name::builtin_qml_scope_object) + loadQmlScopeObject(t); else getActivationProperty(n, t); return; @@ -138,6 +143,9 @@ void IRDecoder::visitMove(V4IR::Move *s) if (m->type == V4IR::Member::MemberByObjectId) { loadIdObject(m->objectId, t); return; + } else if (m->type == V4IR::Member::MemberOfQObject) { + getQObjectProperty(m->base, m->property->coreIndex, t); + return; } else if (m->base->asTemp() || m->base->asConst()) { getProperty(m->base, *m->name, t); return; |