From c2a4277ae5c60a7b7f1e2a083a89ae4e528794c5 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 5 Jan 2017 18:48:20 +0100 Subject: Speed up invocation of builtin functions Completely avoid creation of a CallContext for those methods, as we don't need it. Change-Id: Iff1a38fd3c7e846df6ec0374cb7b3fb8f1b4de3a Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4functionobject_p.h | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 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 a02e89e883..31b05666a7 100644 --- a/src/qml/jsruntime/qv4functionobject_p.h +++ b/src/qml/jsruntime/qv4functionobject_p.h @@ -61,6 +61,8 @@ struct QQmlSourceLocation; namespace QV4 { +struct BuiltinFunction; + namespace Heap { struct Q_QML_PRIVATE_EXPORT FunctionObject : Object { @@ -93,11 +95,16 @@ struct FunctionPrototype : FunctionObject { void init(); }; -struct Q_QML_EXPORT BuiltinFunction : FunctionObject { +struct Q_QML_EXPORT OldBuiltinFunction : FunctionObject { void init(QV4::ExecutionContext *scope, QV4::String *name, ReturnedValue (*code)(QV4::CallContext *)); ReturnedValue (*code)(QV4::CallContext *); }; +struct Q_QML_EXPORT BuiltinFunction : FunctionObject { + void init(QV4::ExecutionContext *scope, QV4::String *name, void (*code)(const QV4::BuiltinFunction *, Scope &, CallData *)); + void (*code)(const QV4::BuiltinFunction *, Scope &, CallData *); +}; + struct IndexedBuiltinFunction : FunctionObject { inline void init(QV4::ExecutionContext *scope, uint index, ReturnedValue (*code)(QV4::CallContext *ctx, uint index)); ReturnedValue (*code)(QV4::CallContext *, uint index); @@ -183,10 +190,21 @@ struct FunctionPrototype: FunctionObject static ReturnedValue method_bind(CallContext *ctx); }; -struct Q_QML_EXPORT BuiltinFunction: FunctionObject { +struct Q_QML_EXPORT OldBuiltinFunction : FunctionObject { + V4_OBJECT2(OldBuiltinFunction, FunctionObject) + + static void construct(const Managed *, Scope &scope, CallData *); + static void call(const Managed *that, Scope &scope, CallData *callData); +}; + +struct Q_QML_EXPORT BuiltinFunction : FunctionObject { V4_OBJECT2(BuiltinFunction, FunctionObject) - static Heap::BuiltinFunction *create(ExecutionContext *scope, String *name, ReturnedValue (*code)(CallContext *)) + static Heap::OldBuiltinFunction *create(ExecutionContext *scope, String *name, ReturnedValue (*code)(CallContext *)) + { + return scope->engine()->memoryManager->allocObject(scope, name, code); + } + static Heap::BuiltinFunction *create(ExecutionContext *scope, String *name, void (*code)(const BuiltinFunction *, Scope &, CallData *)) { return scope->engine()->memoryManager->allocObject(scope, name, code); } -- cgit v1.2.3 From 119e2edb3ea52a6b3b9da6183dc0fcf350ba8431 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 5 Jan 2017 15:14:37 +0100 Subject: Convert more builtin functions Change-Id: I2dc8797e2240fcfc4176cb08b982e3e98b879646 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4functionobject_p.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 31b05666a7..45d7485f1b 100644 --- a/src/qml/jsruntime/qv4functionobject_p.h +++ b/src/qml/jsruntime/qv4functionobject_p.h @@ -184,10 +184,10 @@ struct FunctionPrototype: FunctionObject void init(ExecutionEngine *engine, Object *ctor); - static ReturnedValue method_toString(CallContext *ctx); - static ReturnedValue method_apply(CallContext *ctx); - static ReturnedValue method_call(CallContext *ctx); - static ReturnedValue method_bind(CallContext *ctx); + static void method_toString(const BuiltinFunction *, Scope &scope, CallData *callData); + static void method_apply(const BuiltinFunction *, Scope &scope, CallData *callData); + static void method_call(const BuiltinFunction *, Scope &scope, CallData *callData); + static void method_bind(const BuiltinFunction *, Scope &scope, CallData *callData); }; struct Q_QML_EXPORT OldBuiltinFunction : FunctionObject { -- cgit v1.2.3