aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-07-01 21:42:26 +0200
committerLars Knoll <lars.knoll@qt.io>2018-07-03 08:09:21 +0000
commit24938ed2b9dccacdc2390b40dc10f71b8f734ad2 (patch)
tree4f92eec5bfc64881e36e2a723a27dec0f645d495
parentd31541fd9d7d52ef3eae29e7e5d36733d7f55375 (diff)
Correctly setup the this object after a super call
Change-Id: I7c2d9c09b3059dcd6ce2eb356a74980a3410a245 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/qml/compiler/qv4codegen.cpp4
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations9
2 files changed, 4 insertions, 9 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index 2f28320697..4b766accbd 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -2264,6 +2264,10 @@ void Codegen::handleConstruct(const Reference &base, ArgumentList *arguments)
create.argv = calldata.argv;
bytecodeGenerator->addInstruction(create);
}
+ if (base.isSuper())
+ // set the result up as the thisObject
+ Reference::fromAccumulator(this).storeOnStack(CallData::This);
+
_expr.setResult(Reference::fromAccumulator(this));
}
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index b791596d92..eaf2a67fbf 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -2555,7 +2555,6 @@ 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-bind-this-value-twice.js fails
-language/expressions/super/call-bind-this-value.js fails
language/expressions/super/call-construct-invocation.js fails
language/expressions/super/call-proto-not-ctor.js fails
language/expressions/super/prop-dot-cls-null-proto.js fails
@@ -2738,7 +2737,6 @@ language/module-code/instn-star-props-nrml-star_FIXTURE.js fails
language/module-code/instn-star-star-cycle-2_FIXTURE.js fails
language/module-code/instn-star-star-cycle-indirect-x_FIXTURE.js fails
language/module-code/namespace/internals/own-property-keys-binding-types_FIXTURE.js fails
-language/rest-parameters/with-new-target.js fails
language/statements/async-function/cptn-decl.js fails
language/statements/async-function/declaration-returns-promise.js fails
language/statements/async-function/evaluation-body.js fails
@@ -3056,10 +3054,7 @@ language/statements/class/scope-static-meth-paramsbody-var-open.js fails
language/statements/class/scope-static-setter-paramsbody-var-open.js fails
language/statements/class/static-method-gen-non-configurable-err.js fails
language/statements/class/static-method-non-configurable-err.js fails
-language/statements/class/subclass/binding.js fails
language/statements/class/subclass/bound-function.js fails
-language/statements/class/subclass/builtin-objects/Array/contructor-calls-super-multiple-arguments.js fails
-language/statements/class/subclass/builtin-objects/Array/contructor-calls-super-single-argument.js fails
language/statements/class/subclass/builtin-objects/Array/super-must-be-called.js fails
language/statements/class/subclass/builtin-objects/ArrayBuffer/regular-subclassing.js fails
language/statements/class/subclass/builtin-objects/ArrayBuffer/super-must-be-called.js fails
@@ -3101,10 +3096,6 @@ 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/class-definition-superclass-generator.js fails
language/statements/class/subclass/default-constructor-spread-override.js fails
-language/statements/class/subclass/derived-class-return-override-with-empty.js fails
-language/statements/class/subclass/derived-class-return-override-with-this.js fails
-language/statements/class/subclass/derived-class-return-override-with-undefined.js fails
-language/statements/class/super/in-constructor.js fails
language/statements/class/super/in-methods.js fails
language/statements/const/block-local-closure-get-before-initialization.js fails
language/statements/const/block-local-use-before-initialization-in-declaration-statement.js fails