diff options
| author | Lars Knoll <lars.knoll@qt.io> | 2018-08-30 13:16:28 +0200 |
|---|---|---|
| committer | Lars Knoll <lars.knoll@qt.io> | 2018-08-31 06:08:48 +0000 |
| commit | ac3a9fd8f352b1d717334d16111d22d6c155e4e2 (patch) | |
| tree | 17c12dbc09143103d060da062a5d9102d7c50f57 /src/qml/jsruntime/qv4functionobject.cpp | |
| parent | d457b919885fdbcc07f3414de64b0b50ebe8b263 (diff) | |
Fix super property access
Super properties work in a rather special way by
accessing a 'home object' on the function object,
and reading from it's prototype.
Change-Id: I666334c9c27048c6c2ba6770dd8c9f56aecbee14
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4functionobject.cpp')
| -rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index f7bea9a5f0..fe1ebbd556 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -175,7 +175,7 @@ Heap::FunctionObject *FunctionObject::createScriptFunction(ExecutionContext *sco return scope->engine()->memoryManager->allocate<ScriptFunction>(scope, function); } -Heap::FunctionObject *FunctionObject::createConstructorFunction(ExecutionContext *scope, Function *function, bool isDerivedConstructor) +Heap::FunctionObject *FunctionObject::createConstructorFunction(ExecutionContext *scope, Function *function, Object *homeObject, bool isDerivedConstructor) { if (!function) { Heap::DefaultClassConstructorFunction *c = scope->engine()->memoryManager->allocate<DefaultClassConstructorFunction>(scope); @@ -183,13 +183,16 @@ Heap::FunctionObject *FunctionObject::createConstructorFunction(ExecutionContext return c; } Heap::ConstructorFunction *c = scope->engine()->memoryManager->allocate<ConstructorFunction>(scope, function); + c->homeObject.set(scope->engine(), homeObject->d()); c->isDerivedConstructor = isDerivedConstructor; return c; } -Heap::FunctionObject *FunctionObject::createMemberFunction(ExecutionContext *scope, Function *function, QV4::String *name) +Heap::FunctionObject *FunctionObject::createMemberFunction(ExecutionContext *scope, Function *function, Object *homeObject, QV4::String *name) { - return scope->engine()->memoryManager->allocate<MemberFunction>(scope, function, name); + Heap::MemberFunction *m = scope->engine()->memoryManager->allocate<MemberFunction>(scope, function, name); + m->homeObject.set(scope->engine(), homeObject->d()); + return m; } Heap::FunctionObject *FunctionObject::createBuiltinFunction(ExecutionEngine *engine, StringOrSymbol *nameOrSymbol, VTable::Call code, int argumentCount) |
