diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2012-03-09 12:29:51 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-30 12:55:35 +0200 |
commit | c1751ca39a21ee29fa7c4bd89cdd0d1e406e5cc1 (patch) | |
tree | 1089a663e360ced28033a587664073586c8c63e5 /src/qml/qml/qqmlcompiler.cpp | |
parent | 833336fa963b3cd9f1996d7d255098f523dfa580 (diff) |
Allow V8 bindings to be assigned to aliases
V8 bindings must be able to be retargetted for them to be assignable
to aliases.
Change-Id: If72ff2a24188667113cbb46439129f8d2fcb8f90
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/qml/qml/qqmlcompiler.cpp')
-rw-r--r-- | src/qml/qml/qqmlcompiler.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/src/qml/qml/qqmlcompiler.cpp b/src/qml/qml/qqmlcompiler.cpp index fe0cc7a95c..2b4ede4271 100644 --- a/src/qml/qml/qqmlcompiler.cpp +++ b/src/qml/qml/qqmlcompiler.cpp @@ -3503,6 +3503,7 @@ void QQmlCompiler::genBindingAssignment(QQmlScript::Value *binding, store.value = js.compiledIndex; store.context = js.bindingContext.stack; store.owner = js.bindingContext.owner; + store.isAlias = prop->isAlias; if (valueTypeProperty) { store.isRoot = (compileState->root == valueTypeProperty->parent); } else { @@ -3523,30 +3524,29 @@ void QQmlCompiler::genBindingAssignment(QQmlScript::Value *binding, } else if (ref.dataType == BindingReference::QtScript) { const JSBindingReference &js = static_cast<const JSBindingReference &>(ref); - QQmlInstruction store; - store.assignBinding.value = output->indexForString(js.rewrittenExpression); - store.assignBinding.context = js.bindingContext.stack; - store.assignBinding.owner = js.bindingContext.owner; - store.assignBinding.line = binding->location.start.line; - store.assignBinding.column = binding->location.start.column; + Instruction::StoreBinding store; + store.value = output->indexForString(js.rewrittenExpression); + store.context = js.bindingContext.stack; + store.owner = js.bindingContext.owner; + store.line = binding->location.start.line; + store.column = binding->location.start.column; + store.isAlias = prop->isAlias; if (valueTypeProperty) { - store.assignBinding.isRoot = (compileState->root == valueTypeProperty->parent); + store.isRoot = (compileState->root == valueTypeProperty->parent); } else { - store.assignBinding.isRoot = (compileState->root == obj); + store.isRoot = (compileState->root == obj); } Q_ASSERT(js.bindingContext.owner == 0 || (js.bindingContext.owner != 0 && valueTypeProperty)); if (js.bindingContext.owner) { - store.assignBinding.property = genValueTypeData(prop, valueTypeProperty); + store.property = genValueTypeData(prop, valueTypeProperty); } else { - store.assignBinding.property = prop->core; + store.property = prop->core; } - output->addInstructionHelper( - !prop->isAlias ? QQmlInstruction::StoreBinding - : QQmlInstruction::StoreBindingOnAlias - , store); + + output->addInstruction(store); } else { Q_ASSERT(!"Unhandled BindingReference::DataType type"); } @@ -3623,8 +3623,7 @@ bool QQmlCompiler::completeComponentBuild() bool isSharable = false; binding.rewrittenExpression = rewriteBinding(binding.expression.asAST(), expression, &isSharable); - if (isSharable && !binding.property->isAlias /* See above re alias */ && - binding.property->type != qMetaTypeId<QQmlBinding*>()) { + if (isSharable && binding.property->type != qMetaTypeId<QQmlBinding*>()) { binding.dataType = BindingReference::V8; sharedBindings.append(b); |