aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp11
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations2
2 files changed, 6 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index edaa0a8e63..3317003ea4 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -917,11 +917,12 @@ ReturnedValue Runtime::method_loadSuperConstructor(ExecutionEngine *engine, cons
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();
+ if (!f)
+ return engine->throwTypeError();
+ Heap::Object *c = static_cast<const Object &>(t).getPrototypeOf();
+ if (!c->vtable()->isFunctionObject || !static_cast<Heap::FunctionObject *>(c)->isConstructor())
+ return engine->throwTypeError();
+ return c->asReturnedValue();
}
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index 52a2736ddf..bc19b2b65d 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -942,7 +942,6 @@ language/expressions/prefix-increment/S11.4.4_A5_T3.js sloppyFails
language/expressions/prefix-increment/S11.4.4_A5_T4.js sloppyFails
language/expressions/prefix-increment/S11.4.4_A5_T5.js fails
language/expressions/prefix-increment/S11.4.4_A6_T3.js fails
-language/expressions/super/call-proto-not-ctor.js fails
language/expressions/super/prop-dot-cls-null-proto.js fails
language/expressions/super/prop-dot-cls-ref-strict.js fails
language/expressions/super/prop-dot-cls-ref-this.js fails
@@ -1115,7 +1114,6 @@ language/statements/class/subclass/builtin-objects/TypedArray/super-must-be-call
language/statements/class/subclass/builtin-objects/WeakMap/super-must-be-called.js fails
language/statements/class/subclass/builtin-objects/WeakSet/super-must-be-called.js fails
language/statements/class/subclass/builtins.js fails
-language/statements/class/subclass/class-definition-null-proto-super.js fails
language/statements/class/subclass/class-definition-null-proto-this.js fails
language/statements/class/subclass/default-constructor-spread-override.js fails
language/statements/class/super/in-methods.js fails