Use the optimized QDeclarativeExpression constructor where possible.
authorMichael Brasser <michael.brasser@nokia.com>
Mon, 29 Aug 2011 05:06:14 +0000 (15:06 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 29 Aug 2011 06:29:24 +0000 (08:29 +0200)
Pass in the QDeclarativeScriptString directly, to make use of the
precompiled binding. Also does some minor cleanup of the related
internal implementation.

Change-Id: I4b199298c9da3ee11c51c9c98b384c8324f62c26
Reviewed-on: http://codereview.qt.nokia.com/3696
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Charles Yin <charles.yin@nokia.com>
src/declarative/qml/qdeclarativebinding.cpp
src/declarative/qml/qdeclarativeexpression.cpp
src/declarative/util/qdeclarativeanimation.cpp
src/declarative/util/qdeclarativestateoperations.cpp

index 0697441..d817990 100644 (file)
@@ -235,7 +235,7 @@ QDeclarativeBinding::createBinding(Identifier id, QObject *obj, QDeclarativeCont
 
     QDeclarativeContextData *ctxtdata = QDeclarativeContextData::get(ctxt);
 
-    QDeclarativeEnginePrivate *engine = QDeclarativeEnginePrivate::get(qmlEngine(obj));
+    QDeclarativeEnginePrivate *engine = QDeclarativeEnginePrivate::get(ctxt->engine());
     QDeclarativeCompiledData *cdata = 0;
     QDeclarativeTypeData *typeData = 0;
     if (engine && ctxtdata && !ctxtdata->url.isEmpty()) {
index 8806996..a24d469 100644 (file)
@@ -242,7 +242,7 @@ QDeclarativeExpression::QDeclarativeExpression(const QDeclarativeScriptString &s
     } else {
         QDeclarativeContextData *ctxtdata = QDeclarativeContextData::get(script.context());
 
-        QDeclarativeEnginePrivate *engine = QDeclarativeEnginePrivate::get(qmlEngine(script.scopeObject()));
+        QDeclarativeEnginePrivate *engine = QDeclarativeEnginePrivate::get(script.context()->engine());
         QDeclarativeCompiledData *cdata = 0;
         QDeclarativeTypeData *typeData = 0;
         if (engine && ctxtdata && !ctxtdata->url.isEmpty()) {
@@ -251,7 +251,7 @@ QDeclarativeExpression::QDeclarativeExpression(const QDeclarativeScriptString &s
         }
 
         if (cdata)
-            d->init(ctxtdata, cdata->primitives.at(id), cdata, script.scopeObject(),
+            d->init(ctxtdata, cdata->primitives.at(id), true, script.scopeObject(),
                     cdata->name, script.d.data()->lineNumber);
         else
            defaultConstruction = true;
index 11e1c7c..6cdba7c 100644 (file)
@@ -827,12 +827,8 @@ void QDeclarativeScriptActionPrivate::execute()
 
     QDeclarativeScriptString scriptStr = hasRunScriptScript ? runScriptScript : script;
 
-    const QString &str = scriptStr.script();
-    if (!str.isEmpty()) {
-        QDeclarativeExpression expr(scriptStr.context(), scriptStr.scopeObject(), str);
-        QDeclarativeData *ddata = QDeclarativeData::get(q);
-        if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-            expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+    if (!scriptStr.script().isEmpty()) {
+        QDeclarativeExpression expr(scriptStr);
         expr.evaluate();
         if (expr.hasError())
             qmlInfo(q) << expr.error();
index 6ac2100..98f437d 100644 (file)
@@ -131,12 +131,8 @@ void QDeclarativeStateChangeScript::setName(const QString &n)
 void QDeclarativeStateChangeScript::execute(Reason)
 {
     Q_D(QDeclarativeStateChangeScript);
-    const QString &script = d->script.script();
-    if (!script.isEmpty()) {
-        QDeclarativeExpression expr(d->script.context(), d->script.scopeObject(), script);
-        QDeclarativeData *ddata = QDeclarativeData::get(this);
-        if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-            expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+    if (!d->script.script().isEmpty()) {
+        QDeclarativeExpression expr(d->script);
         expr.evaluate();
         if (expr.hasError())
             qmlInfo(this, expr.error());