aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qml/jsruntime/qv4functionobject_p.h3
-rw-r--r--src/qml/jsruntime/qv4jscall_p.h19
2 files changed, 19 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4functionobject_p.h b/src/qml/jsruntime/qv4functionobject_p.h
index 92ec40fe87..398fd8b207 100644
--- a/src/qml/jsruntime/qv4functionobject_p.h
+++ b/src/qml/jsruntime/qv4functionobject_p.h
@@ -63,6 +63,7 @@ namespace QV4 {
struct BuiltinFunction;
struct IndexedBuiltinFunction;
+struct JSCallData;
typedef ReturnedValue (*jsCallFunction)(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
typedef ReturnedValue (*jsConstructFunction)(const FunctionObject *, const Value *argv, int argc);
@@ -155,9 +156,11 @@ struct Q_QML_EXPORT FunctionObject: Object {
void init(String *name, bool createProto);
+ inline ReturnedValue callAsConstructor(const JSCallData &data) const;
ReturnedValue callAsConstructor(const Value *argv, int argc) const {
return d()->jsConstruct(this, argv, argc);
}
+ inline ReturnedValue call(const JSCallData &data) const;
ReturnedValue call(const Value *thisObject, const Value *argv, int argc) const {
return d()->jsCall(this, thisObject, argv, argc);
}
diff --git a/src/qml/jsruntime/qv4jscall_p.h b/src/qml/jsruntime/qv4jscall_p.h
index f356f29ca2..291e108853 100644
--- a/src/qml/jsruntime/qv4jscall_p.h
+++ b/src/qml/jsruntime/qv4jscall_p.h
@@ -106,7 +106,7 @@ struct JSCallData {
memcpy(ptr->args, argv, argc*sizeof(Value));
}
- CallData *operator->() {
+ CallData *operator->() const {
return ptr;
}
@@ -115,16 +115,29 @@ struct JSCallData {
}
ReturnedValue call() const {
- return static_cast<FunctionObject &>(ptr->function).call(&ptr->thisObject, ptr->args, ptr->argc());
+ return static_cast<FunctionObject &>(ptr->function).call(*this);
}
ReturnedValue callAsConstructor() const {
- return static_cast<FunctionObject &>(ptr->function).callAsConstructor(ptr->args, ptr->argc());
+ return static_cast<FunctionObject &>(ptr->function).callAsConstructor(*this);
}
CallData *ptr;
};
+inline
+ReturnedValue FunctionObject::callAsConstructor(const JSCallData &data) const
+{
+ return d()->jsConstruct(this, data->args, data->argc());
+}
+
+inline
+ReturnedValue FunctionObject::call(const JSCallData &data) const
+{
+ return d()->jsCall(this, &data->thisObject, data->args, data->argc());
+}
+
+
struct ScopedStackFrame {
Scope &scope;
CppStackFrame frame;