aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-09-18 11:05:38 +0200
committerLars Knoll <lars.knoll@qt.io>2018-09-23 17:27:39 +0000
commit3440b8f9c5b198be4124ee1defd69d807bb972c6 (patch)
tree6d7f726be8c0a73647afc63fe2c8778fa778249d
parent3ff776b74e3d9c0af911e331cdb649fd3fa0dd09 (diff)
Cleanup init method for ScriptFunction
Change-Id: I913f9429a9238860a5b4e9dc84d217ec824f25c1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/qml/jsruntime/qv4functionobject.cpp15
-rw-r--r--src/qml/jsruntime/qv4functionobject_p.h5
-rw-r--r--src/qml/jsruntime/qv4generatorobject_p.h2
3 files changed, 16 insertions, 6 deletions
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp
index b4d68717d3..8a674bc7fa 100644
--- a/src/qml/jsruntime/qv4functionobject.cpp
+++ b/src/qml/jsruntime/qv4functionobject.cpp
@@ -508,7 +508,7 @@ ReturnedValue ScriptFunction::virtualCall(const FunctionObject *fo, const Value
return result;
}
-void Heap::ScriptFunction::init(QV4::ExecutionContext *scope, Function *function, QV4::String *n, bool makeConstructor)
+void Heap::ScriptFunction::initNoConstructor(QV4::ExecutionContext *scope, Function *function, QV4::String *n)
{
FunctionObject::init();
this->scope.set(scope->engine(), scope->d());
@@ -522,13 +522,22 @@ void Heap::ScriptFunction::init(QV4::ExecutionContext *scope, Function *function
ScopedString name(s, n ? n->d() : function->name());
if (name)
f->setName(name);
- if (makeConstructor && !function->isArrowFunction())
- f->createDefaultPrototypeProperty(Heap::FunctionObject::Index_ProtoConstructor);
Q_ASSERT(internalClass && internalClass->find(s.engine->id_length()->propertyKey()) == Index_Length);
setProperty(s.engine, Index_Length, Value::fromInt32(int(function->compiledFunction->length)));
}
+void Heap::ScriptFunction::init(QV4::ExecutionContext *scope, Function *function)
+{
+ initNoConstructor(scope, function, nullptr);
+ if (function->isArrowFunction())
+ return;
+
+ Scope s(scope);
+ ScopedFunctionObject f(s, this);
+ f->createDefaultPrototypeProperty(Heap::FunctionObject::Index_ProtoConstructor);
+}
+
Heap::InternalClass *ScriptFunction::classForConstructor() const
{
Scope scope(engine());
diff --git a/src/qml/jsruntime/qv4functionobject_p.h b/src/qml/jsruntime/qv4functionobject_p.h
index bc0d22986b..908a9fcb1e 100644
--- a/src/qml/jsruntime/qv4functionobject_p.h
+++ b/src/qml/jsruntime/qv4functionobject_p.h
@@ -118,7 +118,8 @@ DECLARE_HEAP_OBJECT(ScriptFunction, FunctionObject) {
Index_Name,
Index_Length
};
- void init(QV4::ExecutionContext *scope, Function *function, QV4::String *name = nullptr, bool makeConstructor = true);
+ void initNoConstructor(QV4::ExecutionContext *scope, Function *function, QV4::String *name = nullptr);
+ void init(QV4::ExecutionContext *scope, Function *function);
};
#define MemberFunctionMembers(class, Member) \
@@ -128,7 +129,7 @@ DECLARE_HEAP_OBJECT(MemberFunction, ScriptFunction) {
DECLARE_MARKOBJECTS(MemberFunction)
void init(QV4::ExecutionContext *scope, Function *function, QV4::String *name = nullptr) {
- ScriptFunction::init(scope, function, name, false);
+ ScriptFunction::initNoConstructor(scope, function, name);
}
};
diff --git a/src/qml/jsruntime/qv4generatorobject_p.h b/src/qml/jsruntime/qv4generatorobject_p.h
index c3b8e84154..ad0929987d 100644
--- a/src/qml/jsruntime/qv4generatorobject_p.h
+++ b/src/qml/jsruntime/qv4generatorobject_p.h
@@ -74,7 +74,7 @@ struct GeneratorFunctionCtor : FunctionObject {
struct GeneratorFunction : ScriptFunction {
void init(QV4::ExecutionContext *scope, Function *function, QV4::String *name = nullptr) {
- ScriptFunction::init(scope, function, name, false);
+ ScriptFunction::initNoConstructor(scope, function, name);
}
};