diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-05-24 11:21:10 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-05-24 12:41:25 +0200 |
commit | 1eb41200948ab414f1c47d93123b41c547a993df (patch) | |
tree | 6a14bff7c95bb346825e60b6721b5829690eb0da /src/qml/qml/qqmlcompiler.cpp | |
parent | 1d62cefbaa23ef96fa4dc36d950cc2d9a2d4b5c3 (diff) |
Remove QV8Bindings class
This class tries to optimise binding compilation with v8. With the
approach in v4 where we don't rewrite binding expressions anymore,
this is not required anymore.
Change-Id: I616aeeba85bc17a950d4c7341b3042ed8aa42bff
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/qml/qqmlcompiler.cpp')
-rw-r--r-- | src/qml/qml/qqmlcompiler.cpp | 148 |
1 files changed, 4 insertions, 144 deletions
diff --git a/src/qml/qml/qqmlcompiler.cpp b/src/qml/qml/qqmlcompiler.cpp index a1da778dc8..7b5f195fc7 100644 --- a/src/qml/qml/qqmlcompiler.cpp +++ b/src/qml/qml/qqmlcompiler.cpp @@ -921,18 +921,6 @@ void QQmlCompiler::compileTree(QQmlScript::Object *tree) output->addInstruction(import); } - if (!compileState->v8BindingProgram.isEmpty()) { - Instruction::InitV8Bindings bindings; - int index = output->programs.count(); - - typedef QQmlCompiledData::V8Program V8Program; - output->programs.append(V8Program(compileState->v8BindingProgram, output)); - - bindings.programIndex = index; - bindings.line = compileState->v8BindingProgramLine; - output->addInstruction(bindings); - } - genObject(tree); Instruction::SetDefault def; @@ -1455,18 +1443,6 @@ void QQmlCompiler::genComponent(QQmlScript::Object *obj) init.compiledBinding = output->indexForByteArray(compileState->compiledBindingData); output->addInstruction(init); - if (!compileState->v8BindingProgram.isEmpty()) { - Instruction::InitV8Bindings bindings; - int index = output->programs.count(); - - typedef QQmlCompiledData::V8Program V8Program; - output->programs.append(V8Program(compileState->v8BindingProgram, output)); - - bindings.programIndex = index; - bindings.line = compileState->v8BindingProgramLine; - output->addInstruction(bindings); - } - genObject(root); Instruction::SetDefault def; @@ -3544,34 +3520,7 @@ void QQmlCompiler::genBindingAssignment(QQmlScript::Value *binding, output->addInstruction(store); } else #endif - if (ref.dataType == BindingReference::V8) { - const JSBindingReference &js = static_cast<const JSBindingReference &>(ref); - - Instruction::StoreV8Binding store; - store.value = js.sharedIndex; - store.context = js.bindingContext.stack; - store.owner = js.bindingContext.owner; - store.isAlias = prop->isAlias; - store.isSafe = js.isSafe; - if (valueTypeProperty) { - store.isRoot = (compileState->root == valueTypeProperty->parent); - } else { - store.isRoot = (compileState->root == obj); - } - store.isFallback = js.compiledIndex > -1; - store.line = binding->location.start.line; - store.column = binding->location.start.column; - - Q_ASSERT(js.bindingContext.owner == 0 || - (js.bindingContext.owner != 0 && valueTypeProperty)); - if (js.bindingContext.owner) { - store.property = genValueTypeData(prop, valueTypeProperty); - } else { - store.property = prop->core; - } - - output->addInstruction(store); - } else if (ref.dataType == BindingReference::QtScript) { + if (ref.dataType == BindingReference::QtScript) { const JSBindingReference &js = static_cast<const JSBindingReference &>(ref); Instruction::StoreBinding store; @@ -3635,8 +3584,6 @@ bool QQmlCompiler::completeComponentBuild() aliasObject = compileState->aliasingObjects.next(aliasObject)) COMPILE_CHECK(buildDynamicMetaAliases(aliasObject)); - QList<JSBindingReference*> sharedBindings; - for (JSBindingReference *b = compileState->bindings.first(); b; b = b->nextReference) { JSBindingReference &binding = *b; @@ -3651,61 +3598,12 @@ bool QQmlCompiler::completeComponentBuild() binding.rewrittenExpression = rewriteBinding(binding.expression.asAST(), expression, &isSharable, &isSafe); binding.isSafe = isSafe; - if (isSharable && binding.property->type != qMetaTypeId<QQmlBinding*>()) { - sharedBindings.append(b); - - binding.dataType = BindingReference::V8; - binding.compiledIndex = -1; - - if (componentStats) - componentStats->componentStat.sharedBindings.append(b->value->location); - } else { - binding.dataType = BindingReference::QtScript; - - if (componentStats) - componentStats->componentStat.scriptBindings.append(b->value->location); - } - } - - if (!sharedBindings.isEmpty()) { - struct Sort { - static bool lt(const JSBindingReference *lhs, const JSBindingReference *rhs) - { - return lhs->value->location.start.line < rhs->value->location.start.line; - } - }; - - qSort(sharedBindings.begin(), sharedBindings.end(), Sort::lt); + binding.dataType = BindingReference::QtScript; - int startLineNumber = sharedBindings.at(0)->value->location.start.line; - int lineNumber = startLineNumber; - - QByteArray functionArray("[", 1); - for (int ii = 0; ii < sharedBindings.count(); ++ii) { - - JSBindingReference *reference = sharedBindings.at(ii); - QQmlScript::Value *value = reference->value; - const QString &expression = reference->rewrittenExpression; - - if (ii != 0) functionArray.append(",", 1); - - while (lineNumber < value->location.start.line) { - lineNumber++; - functionArray.append("\n", 1); - } - - functionArray += expression.toUtf8(); - lineNumber += expression.count(QLatin1Char('\n')); - - reference->sharedIndex = ii; - } - functionArray.append("]", 1); - - compileState->v8BindingProgram = functionArray; - compileState->v8BindingProgramLine = startLineNumber; + if (componentStats) + componentStats->componentStat.scriptBindings.append(b->value->location); } - // Check pop()'s matched push()'s Q_ASSERT(compileState->objectDepth.depth() == 0); Q_ASSERT(compileState->listDepth.depth() == 0); @@ -3724,44 +3622,6 @@ void QQmlCompiler::dumpStats() qWarning().nospace() << " Component Line " << stat.lineNumber; qWarning().nospace() << " Total Objects: " << stat.objects; qWarning().nospace() << " IDs Used: " << stat.ids; - qWarning().nospace() << " Optimized Bindings: " << stat.optimizedBindings.count(); - - { - QByteArray output; - for (int ii = 0; ii < stat.optimizedBindings.count(); ++ii) { - if (0 == (ii % 10)) { - if (ii) output.append("\n"); - output.append(" "); - } - - output.append('('); - output.append(QByteArray::number(stat.optimizedBindings.at(ii).start.line)); - output.append(':'); - output.append(QByteArray::number(stat.optimizedBindings.at(ii).start.column)); - output.append(") "); - } - if (!output.isEmpty()) - qWarning().nospace() << output.constData(); - } - - qWarning().nospace() << " Shared Bindings: " << stat.sharedBindings.count(); - { - QByteArray output; - for (int ii = 0; ii < stat.sharedBindings.count(); ++ii) { - if (0 == (ii % 10)) { - if (ii) output.append('\n'); - output.append(" "); - } - - output.append('('); - output.append(QByteArray::number(stat.sharedBindings.at(ii).start.line)); - output.append(':'); - output.append(QByteArray::number(stat.sharedBindings.at(ii).start.column)); - output.append(") "); - } - if (!output.isEmpty()) - qWarning().nospace() << output.constData(); - } qWarning().nospace() << " QScript Bindings: " << stat.scriptBindings.count(); { |