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); 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->setSourceLocation(bindingFunction->currentLocation());
newBinding->setTarget(object, *property, nullptr); newBinding->setTarget(object, *property, nullptr);
} }

View File

@ -110,21 +110,8 @@ QQmlBinding *QQmlBinding::create(const QQmlPropertyData *property, const QString
return b; 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, 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); QQmlBinding *b = newBinding(QQmlEnginePrivate::get(ctxt), property);
@ -132,8 +119,8 @@ QQmlBinding *QQmlBinding::create(const QQmlPropertyData *property, QV4::Function
b->QQmlJavaScriptExpression::setContext(ctxt); b->QQmlJavaScriptExpression::setContext(ctxt);
b->setScopeObject(obj); b->setScopeObject(obj);
Q_ASSERT(sharedContext); Q_ASSERT(scope);
b->setupFunction(sharedContext, function); b->setupFunction(scope, function);
return b; return b;
} }

View File

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

View File

@ -466,7 +466,7 @@ void QQmlJavaScriptExpression::setFunctionObject(const QV4::FunctionObject *o)
m_compilationUnit = m_v4Function->compilationUnit; 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) if (!qmlContext || !f)
return; return;

View File

@ -160,7 +160,7 @@ protected:
} }
void setFunctionObject(const QV4::FunctionObject *o); void setFunctionObject(const QV4::FunctionObject *o);
void setupFunction(QV4::QmlContext *qmlContext, QV4::Function *f); void setupFunction(QV4::ExecutionContext *qmlContext, QV4::Function *f);
private: private:
friend class QQmlContextData; 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); 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->setSourceLocation(bindingFunction->currentLocation());
newBinding->setTarget(reference->d()->object, cacheData, pd); newBinding->setTarget(reference->d()->object, cacheData, pd);
QQmlPropertyPrivate::setBinding(newBinding); QQmlPropertyPrivate::setBinding(newBinding);