diff --git a/nova_vm/src/engine/bytecode/bytecode_compiler.rs b/nova_vm/src/engine/bytecode/bytecode_compiler.rs index 4dd87db2d..1043acf78 100644 --- a/nova_vm/src/engine/bytecode/bytecode_compiler.rs +++ b/nova_vm/src/engine/bytecode/bytecode_compiler.rs @@ -2,6 +2,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. +mod assignment; mod block_declaration_instantiation; mod class_definition_evaluation; mod for_in_of_statement; @@ -770,160 +771,6 @@ impl CompileEvaluation for ast::LogicalExpression<'_> { } } -impl CompileEvaluation for ast::AssignmentExpression<'_> { - fn compile(&self, ctx: &mut CompileContext) { - // 1. Let lref be ? Evaluation of LeftHandSideExpression. - let is_identifier_ref = match &self.left { - ast::AssignmentTarget::ArrayAssignmentTarget(_) => todo!(), - ast::AssignmentTarget::AssignmentTargetIdentifier(identifier) => { - identifier.compile(ctx); - true - } - ast::AssignmentTarget::ComputedMemberExpression(expression) => { - expression.compile(ctx); - false - } - ast::AssignmentTarget::ObjectAssignmentTarget(_) => todo!(), - ast::AssignmentTarget::PrivateFieldExpression(_) => todo!(), - ast::AssignmentTarget::StaticMemberExpression(expression) => { - expression.compile(ctx); - false - } - ast::AssignmentTarget::TSAsExpression(_) - | ast::AssignmentTarget::TSSatisfiesExpression(_) - | ast::AssignmentTarget::TSNonNullExpression(_) - | ast::AssignmentTarget::TSTypeAssertion(_) - | ast::AssignmentTarget::TSInstantiationExpression(_) => unreachable!(), - }; - - if self.operator == oxc_syntax::operator::AssignmentOperator::Assign { - ctx.add_instruction(Instruction::PushReference); - self.right.compile(ctx); - - if is_reference(&self.right) { - ctx.add_instruction(Instruction::GetValue); - } - - ctx.add_instruction(Instruction::LoadCopy); - ctx.add_instruction(Instruction::PopReference); - ctx.add_instruction(Instruction::PutValue); - - // ... Return rval. - ctx.add_instruction(Instruction::Store); - } else if matches!( - self.operator, - oxc_syntax::operator::AssignmentOperator::LogicalAnd - | oxc_syntax::operator::AssignmentOperator::LogicalNullish - | oxc_syntax::operator::AssignmentOperator::LogicalOr - ) { - // 2. Let lval be ? GetValue(lref). - ctx.add_instruction(Instruction::GetValueKeepReference); - ctx.add_instruction(Instruction::PushReference); - // We store the left value on the stack, because we'll need to - // restore it later. - ctx.add_instruction(Instruction::LoadCopy); - - match self.operator { - oxc_syntax::operator::AssignmentOperator::LogicalAnd => { - // 3. Let lbool be ToBoolean(lval). - // Note: We do not directly call ToBoolean: JumpIfNot does. - // 4. If lbool is false, return lval. - } - oxc_syntax::operator::AssignmentOperator::LogicalOr => { - // 3. Let lbool be ToBoolean(lval). - // Note: We do not directly call ToBoolean: JumpIfNot does. - // 4. If lbool is true, return lval. - ctx.add_instruction(Instruction::LogicalNot); - } - oxc_syntax::operator::AssignmentOperator::LogicalNullish => { - // 3. If lval is neither undefined nor null, return lval. - ctx.add_instruction(Instruction::IsNullOrUndefined); - } - _ => unreachable!(), - } - - let jump_to_end = ctx.add_instruction_with_jump_slot(Instruction::JumpIfNot); - - // We're returning the right expression, so we discard the left - // value at the top of the stack. - ctx.add_instruction(Instruction::Store); - - // 5. If IsAnonymousFunctionDefinition(AssignmentExpression) - // is true and IsIdentifierRef of LeftHandSideExpression is true, - // then - if is_identifier_ref && is_anonymous_function_definition(&self.right) { - // a. Let lhs be the StringValue of LeftHandSideExpression. - // b. Let rval be ? NamedEvaluation of AssignmentExpression with argument lhs. - ctx.name_identifier = Some(NamedEvaluationParameter::ReferenceStack); - self.right.compile(ctx); - } else { - // 6. Else - // a. Let rref be ? Evaluation of AssignmentExpression. - self.right.compile(ctx); - // b. Let rval be ? GetValue(rref). - if is_reference(&self.right) { - ctx.add_instruction(Instruction::GetValue); - } - } - - // 7. Perform ? PutValue(lref, rval). - ctx.add_instruction(Instruction::LoadCopy); - ctx.add_instruction(Instruction::PopReference); - ctx.add_instruction(Instruction::PutValue); - - // 4. ... return lval. - ctx.set_jump_target_here(jump_to_end); - ctx.add_instruction(Instruction::Store); - } else { - // 2. let lval be ? GetValue(lref). - ctx.add_instruction(Instruction::GetValueKeepReference); - ctx.add_instruction(Instruction::Load); - ctx.add_instruction(Instruction::PushReference); - // 3. Let rref be ? Evaluation of AssignmentExpression. - self.right.compile(ctx); - - // 4. Let rval be ? GetValue(rref). - if is_reference(&self.right) { - ctx.add_instruction(Instruction::GetValue); - } - - // 5. Let assignmentOpText be the source text matched by AssignmentOperator. - // 6. Let opText be the sequence of Unicode code points associated with assignmentOpText in the following table: - let op_text = match self.operator { - oxc_syntax::operator::AssignmentOperator::Addition => BinaryOperator::Addition, - oxc_syntax::operator::AssignmentOperator::Subtraction => { - BinaryOperator::Subtraction - } - oxc_syntax::operator::AssignmentOperator::Multiplication => { - BinaryOperator::Multiplication - } - oxc_syntax::operator::AssignmentOperator::Division => BinaryOperator::Division, - oxc_syntax::operator::AssignmentOperator::Remainder => BinaryOperator::Remainder, - oxc_syntax::operator::AssignmentOperator::ShiftLeft => BinaryOperator::ShiftLeft, - oxc_syntax::operator::AssignmentOperator::ShiftRight => BinaryOperator::ShiftRight, - oxc_syntax::operator::AssignmentOperator::ShiftRightZeroFill => { - BinaryOperator::ShiftRightZeroFill - } - oxc_syntax::operator::AssignmentOperator::BitwiseOR => BinaryOperator::BitwiseOR, - oxc_syntax::operator::AssignmentOperator::BitwiseXOR => BinaryOperator::BitwiseXOR, - oxc_syntax::operator::AssignmentOperator::BitwiseAnd => BinaryOperator::BitwiseAnd, - oxc_syntax::operator::AssignmentOperator::Exponential => { - BinaryOperator::Exponential - } - _ => unreachable!(), - }; - // 7. Let r be ? ApplyStringOrNumericBinaryOperator(lval, opText, rval). - ctx.add_instruction(Instruction::ApplyStringOrNumericBinaryOperator(op_text)); - ctx.add_instruction(Instruction::LoadCopy); - // 8. Perform ? PutValue(lref, r). - ctx.add_instruction(Instruction::PopReference); - ctx.add_instruction(Instruction::PutValue); - // 9. Return r. - ctx.add_instruction(Instruction::Store); - } - } -} - impl CompileEvaluation for ast::ParenthesizedExpression<'_> { fn compile(&self, ctx: &mut CompileContext) { self.expression.compile(ctx); diff --git a/nova_vm/src/engine/bytecode/bytecode_compiler/assignment.rs b/nova_vm/src/engine/bytecode/bytecode_compiler/assignment.rs new file mode 100644 index 000000000..9de79ef94 --- /dev/null +++ b/nova_vm/src/engine/bytecode/bytecode_compiler/assignment.rs @@ -0,0 +1,356 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +use oxc_ast::ast::{self, AssignmentOperator}; + +use crate::ecmascript::types::String; +use crate::engine::Instruction; + +use super::{ + CompileContext, CompileEvaluation, NamedEvaluationParameter, is_anonymous_function_definition, + is_reference, +}; + +impl CompileEvaluation for ast::AssignmentExpression<'_> { + fn compile(&self, ctx: &mut CompileContext) { + // 1. Let lref be ? Evaluation of LeftHandSideExpression. + match &self.left { + ast::AssignmentTarget::AssignmentTargetIdentifier(identifier) => { + identifier.compile(ctx); + } + ast::AssignmentTarget::ComputedMemberExpression(expression) => { + expression.compile(ctx); + } + ast::AssignmentTarget::ArrayAssignmentTarget(_) + | ast::AssignmentTarget::ObjectAssignmentTarget(_) => { + assert_eq!( + self.operator, + AssignmentOperator::Assign, + "SyntaxError: Invalid left-hand side in assignment expression" + ); + self.right.compile(ctx); + if is_reference(&self.right) { + ctx.add_instruction(Instruction::GetValue); + } + ctx.add_instruction(Instruction::LoadCopy); + self.left.compile(ctx); + ctx.add_instruction(Instruction::Store); + return; + } + ast::AssignmentTarget::PrivateFieldExpression(_) => todo!(), + ast::AssignmentTarget::StaticMemberExpression(expression) => { + expression.compile(ctx); + } + ast::AssignmentTarget::TSAsExpression(_) + | ast::AssignmentTarget::TSSatisfiesExpression(_) + | ast::AssignmentTarget::TSNonNullExpression(_) + | ast::AssignmentTarget::TSTypeAssertion(_) + | ast::AssignmentTarget::TSInstantiationExpression(_) => unreachable!(), + }; + + if self.operator == AssignmentOperator::Assign { + let is_rhs_literal = self.right.is_literal(); + + if !is_rhs_literal { + ctx.add_instruction(Instruction::PushReference); + } + + self.right.compile(ctx); + + if is_reference(&self.right) { + ctx.add_instruction(Instruction::GetValue); + } + + ctx.add_instruction(Instruction::LoadCopy); + + if !is_rhs_literal { + ctx.add_instruction(Instruction::PopReference); + } + + ctx.add_instruction(Instruction::PutValue); + + // ... Return rval. + ctx.add_instruction(Instruction::Store); + } else if matches!( + self.operator, + AssignmentOperator::LogicalAnd + | AssignmentOperator::LogicalNullish + | AssignmentOperator::LogicalOr + ) { + // 2. Let lval be ? GetValue(lref). + ctx.add_instruction(Instruction::GetValueKeepReference); + ctx.add_instruction(Instruction::PushReference); + // We store the left value on the stack, because we'll need to + // restore it later. + ctx.add_instruction(Instruction::LoadCopy); + + match self.operator { + AssignmentOperator::LogicalAnd => { + // 3. Let lbool be ToBoolean(lval). + // Note: We do not directly call ToBoolean: JumpIfNot does. + // 4. If lbool is false, return lval. + } + AssignmentOperator::LogicalOr => { + // 3. Let lbool be ToBoolean(lval). + // Note: We do not directly call ToBoolean: JumpIfNot does. + // 4. If lbool is true, return lval. + ctx.add_instruction(Instruction::LogicalNot); + } + AssignmentOperator::LogicalNullish => { + // 3. If lval is neither undefined nor null, return lval. + ctx.add_instruction(Instruction::IsNullOrUndefined); + } + _ => unreachable!(), + }; + + let jump_to_end = ctx.add_instruction_with_jump_slot(Instruction::JumpIfNot); + + // We're returning the right expression, so we discard the left + // value at the top of the stack. + ctx.add_instruction(Instruction::Store); + + // 5. If IsAnonymousFunctionDefinition(AssignmentExpression) + // is true and IsIdentifierRef of LeftHandSideExpression is true, + // then + if matches!( + self.left, + ast::AssignmentTarget::AssignmentTargetIdentifier(_) + ) && is_anonymous_function_definition(&self.right) + { + // a. Let lhs be the StringValue of LeftHandSideExpression. + // b. Let rval be ? NamedEvaluation of AssignmentExpression with argument lhs. + ctx.name_identifier = Some(NamedEvaluationParameter::ReferenceStack); + self.right.compile(ctx); + } else { + // 6. Else + // a. Let rref be ? Evaluation of AssignmentExpression. + self.right.compile(ctx); + // b. Let rval be ? GetValue(rref). + if is_reference(&self.right) { + ctx.add_instruction(Instruction::GetValue); + } + } + + // 7. Perform ? PutValue(lref, rval). + ctx.add_instruction(Instruction::LoadCopy); + ctx.add_instruction(Instruction::PopReference); + ctx.add_instruction(Instruction::PutValue); + + // 4. ... return lval. + ctx.set_jump_target_here(jump_to_end); + ctx.add_instruction(Instruction::Store); + } else { + // 2. let lval be ? GetValue(lref). + ctx.add_instruction(Instruction::GetValueKeepReference); + ctx.add_instruction(Instruction::Load); + ctx.add_instruction(Instruction::PushReference); + // 3. Let rref be ? Evaluation of AssignmentExpression. + self.right.compile(ctx); + + // 4. Let rval be ? GetValue(rref). + if is_reference(&self.right) { + ctx.add_instruction(Instruction::GetValue); + } + + // 5. Let assignmentOpText be the source text matched by AssignmentOperator. + // 6. Let opText be the sequence of Unicode code points associated with assignmentOpText in the following table: + let op_text = self.operator.to_binary_operator().unwrap(); + // 7. Let r be ? ApplyStringOrNumericBinaryOperator(lval, opText, rval). + ctx.add_instruction(Instruction::ApplyStringOrNumericBinaryOperator(op_text)); + ctx.add_instruction(Instruction::LoadCopy); + // 8. Perform ? PutValue(lref, r). + ctx.add_instruction(Instruction::PopReference); + ctx.add_instruction(Instruction::PutValue); + // 9. Return r. + ctx.add_instruction(Instruction::Store); + } + } +} + +impl CompileEvaluation for ast::AssignmentTarget<'_> { + fn compile(&self, ctx: &mut CompileContext) { + match self { + ast::AssignmentTarget::ArrayAssignmentTarget(array) => { + array.compile(ctx); + } + ast::AssignmentTarget::AssignmentTargetIdentifier(identifier) => { + identifier.compile(ctx); + ctx.add_instruction(Instruction::PutValue); + } + ast::AssignmentTarget::ComputedMemberExpression(expression) => { + ctx.add_instruction(Instruction::Load); + expression.compile(ctx); + ctx.add_instruction(Instruction::Store); + ctx.add_instruction(Instruction::PutValue); + } + ast::AssignmentTarget::ObjectAssignmentTarget(object) => { + object.compile(ctx); + } + ast::AssignmentTarget::PrivateFieldExpression(_) => todo!(), + ast::AssignmentTarget::StaticMemberExpression(expression) => { + ctx.add_instruction(Instruction::Load); + expression.compile(ctx); + ctx.add_instruction(Instruction::Store); + ctx.add_instruction(Instruction::PutValue); + } + ast::AssignmentTarget::TSAsExpression(_) + | ast::AssignmentTarget::TSSatisfiesExpression(_) + | ast::AssignmentTarget::TSNonNullExpression(_) + | ast::AssignmentTarget::TSTypeAssertion(_) + | ast::AssignmentTarget::TSInstantiationExpression(_) => unreachable!(), + } + } +} + +impl CompileEvaluation for ast::ArrayAssignmentTarget<'_> { + fn compile(&self, ctx: &mut CompileContext) { + ctx.add_instruction(Instruction::GetIteratorSync); + for element in &self.elements { + ctx.add_instruction(Instruction::IteratorStepValueOrUndefined); + if let Some(element) = element { + element.compile(ctx); + } + } + if let Some(rest) = &self.rest { + ctx.add_instruction(Instruction::IteratorRestIntoArray); + rest.target.compile(ctx); + } else { + ctx.add_instruction(Instruction::IteratorClose); + } + } +} + +impl CompileEvaluation for ast::ObjectAssignmentTarget<'_> { + fn compile(&self, ctx: &mut CompileContext) { + ctx.add_instruction(Instruction::ToObject); + if self.properties.len() > 1 || self.rest.is_some() { + ctx.add_instruction(Instruction::LoadCopy); + } + for (index, property) in self.properties.iter().enumerate() { + property.compile(ctx); + let offset = if self.rest.is_some() { + index + 1 + } else { + index + 2 + }; + #[allow(clippy::comparison_chain)] + if offset < self.properties.len() { + ctx.add_instruction(Instruction::StoreCopy); + } else if offset == self.properties.len() { + ctx.add_instruction(Instruction::Store); + } + } + if let Some(_rest) = &self.rest { + todo!() + } + } +} + +impl CompileEvaluation for ast::AssignmentTargetProperty<'_> { + fn compile(&self, ctx: &mut CompileContext) { + match self { + ast::AssignmentTargetProperty::AssignmentTargetPropertyIdentifier(identifier) => { + identifier.compile(ctx); + } + ast::AssignmentTargetProperty::AssignmentTargetPropertyProperty(property) => { + property.compile(ctx); + } + } + } +} + +impl CompileEvaluation for ast::AssignmentTargetPropertyIdentifier<'_> { + fn compile(&self, ctx: &mut CompileContext) { + let key = String::from_str(ctx.agent, self.binding.name.as_str(), ctx.gc); + ctx.add_instruction_with_identifier( + Instruction::EvaluatePropertyAccessWithIdentifierKey, + key, + ); + ctx.add_instruction(Instruction::GetValue); + if let Some(init) = &self.init { + ctx.add_instruction(Instruction::LoadCopy); + ctx.add_instruction(Instruction::IsUndefined); + let jump_slot = ctx.add_instruction_with_jump_slot(Instruction::JumpIfNot); + ctx.add_instruction(Instruction::Store); + if is_anonymous_function_definition(init) { + let identifier_string = ctx.create_identifier(&self.binding.name); + ctx.add_instruction_with_constant(Instruction::StoreConstant, identifier_string); + ctx.name_identifier = Some(NamedEvaluationParameter::Result); + } + init.compile(ctx); + ctx.name_identifier = None; + if is_reference(init) { + ctx.add_instruction(Instruction::GetValue); + } + ctx.add_instruction(Instruction::Load); + ctx.set_jump_target_here(jump_slot); + ctx.add_instruction(Instruction::Store); + } + self.binding.compile(ctx); + ctx.add_instruction(Instruction::PutValue); + } +} + +impl CompileEvaluation for ast::AssignmentTargetPropertyProperty<'_> { + fn compile(&self, ctx: &mut CompileContext) { + match &self.name { + ast::PropertyKey::StaticIdentifier(identifier) => { + let key = String::from_str(ctx.agent, identifier.name.as_str(), ctx.gc); + ctx.add_instruction_with_identifier( + Instruction::EvaluatePropertyAccessWithIdentifierKey, + key, + ); + } + ast::PropertyKey::PrivateIdentifier(_) => todo!(), + _ => { + ctx.add_instruction(Instruction::Load); + let name = self.name.to_expression(); + name.compile(ctx); + if is_reference(name) { + ctx.add_instruction(Instruction::GetValue); + } + ctx.add_instruction(Instruction::EvaluatePropertyAccessWithExpressionKey); + } + } + ctx.add_instruction(Instruction::GetValue); + self.binding.compile(ctx); + } +} + +impl CompileEvaluation for ast::AssignmentTargetMaybeDefault<'_> { + fn compile(&self, ctx: &mut CompileContext) { + match self { + ast::AssignmentTargetMaybeDefault::AssignmentTargetWithDefault(target) => { + ctx.add_instruction(Instruction::LoadCopy); + ctx.add_instruction(Instruction::IsUndefined); + let jump_slot = ctx.add_instruction_with_jump_slot(Instruction::JumpIfNot); + ctx.add_instruction(Instruction::Store); + if is_anonymous_function_definition(&target.init) { + if let ast::AssignmentTarget::AssignmentTargetIdentifier(identifier) = + &target.binding + { + let identifier_string = ctx.create_identifier(&identifier.name); + ctx.add_instruction_with_constant( + Instruction::StoreConstant, + identifier_string, + ); + ctx.name_identifier = Some(NamedEvaluationParameter::Result); + } + } + target.init.compile(ctx); + ctx.name_identifier = None; + if is_reference(&target.init) { + ctx.add_instruction(Instruction::GetValue); + } + ctx.add_instruction(Instruction::Load); + ctx.set_jump_target_here(jump_slot); + ctx.add_instruction(Instruction::Store); + target.binding.compile(ctx); + } + _ => { + self.to_assignment_target().compile(ctx); + } + } + } +} diff --git a/nova_vm/src/engine/bytecode/bytecode_compiler/for_in_of_statement.rs b/nova_vm/src/engine/bytecode/bytecode_compiler/for_in_of_statement.rs index e149ba6fb..24cb189bf 100644 --- a/nova_vm/src/engine/bytecode/bytecode_compiler/for_in_of_statement.rs +++ b/nova_vm/src/engine/bytecode/bytecode_compiler/for_in_of_statement.rs @@ -138,7 +138,7 @@ fn for_in_of_body_evaluation( lhs.is_assignment_target_pattern() }; // 5. If destructuring is true and lhsKind is ASSIGNMENT, then - let _assignment_pattern = if destructuring && lhs_kind == LeftHandSideKind::Assignment { + let assignment_pattern = if destructuring && lhs_kind == LeftHandSideKind::Assignment { // a. Assert: lhs is a LeftHandSideExpression. // b. Let assignmentPattern be the AssignmentPattern that is covered by lhs. Some(match lhs { @@ -176,7 +176,14 @@ fn for_in_of_body_evaluation( // 1. If lhsKind is ASSIGNMENT, then if lhs_kind == LeftHandSideKind::Assignment { // a. Let status be Completion(DestructuringAssignmentEvaluation of assignmentPattern with argument nextValue). - todo!(); + match assignment_pattern.unwrap() { + AssignmentPattern::ArrayAssignmentTarget(lhs) => { + lhs.compile(ctx); + } + AssignmentPattern::ObjectAssignmentTarget(lhs) => { + lhs.compile(ctx); + } + } } else { // 2. Else, // a. Assert: lhsKind is VAR-BINDING. diff --git a/tests/expectations.json b/tests/expectations.json index 600fe1f7c..be972a049 100644 --- a/tests/expectations.json +++ b/tests/expectations.json @@ -10622,272 +10622,29 @@ "language/expressions/assignment/destructuring/iterator-destructuring-property-reference-target-evaluation-order.js": "CRASH", "language/expressions/assignment/destructuring/keyed-destructuring-property-reference-target-evaluation-order-with-bindings.js": "CRASH", "language/expressions/assignment/destructuring/keyed-destructuring-property-reference-target-evaluation-order.js": "CRASH", - "language/expressions/assignment/destructuring/obj-prop-__proto__dup.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-assignment.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-evaluation.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-fn-name-arrow.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-fn-name-class.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-fn-name-cover.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-fn-name-fn.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-fn-name-gen.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-in.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-let.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-order.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-simple-no-strict.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-init-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-iter-get-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-iter-nrml-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-iter-nrml-close-null.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-iter-nrml-close-skip.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-iter-nrml-close.js": "CRASH", "language/expressions/assignment/dstr/array-elem-iter-rtrn-close-err.js": "CRASH", "language/expressions/assignment/dstr/array-elem-iter-rtrn-close-null.js": "CRASH", "language/expressions/assignment/dstr/array-elem-iter-rtrn-close.js": "CRASH", "language/expressions/assignment/dstr/array-elem-iter-thrw-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-iter-thrw-close-skip.js": "CRASH", "language/expressions/assignment/dstr/array-elem-iter-thrw-close.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-array-null.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-array-undefined-hole.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-array-undefined-own.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-array-undefined.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-array-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-array-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-array.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-obj-null.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-obj-undefined-hole.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-obj-undefined-own.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-obj-undefined.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-obj-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-obj-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-nested-obj.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-const.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-let.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-obj-literal-prop-ref-init-active.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-obj-literal-prop-ref-init.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-obj-literal-prop-ref.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-prop-ref-no-get.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-prop-ref-user-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-prop-ref.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-unresolvable-no-strict.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-put-unresolvable-strict.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-target-identifier.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-target-simple-no-strict.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-target-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-target-yield-valid.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-elision-iter-abpt.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-elision-iter-nrml-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-elision-iter-nrml-close-null.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-elision-iter-nrml-close-skip.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-elision-iter-nrml-close.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-get-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-list-nrml-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-list-nrml-close-null.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-list-nrml-close-skip.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-list-nrml-close.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-list-rtrn-close-err.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-list-rtrn-close-null.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-list-rtrn-close.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-list-thrw-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-list-thrw-close-skip.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-list-thrw-close.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-rest-nrml-close-skip.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-rest-rtrn-close-err.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-rest-rtrn-close-null.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-rest-rtrn-close.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-rest-thrw-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elem-trlg-iter-rest-thrw-close-skip.js": "CRASH", "language/expressions/assignment/dstr/array-elem-trlg-iter-rest-thrw-close.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-iter-abpt.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-iter-get-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-iter-nrml-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-iter-nrml-close-null.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-iter-nrml-close-skip.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-iter-nrml-close.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-val-array.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-val-bool.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-val-null.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-val-num.js": "CRASH", "language/expressions/assignment/dstr/array-elision-val-string.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-val-symbol.js": "CRASH", - "language/expressions/assignment/dstr/array-elision-val-undef.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-iter-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-iter-close-null.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-iter-close.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-iter-get-err.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-val-array.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-val-bool.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-val-null.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-val-num.js": "CRASH", "language/expressions/assignment/dstr/array-empty-val-string.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-val-symbol.js": "CRASH", - "language/expressions/assignment/dstr/array-empty-val-undef.js": "CRASH", - "language/expressions/assignment/dstr/array-iteration.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-after-element.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-after-elision.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-elision-iter-abpt.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-elision.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-iter-get-err.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-iter-nrml-close-skip.js": "CRASH", "language/expressions/assignment/dstr/array-rest-iter-rtrn-close-err.js": "CRASH", "language/expressions/assignment/dstr/array-rest-iter-rtrn-close-null.js": "CRASH", "language/expressions/assignment/dstr/array-rest-iter-rtrn-close.js": "CRASH", "language/expressions/assignment/dstr/array-rest-iter-thrw-close-err.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-iter-thrw-close-skip.js": "CRASH", "language/expressions/assignment/dstr/array-rest-iter-thrw-close.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-iteration.js": "CRASH", "language/expressions/assignment/dstr/array-rest-lref-err.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-lref.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-array-iter-thrw-close-skip.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-array-null.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-array-undefined-hole.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-array-undefined-own.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-array-undefined.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-array-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-array-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-array.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-obj-null.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-obj-undefined-hole.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-obj-undefined-own.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-obj-undefined.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-obj-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-obj-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-nested-obj.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-put-const.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-put-let.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-put-prop-ref-no-get.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-put-prop-ref-user-err-iter-close-skip.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-put-prop-ref-user-err.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-put-prop-ref.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-put-unresolvable-no-strict.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-put-unresolvable-strict.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/array-rest-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-break-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-case-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-catch-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-class-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-const-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-continue-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-debugger-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-default-escaped-ext.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-default-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-default.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-delete-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-do-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-else-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-enum-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-export-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-extends-escaped-ext.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-extends-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-extends.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-finally-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-for-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-function-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-if-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-implements-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-import-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-in-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-instanceof-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-interface-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-let-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-new-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-package-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-private-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-protected-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-public-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-return-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-static-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-super-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-switch-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-this-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-throw-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-try-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-typeof-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-var-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-void-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-while-escaped.js": "CRASH", - "language/expressions/assignment/dstr/ident-name-prop-name-literal-with-escaped.js": "CRASH", - "language/expressions/assignment/dstr/obj-empty-bool.js": "CRASH", - "language/expressions/assignment/dstr/obj-empty-null.js": "CRASH", - "language/expressions/assignment/dstr/obj-empty-num.js": "CRASH", - "language/expressions/assignment/dstr/obj-empty-obj.js": "CRASH", - "language/expressions/assignment/dstr/obj-empty-string.js": "CRASH", - "language/expressions/assignment/dstr/obj-empty-symbol.js": "CRASH", - "language/expressions/assignment/dstr/obj-empty-undef.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-identifier-resolution-first.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-identifier-resolution-last.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-identifier-resolution-lone.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-identifier-resolution-middle.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-identifier-resolution-trlng.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-identifier-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-assignment-missing.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-assignment-null.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-assignment-truthy.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-assignment-undef.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-evaluation.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-fn-name-arrow.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-fn-name-class.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-fn-name-cover.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-fn-name-fn.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-fn-name-gen.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-in.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-let.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-order.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-simple-no-strict.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-init-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-put-const.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-put-let.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-put-unresolvable-no-strict.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-put-unresolvable-strict.js": "CRASH", - "language/expressions/assignment/dstr/obj-id-simple-no-strict.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-assignment-missing.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-assignment-null.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-assignment-truthy.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-assignment-undef.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-evaluation.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-fn-name-arrow.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-fn-name-class.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-fn-name-cover.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-fn-name-fn.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-fn-name-gen.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-in.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-let.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-init-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-prop-ref-init-active.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-prop-ref-init.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-prop-ref.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-target-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-elem-target-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-identifier-resolution-first.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-identifier-resolution-last.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-identifier-resolution-lone.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-identifier-resolution-middle.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-identifier-resolution-trlng.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-name-evaluation-error.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-name-evaluation.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-array-null.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-array-undefined-own.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-array-undefined.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-array-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-array-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-array.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-obj-null.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-obj-undefined-own.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-obj-undefined.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-obj-yield-expr.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-obj-yield-ident-valid.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-nested-obj.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-put-const.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-put-let.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-put-order.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-put-prop-ref-no-get.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-put-prop-ref-user-err.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-put-prop-ref.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-put-unresolvable-no-strict.js": "CRASH", - "language/expressions/assignment/dstr/obj-prop-put-unresolvable-strict.js": "CRASH", "language/expressions/assignment/dstr/obj-rest-computed-property-no-strict.js": "CRASH", "language/expressions/assignment/dstr/obj-rest-computed-property.js": "CRASH", "language/expressions/assignment/dstr/obj-rest-descriptors.js": "CRASH", @@ -18525,7 +18282,6 @@ "language/statements/for-in/scope-head-var-none.js": "CRASH", "language/statements/for-of/arguments-mapped-aliasing.js": "FAIL", "language/statements/for-of/body-dstr-assign-error.js": "CRASH", - "language/statements/for-of/body-dstr-assign.js": "CRASH", "language/statements/for-of/body-put-error.js": "CRASH", "language/statements/for-of/break-from-finally.js": "CRASH", "language/statements/for-of/break-label-from-catch.js": "CRASH", @@ -18541,146 +18297,29 @@ "language/statements/for-of/cptn-decl-itr.js": "FAIL", "language/statements/for-of/cptn-expr-abrupt-empty.js": "CRASH", "language/statements/for-of/cptn-expr-itr.js": "FAIL", - "language/statements/for-of/dstr/array-elem-init-assignment.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-evaluation.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-fn-name-arrow.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-fn-name-class.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-fn-name-cover.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-fn-name-fn.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-fn-name-gen.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-in.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-let.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-order.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-simple-no-strict.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/array-elem-init-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/array-elem-iter-get-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-iter-nrml-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-iter-nrml-close-null.js": "CRASH", - "language/statements/for-of/dstr/array-elem-iter-nrml-close-skip.js": "CRASH", - "language/statements/for-of/dstr/array-elem-iter-nrml-close.js": "CRASH", "language/statements/for-of/dstr/array-elem-iter-rtrn-close-err.js": "CRASH", "language/statements/for-of/dstr/array-elem-iter-rtrn-close-null.js": "CRASH", "language/statements/for-of/dstr/array-elem-iter-rtrn-close.js": "CRASH", "language/statements/for-of/dstr/array-elem-iter-thrw-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-iter-thrw-close-skip.js": "CRASH", "language/statements/for-of/dstr/array-elem-iter-thrw-close.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-array-null.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-array-undefined-hole.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-array-undefined-own.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-array-undefined.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-array-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-array-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-array.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-obj-null.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-obj-undefined-hole.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-obj-undefined-own.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-obj-undefined.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-obj-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-obj-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/array-elem-nested-obj.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-const.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-let.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-obj-literal-prop-ref-init-active.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-obj-literal-prop-ref-init.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-obj-literal-prop-ref.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-prop-ref-no-get.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-prop-ref-user-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-prop-ref.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-unresolvable-no-strict.js": "CRASH", - "language/statements/for-of/dstr/array-elem-put-unresolvable-strict.js": "CRASH", - "language/statements/for-of/dstr/array-elem-target-identifier.js": "CRASH", - "language/statements/for-of/dstr/array-elem-target-simple-no-strict.js": "CRASH", - "language/statements/for-of/dstr/array-elem-target-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/array-elem-target-yield-valid.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-elision-iter-abpt.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-elision-iter-nrml-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-elision-iter-nrml-close-null.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-elision-iter-nrml-close-skip.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-elision-iter-nrml-close.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-get-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-list-nrml-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-list-nrml-close-null.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-list-nrml-close-skip.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-list-nrml-close.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-list-rtrn-close-err.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-list-rtrn-close-null.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-list-rtrn-close.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-list-thrw-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-list-thrw-close-skip.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-list-thrw-close.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-rest-nrml-close-skip.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-rest-rtrn-close-err.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-rest-rtrn-close-null.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-rest-rtrn-close.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-rest-thrw-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-elem-trlg-iter-rest-thrw-close-skip.js": "CRASH", "language/statements/for-of/dstr/array-elem-trlg-iter-rest-thrw-close.js": "CRASH", - "language/statements/for-of/dstr/array-elision-iter-abpt.js": "CRASH", - "language/statements/for-of/dstr/array-elision-iter-get-err.js": "CRASH", - "language/statements/for-of/dstr/array-elision-iter-nrml-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-elision-iter-nrml-close-null.js": "CRASH", - "language/statements/for-of/dstr/array-elision-iter-nrml-close-skip.js": "CRASH", - "language/statements/for-of/dstr/array-elision-iter-nrml-close.js": "CRASH", - "language/statements/for-of/dstr/array-elision-val-array.js": "CRASH", - "language/statements/for-of/dstr/array-elision-val-bool.js": "CRASH", - "language/statements/for-of/dstr/array-elision-val-null.js": "CRASH", - "language/statements/for-of/dstr/array-elision-val-num.js": "CRASH", "language/statements/for-of/dstr/array-elision-val-string.js": "CRASH", - "language/statements/for-of/dstr/array-elision-val-symbol.js": "CRASH", - "language/statements/for-of/dstr/array-elision-val-undef.js": "CRASH", - "language/statements/for-of/dstr/array-empty-iter-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-empty-iter-close-null.js": "CRASH", - "language/statements/for-of/dstr/array-empty-iter-close.js": "CRASH", - "language/statements/for-of/dstr/array-empty-iter-get-err.js": "CRASH", - "language/statements/for-of/dstr/array-empty-val-array.js": "CRASH", - "language/statements/for-of/dstr/array-empty-val-bool.js": "CRASH", - "language/statements/for-of/dstr/array-empty-val-null.js": "CRASH", - "language/statements/for-of/dstr/array-empty-val-num.js": "CRASH", "language/statements/for-of/dstr/array-empty-val-string.js": "CRASH", - "language/statements/for-of/dstr/array-empty-val-symbol.js": "CRASH", - "language/statements/for-of/dstr/array-empty-val-undef.js": "CRASH", - "language/statements/for-of/dstr/array-iteration.js": "CRASH", - "language/statements/for-of/dstr/array-rest-after-element.js": "CRASH", - "language/statements/for-of/dstr/array-rest-after-elision.js": "CRASH", - "language/statements/for-of/dstr/array-rest-elision-iter-abpt.js": "CRASH", - "language/statements/for-of/dstr/array-rest-elision.js": "CRASH", - "language/statements/for-of/dstr/array-rest-iter-get-err.js": "CRASH", - "language/statements/for-of/dstr/array-rest-iter-nrml-close-skip.js": "CRASH", "language/statements/for-of/dstr/array-rest-iter-rtrn-close-err.js": "CRASH", "language/statements/for-of/dstr/array-rest-iter-rtrn-close-null.js": "CRASH", "language/statements/for-of/dstr/array-rest-iter-rtrn-close.js": "CRASH", "language/statements/for-of/dstr/array-rest-iter-thrw-close-err.js": "CRASH", - "language/statements/for-of/dstr/array-rest-iter-thrw-close-skip.js": "CRASH", "language/statements/for-of/dstr/array-rest-iter-thrw-close.js": "CRASH", - "language/statements/for-of/dstr/array-rest-iteration.js": "CRASH", "language/statements/for-of/dstr/array-rest-lref-err.js": "CRASH", - "language/statements/for-of/dstr/array-rest-lref.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-array-iter-thrw-close-skip.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-array-null.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-array-undefined-hole.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-array-undefined-own.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-array-undefined.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-array-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-array-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-array.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-obj-null.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-obj-undefined-hole.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-obj-undefined-own.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-obj-undefined.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-obj-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-obj-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/array-rest-nested-obj.js": "CRASH", - "language/statements/for-of/dstr/array-rest-put-const.js": "CRASH", - "language/statements/for-of/dstr/array-rest-put-let.js": "CRASH", - "language/statements/for-of/dstr/array-rest-put-prop-ref-no-get.js": "CRASH", - "language/statements/for-of/dstr/array-rest-put-prop-ref-user-err-iter-close-skip.js": "CRASH", - "language/statements/for-of/dstr/array-rest-put-prop-ref-user-err.js": "CRASH", - "language/statements/for-of/dstr/array-rest-put-prop-ref.js": "CRASH", - "language/statements/for-of/dstr/array-rest-put-unresolvable-no-strict.js": "CRASH", - "language/statements/for-of/dstr/array-rest-put-unresolvable-strict.js": "CRASH", - "language/statements/for-of/dstr/array-rest-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/array-rest-yield-ident-valid.js": "CRASH", "language/statements/for-of/dstr/const-ary-init-iter-close.js": "CRASH", "language/statements/for-of/dstr/const-ary-init-iter-get-err-array-prototype.js": "CRASH", "language/statements/for-of/dstr/const-ary-init-iter-get-err.js": "CRASH", @@ -18859,86 +18498,6 @@ "language/statements/for-of/dstr/let-obj-ptrn-rest-getter.js": "CRASH", "language/statements/for-of/dstr/let-obj-ptrn-rest-skip-non-enumerable.js": "CRASH", "language/statements/for-of/dstr/let-obj-ptrn-rest-val-obj.js": "CRASH", - "language/statements/for-of/dstr/obj-empty-bool.js": "CRASH", - "language/statements/for-of/dstr/obj-empty-null.js": "CRASH", - "language/statements/for-of/dstr/obj-empty-num.js": "CRASH", - "language/statements/for-of/dstr/obj-empty-obj.js": "CRASH", - "language/statements/for-of/dstr/obj-empty-string.js": "CRASH", - "language/statements/for-of/dstr/obj-empty-symbol.js": "CRASH", - "language/statements/for-of/dstr/obj-empty-undef.js": "CRASH", - "language/statements/for-of/dstr/obj-id-identifier-resolution-first.js": "CRASH", - "language/statements/for-of/dstr/obj-id-identifier-resolution-last.js": "CRASH", - "language/statements/for-of/dstr/obj-id-identifier-resolution-lone.js": "CRASH", - "language/statements/for-of/dstr/obj-id-identifier-resolution-middle.js": "CRASH", - "language/statements/for-of/dstr/obj-id-identifier-resolution-trlng.js": "CRASH", - "language/statements/for-of/dstr/obj-id-identifier-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-assignment-missing.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-assignment-null.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-assignment-truthy.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-assignment-undef.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-evaluation.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-fn-name-arrow.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-fn-name-class.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-fn-name-cover.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-fn-name-fn.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-fn-name-gen.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-in.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-let.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-order.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-simple-no-strict.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/obj-id-init-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/obj-id-put-const.js": "CRASH", - "language/statements/for-of/dstr/obj-id-put-let.js": "CRASH", - "language/statements/for-of/dstr/obj-id-put-unresolvable-no-strict.js": "CRASH", - "language/statements/for-of/dstr/obj-id-put-unresolvable-strict.js": "CRASH", - "language/statements/for-of/dstr/obj-id-simple-no-strict.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-assignment-missing.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-assignment-null.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-assignment-truthy.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-assignment-undef.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-evaluation.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-fn-name-arrow.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-fn-name-class.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-fn-name-cover.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-fn-name-fn.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-fn-name-gen.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-in.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-let.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-init-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-prop-ref-init-active.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-prop-ref-init.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-prop-ref.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-target-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-elem-target-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-identifier-resolution-first.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-identifier-resolution-last.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-identifier-resolution-lone.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-identifier-resolution-middle.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-identifier-resolution-trlng.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-name-evaluation-error.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-name-evaluation.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-array-null.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-array-undefined-own.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-array-undefined.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-array-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-array-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-array.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-obj-null.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-obj-undefined-own.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-obj-undefined.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-obj-yield-expr.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-obj-yield-ident-valid.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-nested-obj.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-put-const.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-put-let.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-put-order.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-put-prop-ref-no-get.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-put-prop-ref-user-err.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-put-prop-ref.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-put-unresolvable-no-strict.js": "CRASH", - "language/statements/for-of/dstr/obj-prop-put-unresolvable-strict.js": "CRASH", "language/statements/for-of/dstr/obj-rest-computed-property-no-strict.js": "CRASH", "language/statements/for-of/dstr/obj-rest-computed-property.js": "CRASH", "language/statements/for-of/dstr/obj-rest-descriptors.js": "CRASH", @@ -20362,17 +19921,11 @@ "staging/sm/expressions/ToPropertyKey-symbols.js": "CRASH", "staging/sm/expressions/computed-property-side-effects.js": "CRASH", "staging/sm/expressions/delete-name-parenthesized-early-error-strict-mode.js": "FAIL", - "staging/sm/expressions/destructuring-array-default-call.js": "CRASH", "staging/sm/expressions/destructuring-array-default-class.js": "CRASH", - "staging/sm/expressions/destructuring-array-default-function-nested.js": "CRASH", - "staging/sm/expressions/destructuring-array-default-function.js": "CRASH", "staging/sm/expressions/destructuring-array-default-simple.js": "CRASH", - "staging/sm/expressions/destructuring-array-default-yield.js": "CRASH", "staging/sm/expressions/destructuring-array-done.js": "CRASH", - "staging/sm/expressions/destructuring-array-lexical.js": "CRASH", "staging/sm/expressions/destructuring-object-__proto__-1.js": "CRASH", "staging/sm/expressions/destructuring-object-__proto__-2.js": "CRASH", - "staging/sm/expressions/destructuring-pattern-parenthesized.js": "CRASH", "staging/sm/expressions/nested-delete-name-in-evalcode.js": "CRASH", "staging/sm/expressions/nullish-coalescing.js": "FAIL", "staging/sm/expressions/object-literal-__proto__.js": "CRASH", @@ -20395,9 +19948,6 @@ "staging/sm/extensions/bug472534.js": "CRASH", "staging/sm/extensions/censor-strict-caller.js": "FAIL", "staging/sm/extensions/dataview.js": "FAIL", - "staging/sm/extensions/destructuring-__proto__-shorthand-assignment-before-var.js": "CRASH", - "staging/sm/extensions/destructuring-__proto__-shorthand-assignment.js": "CRASH", - "staging/sm/extensions/destructuring-__proto__-target-assignment.js": "CRASH", "staging/sm/extensions/destructuring-for-inof-__proto__.js": "CRASH", "staging/sm/extensions/es5ish-defineGetter-defineSetter.js": "FAIL", "staging/sm/extensions/extension-methods-reject-null-undefined-this.js": "CRASH", diff --git a/tests/metrics.json b/tests/metrics.json index 5985911cc..2bb4e7b58 100644 --- a/tests/metrics.json +++ b/tests/metrics.json @@ -1,9 +1,8 @@ { "results": { - - "crash": 13000, - "fail": 7716, - "pass": 26020, + "crash": 12123, + "fail": 7756, + "pass": 26857, "skip": 65, "timeout": 0, "unresolved": 0