diff options
author | Lars Knoll <[email protected]> | 2018-09-18 11:05:38 +0200 |
---|---|---|
committer | Lars Knoll <[email protected]> | 2018-09-23 17:27:39 +0000 |
commit | 3440b8f9c5b198be4124ee1defd69d807bb972c6 (patch) | |
tree | 6d7f726be8c0a73647afc63fe2c8778fa778249d | |
parent | 3ff776b74e3d9c0af911e331cdb649fd3fa0dd09 (diff) |
Cleanup init method for ScriptFunction
Change-Id: I913f9429a9238860a5b4e9dc84d217ec824f25c1
Reviewed-by: Simon Hausmann <[email protected]>
-rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 15 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4functionobject_p.h | 5 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4generatorobject_p.h | 2 |
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); } }; |