diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-08-29 14:25:09 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-08-29 18:10:52 +0000 |
commit | b6018a8167b23988542100312b4f2cd126c41700 (patch) | |
tree | 2e55d759b2996f96c1fae84d2abc42ff83030f8c /src/qml/jsruntime/qv4runtime.cpp | |
parent | 123f01df338972e2253ae2ab993027755695ceea (diff) |
Initialize this to empty for derived constructors
As per spec, this should be uninitialized in derived
constructors, and the base constructor needs to get
called exactly once.
Change-Id: If31804e58d7ba62efde8fbf6cd852674f8da4495
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4runtime.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4runtime.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index bf79b369d2..edaa0a8e63 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -911,6 +911,21 @@ void Runtime::method_storeSuperProperty(ExecutionEngine *engine, const Value &pr engine->throwTypeError(); } +ReturnedValue Runtime::method_loadSuperConstructor(ExecutionEngine *engine, const Value &t) +{ + if (engine->currentStackFrame->thisObject() != Primitive::emptyValue().asReturnedValue()) { + return engine->throwReferenceError(QStringLiteral("super() already called."), QString(), 0, 0); // ### fix line number + } + const FunctionObject *f = t.as<FunctionObject>(); + if (!f || !f->isConstructor()) { + engine->throwTypeError(); + return Encode::undefined(); + } + return static_cast<const Object &>(t).getPrototypeOf()->asReturnedValue(); +} + + + #endif // V4_BOOTSTRAP uint RuntimeHelpers::equalHelper(const Value &x, const Value &y) |