diff options
author | Lars Knoll <lars.knoll@qt.io> | 2017-09-01 11:48:15 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2017-09-02 07:12:17 +0000 |
commit | 74c8fe86755af485f8d0a47799d6d50f00070f05 (patch) | |
tree | 9e3d8c51d46d9f0fa2555cc77d184d6b3ee1be7d /src/qml/jsruntime/qv4jscall_p.h | |
parent | a91383545c6f487cff61f401d11f1e85939222e9 (diff) |
Always set the correct FunctionObject when calling JS functions
Renamed ScopedCallData to JSCall, enforced passing a JS
FunctionObject to it, and added call() and callAsConstructor()
methods to it.
Change-Id: I30db65c9765c2896b5909fe2105c0934c6dad861
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4jscall_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4jscall_p.h | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4jscall_p.h b/src/qml/jsruntime/qv4jscall_p.h index f871034789..c78337a89f 100644 --- a/src/qml/jsruntime/qv4jscall_p.h +++ b/src/qml/jsruntime/qv4jscall_p.h @@ -60,16 +60,15 @@ QT_BEGIN_NAMESPACE namespace QV4 { -struct ScopedCallData { - ScopedCallData(const Scope &scope, int argc = 0) +struct JSCall { + JSCall(const Scope &scope, std::nullptr_t, int argc = 0) { int size = int(offsetof(QV4::CallData, args)/sizeof(QV4::Value)) + qMax(argc , int(QV4::Global::ReservedArgumentCount)); ptr = reinterpret_cast<CallData *>(scope.alloc(size)); ptr->tag = quint32(QV4::Value::ValueTypeInternal::Integer); ptr->argc = argc; } - - ScopedCallData(const Scope &scope, const FunctionObject *function, int argc = 0) + JSCall(const Scope &scope, const FunctionObject *function, int argc = 0) { int size = int(offsetof(QV4::CallData, args)/sizeof(QV4::Value)) + qMax(argc , int(QV4::Global::ReservedArgumentCount)); ptr = reinterpret_cast<CallData *>(scope.alloc(size)); @@ -77,6 +76,14 @@ struct ScopedCallData { ptr->argc = argc; ptr->function = *function; } + JSCall(const Scope &scope, Heap::FunctionObject *function, int argc = 0) + { + int size = int(offsetof(QV4::CallData, args)/sizeof(QV4::Value)) + qMax(argc , int(QV4::Global::ReservedArgumentCount)); + ptr = reinterpret_cast<CallData *>(scope.alloc(size)); + ptr->tag = quint32(QV4::Value::ValueTypeInternal::Integer); + ptr->argc = argc; + ptr->function = function; + } CallData *operator->() { return ptr; @@ -90,6 +97,10 @@ struct ScopedCallData { return static_cast<FunctionObject &>(ptr->function).call(ptr); } + ReturnedValue callAsConstructor() const { + return static_cast<FunctionObject &>(ptr->function).construct(ptr); + } + CallData *ptr; }; |