Avoid passing a FunctionObject to QQmlBinding::create()

Like this we can remove the QQmlBinding::create() overload
that takes a FunctionObject.

Change-Id: Ib6c37395ded325e68cf0fbf3afd08fb6dd6efa3b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
Lars Knoll 2016-12-05 14:31:50 +01:00
parent a11be5881a
commit b45ebc6f45
6 changed files with 10 additions and 22 deletions

View File

@ -392,7 +392,8 @@ void QObjectWrapper::setProperty(ExecutionEngine *engine, QObject *object, QQmlP
QV4::Scoped<QQmlBindingFunction> bindingFunction(scope, (const Value &)f);
newBinding = QQmlBinding::create(property, f, object, callingQmlContext);
QV4::ScopedContext ctx(scope, bindingFunction->scope());
newBinding = QQmlBinding::create(property, bindingFunction->function(), object, callingQmlContext, ctx);
newBinding->setSourceLocation(bindingFunction->currentLocation());
newBinding->setTarget(object, *property, nullptr);
}

View File

@ -110,21 +110,8 @@ QQmlBinding *QQmlBinding::create(const QQmlPropertyData *property, const QString
return b;
}
QQmlBinding *QQmlBinding::create(const QQmlPropertyData *property, const QV4::FunctionObject *function, QObject *obj, QQmlContextData *ctxt)
{
QQmlBinding *b = newBinding(QQmlEnginePrivate::get(ctxt), property);
b->setNotifyOnValueChanged(true);
b->QQmlJavaScriptExpression::setContext(ctxt);
b->setScopeObject(obj);
b->setFunctionObject(function);
return b;
}
QQmlBinding *QQmlBinding::create(const QQmlPropertyData *property, QV4::Function *function,
QObject *obj, QQmlContextData *ctxt, QV4::QmlContext *sharedContext)
QObject *obj, QQmlContextData *ctxt, QV4::ExecutionContext *scope)
{
QQmlBinding *b = newBinding(QQmlEnginePrivate::get(ctxt), property);
@ -132,8 +119,8 @@ QQmlBinding *QQmlBinding::create(const QQmlPropertyData *property, QV4::Function
b->QQmlJavaScriptExpression::setContext(ctxt);
b->setScopeObject(obj);
Q_ASSERT(sharedContext);
b->setupFunction(sharedContext, function);
Q_ASSERT(scope);
b->setupFunction(scope, function);
return b;
}

View File

@ -75,9 +75,8 @@ public:
static QQmlBinding *create(const QQmlPropertyData *, const QQmlScriptString &, QObject *, QQmlContext *);
static QQmlBinding *create(const QQmlPropertyData *, const QString &, QObject *, QQmlContextData *,
const QString &url = QString(), quint16 lineNumber = 0);
static QQmlBinding *create(const QQmlPropertyData *, const QV4::FunctionObject *function, QObject *, QQmlContextData *);
static QQmlBinding *create(const QQmlPropertyData *property, QV4::Function *function,
QObject *obj, QQmlContextData *ctxt, QV4::QmlContext *sharedContext);
QObject *obj, QQmlContextData *ctxt, QV4::ExecutionContext *scope);
~QQmlBinding();
void setTarget(const QQmlProperty &);

View File

@ -466,7 +466,7 @@ void QQmlJavaScriptExpression::setFunctionObject(const QV4::FunctionObject *o)
m_compilationUnit = m_v4Function->compilationUnit;
}
void QQmlJavaScriptExpression::setupFunction(QV4::QmlContext *qmlContext, QV4::Function *f)
void QQmlJavaScriptExpression::setupFunction(QV4::ExecutionContext *qmlContext, QV4::Function *f)
{
if (!qmlContext || !f)
return;

View File

@ -160,7 +160,7 @@ protected:
}
void setFunctionObject(const QV4::FunctionObject *o);
void setupFunction(QV4::QmlContext *qmlContext, QV4::Function *f);
void setupFunction(QV4::ExecutionContext *qmlContext, QV4::Function *f);
private:
friend class QQmlContextData;

View File

@ -454,7 +454,8 @@ void QQmlValueTypeWrapper::put(Managed *m, String *name, const Value &value)
QV4::Scoped<QQmlBindingFunction> bindingFunction(scope, (const Value &)f);
QQmlBinding *newBinding = QQmlBinding::create(&cacheData, f, reference->d()->object, context);
QV4::ScopedContext ctx(scope, bindingFunction->scope());
QQmlBinding *newBinding = QQmlBinding::create(&cacheData, bindingFunction->function(), reference->d()->object, context, ctx);
newBinding->setSourceLocation(bindingFunction->currentLocation());
newBinding->setTarget(reference->d()->object, cacheData, pd);
QQmlPropertyPrivate::setBinding(newBinding);