aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4jsir.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-10-28 17:02:54 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-31 18:55:14 +0100
commitf0ad3a5943804e9eb8e03434a4584eaafa5c5aea (patch)
tree8d2cb4402d63ced4e89c6c610fc839e0260d8e92 /src/qml/compiler/qv4jsir.cpp
parentb0afac3daf1cbb9daacbeac0183ef6254de6cc95 (diff)
Implement loading of resolved imported scripts
We can resolve the use of names that refer to imported scripts at compile time and load them at run-time by index through context->importedScripts. Change-Id: I681b19e7d68dbf3b9a68af00b4cea2a9254c2d78 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/compiler/qv4jsir.cpp')
-rw-r--r--src/qml/compiler/qv4jsir.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/qml/compiler/qv4jsir.cpp b/src/qml/compiler/qv4jsir.cpp
index a3654a1bea..2e80fc1f31 100644
--- a/src/qml/compiler/qv4jsir.cpp
+++ b/src/qml/compiler/qv4jsir.cpp
@@ -424,6 +424,8 @@ static const char *builtin_to_string(Name::Builtin b)
return "builtin_setup_argument_object";
case V4IR::Name::builtin_qml_id_scope:
return "builtin_qml_id_scope";
+ case V4IR::Name::builtin_qml_imported_scripts_scope:
+ return "builtin_qml_imported_scripts_scope";
case V4IR::Name::builtin_qml_scope_object:
return "builtin_qml_scope_object";
case V4IR::Name::builtin_qml_context_object:
@@ -826,11 +828,10 @@ Expr *BasicBlock::MEMBER(Expr *base, const QString *name)
return e;
}
-Expr *BasicBlock::QML_CONTEXT_ID_MEMBER(Expr *base, const QString *id, int objectId)
+Expr *BasicBlock::QML_CONTEXT_MEMBER(Expr *base, const QString *id, int memberIndex)
{
Member*e = function->New<Member>();
- Q_ASSERT(base->asName() && base->asName()->builtin == Name::builtin_qml_id_scope);
- e->initQmlIdObject(base, id, objectId);
+ e->initQmlContextMember(base, id, memberIndex);
return e;
}
@@ -1029,8 +1030,8 @@ void CloneExpr::visitMember(Member *e)
{
if (e->type == Member::MemberByName)
cloned = block->MEMBER(clone(e->base), e->name);
- else if (e->type == Member::MemberByObjectId)
- cloned = block->QML_CONTEXT_ID_MEMBER(clone(e->base), e->name, e->objectId);
+ else if (e->type == Member::MemberOfQmlContext)
+ cloned = block->QML_CONTEXT_MEMBER(clone(e->base), e->name, e->memberIndex);
else if (e->type == Member::MemberOfQObject)
cloned = block->QML_QOBJECT_PROPERTY(clone(e->base), e->name, e->property);
else
@@ -1039,9 +1040,12 @@ void CloneExpr::visitMember(Member *e)
void QmlDependenciesCollector::visitMember(Member *e) {
e->base->accept(this);
- if (e->type == Member::MemberByObjectId)
- _usedIdObjects.insert(e->objectId);
- else if (e->type == Member::MemberOfQObject
+ if (e->type == Member::MemberOfQmlContext) {
+ V4IR::Name *base = e->base->asName();
+ Q_ASSERT(base);
+ if (base->builtin == V4IR::Name::builtin_qml_id_scope)
+ _usedIdObjects.insert(e->memberIndex);
+ } else if (e->type == Member::MemberOfQObject
&& !e->property->isFunction()) { // only non-functions have notifyIndex
if (Name *base = e->base->asName()) {