aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/compiler/qv4codegen.cpp16
-rw-r--r--src/qml/compiler/qv4instr_moth.cpp8
-rw-r--r--src/qml/compiler/qv4instr_moth_p.h6
-rw-r--r--src/qml/jit/qv4jit.cpp24
-rw-r--r--src/qml/jit/qv4jit_p.h3
-rw-r--r--src/qml/jsruntime/qv4managed.cpp4
-rw-r--r--src/qml/jsruntime/qv4managed_p.h2
-rw-r--r--src/qml/jsruntime/qv4objectiterator_p.h2
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp24
-rw-r--r--src/qml/jsruntime/qv4runtimeapi_p.h5
-rw-r--r--src/qml/jsruntime/qv4vme_moth.cpp12
-rw-r--r--src/qml/parser/qqmljs.g31
-rw-r--r--src/qml/parser/qqmljsast_p.h11
-rw-r--r--src/qml/parser/qqmljskeywords_p.h5
-rw-r--r--src/qml/parser/qqmljslexer.cpp1
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations57
16 files changed, 82 insertions, 129 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index 3e31693593..3543ddb177 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -2593,11 +2593,20 @@ bool Codegen::visit(ForEachStatement *ast)
return true;
expr.loadInAccumulator();
- Instruction::ForeachIteratorObject iteratorObjInstr;
+ Instruction::GetIterator iteratorObjInstr;
+ iteratorObjInstr.iterator = (ast->type == ForEachType::Of) ? 1 : 0;
bytecodeGenerator->addInstruction(iteratorObjInstr);
iterator.storeConsumeAccumulator();
- Reference lhs = expression(ast->initialiser).asLValue();
+ Reference lhs = expression(ast->initialiser);
+ if (hasError)
+ return false;
+ if (!lhs.isLValue()) {
+ throwSyntaxError(ast->forToken, QLatin1String("Destructuring not supported with for-in and for-of loops."));
+ return false;
+ }
+
+ lhs = lhs.asLValue();
foreachBody(lhs, ast->statement, ast->forToken, iterator);
return false;
@@ -2618,7 +2627,8 @@ bool Codegen::visit(LocalForEachStatement *ast)
variableDeclaration(ast->declaration);
expr.loadInAccumulator();
- Instruction::ForeachIteratorObject iteratorObjInstr;
+ Instruction::GetIterator iteratorObjInstr;
+ iteratorObjInstr.iterator = (ast->type == ForEachType::Of) ? 1 : 0;
bytecodeGenerator->addInstruction(iteratorObjInstr);
iterator.storeConsumeAccumulator();
diff --git a/src/qml/compiler/qv4instr_moth.cpp b/src/qml/compiler/qv4instr_moth.cpp
index 49d8455617..6ef4e79344 100644
--- a/src/qml/compiler/qv4instr_moth.cpp
+++ b/src/qml/compiler/qv4instr_moth.cpp
@@ -419,11 +419,9 @@ void dumpBytecode(const char *code, int len, int nLocals, int nFormals, int /*st
d << dumpRegister(reg, nFormals);
MOTH_END_INSTR(PopContext)
- MOTH_BEGIN_INSTR(ForeachIteratorObject)
- MOTH_END_INSTR(ForeachIteratorObject)
-
- MOTH_BEGIN_INSTR(ForeachNextPropertyName)
- MOTH_END_INSTR(ForeachNextPropertyName)
+ MOTH_BEGIN_INSTR(GetIterator)
+ d << iterator;
+ MOTH_END_INSTR(GetIterator)
MOTH_BEGIN_INSTR(DeleteMember)
d << dumpRegister(base, nFormals) << "[" << member << "]";
diff --git a/src/qml/compiler/qv4instr_moth_p.h b/src/qml/compiler/qv4instr_moth_p.h
index 2e3d118e52..546e8fd2de 100644
--- a/src/qml/compiler/qv4instr_moth_p.h
+++ b/src/qml/compiler/qv4instr_moth_p.h
@@ -118,8 +118,7 @@ QT_BEGIN_NAMESPACE
#define INSTR_PushWithContext(op) INSTRUCTION(op, PushWithContext, 1, reg)
#define INSTR_PushBlockContext(op) INSTRUCTION(op, PushBlockContext, 2, reg, index)
#define INSTR_PopContext(op) INSTRUCTION(op, PopContext, 1, reg)
-#define INSTR_ForeachIteratorObject(op) INSTRUCTION(op, ForeachIteratorObject, 0)
-#define INSTR_ForeachNextPropertyName(op) INSTRUCTION(op, ForeachNextPropertyName, 0)
+#define INSTR_GetIterator(op) INSTRUCTION(op, GetIterator, 1, iterator)
#define INSTR_DeleteMember(op) INSTRUCTION(op, DeleteMember, 2, member, base)
#define INSTR_DeleteSubscript(op) INSTRUCTION(op, DeleteSubscript, 2, base, index)
#define INSTR_DeleteName(op) INSTRUCTION(op, DeleteName, 1, name)
@@ -242,8 +241,7 @@ QT_BEGIN_NAMESPACE
F(PushWithContext) \
F(PushBlockContext) \
F(PopContext) \
- F(ForeachIteratorObject) \
- F(ForeachNextPropertyName) \
+ F(GetIterator) \
F(DeleteMember) \
F(DeleteSubscript) \
F(DeleteName) \
diff --git a/src/qml/jit/qv4jit.cpp b/src/qml/jit/qv4jit.cpp
index 87c3642479..16b6b5fb94 100644
--- a/src/qml/jit/qv4jit.cpp
+++ b/src/qml/jit/qv4jit.cpp
@@ -662,23 +662,14 @@ void BaselineJIT::generate_PushBlockContext(int reg, int index)
void BaselineJIT::generate_PopContext(int reg) { as->popContext(reg); }
-void BaselineJIT::generate_ForeachIteratorObject()
+void BaselineJIT::generate_GetIterator(int iterator)
{
as->saveAccumulatorInFrame();
- as->prepareCallWithArgCount(2);
+ as->prepareCallWithArgCount(3);
+ as->passInt32AsArg(iterator, 2);
as->passAccumulatorAsArg(1);
as->passEngineAsArg(0);
- JIT_GENERATE_RUNTIME_CALL(Runtime::method_foreachIterator, Assembler::ResultInAccumulator);
- as->checkException();
-}
-
-void BaselineJIT::generate_ForeachNextPropertyName()
-{
- as->saveAccumulatorInFrame();
- as->prepareCallWithArgCount(1);
- as->passAccumulatorAsArg(0);
- JIT_GENERATE_RUNTIME_CALL(Runtime::method_foreachNextPropertyName,
- Assembler::ResultInAccumulator);
+ JIT_GENERATE_RUNTIME_CALL(Runtime::method_getIterator, Assembler::ResultInAccumulator);
as->checkException();
}
@@ -1220,11 +1211,8 @@ void BaselineJIT::collectLabelsInBytecode()
MOTH_BEGIN_INSTR(PopContext)
MOTH_END_INSTR(PopContext)
- MOTH_BEGIN_INSTR(ForeachIteratorObject)
- MOTH_END_INSTR(ForeachIteratorObject)
-
- MOTH_BEGIN_INSTR(ForeachNextPropertyName)
- MOTH_END_INSTR(ForeachNextPropertyName)
+ MOTH_BEGIN_INSTR(GetIterator)
+ MOTH_END_INSTR(GetIterator)
MOTH_BEGIN_INSTR(DeleteMember)
MOTH_END_INSTR(DeleteMember)
diff --git a/src/qml/jit/qv4jit_p.h b/src/qml/jit/qv4jit_p.h
index bf11e69cbb..157fbffeb1 100644
--- a/src/qml/jit/qv4jit_p.h
+++ b/src/qml/jit/qv4jit_p.h
@@ -182,8 +182,7 @@ public:
void generate_PushWithContext(int reg) override;
void generate_PushBlockContext(int reg, int index) override;
void generate_PopContext(int reg) override;
- void generate_ForeachIteratorObject() override;
- void generate_ForeachNextPropertyName() override;
+ void generate_GetIterator(int iterator) override;
void generate_DeleteMember(int member, int base) override;
void generate_DeleteSubscript(int base, int index) override;
void generate_DeleteName(int name) override;
diff --git a/src/qml/jsruntime/qv4managed.cpp b/src/qml/jsruntime/qv4managed.cpp
index f96e3c87d8..bd22e2bc04 100644
--- a/src/qml/jsruntime/qv4managed.cpp
+++ b/src/qml/jsruntime/qv4managed.cpp
@@ -131,8 +131,8 @@ QString Managed::className() const
case Type_StringIteratorObject:
s = "String Iterator";
break;
- case Type_ForeachIteratorObject:
- s = "__ForeachIterator";
+ case Type_ForInIterator:
+ s = "__ForIn Iterator";
break;
case Type_InternalClass:
s = "__InternalClass";
diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h
index 1b67aacd7b..020e61f014 100644
--- a/src/qml/jsruntime/qv4managed_p.h
+++ b/src/qml/jsruntime/qv4managed_p.h
@@ -201,7 +201,7 @@ public:
Type_InternalClass,
Type_ArrayIteratorObject,
Type_StringIteratorObject,
- Type_ForeachIteratorObject,
+ Type_ForInIterator,
Type_RegExp,
Type_QmlSequence
diff --git a/src/qml/jsruntime/qv4objectiterator_p.h b/src/qml/jsruntime/qv4objectiterator_p.h
index 2b2410bf1f..462bd9a114 100644
--- a/src/qml/jsruntime/qv4objectiterator_p.h
+++ b/src/qml/jsruntime/qv4objectiterator_p.h
@@ -133,7 +133,7 @@ struct ForInIteratorPrototype : Object
struct ForInIteratorObject: Object {
V4_OBJECT2(ForInIteratorObject, Object)
- Q_MANAGED_TYPE(ForeachIteratorObject)
+ Q_MANAGED_TYPE(ForInIterator)
V4_PROTOTYPE(forInIteratorPrototype)
ReturnedValue nextPropertyName() const { return d()->it().nextPropertyNameAsString(); }
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 1c1c3c3802..a83edfaed6 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -695,26 +695,26 @@ bool Runtime::method_storeElement(ExecutionEngine *engine, const Value &object,
return setElementFallback(engine, object, index, value);
}
-ReturnedValue Runtime::method_foreachIterator(ExecutionEngine *engine, const Value &in)
+ReturnedValue Runtime::method_getIterator(ExecutionEngine *engine, const Value &in, int iterator)
{
Scope scope(engine);
ScopedObject o(scope, (Object *)nullptr);
if (!in.isNullOrUndefined())
o = in.toObject(engine);
+ if (engine->hasException)
+ return Encode::undefined();
+ if (iterator) {
+ if (!o)
+ return engine->throwTypeError();
+ ScopedFunctionObject f(scope, o->get(engine->symbol_iterator()));
+ if (!f)
+ return engine->throwTypeError();
+ JSCallData cData(scope, 0, nullptr, o);
+ return f->call(cData);
+ }
return engine->newForInIteratorObject(o)->asReturnedValue();
}
-ReturnedValue Runtime::method_foreachNextPropertyName(const Value &foreach_iterator)
-{
- Q_ASSERT(foreach_iterator.isObject());
-
- ForInIteratorObject *it = static_cast<ForInIteratorObject *>(foreach_iterator.objectValue());
- Q_ASSERT(it->as<ForInIteratorObject>());
-
- return it->nextPropertyName();
-}
-
-
void Runtime::method_storeNameSloppy(ExecutionEngine *engine, int nameIndex, const Value &value)
{
Scope scope(engine);
diff --git a/src/qml/jsruntime/qv4runtimeapi_p.h b/src/qml/jsruntime/qv4runtimeapi_p.h
index ac456283cb..4d4112bf0c 100644
--- a/src/qml/jsruntime/qv4runtimeapi_p.h
+++ b/src/qml/jsruntime/qv4runtimeapi_p.h
@@ -141,9 +141,8 @@ struct ExceptionCheck<void (*)(QV4::NoThrowEngine *, A, B, C)> {
F(ReturnedValue, arrayLiteral, (ExecutionEngine *engine, Value *values, uint length)) \
F(ReturnedValue, objectLiteral, (ExecutionEngine *engine, const Value *args, int classId, int arrayValueCount, int arrayGetterSetterCountAndFlags)) \
\
- /* foreach */ \
- F(ReturnedValue, foreachIterator, (ExecutionEngine *engine, const Value &in)) \
- F(ReturnedValue, foreachNextPropertyName, (const Value &foreach_iterator)) \
+ /* for-in and for-of */ \
+ F(ReturnedValue, getIterator, (ExecutionEngine *engine, const Value &in, int iterator)) \
\
/* unary operators */ \
F(ReturnedValue, uMinus, (const Value &value)) \
diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp
index 08a085c90d..7f27619d08 100644
--- a/src/qml/jsruntime/qv4vme_moth.cpp
+++ b/src/qml/jsruntime/qv4vme_moth.cpp
@@ -938,17 +938,11 @@ QV4::ReturnedValue VME::interpret(CppStackFrame &frame, const uchar *code)
STACK_VALUE(CallData::Context) = STACK_VALUE(reg);
MOTH_END_INSTR(PopContext)
- MOTH_BEGIN_INSTR(ForeachIteratorObject)
+ MOTH_BEGIN_INSTR(GetIterator)
STORE_ACC();
- acc = Runtime::method_foreachIterator(engine, accumulator);
+ acc = Runtime::method_getIterator(engine, accumulator, iterator);
CHECK_EXCEPTION;
- MOTH_END_INSTR(ForeachIteratorObject)
-
- MOTH_BEGIN_INSTR(ForeachNextPropertyName)
- STORE_ACC();
- acc = Runtime::method_foreachNextPropertyName(accumulator);
- CHECK_EXCEPTION;
- MOTH_END_INSTR(ForeachNextPropertyName)
+ MOTH_END_INSTR(GetIterator)
MOTH_BEGIN_INSTR(DeleteMember)
if (!Runtime::method_deleteMember(engine, STACK_VALUE(base), member)) {
diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g
index c25f3395e2..8e71b8a42b 100644
--- a/src/qml/parser/qqmljs.g
+++ b/src/qml/parser/qqmljs.g
@@ -262,6 +262,7 @@ public:
int ival;
double dval;
AST::VariableScope scope;
+ AST::ForEachType forEachType;
AST::ArgumentList *ArgumentList;
AST::CaseBlock *CaseBlock;
AST::CaseClause *CaseClause;
@@ -3125,37 +3126,47 @@ IterationStatement: T_FOR T_LPAREN LexicalDeclaration T_SEMICOLON ExpressionOpt_
} break;
./
-IterationStatement: T_FOR T_LPAREN LeftHandSideExpression T_IN Expression_In T_RPAREN Statement;
+InOrOf: T_IN;
+/.
+ case $rule_number: {
+ sym(1).forEachType = AST::ForEachType::In;
+ } break;
+./
+
+InOrOf: T_OF;
+/.
+ case $rule_number: {
+ sym(1).forEachType = AST::ForEachType::Of;
+ } break;
+./
+
+IterationStatement: T_FOR T_LPAREN LeftHandSideExpression InOrOf Expression_In T_RPAREN Statement;
/.
case $rule_number: {
AST::ForEachStatement *node = new (pool) AST::ForEachStatement(sym(3).Expression, sym(5).Expression, sym(7).Statement);
node->forToken = loc(1);
node->lparenToken = loc(2);
- node->inToken = loc(4);
+ node->inOfToken = loc(4);
node->rparenToken = loc(6);
+ node->type = sym(4).forEachType;
sym(1).Node = node;
} break;
./
-IterationStatement: T_FOR T_LPAREN ForDeclaration T_IN Expression_In T_RPAREN Statement;
+IterationStatement: T_FOR T_LPAREN ForDeclaration InOrOf Expression_In T_RPAREN Statement;
/.
case $rule_number: {
AST::LocalForEachStatement *node = new (pool) AST::LocalForEachStatement(sym(3).PatternElement, sym(5).Expression, sym(7).Statement);
node->forToken = loc(1);
node->lparenToken = loc(2);
node->varToken = loc(3);
- node->inToken = loc(4);
+ node->inOfToken = loc(4);
node->rparenToken = loc(6);
+ node->type = sym(4).forEachType;
sym(1).Node = node;
} break;
./
-
-IterationStatement: T_FOR T_LPAREN LeftHandSideExpression T_OF AssignmentExpression_In T_RPAREN Statement; -- [lookahead ≠ let]
-/. case $rule_number: { UNIMPLEMENTED; } ./
-IterationStatement: T_FOR T_LPAREN ForDeclaration T_OF Expression_In T_RPAREN Statement;
-/. case $rule_number: { UNIMPLEMENTED; } ./
-
ForDeclaration: LetOrConst ForBinding;
/. case $rule_number: Q_FALLTHROUGH(); ./
ForDeclaration: Var ForBinding;
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h
index c83a459506..e54d1aea31 100644
--- a/src/qml/parser/qqmljsast_p.h
+++ b/src/qml/parser/qqmljsast_p.h
@@ -1701,6 +1701,11 @@ public:
SourceLocation rparenToken;
};
+enum class ForEachType {
+ In,
+ Of
+};
+
class QML_PARSER_EXPORT ForEachStatement: public Statement
{
public:
@@ -1724,8 +1729,9 @@ public:
Statement *statement;
SourceLocation forToken;
SourceLocation lparenToken;
- SourceLocation inToken;
+ SourceLocation inOfToken;
SourceLocation rparenToken;
+ ForEachType type;
};
class QML_PARSER_EXPORT LocalForEachStatement: public Statement
@@ -1752,8 +1758,9 @@ public:
SourceLocation forToken;
SourceLocation lparenToken;
SourceLocation varToken;
- SourceLocation inToken;
+ SourceLocation inOfToken;
SourceLocation rparenToken;
+ ForEachType type;
};
class QML_PARSER_EXPORT ContinueStatement: public Statement
diff --git a/src/qml/parser/qqmljskeywords_p.h b/src/qml/parser/qqmljskeywords_p.h
index 9cc47469e5..40094ecdf8 100644
--- a/src/qml/parser/qqmljskeywords_p.h
+++ b/src/qml/parser/qqmljskeywords_p.h
@@ -76,10 +76,13 @@ static inline int classify2(const QChar *s, int parseModeFlags) {
return Lexer::T_IN;
}
}
- else if ((parseModeFlags & Lexer::QmlMode) && s[0].unicode() == 'o') {
+ else if (s[0].unicode() == 'o') {
if (s[1].unicode() == 'n') {
return (parseModeFlags & Lexer::QmlMode) ? Lexer::T_ON : Lexer::T_IDENTIFIER;
}
+ else if (s[1].unicode() == 'f') {
+ return Lexer::T_OF;
+ }
}
return Lexer::T_IDENTIFIER;
}
diff --git a/src/qml/parser/qqmljslexer.cpp b/src/qml/parser/qqmljslexer.cpp
index 3dbe535bcf..69e73f1374 100644
--- a/src/qml/parser/qqmljslexer.cpp
+++ b/src/qml/parser/qqmljslexer.cpp
@@ -1343,6 +1343,7 @@ static const int uriTokens[] = {
QQmlJSGrammar::T_FUNCTION,
QQmlJSGrammar::T_IF,
QQmlJSGrammar::T_IN,
+ QQmlJSGrammar::T_OF,
QQmlJSGrammar::T_INSTANCEOF,
QQmlJSGrammar::T_NEW,
QQmlJSGrammar::T_NULL,
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index 5da5d2f543..8dbf0d4157 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -1589,7 +1589,6 @@ built-ins/RegExp/call_with_non_regexp_same_constructor.js fails
built-ins/RegExp/call_with_regexp_match_falsy.js fails
built-ins/RegExp/call_with_regexp_not_same_constructor.js fails
built-ins/RegExp/dotall/without-dotall-unicode.js fails
-built-ins/RegExp/dotall/without-dotall.js fails
built-ins/RegExp/from-regexp-like-flag-override.js fails
built-ins/RegExp/from-regexp-like-get-source-err.js fails
built-ins/RegExp/from-regexp-like-short-circuit.js fails
@@ -3180,6 +3179,7 @@ language/eval-code/direct/var-env-func-init-global-new.js sloppyFails
language/eval-code/direct/var-env-func-init-global-update-configurable.js sloppyFails
language/eval-code/direct/var-env-func-init-local-new-delete.js sloppyFails
language/eval-code/direct/var-env-global-lex-non-strict.js sloppyFails
+language/eval-code/direct/var-env-lower-lex-catch-non-strict.js sloppyFails
language/eval-code/direct/var-env-lower-lex-non-strict.js sloppyFails
language/eval-code/direct/var-env-var-init-global-new.js sloppyFails
language/eval-code/direct/var-env-var-init-local-new-delete.js sloppyFails
@@ -5992,21 +5992,6 @@ language/statements/for-in/scope-body-var-none.js fails
language/statements/for-in/scope-head-lex-close.js fails
language/statements/for-in/scope-head-lex-open.js fails
language/statements/for-in/scope-head-var-none.js sloppyFails
-language/statements/for-of/Array.prototype.Symbol.iterator.js fails
-language/statements/for-of/Array.prototype.entries.js fails
-language/statements/for-of/Array.prototype.keys.js fails
-language/statements/for-of/arguments-mapped-aliasing.js sloppyFails
-language/statements/for-of/arguments-mapped-mutation.js sloppyFails
-language/statements/for-of/arguments-mapped.js sloppyFails
-language/statements/for-of/arguments-unmapped-aliasing.js sloppyFails
-language/statements/for-of/arguments-unmapped-mutation.js sloppyFails
-language/statements/for-of/arguments-unmapped.js sloppyFails
-language/statements/for-of/array-contract-expand.js fails
-language/statements/for-of/array-contract.js fails
-language/statements/for-of/array-expand-contract.js fails
-language/statements/for-of/array-expand.js fails
-language/statements/for-of/array-key-get-error.js fails
-language/statements/for-of/array.js fails
language/statements/for-of/body-dstr-assign-error.js fails
language/statements/for-of/body-dstr-assign.js fails
language/statements/for-of/body-put-error.js fails
@@ -6026,12 +6011,6 @@ language/statements/for-of/continue-label-from-finally.js fails
language/statements/for-of/continue-label-from-try.js fails
language/statements/for-of/continue-label.js fails
language/statements/for-of/continue.js fails
-language/statements/for-of/cptn-decl-abrupt-empty.js fails
-language/statements/for-of/cptn-decl-itr.js fails
-language/statements/for-of/cptn-decl-no-itr.js fails
-language/statements/for-of/cptn-expr-abrupt-empty.js fails
-language/statements/for-of/cptn-expr-itr.js fails
-language/statements/for-of/cptn-expr-no-itr.js fails
language/statements/for-of/dstr-array-elem-init-assignment.js fails
language/statements/for-of/dstr-array-elem-init-evaluation.js fails
language/statements/for-of/dstr-array-elem-init-fn-name-arrow.js fails
@@ -6390,7 +6369,6 @@ language/statements/for-of/dstr-obj-prop-identifier-resolution-last.js fails
language/statements/for-of/dstr-obj-prop-identifier-resolution-lone.js fails
language/statements/for-of/dstr-obj-prop-identifier-resolution-middle.js fails
language/statements/for-of/dstr-obj-prop-identifier-resolution-trlng.js fails
-language/statements/for-of/dstr-obj-prop-name-evaluation-error.js fails
language/statements/for-of/dstr-obj-prop-name-evaluation.js fails
language/statements/for-of/dstr-obj-prop-nested-array-null.js fails
language/statements/for-of/dstr-obj-prop-nested-array-undefined-own.js fails
@@ -6495,49 +6473,27 @@ language/statements/for-of/dstr-var-obj-ptrn-prop-obj-init.js fails
language/statements/for-of/dstr-var-obj-ptrn-prop-obj-value-null.js fails
language/statements/for-of/dstr-var-obj-ptrn-prop-obj-value-undef.js fails
language/statements/for-of/dstr-var-obj-ptrn-prop-obj.js fails
-language/statements/for-of/float32array-mutate.js fails
-language/statements/for-of/float32array.js fails
-language/statements/for-of/float64array-mutate.js fails
-language/statements/for-of/float64array.js fails
language/statements/for-of/generator-close-via-break.js fails
language/statements/for-of/generator-close-via-continue.js fails
language/statements/for-of/generator-close-via-return.js fails
language/statements/for-of/generator-close-via-throw.js fails
language/statements/for-of/generator-next-error.js fails
language/statements/for-of/generator.js fails
-language/statements/for-of/generic-iterable.js fails
language/statements/for-of/head-const-bound-names-fordecl-tdz.js fails
language/statements/for-of/head-const-fresh-binding-per-iteration.js fails
-language/statements/for-of/head-expr-obj-iterator-method.js fails
-language/statements/for-of/head-expr-primitive-iterator-method.js fails
-language/statements/for-of/head-expr-to-obj.js fails
language/statements/for-of/head-let-bound-names-fordecl-tdz.js fails
language/statements/for-of/head-let-destructuring.js fails
language/statements/for-of/head-let-fresh-binding-per-iteration.js fails
-language/statements/for-of/head-lhs-cover.js fails
-language/statements/for-of/head-lhs-member.js fails
language/statements/for-of/head-var-bound-names-dup.js fails
-language/statements/for-of/head-var-bound-names-in-stmt.js fails
language/statements/for-of/head-var-bound-names-let.js sloppyFails
-language/statements/for-of/int16array-mutate.js fails
-language/statements/for-of/int16array.js fails
-language/statements/for-of/int32array-mutate.js fails
-language/statements/for-of/int32array.js fails
-language/statements/for-of/int8array-mutate.js fails
-language/statements/for-of/int8array.js fails
language/statements/for-of/iterator-as-proxy.js fails
-language/statements/for-of/iterator-close-get-method-error.js fails
language/statements/for-of/iterator-close-non-object.js fails
language/statements/for-of/iterator-close-via-break.js fails
language/statements/for-of/iterator-close-via-continue.js fails
language/statements/for-of/iterator-close-via-return.js fails
language/statements/for-of/iterator-close-via-throw.js fails
-language/statements/for-of/iterator-next-error.js fails
language/statements/for-of/iterator-next-reference.js fails
-language/statements/for-of/iterator-next-result-done-attr.js fails
language/statements/for-of/iterator-next-result-type.js fails
-language/statements/for-of/iterator-next-result-value-attr-error.js fails
-language/statements/for-of/iterator-next-result-value-attr.js fails
language/statements/for-of/let-block-with-newline.js sloppyFails
language/statements/for-of/let-identifier-with-newline.js sloppyFails
language/statements/for-of/map-contract-expand.js fails
@@ -6562,20 +6518,9 @@ language/statements/for-of/set-contract.js fails
language/statements/for-of/set-expand-contract.js fails
language/statements/for-of/set-expand.js fails
language/statements/for-of/set.js fails
-language/statements/for-of/string-astral-truncated.js fails
-language/statements/for-of/string-astral.js fails
-language/statements/for-of/string-bmp.js fails
language/statements/for-of/throw-from-catch.js fails
language/statements/for-of/throw-from-finally.js fails
language/statements/for-of/throw.js fails
-language/statements/for-of/uint16array-mutate.js fails
-language/statements/for-of/uint16array.js fails
-language/statements/for-of/uint32array-mutate.js fails
-language/statements/for-of/uint32array.js fails
-language/statements/for-of/uint8array-mutate.js fails
-language/statements/for-of/uint8array.js fails
-language/statements/for-of/uint8clampedarray-mutate.js fails
-language/statements/for-of/uint8clampedarray.js fails
language/statements/for-of/yield-from-catch.js fails
language/statements/for-of/yield-from-finally.js fails
language/statements/for-of/yield-from-try.js fails