aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/compiler/qv4compilerscanfunctions.cpp11
-rw-r--r--src/qml/compiler/qv4compilerscanfunctions_p.h1
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations6
3 files changed, 12 insertions, 6 deletions
diff --git a/src/qml/compiler/qv4compilerscanfunctions.cpp b/src/qml/compiler/qv4compilerscanfunctions.cpp
index 349bd08dcf..e0a745ebb1 100644
--- a/src/qml/compiler/qv4compilerscanfunctions.cpp
+++ b/src/qml/compiler/qv4compilerscanfunctions.cpp
@@ -414,6 +414,17 @@ bool ScanFunctions::visit(TemplateLiteral *ast)
}
+bool ScanFunctions::visit(SuperLiteral *)
+{
+ Context *c = _context;
+ while (c && (c->contextType != ContextType::Function || c->isArrowFunction))
+ c = c->parent;
+
+ if (c)
+ c->requiresExecutionContext = true;
+
+ return false;
+}
bool ScanFunctions::enterFunction(FunctionExpression *ast, bool enterName)
{
if (_context->isStrict && (ast->name == QLatin1String("eval") || ast->name == QLatin1String("arguments")))
diff --git a/src/qml/compiler/qv4compilerscanfunctions_p.h b/src/qml/compiler/qv4compilerscanfunctions_p.h
index 53b2336cb1..2e016b25b1 100644
--- a/src/qml/compiler/qv4compilerscanfunctions_p.h
+++ b/src/qml/compiler/qv4compilerscanfunctions_p.h
@@ -115,6 +115,7 @@ protected:
bool visit(AST::ExpressionStatement *ast) override;
bool visit(AST::FunctionExpression *ast) override;
bool visit(AST::TemplateLiteral *ast) override;
+ bool visit(AST::SuperLiteral *) override;
bool enterFunction(AST::FunctionExpression *ast, bool enterName);
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index afefb5fa26..ba3232940c 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -667,8 +667,6 @@ language/expressions/arrow-function/dflt-params-ref-self.js fails
language/expressions/arrow-function/lexical-new.target-closure-returned.js fails
language/expressions/arrow-function/lexical-new.target.js fails
language/expressions/arrow-function/lexical-super-call-from-within-constructor.js fails
-language/expressions/arrow-function/lexical-super-property-from-within-constructor.js fails
-language/expressions/arrow-function/lexical-super-property.js fails
language/expressions/arrow-function/lexical-supercall-from-immediately-invoked-arrow.js fails
language/expressions/arrow-function/lexical-this.js fails
language/expressions/arrow-function/prototype-rules.js fails
@@ -933,10 +931,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/prop-dot-cls-val-from-arrow.js fails
-language/expressions/super/prop-dot-obj-val-from-arrow.js fails
-language/expressions/super/prop-expr-cls-val-from-arrow.js fails
-language/expressions/super/prop-expr-obj-val-from-arrow.js fails
language/expressions/super/realm.js fails
language/expressions/tagged-template/cache-different-functions-same-site.js fails
language/expressions/tagged-template/cache-eval-inner-function.js fails