diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-05-23 22:56:38 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-05-24 12:39:34 +0200 |
commit | 1d62cefbaa23ef96fa4dc36d950cc2d9a2d4b5c3 (patch) | |
tree | 114eb77af818b37b05801498f9e4e3e4c482d7e1 /src/qml/qml/qqmlexpression.cpp | |
parent | fa2d572d5d202b05ed1908ea1119a1995960ce1f (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.cpp | 86 |
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; } |