aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4jsir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/compiler/qv4jsir.cpp')
-rw-r--r--src/qml/compiler/qv4jsir.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/qml/compiler/qv4jsir.cpp b/src/qml/compiler/qv4jsir.cpp
index 1c9620e1f5..86a13cfe99 100644
--- a/src/qml/compiler/qv4jsir.cpp
+++ b/src/qml/compiler/qv4jsir.cpp
@@ -421,6 +421,8 @@ static const char *builtin_to_string(Name::Builtin b)
return "builtin_define_object_literal";
case V4IR::Name::builtin_setup_argument_object:
return "builtin_setup_argument_object";
+ case V4IR::Name::builtin_qml_id_scope:
+ return "builtin_qml_id_scope";
}
return "builtin_(###FIXME)";
};
@@ -817,6 +819,14 @@ Expr *BasicBlock::MEMBER(Expr *base, const QString *name)
return e;
}
+Expr *BasicBlock::QML_CONTEXT_ID_MEMBER(const QString &id, int objectId, quint32 line, quint32 column)
+{
+ Member*e = function->New<Member>();
+ Name *base = NAME(Name::builtin_qml_id_scope, line, column);
+ e->initQmlIdObject(base, function->newString(id), objectId);
+ return e;
+}
+
Stmt *BasicBlock::EXP(Expr *expr)
{
if (isTerminated())
@@ -1003,7 +1013,18 @@ void CloneExpr::visitSubscript(Subscript *e)
void CloneExpr::visitMember(Member *e)
{
- cloned = block->MEMBER(clone(e->base), e->name);
+ Member *m = static_cast<Member*>(block->MEMBER(clone(e->base), e->name));
+ if (e->type == Member::MemberByObjectId) {
+ m->type = e->type;
+ m->objectId = e->objectId;
+ }
+ cloned = m;
+}
+
+void QmlDependenciesCollector::visitPhi(Phi *s) {
+ s->targetTemp->accept(this);
+ foreach (Expr *e, s->d->incoming)
+ e->accept(this);
}
} // end of namespace IR