From 3daf05ec2d7dbc408e2c302cdade667ec719d847 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 30 Oct 2017 10:38:55 +0100 Subject: Introduce new calling convention for builtin functions And implement Function.apply()/call() with it. Change-Id: I028c82d5f9adfd23328d669db1adccec9de5824c Reviewed-by: Erik Verbruggen --- src/qml/jsruntime/qv4functionobject_p.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/qml/jsruntime/qv4functionobject_p.h') diff --git a/src/qml/jsruntime/qv4functionobject_p.h b/src/qml/jsruntime/qv4functionobject_p.h index 3fd0fbeec8..86137e8e6e 100644 --- a/src/qml/jsruntime/qv4functionobject_p.h +++ b/src/qml/jsruntime/qv4functionobject_p.h @@ -84,6 +84,7 @@ DECLARE_HEAP_OBJECT(FunctionObject, Object) { Index_ProtoConstructor = 0 }; + void init(QV4::ExecutionContext *scope, QV4::String *name, ReturnedValue (*code)(const QV4::FunctionObject *, const Value *thisObject, const Value *argv, int argc)); void init(QV4::ExecutionContext *scope, QV4::String *name = 0, bool createProto = false); void init(QV4::ExecutionContext *scope, QV4::Function *function, bool createProto = false); void init(QV4::ExecutionContext *scope, const QString &name, bool createProto = false); @@ -197,8 +198,8 @@ struct FunctionPrototype: FunctionObject void init(ExecutionEngine *engine, Object *ctor); static ReturnedValue method_toString(const BuiltinFunction *, CallData *callData); - static ReturnedValue method_apply(const BuiltinFunction *, CallData *callData); - static ReturnedValue method_call(const BuiltinFunction *, CallData *callData); + static ReturnedValue method_apply(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_call(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); static ReturnedValue method_bind(const BuiltinFunction *, CallData *callData); }; @@ -211,6 +212,11 @@ struct Q_QML_EXPORT BuiltinFunction : FunctionObject { return scope->engine()->memoryManager->allocObject(scope, name, code); } + static Heap::FunctionObject *create(ExecutionContext *scope, String *name, ReturnedValue (*code)(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)) + { + return scope->engine()->memoryManager->allocObject(scope, name, code); + } + static ReturnedValue callAsConstructor(const FunctionObject *, const Value *argv, int argc); static ReturnedValue call(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc); }; -- cgit v1.2.3