From 9be39c62ff33248e40175610173bf49d06336a5e Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Mon, 21 Nov 2011 15:51:54 +1000 Subject: [PATCH] Use the AST for binding rewriting when possible. Change-Id: I1ac8bd39ea7e02f7c236c030ca233e1060746431 Reviewed-by: Aaron Kennedy --- src/declarative/qml/qdeclarativecompiler.cpp | 6 +++--- src/declarative/qml/qdeclarativecompiler_p.h | 2 +- src/declarative/qml/qdeclarativecustomparser.cpp | 6 +++--- src/declarative/qml/qdeclarativecustomparser_p.h | 2 +- .../util/qdeclarativepropertychanges.cpp | 3 +-- src/qtquick1/util/qdeclarativepropertychanges.cpp | 4 +--- 6 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index e7d9b80..a2eae79 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -1170,7 +1170,7 @@ void QDeclarativeCompiler::genObjectBody(QDeclarativeScript::Object *obj) ss.value = output->indexForString(script); ss.scope = prop->scriptStringScope; // ss.bindingId = rewriteBinding(script, prop->name()); - ss.bindingId = rewriteBinding(script, QString()); // XXX + ss.bindingId = rewriteBinding(prop->values.first()->value, QString()); // XXX ss.line = prop->location.start.line; output->addInstruction(ss); } @@ -2484,12 +2484,12 @@ const QMetaObject *QDeclarativeCompiler::resolveType(const QString& name) const // similar to logic of completeComponentBuild, but also sticks data // into primitives at the end -int QDeclarativeCompiler::rewriteBinding(const QString& expression, const QString& name) +int QDeclarativeCompiler::rewriteBinding(const QDeclarativeScript::Variant& value, const QString& name) { QDeclarativeRewrite::RewriteBinding rewriteBinding; rewriteBinding.setName(QLatin1Char('$') + name.mid(name.lastIndexOf(QLatin1Char('.')) + 1)); - QString rewrite = rewriteBinding(expression, 0, 0); + QString rewrite = rewriteBinding(value.asAST(), value.asScript(), 0); return output->indexForString(rewrite); } diff --git a/src/declarative/qml/qdeclarativecompiler_p.h b/src/declarative/qml/qdeclarativecompiler_p.h index f6229bc..1ee5afb 100644 --- a/src/declarative/qml/qdeclarativecompiler_p.h +++ b/src/declarative/qml/qdeclarativecompiler_p.h @@ -279,7 +279,7 @@ public: int evaluateEnum(const QByteArray& script) const; // for QDeclarativeCustomParser::evaluateEnum const QMetaObject *resolveType(const QString& name) const; // for QDeclarativeCustomParser::resolveType - int rewriteBinding(const QString& expression, const QString& name); // for QDeclarativeCustomParser::rewriteBinding + int rewriteBinding(const QDeclarativeScript::Variant& value, const QString& name); // for QDeclarativeCustomParser::rewriteBinding private: typedef QDeclarativeCompiledData::Instruction Instruction; diff --git a/src/declarative/qml/qdeclarativecustomparser.cpp b/src/declarative/qml/qdeclarativecustomparser.cpp index e783d3a..9d643d3 100644 --- a/src/declarative/qml/qdeclarativecustomparser.cpp +++ b/src/declarative/qml/qdeclarativecustomparser.cpp @@ -298,13 +298,13 @@ const QMetaObject *QDeclarativeCustomParser::resolveType(const QString& name) co } /*! - Rewrites \a expression and returns an identifier that can be + Rewrites \a value and returns an identifier that can be used to construct the binding later. \a name is used as the name of the rewritten function. */ -QDeclarativeBinding::Identifier QDeclarativeCustomParser::rewriteBinding(const QString& expression, const QString& name) +QDeclarativeBinding::Identifier QDeclarativeCustomParser::rewriteBinding(const QDeclarativeScript::Variant &value, const QString& name) { - return compiler->rewriteBinding(expression, name); + return compiler->rewriteBinding(value, name); } QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativecustomparser_p.h b/src/declarative/qml/qdeclarativecustomparser_p.h index 94b6865..83e1319 100644 --- a/src/declarative/qml/qdeclarativecustomparser_p.h +++ b/src/declarative/qml/qdeclarativecustomparser_p.h @@ -142,7 +142,7 @@ protected: const QMetaObject *resolveType(const QString&) const; - QDeclarativeBinding::Identifier rewriteBinding(const QString&, const QString&); + QDeclarativeBinding::Identifier rewriteBinding(const QDeclarativeScript::Variant&, const QString&); private: QList exceptions; diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp index 72add56..e9dc559 100644 --- a/src/declarative/util/qdeclarativepropertychanges.cpp +++ b/src/declarative/util/qdeclarativepropertychanges.cpp @@ -298,8 +298,7 @@ QDeclarativePropertyChangesParser::compile(const QList