aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlexpression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlexpression.cpp')
-rw-r--r--src/qml/qml/qqmlexpression.cpp111
1 files changed, 9 insertions, 102 deletions
diff --git a/src/qml/qml/qqmlexpression.cpp b/src/qml/qml/qqmlexpression.cpp
index accc645f1e..ddebf02c6c 100644
--- a/src/qml/qml/qqmlexpression.cpp
+++ b/src/qml/qml/qqmlexpression.cpp
@@ -45,9 +45,9 @@
#include "qqmlglobal_p.h"
#include "qqmlengine_p.h"
#include "qqmlcontext_p.h"
-#include "qqmlrewrite_p.h"
#include "qqmlscriptstring_p.h"
#include "qqmlcompiler_p.h"
+#include <private/qv8engine_p.h>
#include <QtCore/qdebug.h>
@@ -60,15 +60,13 @@ static QQmlJavaScriptExpression::VTable QQmlExpressionPrivate_jsvtable = {
QQmlExpressionPrivate::QQmlExpressionPrivate()
: QQmlJavaScriptExpression(&QQmlExpressionPrivate_jsvtable),
- expressionFunctionValid(true), expressionFunctionRewritten(false),
+ expressionFunctionValid(true),
line(0), column(0)
{
}
QQmlExpressionPrivate::~QQmlExpressionPrivate()
{
- qPersistentDispose(v8qmlscope);
- qPersistentDispose(v8function);
}
void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr, QObject *me)
@@ -78,11 +76,10 @@ void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr, QOb
QQmlAbstractExpression::setContext(ctxt);
setScopeObject(me);
expressionFunctionValid = false;
- expressionFunctionRewritten = false;
}
void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr,
- bool isRewritten, QObject *me, const QString &srcUrl,
+ QObject *me, const QString &srcUrl,
quint16 lineNumber, quint16 columnNumber)
{
url = srcUrl;
@@ -92,48 +89,11 @@ void QQmlExpressionPrivate::init(QQmlContextData *ctxt, const QString &expr,
expression = expr;
expressionFunctionValid = false;
- expressionFunctionRewritten = isRewritten;
QQmlAbstractExpression::setContext(ctxt);
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
@@ -176,29 +136,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.
@@ -233,7 +170,7 @@ QQmlExpression::QQmlExpression(const QQmlScriptString &script, QQmlContext *ctxt
if (QQmlCompiledData *cdata = typeData->compiledData()) {
defaultConstruction = false;
- d->init(evalCtxtData, cdata->primitives.at(id), true, scopeObject,
+ d->init(evalCtxtData, cdata->primitives.at(id), scopeObject,
cdata->name, scriptPrivate->lineNumber, scriptPrivate->columnNumber);
}
@@ -273,15 +210,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.
*/
@@ -316,11 +244,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;
}
/*!
@@ -332,33 +256,18 @@ void QQmlExpression::setExpression(const QString &expression)
d->resetNotifyOnValueChanged();
d->expression = expression;
- d->expressionUtf8.clear();
d->expressionFunctionValid = false;
- d->expressionFunctionRewritten = false;
- qPersistentDispose(d->v8function);
- qPersistentDispose(d->v8qmlscope);
}
// Must be called with a valid handle scope
-v8::Local<v8::Value> QQmlExpressionPrivate::v8value(bool *isUndefined)
+QV4::Value QQmlExpressionPrivate::v4value(bool *isUndefined)
{
if (!expressionFunctionValid) {
- bool ok = true;
-
- QQmlRewrite::RewriteBinding rewriteBinding;
- rewriteBinding.setName(name);
- QString code;
- if (expressionFunctionRewritten)
- code = expression;
- else
- code = rewriteBinding(expression, &ok);
-
- if (ok) v8function = evalFunction(context(), scopeObject(), code, url, line, &v8qmlscope);
- setUseSharedContext(false);
+ function = qmlBinding(context(), scopeObject(), expression, url, line, &qmlscope);
expressionFunctionValid = true;
}
- return evaluate(context(), v8function, isUndefined);
+ return evaluate(context(), function.value(), isUndefined);
}
QVariant QQmlExpressionPrivate::value(bool *isUndefined)
@@ -376,9 +285,7 @@ QVariant QQmlExpressionPrivate::value(bool *isUndefined)
ep->referenceScarceResources(); // "hold" scarce resources in memory during evaluation.
{
- v8::HandleScope handle_scope;
- v8::Context::Scope context_scope(ep->v8engine()->context());
- v8::Local<v8::Value> result = v8value(isUndefined);
+ QV4::Value result = v4value(isUndefined);
rv = ep->v8engine()->toVariant(result, -1);
}