diff options
author | Lars Knoll <lars.knoll@qt.io> | 2017-08-03 20:26:28 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2017-08-04 07:08:19 +0000 |
commit | c0f961cd6b82a523e277f6d8778a20508b15697d (patch) | |
tree | 7e4986686630404123a9f40eeb4881a089072d12 /src/qml/jsruntime/qv4qobjectwrapper.cpp | |
parent | b46b2e28b39443f6250c0d751a593b35af1c8c1e (diff) |
Change function signatures for call/construct back
Change those back again to return a value. This will be required
to avoid creation of Scope objects between JS function calls.
Change-Id: I05cb5cf8fd0c13dcefa60d213ccd5983fab57ea3
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4qobjectwrapper.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index fbb7f9729b..b710fd8444 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -826,7 +826,7 @@ struct QObjectSlotDispatcher : public QtPrivate::QSlotObjectBase } } - f->call(scope, callData); + f->call(callData); if (scope.hasException()) { QQmlError error = v4->catchExceptionAsQmlError(); if (error.description().isEmpty()) { @@ -1885,32 +1885,25 @@ QV4::ReturnedValue QObjectMethod::method_destroy(QV4::ExecutionContext *ctx, con return Encode::undefined(); } -void QObjectMethod::call(const Managed *m, Scope &scope, CallData *callData) +ReturnedValue QObjectMethod::call(const Managed *m, CallData *callData) { const QObjectMethod *This = static_cast<const QObjectMethod*>(m); - This->callInternal(callData, scope); + return This->callInternal(callData); } -void QObjectMethod::callInternal(CallData *callData, Scope &scope) const +ReturnedValue QObjectMethod::callInternal(CallData *callData) const { ExecutionEngine *v4 = engine(); ExecutionContext *context = v4->currentContext; - if (d()->index == DestroyMethod) { - scope.result = method_destroy(context, callData->args, callData->argc); - return; - } - - else if (d()->index == ToStringMethod) { - scope.result = method_toString(context); - return; - } + if (d()->index == DestroyMethod) + return method_destroy(context, callData->args, callData->argc); + else if (d()->index == ToStringMethod) + return method_toString(context); QQmlObjectOrGadget object(d()->object()); if (!d()->object()) { - if (!d()->valueTypeWrapper) { - scope.result = Encode::undefined(); - return; - } + if (!d()->valueTypeWrapper) + return Encode::undefined(); object = QQmlObjectOrGadget(d()->propertyCache(), d()->valueTypeWrapper->gadgetPtr); } @@ -1919,20 +1912,16 @@ void QObjectMethod::callInternal(CallData *callData, Scope &scope) const if (d()->propertyCache()) { QQmlPropertyData *data = d()->propertyCache()->method(d()->index); - if (!data) { - scope.result = QV4::Encode::undefined(); - return; - } + if (!data) + return QV4::Encode::undefined(); method = *data; } else { const QMetaObject *mo = d()->object()->metaObject(); const QMetaMethod moMethod = mo->method(d()->index); method.load(moMethod); - if (method.coreIndex() == -1) { - scope.result = QV4::Encode::undefined(); - return; - } + if (method.coreIndex() == -1) + return QV4::Encode::undefined(); // Look for overloaded methods QByteArray methodName = moMethod.name(); @@ -1948,20 +1937,21 @@ void QObjectMethod::callInternal(CallData *callData, Scope &scope) const } if (method.isV4Function()) { - scope.result = QV4::Encode::undefined(); - QQmlV4Function func(callData, &scope.result, v4); + Scope scope(v4); + QV4::ScopedValue rv(scope, QV4::Primitive::undefinedValue()); + QQmlV4Function func(callData, rv, v4); QQmlV4Function *funcptr = &func; void *args[] = { 0, &funcptr }; object.metacall(QMetaObject::InvokeMetaMethod, method.coreIndex(), args); - return; + return rv->asReturnedValue(); } if (!method.isOverload()) { - scope.result = CallPrecise(object, method, v4, callData); + return CallPrecise(object, method, v4, callData); } else { - scope.result = CallOverloaded(object, method, v4, callData, d()->propertyCache()); + return CallOverloaded(object, method, v4, callData, d()->propertyCache()); } } @@ -2024,10 +2014,10 @@ void QMetaObjectWrapper::init(ExecutionEngine *) { } } -void QMetaObjectWrapper::construct(const Managed *m, Scope &scope, CallData *callData) +ReturnedValue QMetaObjectWrapper::construct(const Managed *m, CallData *callData) { const QMetaObjectWrapper *This = static_cast<const QMetaObjectWrapper*>(m); - scope.result = This->constructInternal(callData); + return This->constructInternal(callData); } ReturnedValue QMetaObjectWrapper::constructInternal(CallData * callData) const { |