From 7f7d87c68da4cb29b2b2b9c324c6863228da0c26 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 7 May 2019 12:47:33 +0200 Subject: Split CompiledData::CompilationUnit in two We need a CompilationUnit that only holds the data needed for compilation and another one that is executable by the runtime. Change-Id: I704d859ba028576a18460f5e3a59f210f64535d3 Reviewed-by: Simon Hausmann --- src/qmlmodels/qqmllistmodel.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/qmlmodels/qqmllistmodel.cpp') diff --git a/src/qmlmodels/qqmllistmodel.cpp b/src/qmlmodels/qqmllistmodel.cpp index 5b5bcd8464..d1219d958a 100644 --- a/src/qmlmodels/qqmllistmodel.cpp +++ b/src/qmlmodels/qqmllistmodel.cpp @@ -314,7 +314,7 @@ QString StringOrTranslation::toString(const QQmlListModel *owner) const } if (!owner) return QString(); - return d.asT2()->valueAsString(owner->m_compilationUnit.data()); + return owner->m_compilationUnit->bindingValueAsString(d.asT2()); } QString StringOrTranslation::asString() const @@ -2676,7 +2676,7 @@ void QQmlListModel::sync() qmlWarning(this) << "List sync() can only be called from a WorkerScript"; } -bool QQmlListModelParser::verifyProperty(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Binding *binding) +bool QQmlListModelParser::verifyProperty(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Binding *binding) { if (binding->type >= QV4::CompiledData::Binding::Type_Object) { const quint32 targetObjectIndex = binding->value.objectIndex; @@ -2707,7 +2707,7 @@ bool QQmlListModelParser::verifyProperty(const QQmlRefPointertype == QV4::CompiledData::Binding::Type_Script) { - QString scriptStr = binding->valueAsScriptString(compilationUnit.data()); + QString scriptStr = compilationUnit->bindingValueAsScriptString(binding); if (!binding->isFunctionExpression() && !definesEmptyList(scriptStr)) { QByteArray script = scriptStr.toUtf8(); bool ok; @@ -2722,7 +2722,9 @@ bool QQmlListModelParser::verifyProperty(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Binding *binding, ListModel *model, int outterElementIndex) +bool QQmlListModelParser::applyProperty( + const QQmlRefPointer &compilationUnit, + const QV4::CompiledData::Binding *binding, ListModel *model, int outterElementIndex) { const QString elementName = compilationUnit->stringAt(binding->propertyNameIndex); @@ -2759,7 +2761,7 @@ bool QQmlListModelParser::applyProperty(const QQmlRefPointerisTranslationBinding()) { value = QVariant::fromValue(binding); } else if (binding->evaluatesToString()) { - value = binding->valueAsString(compilationUnit.data()); + value = compilationUnit->bindingValueAsString(binding); } else if (binding->type == QV4::CompiledData::Binding::Type_Number) { value = binding->valueAsNumber(compilationUnit->constants); } else if (binding->type == QV4::CompiledData::Binding::Type_Boolean) { @@ -2767,7 +2769,7 @@ bool QQmlListModelParser::applyProperty(const QQmlRefPointertype == QV4::CompiledData::Binding::Type_Null) { value = QVariant::fromValue(nullptr); } else if (binding->type == QV4::CompiledData::Binding::Type_Script) { - QString scriptStr = binding->valueAsScriptString(compilationUnit.data()); + QString scriptStr = compilationUnit->bindingValueAsScriptString(binding); if (definesEmptyList(scriptStr)) { const ListLayout::Role &role = model->getOrCreateListRole(elementName); ListModel *emptyModel = new ListModel(role.subLayout, nullptr); @@ -2802,7 +2804,7 @@ bool QQmlListModelParser::applyProperty(const QQmlRefPointer &compilationUnit, const QList &bindings) +void QQmlListModelParser::verifyBindings(const QQmlRefPointer &compilationUnit, const QList &bindings) { listElementTypeName = QString(); // unknown @@ -2817,7 +2819,7 @@ void QQmlListModelParser::verifyBindings(const QQmlRefPointer &compilationUnit, const QList &bindings) +void QQmlListModelParser::applyBindings(QObject *obj, const QQmlRefPointer &compilationUnit, const QList &bindings) { QQmlListModel *rv = static_cast(obj); -- cgit v1.2.3 From 540134d66dd0a235ace91ddc28940d2d88c24ac3 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Fri, 10 May 2019 15:48:50 +0200 Subject: Move valueAsNumber into ExecutableCompilationUnit This reduces our dependence on QV4::Value in the devtools. Change-Id: I4b3f937bc08c16f7e2543fdc5cc34c0cfb121f8f Reviewed-by: Simon Hausmann --- src/qmlmodels/qqmllistmodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/qmlmodels/qqmllistmodel.cpp') diff --git a/src/qmlmodels/qqmllistmodel.cpp b/src/qmlmodels/qqmllistmodel.cpp index d1219d958a..c1684d955c 100644 --- a/src/qmlmodels/qqmllistmodel.cpp +++ b/src/qmlmodels/qqmllistmodel.cpp @@ -2763,7 +2763,7 @@ bool QQmlListModelParser::applyProperty( } else if (binding->evaluatesToString()) { value = compilationUnit->bindingValueAsString(binding); } else if (binding->type == QV4::CompiledData::Binding::Type_Number) { - value = binding->valueAsNumber(compilationUnit->constants); + value = compilationUnit->bindingValueAsNumber(binding); } else if (binding->type == QV4::CompiledData::Binding::Type_Boolean) { value = binding->valueAsBoolean(); } else if (binding->type == QV4::CompiledData::Binding::Type_Null) { -- cgit v1.2.3