aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlexpression.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-05-23 22:56:38 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2013-05-24 12:39:34 +0200
commit1d62cefbaa23ef96fa4dc36d950cc2d9a2d4b5c3 (patch)
tree114eb77af818b37b05801498f9e4e3e4c482d7e1 /src/qml/qml/qqmlexpression.cpp
parentfa2d572d5d202b05ed1908ea1119a1995960ce1f (diff)
Add support for direct binding evaluation in QV4Script
This way there is no need to rewrite the binding expressions anymore, instead we can directly compile them into a binding function. Change-Id: I91a0c540d066976e363590fe9ccde6a81ee92b1d Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/qml/qqmlexpression.cpp')
-rw-r--r--src/qml/qml/qqmlexpression.cpp86
1 files changed, 3 insertions, 83 deletions
diff --git a/src/qml/qml/qqmlexpression.cpp b/src/qml/qml/qqmlexpression.cpp
index 32dbbb0e6c..419ea86ad9 100644
--- a/src/qml/qml/qqmlexpression.cpp
+++ b/src/qml/qml/qqmlexpression.cpp
@@ -96,42 +96,6 @@ void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr,
setScopeObject(me);
}
-void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QByteArray &expr,
- bool isRewritten, QObject *me, const QString &srcUrl,
- quint16 lineNumber, quint16 columnNumber)
-{
- url = srcUrl;
- line = lineNumber;
- column = columnNumber;
-
- if (isRewritten) {
- expressionFunctionValid = true;
- expressionFunctionRewritten = true;
- v8function = evalFunction(ctxt, me, expr.constData(), expr.length(),
- srcUrl, lineNumber, &v8qmlscope);
- setUseSharedContext(false);
-
- expressionUtf8 = expr;
- } else {
- expression = QString::fromUtf8(expr);
-
- expressionFunctionValid = false;
- expressionFunctionRewritten = isRewritten;
- }
-
- QQmlAbstractExpression::setContext(ctxt);
- setScopeObject(me);
-}
-
-QQmlExpression *
-QQmlExpressionPrivate::create(QQmlContextData *ctxt, QObject *object,
- const QString &expr, bool isRewritten,
- const QString &url, quint16 lineNumber, quint16 columnNumber)
-{
- return new QQmlExpression(ctxt, object, expr, isRewritten, url, lineNumber, columnNumber,
- *new QQmlExpressionPrivate);
-}
-
/*!
\class QQmlExpression
\since 5.0
@@ -174,29 +138,6 @@ QQmlExpression::QQmlExpression()
{
}
-/*! \internal */
-QQmlExpression::QQmlExpression(QQmlContextData *ctxt,
- QObject *object, const QString &expr, bool isRewritten,
- const QString &url, int lineNumber, int columnNumber,
- QQmlExpressionPrivate &dd)
-: QObject(dd, 0)
-{
- Q_D(QQmlExpression);
- d->init(ctxt, expr, isRewritten, object, url, qmlSourceCoordinate(lineNumber), qmlSourceCoordinate(columnNumber));
-}
-
-/*! \internal */
-QQmlExpression::QQmlExpression(QQmlContextData *ctxt,
- QObject *object, const QByteArray &expr,
- bool isRewritten,
- const QString &url, int lineNumber, int columnNumber,
- QQmlExpressionPrivate &dd)
-: QObject(dd, 0)
-{
- Q_D(QQmlExpression);
- d->init(ctxt, expr, isRewritten, object, url, qmlSourceCoordinate(lineNumber), qmlSourceCoordinate(columnNumber));
-}
-
/*!
Create a QQmlExpression object that is a child of \a parent.
@@ -271,15 +212,6 @@ QQmlExpression::QQmlExpression(QQmlContextData *ctxt, QObject *scope,
d->init(ctxt, expression, scope);
}
-/*! \internal */
-QQmlExpression::QQmlExpression(QQmlContextData *ctxt, QObject *scope,
- const QString &expression, QQmlExpressionPrivate &dd)
-: QObject(dd, 0)
-{
- Q_D(QQmlExpression);
- d->init(ctxt, expression, scope);
-}
-
/*!
Destroy the QQmlExpression instance.
*/
@@ -314,11 +246,7 @@ QQmlContext *QQmlExpression::context() const
QString QQmlExpression::expression() const
{
Q_D(const QQmlExpression);
- if (!d->expressionUtf8.isEmpty()) {
- return QString::fromUtf8(d->expressionUtf8);
- } else {
- return d->expression;
- }
+ return d->expression;
}
/*!
@@ -330,7 +258,6 @@ void QQmlExpression::setExpression(const QString &expression)
d->resetNotifyOnValueChanged();
d->expression = expression;
- d->expressionUtf8.clear();
d->expressionFunctionValid = false;
d->expressionFunctionRewritten = false;
}
@@ -339,17 +266,10 @@ void QQmlExpression::setExpression(const QString &expression)
v8::Handle<v8::Value> QQmlExpressionPrivate::v8value(bool *isUndefined)
{
if (!expressionFunctionValid) {
- bool ok = true;
-
- QQmlRewrite::RewriteBinding rewriteBinding;
- rewriteBinding.setName(name);
- QString code;
if (expressionFunctionRewritten)
- code = expression;
+ v8function = evalFunction(context(), scopeObject(), expression, url, line, &v8qmlscope);
else
- code = rewriteBinding(expression, &ok);
-
- if (ok) v8function = evalFunction(context(), scopeObject(), code, url, line, &v8qmlscope);
+ v8function = qmlBinding(context(), scopeObject(), expression, url, line, &v8qmlscope);
setUseSharedContext(false);
expressionFunctionValid = true;
}