diff --git a/nova_vm/src/ecmascript/builtins/indexed_collections/typed_array_objects/typed_array_intrinsic_object.rs b/nova_vm/src/ecmascript/builtins/indexed_collections/typed_array_objects/typed_array_intrinsic_object.rs index e675f612c..d6fc3d553 100644 --- a/nova_vm/src/ecmascript/builtins/indexed_collections/typed_array_objects/typed_array_intrinsic_object.rs +++ b/nova_vm/src/ecmascript/builtins/indexed_collections/typed_array_objects/typed_array_intrinsic_object.rs @@ -53,9 +53,10 @@ use crate::{ use super::abstract_operations::{ TypedArrayWithBufferWitnessRecords, is_typed_array_out_of_bounds, - make_typed_array_with_buffer_witness_record, typed_array_byte_length, - typed_array_create_from_constructor_with_length, typed_array_create_same_type, - typed_array_length, typed_array_species_create_with_length, validate_typed_array, + is_valid_integer_index_generic, make_typed_array_with_buffer_witness_record, + typed_array_byte_length, typed_array_create_from_constructor_with_length, + typed_array_create_same_type, typed_array_length, typed_array_species_create_with_length, + validate_typed_array, }; pub struct TypedArrayIntrinsicObject; @@ -828,7 +829,7 @@ impl TypedArrayPrototype { agent: &mut Agent, this_value: Value, arguments: ArgumentsList, - mut gc: GcScope<'gc, '_>, + gc: GcScope<'gc, '_>, ) -> JsResult<'gc, Value<'gc>> { let this_value = this_value.bind(gc.nogc()); let target = arguments.get(0).bind(gc.nogc()); @@ -840,143 +841,63 @@ impl TypedArrayPrototype { }; // 1. Let O be the this value. let o = this_value; - // 2. Let taRecord be ? ValidateTypedArray(O, seq-cst). let ta_record = validate_typed_array(agent, o, Ordering::SeqCst, gc.nogc()) .unbind()? .bind(gc.nogc()); let o = ta_record.object; - let scoped_o = o.scope(agent, gc.nogc()); - // 3. Let len be TypedArrayLength(taRecord). - let len = match scoped_o.get(agent) { - TypedArray::Int8Array(_) - | TypedArray::Uint8Array(_) - | TypedArray::Uint8ClampedArray(_) => { - typed_array_length::(agent, &ta_record, gc.nogc()) - } - TypedArray::Int16Array(_) | TypedArray::Uint16Array(_) => { - typed_array_length::(agent, &ta_record, gc.nogc()) - } - #[cfg(feature = "proposal-float16array")] - TypedArray::Float16Array(_) => typed_array_length::(agent, &ta_record, gc.nogc()), - TypedArray::Int32Array(_) - | TypedArray::Uint32Array(_) - | TypedArray::Float32Array(_) => { - typed_array_length::(agent, &ta_record, gc.nogc()) - } - TypedArray::BigInt64Array(_) - | TypedArray::BigUint64Array(_) - | TypedArray::Float64Array(_) => { - typed_array_length::(agent, &ta_record, gc.nogc()) - } - } - .to_i64() - .unwrap(); - let end = end.map(|e| e.scope(agent, gc.nogc())); - let start = start.scope(agent, gc.nogc()); - let target = target.scope(agent, gc.nogc()); - - // 4. Let relativeTarget be ? ToIntegerOrInfinity(target). - // SAFETY: target has not been shared. - let relative_target = - to_integer_or_infinity(agent, unsafe { target.take(agent) }, gc.reborrow()).unbind()?; - // 5. If relativeTarget = -∞, let targetIndex be 0. - let target_index = if relative_target.is_neg_infinity() { - 0 - } else if relative_target.is_negative() { - // 6. Else if relativeTarget < 0, let targetIndex be max(len + relativeTarget, 0). - (len + relative_target.into_i64()).max(0) - } else { - // 7. Else, let targetIndex be min(relativeTarget, len). - relative_target.into_i64().min(len) - }; - // 8. Let relativeStart be ? ToIntegerOrInfinity(start). - // SAFETY: start has not been shared. - let relative_start = - to_integer_or_infinity(agent, unsafe { start.take(agent) }, gc.reborrow()).unbind()?; - let start_index = if relative_start.is_neg_infinity() { - // 9. If relativeStart = -∞, let startIndex be 0 - 0 - } else if relative_start.is_negative() { - // 10. Else if relativeStart < 0, let startIndex be max(len + relativeStart, 0). - (len + relative_start.into_i64()).max(0) - } else { - // 11. Else, let startIndex be min(relativeStart, len). - relative_start.into_i64().min(len) - }; - // 12. If end is undefined, let relativeEnd be len; else let relativeEnd be ? ToIntegerOrInfinity(end). - let end = end.map(|e| unsafe { e.take(agent) }.bind(gc.nogc())); - let end_index = if end.is_none() || end.unwrap().is_undefined() { - len - } else { - let relative_end = - to_integer_or_infinity(agent, end.unwrap().unbind(), gc.reborrow()).unbind()?; - // 13. If relativeEnd = -∞, let endIndex be 0. - if relative_end.is_neg_infinity() { - 0 - } else if relative_end.is_negative() { - // 14. Else if relativeEnd < 0, let endIndex be max(len + relativeEnd, 0). - (len + relative_end.into_i64()).max(0) - } else { - // 15. Else, let endIndex be min(relativeEnd, len). - relative_end.into_i64().min(len) - } - }; - let gc = gc.into_nogc(); - let o = scoped_o.get(agent).bind(gc); - match o { + let scoped_o = o.scope(agent, gc.nogc()).bind(gc.nogc()); + match scoped_o.get(agent) { TypedArray::Int8Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } TypedArray::Uint8Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, - gc, - )?; - } - TypedArray::Uint8ClampedArray(_) => { - copy_within_typed_array::( - agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } + TypedArray::Uint8ClampedArray(_) => copy_within_typed_array::( + agent, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), + gc, + )?, TypedArray::Int16Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } TypedArray::Uint16Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } @@ -984,83 +905,83 @@ impl TypedArrayPrototype { TypedArray::Float16Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } TypedArray::Int32Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } TypedArray::Uint32Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } TypedArray::Float32Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } TypedArray::BigInt64Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } TypedArray::BigUint64Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } TypedArray::Float64Array(_) => { copy_within_typed_array::( agent, - o, - target_index, - start_index, - end_index, - len, + ta_record.unbind(), + scoped_o.clone(), + target.unbind(), + start.unbind(), + end.unbind(), gc, )?; } } // 18. Return O. - Ok(o.into_value()) + Ok(scoped_o.get(agent).into_value()) } /// ### [23.2.3.7 %TypedArray%.prototype.entries ( )](https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries) @@ -2862,52 +2783,23 @@ impl TypedArrayPrototype { let ta_record = validate_typed_array(agent, o, Ordering::SeqCst, gc) .unbind()? .bind(gc); - // 3. Let len be TypedArrayLength(taRecord). let o = ta_record.object; - let len = match o { - TypedArray::Int8Array(_) - | TypedArray::Uint8Array(_) - | TypedArray::Uint8ClampedArray(_) => typed_array_length::(agent, &ta_record, gc), - #[cfg(feature = "proposal-float16array")] - TypedArray::Float16Array(_) => typed_array_length::(agent, &ta_record, gc), - TypedArray::Int16Array(_) | TypedArray::Uint16Array(_) => { - typed_array_length::(agent, &ta_record, gc) - } - TypedArray::Int32Array(_) - | TypedArray::Uint32Array(_) - | TypedArray::Float32Array(_) => typed_array_length::(agent, &ta_record, gc), - TypedArray::BigInt64Array(_) - | TypedArray::BigUint64Array(_) - | TypedArray::Float64Array(_) => typed_array_length::(agent, &ta_record, gc), - } as i64; - // 4. Let middle be floor(len / 2). - // 5. Let lower be 0. - let len = len as usize; - // 6. Repeat, while lower β‰  middle, - // a. Let upper be len - lower - 1. - // b. Let upperP be ! ToString(𝔽(upper)). - // c. Let lowerP be ! ToString(𝔽(lower)). - // d. Let lowerValue be ! Get(O, lowerP). - // e. Let upperValue be ! Get(O, upperP). - // f. Perform ! Set(O, lowerP, upperValue, true). - // g. Perform ! Set(O, upperP, lowerValue, true). - // h. Set lower to lower + 1. match o { - TypedArray::Int8Array(_) => reverse_typed_array::(agent, o, len, gc)?, - TypedArray::Uint8Array(_) => reverse_typed_array::(agent, o, len, gc)?, + TypedArray::Int8Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, + TypedArray::Uint8Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, TypedArray::Uint8ClampedArray(_) => { - reverse_typed_array::(agent, o, len, gc)? + reverse_typed_array::(agent, ta_record, o, gc)? } - TypedArray::Int16Array(_) => reverse_typed_array::(agent, o, len, gc)?, - TypedArray::Uint16Array(_) => reverse_typed_array::(agent, o, len, gc)?, - TypedArray::Int32Array(_) => reverse_typed_array::(agent, o, len, gc)?, - TypedArray::Uint32Array(_) => reverse_typed_array::(agent, o, len, gc)?, - TypedArray::BigInt64Array(_) => reverse_typed_array::(agent, o, len, gc)?, - TypedArray::BigUint64Array(_) => reverse_typed_array::(agent, o, len, gc)?, + TypedArray::Int16Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, + TypedArray::Uint16Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, + TypedArray::Int32Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, + TypedArray::Uint32Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, + TypedArray::BigInt64Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, + TypedArray::BigUint64Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, #[cfg(feature = "proposal-float16array")] - TypedArray::Float16Array(_) => reverse_typed_array::(agent, o, len, gc)?, - TypedArray::Float32Array(_) => reverse_typed_array::(agent, o, len, gc)?, - TypedArray::Float64Array(_) => reverse_typed_array::(agent, o, len, gc)?, + TypedArray::Float16Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, + TypedArray::Float32Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, + TypedArray::Float64Array(_) => reverse_typed_array::(agent, ta_record, o, gc)?, }; // 7. Return O. Ok(o.into_value()) @@ -3307,13 +3199,111 @@ impl TypedArrayPrototype { ) } + /// ### [23.2.3.36 %TypedArray%.prototype.with ( index, value )](https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%typedarray%.prototype.with) fn with<'gc>( agent: &mut Agent, - _this_value: Value, - _: ArgumentsList, + this_value: Value, + arguments: ArgumentsList, gc: GcScope<'gc, '_>, ) -> JsResult<'gc, Value<'gc>> { - Err(agent.todo("TypedArray.prototype.with", gc.into_nogc())) + let this_value = this_value.bind(gc.nogc()); + let index = arguments.get(0).bind(gc.nogc()); + let value = arguments.get(1).bind(gc.nogc()); + // 1. Let O be the this value. + let o = this_value; + // 2. Let taRecord be ? ValidateTypedArray(O, seq-cst). + let ta_record = validate_typed_array(agent, o, Ordering::SeqCst, gc.nogc()) + .unbind()? + .bind(gc.nogc()); + let o = match ta_record.object { + TypedArray::Int8Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::Uint8Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::Uint8ClampedArray(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::Int16Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::Uint16Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::Int32Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::Uint32Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::BigInt64Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::BigUint64Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + #[cfg(feature = "proposal-float16array")] + TypedArray::Float16Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::Float32Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + TypedArray::Float64Array(_) => with_typed_array::( + agent, + ta_record.unbind(), + index.unbind(), + value.unbind(), + gc, + ), + }; + + o.map(|o| o.into_value()) } /// ### [23.2.3.38 get %TypedArray%.prototype \[ %Symbol.toStringTag% \]](https://tc39.es/ecma262/#sec-get-%typedarray%.prototype-%symbol.tostringtag%) @@ -3437,34 +3427,22 @@ pub(crate) fn require_internal_slot_typed_array<'a>( }) } -fn search_typed_element<'a, T: Viewable + std::fmt::Debug, const ASCENDING: bool>( - agent: &mut Agent, - ta: TypedArray, - search_element: Value, - k: usize, - len: usize, +fn viewable_slice<'a, T: Viewable>( + agent: &'a mut Agent, + ta: TypedArray<'a>, gc: NoGcScope<'a, '_>, -) -> JsResult<'a, Option> { - let search_element = T::try_from_value(agent, search_element); - let Some(search_element) = search_element else { - return Ok(None); - }; +) -> JsResult<'a, &'a [T]> { let array_buffer = ta.get_viewed_array_buffer(agent, gc); let byte_offset = ta.byte_offset(agent); let byte_length = ta.byte_length(agent); let byte_slice = array_buffer.as_slice(agent); if byte_slice.is_empty() { - return Ok(None); - } - if byte_offset > byte_slice.len() { - // Start index is out of bounds. - return Ok(None); + return Ok(&[]); } let byte_slice = if let Some(byte_length) = byte_length { let end_index = byte_offset + byte_length; if end_index > byte_slice.len() { - // End index is out of bounds. - return Ok(None); + return Ok(&[]); } &byte_slice[byte_offset..end_index] } else { @@ -3475,12 +3453,55 @@ fn search_typed_element<'a, T: Viewable + std::fmt::Debug, const ASCENDING: bool // guaranteed by align_to itself. let (head, slice, _) = unsafe { byte_slice.align_to::() }; if !head.is_empty() { - return Err(agent.throw_exception_with_static_message( - ExceptionType::TypeError, - "TypedArray is not properly aligned", - gc, - )); + panic!("TypedArray is not properly aligned"); } + Ok(slice) +} + +fn viewable_slice_mut<'a, T: Viewable>( + agent: &'a mut Agent, + ta: TypedArray<'a>, + gc: NoGcScope<'a, '_>, +) -> JsResult<'a, &'a mut [T]> { + let array_buffer = ta.get_viewed_array_buffer(agent, gc); + let byte_offset = ta.byte_offset(agent); + let byte_length = ta.byte_length(agent); + let byte_slice = array_buffer.as_mut_slice(agent); + if byte_slice.is_empty() { + return Ok(&mut []); + } + let byte_slice = if let Some(byte_length) = byte_length { + let end_index = byte_offset + byte_length; + if end_index > byte_slice.len() { + return Ok(&mut []); + } + &mut byte_slice[byte_offset..end_index] + } else { + &mut byte_slice[byte_offset..] + }; + // SAFETY: All bytes in byte_slice are initialized, and all bitwise + // combinations of T are valid values. Alignment of T's is + // guaranteed by align_to_mut itself. + let (head, slice, _) = unsafe { byte_slice.align_to_mut::() }; + if !head.is_empty() { + panic!("TypedArray is not properly aligned"); + } + Ok(slice) +} + +fn search_typed_element<'a, T: Viewable + std::fmt::Debug, const ASCENDING: bool>( + agent: &mut Agent, + ta: TypedArray, + search_element: Value, + k: usize, + len: usize, + gc: NoGcScope<'a, '_>, +) -> JsResult<'a, Option> { + let search_element = T::try_from_value(agent, search_element); + let Some(search_element) = search_element else { + return Ok(None); + }; + let slice = viewable_slice::(agent, ta, gc).unwrap(); // Length of the TypedArray may have changed between when we measured it // and here: We'll never try to access past the boundary of the slice if // the backing ArrayBuffer shrank. @@ -3504,34 +3525,24 @@ fn search_typed_element<'a, T: Viewable + std::fmt::Debug, const ASCENDING: bool fn reverse_typed_array<'a, T: Viewable + Copy + std::fmt::Debug>( agent: &mut Agent, + ta_record: TypedArrayWithBufferWitnessRecords<'_>, ta: TypedArray, - len: usize, gc: NoGcScope<'a, '_>, ) -> JsResult<'a, ()> { - let array_buffer = ta.get_viewed_array_buffer(agent, gc); - let byte_offset = ta.byte_offset(agent); - let byte_length = ta.byte_length(agent); - let byte_slice = array_buffer.as_mut_slice(agent); - if byte_slice.is_empty() { - return Ok(()); - } - let byte_slice = if let Some(byte_length) = byte_length { - let end_index = byte_offset + byte_length; - if end_index > byte_slice.len() { - return Ok(()); - } - &mut byte_slice[byte_offset..end_index] - } else { - &mut byte_slice[byte_offset..] - }; - let (head, slice, _) = unsafe { byte_slice.align_to_mut::() }; - if !head.is_empty() { - return Err(agent.throw_exception_with_static_message( - ExceptionType::TypeError, - "TypedArray is not properly aligned", - gc, - )); - } + // 3. Let len be TypedArrayLength(taRecord). + let len = typed_array_length::(agent, &ta_record, gc); + // 4. Let middle be floor(len / 2). + // 5. Let lower be 0. + // 6. Repeat, while lower β‰  middle, + // a. Let upper be len - lower - 1. + // b. Let upperP be ! ToString(𝔽(upper)). + // c. Let lowerP be ! ToString(𝔽(lower)). + // d. Let lowerValue be ! Get(O, lowerP). + // e. Let upperValue be ! Get(O, upperP). + // f. Perform ! Set(O, lowerP, upperValue, true). + // g. Perform ! Set(O, upperP, lowerValue, true). + // h. Set lower to lower + 1. + let slice = viewable_slice_mut::(agent, ta, gc).unwrap(); let slice = &mut slice[..len]; slice.reverse(); Ok(()) @@ -3539,58 +3550,90 @@ fn reverse_typed_array<'a, T: Viewable + Copy + std::fmt::Debug>( fn copy_within_typed_array<'a, T: Viewable + std::fmt::Debug>( agent: &mut Agent, - ta: TypedArray, - target_index: i64, - start_index: i64, - end_index: i64, - before_len: i64, - gc: NoGcScope<'a, '_>, + ta_record: TypedArrayWithBufferWitnessRecords, + ta: Scoped, + target: Value, + start: Value, + end: Option, + mut gc: GcScope<'a, '_>, ) -> JsResult<'a, ()> { - let end_bound = (end_index - start_index) - .max(0) - .min(before_len - target_index) as usize; - let ta_record = make_typed_array_with_buffer_witness_record(agent, ta, Ordering::SeqCst, gc); - if is_typed_array_out_of_bounds::(agent, &ta_record, gc) { - return Err(agent.throw_exception_with_static_message( - ExceptionType::TypeError, - "Callback is not callable", - gc, - )); - } - let array_buffer = ta.get_viewed_array_buffer(agent, gc); - let len = typed_array_length::(agent, &ta_record, gc) as usize; - let byte_offset = ta.byte_offset(agent); - let byte_length = ta.byte_length(agent); - let byte_slice = array_buffer.as_mut_slice(agent); - if byte_slice.is_empty() { - return Ok(()); - } - if byte_offset > byte_slice.len() { - return Ok(()); - } - let byte_slice = if let Some(byte_length) = byte_length { - let end_index = byte_offset + byte_length; - if end_index > byte_slice.len() { - return Ok(()); - } - &mut byte_slice[byte_offset..end_index] + let target = target.bind(gc.nogc()); + let start = start.bind(gc.nogc()); + let end = end.bind(gc.nogc()); + // 3. Let len be TypedArrayLength(taRecord). + let len = typed_array_length::(agent, &ta_record, gc.nogc()) + .to_i64() + .unwrap(); + let end = end.map(|e| e.scope(agent, gc.nogc())); + let start = start.scope(agent, gc.nogc()); + let target = target.scope(agent, gc.nogc()); + // 4. Let relativeTarget be ? ToIntegerOrInfinity(target). + // SAFETY: target has not been shared. + let relative_target = + to_integer_or_infinity(agent, unsafe { target.take(agent) }, gc.reborrow()).unbind()?; + // 5. If relativeTarget = -∞, let targetIndex be 0. + let target_index = if relative_target.is_neg_infinity() { + 0 + } else if relative_target.is_negative() { + // 6. Else if relativeTarget < 0, let targetIndex be max(len + relativeTarget, 0). + (len + relative_target.into_i64()).max(0) } else { - &mut byte_slice[byte_offset..] + // 7. Else, let targetIndex be min(relativeTarget, len). + relative_target.into_i64().min(len) }; - let (head, slice, _) = unsafe { byte_slice.align_to_mut::() }; - if !head.is_empty() { + // 8. Let relativeStart be ? ToIntegerOrInfinity(start). + // SAFETY: start has not been shared. + let relative_start = + to_integer_or_infinity(agent, unsafe { start.take(agent) }, gc.reborrow()).unbind()?; + let start_index = if relative_start.is_neg_infinity() { + // 9. If relativeStart = -∞, let startIndex be 0 + 0 + } else if relative_start.is_negative() { + // 10. Else if relativeStart < 0, let startIndex be max(len + relativeStart, 0). + (len + relative_start.into_i64()).max(0) + } else { + // 11. Else, let startIndex be min(relativeStart, len). + relative_start.into_i64().min(len) + }; + // 12. If end is undefined, let relativeEnd be len; else let relativeEnd be ? ToIntegerOrInfinity(end). + let end = end.map(|e| unsafe { e.take(agent) }.bind(gc.nogc())); + let end_index = if end.is_none() || end.unwrap().is_undefined() { + len + } else { + let relative_end = + to_integer_or_infinity(agent, end.unwrap().unbind(), gc.reborrow()).unbind()?; + // 13. If relativeEnd = -∞, let endIndex be 0. + if relative_end.is_neg_infinity() { + 0 + } else if relative_end.is_negative() { + // 14. Else if relativeEnd < 0, let endIndex be max(len + relativeEnd, 0). + (len + relative_end.into_i64()).max(0) + } else { + // 15. Else, let endIndex be min(relativeEnd, len). + relative_end.into_i64().min(len) + } + }; + let gc = gc.into_nogc(); + let o = ta.get(agent); + let end_bound = (end_index - start_index).max(0).min(len - target_index) as usize; + let ta_record = make_typed_array_with_buffer_witness_record(agent, o, Ordering::SeqCst, gc); + if is_typed_array_out_of_bounds::(agent, &ta_record, gc) { return Err(agent.throw_exception_with_static_message( ExceptionType::TypeError, - "TypedArray is not properly aligned", + "Callback is not callable", gc, )); } - let slice = &mut slice[..len]; + let after_len = typed_array_length::(agent, &ta_record, gc) as usize; + let slice = viewable_slice_mut::(agent, o, gc).unwrap(); + let slice = &mut slice[..after_len]; let start_bound = start_index as usize; let target_index = target_index as usize; - let before_len = before_len as usize; + let before_len = len as usize; if before_len != slice.len() { - let end_bound = (len - target_index).max(0).min(before_len - target_index); + let end_bound = (after_len - target_index) + .max(0) + .min(before_len - target_index); slice.copy_within(start_bound..end_bound, target_index); return Ok(()); } @@ -3680,35 +3723,7 @@ fn fill_typed_array<'a, T: Viewable>( let k = start_index as usize; // 19. Repeat, while k < endIndex, let value = T::from_ne_value(agent, value); - let array_buffer = ta.get_viewed_array_buffer(agent, gc); - let byte_offset = ta.byte_offset(agent); - let byte_length = ta.byte_length(agent); - let byte_slice = array_buffer.as_mut_slice(agent); - if byte_slice.is_empty() { - return Ok(ta); - } - if byte_offset > byte_slice.len() { - // We shouldn't be out of bounds. - unreachable!(); - } - let byte_slice = if let Some(byte_length) = byte_length { - let end_index = byte_offset + byte_length; - if end_index > byte_slice.len() { - // We shouldn't be out of bounds. - unreachable!() - } - &mut byte_slice[byte_offset..end_index] - } else { - &mut byte_slice[byte_offset..] - }; - let (head, slice, _) = unsafe { byte_slice.align_to_mut::() }; - if !head.is_empty() { - return Err(agent.throw_exception_with_static_message( - ExceptionType::TypeError, - "TypedArray is not properly aligned", - gc, - )); - } + let slice = viewable_slice_mut::(agent, ta, gc).unwrap(); if k >= end_index { return Ok(ta); } @@ -3725,30 +3740,7 @@ fn sort_total_cmp_typed_array<'a, T: Viewable + std::fmt::Debug + Ord>( ) -> JsResult<'a, ()> { let ta = ta_record.object; let len = typed_array_length::(agent, &ta_record, gc); - let array_buffer = ta.get_viewed_array_buffer(agent, gc); - let byte_offset = ta.byte_offset(agent); - let byte_length = ta.byte_length(agent); - let byte_slice = array_buffer.as_mut_slice(agent); - if byte_slice.is_empty() { - return Ok(()); - } - let byte_slice = if let Some(byte_length) = byte_length { - let end_index = byte_offset + byte_length; - if end_index > byte_slice.len() { - return Ok(()); - } - &mut byte_slice[byte_offset..end_index] - } else { - &mut byte_slice[byte_offset..] - }; - let (head, slice, _) = unsafe { byte_slice.align_to_mut::() }; - if !head.is_empty() { - return Err(agent.throw_exception_with_static_message( - ExceptionType::TypeError, - "TypedArray is not properly aligned", - gc, - )); - } + let slice = viewable_slice_mut::(agent, ta, gc).unwrap(); let slice = &mut slice[..len]; slice.sort(); Ok(()) @@ -3838,30 +3830,7 @@ fn sort_ecmascript_cmp_typed_array<'a, T: Viewable + std::fmt::Debug + ECMAScrip ) -> JsResult<'a, ()> { let ta = ta_record.object; let len = typed_array_length::(agent, &ta_record, gc); - let array_buffer = ta.get_viewed_array_buffer(agent, gc); - let byte_offset = ta.byte_offset(agent); - let byte_length = ta.byte_length(agent); - let byte_slice = array_buffer.as_mut_slice(agent); - if byte_slice.is_empty() { - return Ok(()); - } - let byte_slice = if let Some(byte_length) = byte_length { - let end_index = byte_offset + byte_length; - if end_index > byte_slice.len() { - return Ok(()); - } - &mut byte_slice[byte_offset..end_index] - } else { - &mut byte_slice[byte_offset..] - }; - let (head, slice, _) = unsafe { byte_slice.align_to_mut::() }; - if !head.is_empty() { - return Err(agent.throw_exception_with_static_message( - ExceptionType::TypeError, - "TypedArray is not properly aligned", - gc, - )); - } + let slice = viewable_slice_mut::(agent, ta, gc).unwrap(); let slice = &mut slice[..len]; slice.sort_by(|a, b| a.ecmascript_cmp(b)); Ok(()) @@ -3877,30 +3846,7 @@ fn sort_comparator_typed_array<'a, T: Viewable + Copy + std::fmt::Debug>( let ta_record = ta_record.bind(gc.nogc()); let local_ta = ta_record.object; let len = typed_array_length::(agent, &ta_record, gc.nogc()); - let array_buffer = local_ta.get_viewed_array_buffer(agent, gc.nogc()); - let byte_offset = local_ta.byte_offset(agent); - let byte_length = local_ta.byte_length(agent); - let byte_slice = array_buffer.as_slice(agent); - if byte_slice.is_empty() || len == 0 { - return Ok(()); - } - let byte_slice = if let Some(byte_length) = byte_length { - let end_index = byte_offset + byte_length; - if end_index > byte_slice.len() { - return Ok(()); - } - &byte_slice[byte_offset..end_index] - } else { - &byte_slice[byte_offset..] - }; - let (head, slice, _) = unsafe { byte_slice.align_to::() }; - if !head.is_empty() { - return Err(agent.throw_exception_with_static_message( - ExceptionType::TypeError, - "TypedArray is not properly aligned", - gc.into_nogc(), - )); - } + let slice = viewable_slice::(agent, local_ta, gc.nogc()).unwrap(); let slice = &slice[..len]; let mut items: Vec = slice.to_vec(); let mut error: Option = None; @@ -3942,21 +3888,7 @@ fn sort_comparator_typed_array<'a, T: Viewable + Copy + std::fmt::Debug>( if let Some(error) = error { return Err(error); } - let array_buffer = ta.get(agent).get_viewed_array_buffer(agent, gc.nogc()); - let byte_slice = array_buffer.as_mut_slice(agent); - if byte_slice.is_empty() { - return Ok(()); - } - let byte_slice = if let Some(byte_length) = byte_length { - let end_index = byte_offset + byte_length; - if end_index > byte_slice.len() { - return Ok(()); - } - &mut byte_slice[byte_offset..end_index] - } else { - &mut byte_slice[byte_offset..] - }; - let (_, slice, _) = unsafe { byte_slice.align_to_mut::() }; + let slice = viewable_slice_mut::(agent, ta.get(agent), gc.nogc()).unwrap(); let len = len.min(slice.len()); let slice = &mut slice[..len]; let copy_len = items.len().min(len); @@ -4194,3 +4126,95 @@ fn copy_between_same_type_typed_arrays(kept: &[T], byte_slice: &mut let kept = &kept[..len]; slice.copy_from_slice(kept); } + +fn split_typed_array_views<'a, T: Viewable + std::fmt::Debug>( + agent: &'a mut Agent, + a: TypedArray<'a>, + o: TypedArray<'a>, + gc: NoGcScope<'a, '_>, +) -> JsResult<'a, (&'a mut [T], &'a [T])> { + let a_buf = a.get_viewed_array_buffer(agent, gc); + let o_buf = o.get_viewed_array_buffer(agent, gc); + assert!( + !std::ptr::eq( + a_buf.as_slice(agent).as_ptr(), + o_buf.as_slice(agent).as_ptr() + ), + "Must not point to the same buffer" + ); + let a_slice = viewable_slice_mut::(agent, a, gc).unwrap(); + let a_ptr = a_slice.as_mut_ptr(); + let a_len = a_slice.len(); + let o_aligned = viewable_slice::(agent, o, gc).unwrap(); + let a_aligned = unsafe { std::slice::from_raw_parts_mut(a_ptr, a_len) }; + Ok((a_aligned, o_aligned)) +} + +fn with_typed_array<'a, T: Viewable + std::fmt::Debug>( + agent: &mut Agent, + ta_record: TypedArrayWithBufferWitnessRecords, + index: Value, + value: Value, + mut gc: GcScope<'a, '_>, +) -> JsResult<'a, TypedArray<'a>> { + let index = index.bind(gc.nogc()); + let value = value.bind(gc.nogc()); + let o = ta_record.object; + let scoped_value = value.scope(agent, gc.nogc()); + // 4. Let relativeIndex be ? ToIntegerOrInfinity(index). + // 5. If relativeIndex β‰₯ 0, let actualIndex be relativeIndex. + let relative_index = if let Value::Integer(index) = index { + index.into_i64() + } else { + to_integer_or_infinity(agent, index.unbind(), gc.reborrow()) + .unbind()? + .bind(gc.nogc()) + .into_i64() + }; + let numeric_value = scoped_value + .get(agent) + .into_value() + .to_numeric(agent, gc.reborrow()) + .unbind()? + .bind(gc.nogc()); + // 7. If O.[[ContentType]] is bigint, let numericValue be ?Β ToBigInt(value). + let numeric_value = T::from_le_value(agent, numeric_value); + // 3. Let len be TypedArrayLength(taRecord). + let len = typed_array_length::(agent, &ta_record, gc.nogc()) as i64; + // 5. If relativeIndex β‰₯ 0, let actualIndex be relativeIndex. + let actual_index = if relative_index >= 0 { + relative_index + } else { + // 6. Else, let actualIndex be len + relativeIndex. + len + relative_index + }; + // 9. If IsValidIntegerIndex(O, 𝔽(actualIndex)) is false, throw a RangeError exception. + if is_valid_integer_index_generic(agent, o, actual_index, gc.nogc()).is_none() { + return Err(agent.throw_exception_with_static_message( + ExceptionType::RangeError, + "Index out of bounds", + gc.into_nogc(), + )); + } + // 10. Let A be ? TypedArrayCreateSameType(O, Β« 𝔽(len) Β»). + let a = typed_array_create_same_type(agent, o, len, gc.reborrow()) + .unbind()? + .bind(gc.nogc()); + // 11. Let k be 0. + // 12. Repeat, while k < len + // a. Let Pk be ! ToString(𝔽(k)). + // b. If k = actualIndex, let fromValue be numericValue. + // c. Else, let fromValue be ! Get(O, Pk). + // d. Perform ! Set(A, Pk, fromValue, true). + // e. Set k to k + 1. + let (a_slice, o_slice) = split_typed_array_views::(agent, a, o, gc.nogc()).unwrap(); + let len = len as usize; + let a_slice = &mut a_slice[..len]; + let o_slice = &o_slice[..len]; + a_slice.copy_from_slice(o_slice); + if !o_slice.is_empty() && o_slice.len() == len { + a_slice[actual_index as usize] = numeric_value; + } + // 13. Return A. + Ok(a.unbind()) +} diff --git a/tests/expectations.json b/tests/expectations.json index 03595f30d..28f2a8ef9 100644 --- a/tests/expectations.json +++ b/tests/expectations.json @@ -504,7 +504,6 @@ "built-ins/Atomics/pause/descriptor.js": "FAIL", "built-ins/Atomics/pause/length.js": "FAIL", "built-ins/Atomics/pause/name.js": "FAIL", - "built-ins/Atomics/pause/negative-iterationnumber-throws.js": "FAIL", "built-ins/Atomics/pause/not-a-constructor.js": "FAIL", "built-ins/Atomics/pause/returns-undefined.js": "FAIL", "built-ins/Atomics/store/bad-range.js": "FAIL", @@ -870,7 +869,6 @@ "built-ins/Error/isError/prop-desc.js": "FAIL", "built-ins/Error/isError/symbols.js": "FAIL", "built-ins/Error/proto-from-ctor-realm.js": "FAIL", - "built-ins/FinalizationRegistry/gc-has-one-chance-to-call-cleanupCallback-for-object.js": "CRASH", "built-ins/FinalizationRegistry/instance-extensible.js": "FAIL", "built-ins/FinalizationRegistry/is-a-constructor.js": "FAIL", "built-ins/FinalizationRegistry/newtarget-prototype-is-not-object.js": "FAIL", @@ -878,20 +876,6 @@ "built-ins/FinalizationRegistry/prototype-from-newtarget-abrupt.js": "FAIL", "built-ins/FinalizationRegistry/prototype-from-newtarget-custom.js": "FAIL", "built-ins/FinalizationRegistry/prototype-from-newtarget.js": "FAIL", - "built-ins/FinalizationRegistry/prototype/cleanupSome/callback-not-callable-throws.js": "FAIL", - "built-ins/FinalizationRegistry/prototype/cleanupSome/cleanup-prevented-with-reference.js": "CRASH", - "built-ins/FinalizationRegistry/prototype/cleanupSome/cleanup-prevented-with-unregister.js": "CRASH", - "built-ins/FinalizationRegistry/prototype/cleanupSome/custom-this.js": "CRASH", - "built-ins/FinalizationRegistry/prototype/cleanupSome/holdings-multiple-values.js": "CRASH", - "built-ins/FinalizationRegistry/prototype/cleanupSome/length.js": "FAIL", - "built-ins/FinalizationRegistry/prototype/cleanupSome/name.js": "FAIL", - "built-ins/FinalizationRegistry/prototype/cleanupSome/not-a-constructor.js": "FAIL", - "built-ins/FinalizationRegistry/prototype/cleanupSome/prop-desc.js": "FAIL", - "built-ins/FinalizationRegistry/prototype/cleanupSome/reentrancy.js": "CRASH", - "built-ins/FinalizationRegistry/prototype/cleanupSome/return-undefined-with-gc.js": "CRASH", - "built-ins/FinalizationRegistry/prototype/cleanupSome/return-undefined.js": "CRASH", - "built-ins/FinalizationRegistry/prototype/cleanupSome/this-does-not-have-internal-cells-throws.js": "FAIL", - "built-ins/FinalizationRegistry/prototype/cleanupSome/this-not-object-throws.js": "FAIL", "built-ins/FinalizationRegistry/prototype/register/custom-this.js": "FAIL", "built-ins/FinalizationRegistry/prototype/register/heldValue-same-as-target.js": "FAIL", "built-ins/FinalizationRegistry/prototype/register/holdings-any-value-type.js": "FAIL", @@ -911,7 +895,6 @@ "built-ins/FinalizationRegistry/prototype/unregister/this-does-not-have-internal-cells-throws.js": "FAIL", "built-ins/FinalizationRegistry/prototype/unregister/this-not-object-throws.js": "FAIL", "built-ins/FinalizationRegistry/prototype/unregister/throws-when-unregisterToken-cannot-be-held-weakly.js": "FAIL", - "built-ins/FinalizationRegistry/prototype/unregister/unregister-cleaned-up-object-cell.js": "CRASH", "built-ins/FinalizationRegistry/prototype/unregister/unregister-object-token.js": "FAIL", "built-ins/FinalizationRegistry/prototype/unregister/unregister-symbol-token.js": "FAIL", "built-ins/FinalizationRegistry/returns-new-object-from-constructor.js": "FAIL", @@ -2651,7 +2634,6 @@ "built-ins/RegExp/property-escapes/character-class.js": "FAIL", "built-ins/RegExp/property-escapes/generated/ASCII.js": "FAIL", "built-ins/RegExp/property-escapes/generated/ASCII_Hex_Digit.js": "FAIL", - "built-ins/RegExp/property-escapes/generated/Alphabetic.js": "CRASH", "built-ins/RegExp/property-escapes/generated/Any.js": "CRASH", "built-ins/RegExp/property-escapes/generated/Assigned.js": "CRASH", "built-ins/RegExp/property-escapes/generated/Bidi_Control.js": "FAIL", @@ -2686,7 +2668,6 @@ "built-ins/RegExp/property-escapes/generated/General_Category_-_Final_Punctuation.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Format.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Initial_Punctuation.js": "FAIL", - "built-ins/RegExp/property-escapes/generated/General_Category_-_Letter.js": "CRASH", "built-ins/RegExp/property-escapes/generated/General_Category_-_Letter_Number.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Line_Separator.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Lowercase_Letter.js": "FAIL", @@ -2698,7 +2679,6 @@ "built-ins/RegExp/property-escapes/generated/General_Category_-_Number.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Open_Punctuation.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Other.js": "CRASH", - "built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Letter.js": "CRASH", "built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Number.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Punctuation.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Symbol.js": "FAIL", @@ -2711,15 +2691,11 @@ "built-ins/RegExp/property-escapes/generated/General_Category_-_Surrogate.js": "CRASH", "built-ins/RegExp/property-escapes/generated/General_Category_-_Symbol.js": "FAIL", "built-ins/RegExp/property-escapes/generated/General_Category_-_Titlecase_Letter.js": "FAIL", - "built-ins/RegExp/property-escapes/generated/General_Category_-_Unassigned.js": "CRASH", "built-ins/RegExp/property-escapes/generated/General_Category_-_Uppercase_Letter.js": "FAIL", - "built-ins/RegExp/property-escapes/generated/Grapheme_Base.js": "CRASH", "built-ins/RegExp/property-escapes/generated/Grapheme_Extend.js": "FAIL", "built-ins/RegExp/property-escapes/generated/Hex_Digit.js": "FAIL", "built-ins/RegExp/property-escapes/generated/IDS_Binary_Operator.js": "FAIL", "built-ins/RegExp/property-escapes/generated/IDS_Trinary_Operator.js": "FAIL", - "built-ins/RegExp/property-escapes/generated/ID_Continue.js": "CRASH", - "built-ins/RegExp/property-escapes/generated/ID_Start.js": "CRASH", "built-ins/RegExp/property-escapes/generated/Ideographic.js": "FAIL", "built-ins/RegExp/property-escapes/generated/Join_Control.js": "FAIL", "built-ins/RegExp/property-escapes/generated/Logical_Order_Exception.js": "FAIL", @@ -3078,8 +3054,6 @@ "built-ins/RegExp/property-escapes/generated/Uppercase.js": "FAIL", "built-ins/RegExp/property-escapes/generated/Variation_Selector.js": "FAIL", "built-ins/RegExp/property-escapes/generated/White_Space.js": "FAIL", - "built-ins/RegExp/property-escapes/generated/XID_Continue.js": "CRASH", - "built-ins/RegExp/property-escapes/generated/XID_Start.js": "CRASH", "built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-CharacterClass.js": "FAIL", "built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-P.js": "FAIL", "built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-u.js": "FAIL", @@ -3501,7 +3475,6 @@ "built-ins/RegExp/prototype/exec/failure-lastindex-access.js": "FAIL", "built-ins/RegExp/prototype/exec/failure-lastindex-set.js": "FAIL", "built-ins/RegExp/prototype/exec/not-a-constructor.js": "FAIL", - "built-ins/RegExp/prototype/exec/regexp-builtin-exec-v-flag.js": "CRASH", "built-ins/RegExp/prototype/exec/regexp-builtin-exec-v-u-flag.js": "FAIL", "built-ins/RegExp/prototype/exec/success-g-lastindex-no-access.js": "FAIL", "built-ins/RegExp/prototype/exec/success-lastindex-access.js": "FAIL", @@ -4260,7 +4233,6 @@ "built-ins/String/prototype/match/duplicate-named-groups-properties.js": "FAIL", "built-ins/String/prototype/match/duplicate-named-indices-groups-properties.js": "FAIL", "built-ins/String/prototype/match/invoke-builtin-match.js": "CRASH", - "built-ins/String/prototype/match/regexp-prototype-match-v-flag.js": "CRASH", "built-ins/String/prototype/match/regexp-prototype-match-v-u-flag.js": "FAIL", "built-ins/String/prototype/match/this-val-bool.js": "FAIL", "built-ins/String/prototype/match/this-val-obj.js": "FAIL", @@ -4279,7 +4251,6 @@ "built-ins/String/prototype/matchAll/regexp-prototype-has-no-matchAll.js": "FAIL", "built-ins/String/prototype/matchAll/regexp-prototype-matchAll-invocation.js": "FAIL", "built-ins/String/prototype/matchAll/regexp-prototype-matchAll-throws.js": "FAIL", - "built-ins/String/prototype/matchAll/regexp-prototype-matchAll-v-flag.js": "CRASH", "built-ins/String/prototype/matchAll/regexp-prototype-matchAll-v-u-flag.js": "FAIL", "built-ins/String/prototype/matchAll/this-val-non-obj-coercible.js": "FAIL", "built-ins/String/prototype/matchAll/toString-this-val.js": "FAIL", @@ -4310,7 +4281,6 @@ "built-ins/String/prototype/replace/S15.5.4.11_A4_T4.js": "FAIL", "built-ins/String/prototype/replace/S15.5.4.11_A5_T1.js": "FAIL", "built-ins/String/prototype/replace/regexp-capture-by-index.js": "FAIL", - "built-ins/String/prototype/replace/regexp-prototype-replace-v-flag.js": "CRASH", "built-ins/String/prototype/replace/regexp-prototype-replace-v-u-flag.js": "FAIL", "built-ins/String/prototype/replaceAll/getSubstitution-0x0024-0x0024.js": "FAIL", "built-ins/String/prototype/replaceAll/getSubstitution-0x0024-0x0026.js": "FAIL", @@ -4359,7 +4329,6 @@ "built-ins/String/prototype/search/invoke-builtin-search-searcher-undef.js": "CRASH", "built-ins/String/prototype/search/invoke-builtin-search.js": "CRASH", "built-ins/String/prototype/search/regexp-prototype-search-v-flag.js": "FAIL", - "built-ins/String/prototype/search/regexp-prototype-search-v-flag.js.js": "CRASH", "built-ins/String/prototype/search/regexp-prototype-search-v-u-flag.js": "FAIL", "built-ins/String/prototype/search/this-value-not-obj-coercible.js": "FAIL", "built-ins/String/prototype/split/argument-is-new-reg-exp-and-instance-is-string-hello.js": "FAIL", @@ -4934,7 +4903,6 @@ "built-ins/Temporal/Instant/compare/builtin.js": "FAIL", "built-ins/Temporal/Instant/compare/cross-epoch.js": "FAIL", "built-ins/Temporal/Instant/compare/exhaustive.js": "FAIL", - "built-ins/Temporal/Instant/compare/instant-string-limits.js": "FAIL", "built-ins/Temporal/Instant/compare/instant-string-multiple-offsets.js": "FAIL", "built-ins/Temporal/Instant/compare/instant-string-sub-minute-offset.js": "FAIL", "built-ins/Temporal/Instant/compare/instant-string.js": "FAIL", @@ -4964,7 +4932,6 @@ "built-ins/Temporal/Instant/from/argument-zoneddatetime.js": "FAIL", "built-ins/Temporal/Instant/from/basic.js": "FAIL", "built-ins/Temporal/Instant/from/builtin.js": "FAIL", - "built-ins/Temporal/Instant/from/instant-string-limits.js": "FAIL", "built-ins/Temporal/Instant/from/instant-string-multiple-offsets.js": "FAIL", "built-ins/Temporal/Instant/from/instant-string-sub-minute-offset.js": "FAIL", "built-ins/Temporal/Instant/from/instant-string.js": "FAIL", @@ -5052,7 +5019,6 @@ "built-ins/Temporal/Instant/prototype/equals/branding.js": "FAIL", "built-ins/Temporal/Instant/prototype/equals/builtin.js": "FAIL", "built-ins/Temporal/Instant/prototype/equals/cross-epoch.js": "FAIL", - "built-ins/Temporal/Instant/prototype/equals/instant-string-limits.js": "FAIL", "built-ins/Temporal/Instant/prototype/equals/instant-string-multiple-offsets.js": "FAIL", "built-ins/Temporal/Instant/prototype/equals/instant-string-sub-minute-offset.js": "FAIL", "built-ins/Temporal/Instant/prototype/equals/instant-string.js": "FAIL", @@ -5119,7 +5085,6 @@ "built-ins/Temporal/Instant/prototype/since/argument-zoneddatetime.js": "FAIL", "built-ins/Temporal/Instant/prototype/since/branding.js": "FAIL", "built-ins/Temporal/Instant/prototype/since/builtin.js": "FAIL", - "built-ins/Temporal/Instant/prototype/since/instant-string-limits.js": "FAIL", "built-ins/Temporal/Instant/prototype/since/instant-string-multiple-offsets.js": "FAIL", "built-ins/Temporal/Instant/prototype/since/instant-string-sub-minute-offset.js": "FAIL", "built-ins/Temporal/Instant/prototype/since/instant-string.js": "FAIL", @@ -5295,7 +5260,6 @@ "built-ins/Temporal/Instant/prototype/until/argument-zoneddatetime.js": "FAIL", "built-ins/Temporal/Instant/prototype/until/branding.js": "FAIL", "built-ins/Temporal/Instant/prototype/until/builtin.js": "FAIL", - "built-ins/Temporal/Instant/prototype/until/instant-string-limits.js": "FAIL", "built-ins/Temporal/Instant/prototype/until/instant-string-multiple-offsets.js": "FAIL", "built-ins/Temporal/Instant/prototype/until/instant-string-sub-minute-offset.js": "FAIL", "built-ins/Temporal/Instant/prototype/until/instant-string.js": "FAIL", @@ -8984,19 +8948,7 @@ "built-ins/TypedArray/prototype/values/resizable-buffer-grow-mid-iteration.js": "FAIL", "built-ins/TypedArray/prototype/values/resizable-buffer-shrink-mid-iteration.js": "FAIL", "built-ins/TypedArray/prototype/values/resizable-buffer.js": "FAIL", - "built-ins/TypedArray/prototype/with/BigInt/early-type-coercion-bigint.js": "FAIL", - "built-ins/TypedArray/prototype/with/early-type-coercion.js": "FAIL", - "built-ins/TypedArray/prototype/with/ignores-species.js": "FAIL", - "built-ins/TypedArray/prototype/with/immutable.js": "FAIL", - "built-ins/TypedArray/prototype/with/index-bigger-or-eq-than-length.js": "FAIL", - "built-ins/TypedArray/prototype/with/index-casted-to-number.js": "FAIL", - "built-ins/TypedArray/prototype/with/index-negative.js": "FAIL", - "built-ins/TypedArray/prototype/with/index-smaller-than-minus-length.js": "FAIL", - "built-ins/TypedArray/prototype/with/index-validated-against-current-length.js": "FAIL", - "built-ins/TypedArray/prototype/with/length-property-ignored.js": "FAIL", - "built-ins/TypedArray/prototype/with/order-of-evaluation.js": "FAIL", - "built-ins/TypedArray/prototype/with/this-value-invalid.js": "FAIL", - "built-ins/TypedArray/prototype/with/valid-typedarray-index-checked-after-coercions.js": "FAIL", + "built-ins/TypedArray/prototype/with/index-validated-against-current-length.js": "CRASH", "built-ins/TypedArrayConstructors/ctors-bigint/buffer-arg/bufferbyteoffset-throws-from-modulo-element-size-sab.js": "FAIL", "built-ins/TypedArrayConstructors/ctors-bigint/buffer-arg/byteoffset-is-negative-throws-sab.js": "FAIL", "built-ins/TypedArrayConstructors/ctors-bigint/buffer-arg/byteoffset-is-negative-zero-sab.js": "FAIL", @@ -9226,7 +9178,6 @@ "built-ins/WeakRef/prototype-from-newtarget-custom.js": "FAIL", "built-ins/WeakRef/prototype-from-newtarget.js": "FAIL", "built-ins/WeakRef/prototype/deref/custom-this.js": "FAIL", - "built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js": "CRASH", "built-ins/WeakRef/prototype/deref/not-a-constructor.js": "FAIL", "built-ins/WeakRef/prototype/deref/return-object-target.js": "FAIL", "built-ins/WeakRef/prototype/deref/return-symbol-target.js": "FAIL", @@ -9303,12 +9254,6 @@ "built-ins/WeakSet/prototype/has/this-not-object-throw-symbol.js": "FAIL", "built-ins/WeakSet/prototype/has/this-not-object-throw-undefined.js": "FAIL", "built-ins/WeakSet/undefined-newtarget.js": "FAIL", - "built-ins/decodeURI/S15.1.3.1_A1.10_T1.js": "FAIL", - "built-ins/decodeURI/S15.1.3.1_A1.11_T1.js": "FAIL", - "built-ins/decodeURI/S15.1.3.1_A1.11_T2.js": "FAIL", - "built-ins/decodeURI/S15.1.3.1_A1.12_T1.js": "FAIL", - "built-ins/decodeURI/S15.1.3.1_A1.12_T2.js": "FAIL", - "built-ins/decodeURI/S15.1.3.1_A1.12_T3.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A1.13_T1.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A1.13_T2.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A1.14_T1.js": "FAIL", @@ -9322,8 +9267,6 @@ "built-ins/decodeURI/S15.1.3.1_A1.15_T5.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A1.15_T6.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A1.1_T1.js": "FAIL", - "built-ins/decodeURI/S15.1.3.1_A1.2_T1.js": "FAIL", - "built-ins/decodeURI/S15.1.3.1_A1.2_T2.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A1.3_T1.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A1.3_T2.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A1.4_T1.js": "FAIL", @@ -9348,12 +9291,6 @@ "built-ins/decodeURI/S15.1.3.1_A4_T3.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A4_T4.js": "FAIL", "built-ins/decodeURI/S15.1.3.1_A6_T1.js": "FAIL", - "built-ins/decodeURIComponent/S15.1.3.2_A1.10_T1.js": "FAIL", - "built-ins/decodeURIComponent/S15.1.3.2_A1.11_T1.js": "FAIL", - "built-ins/decodeURIComponent/S15.1.3.2_A1.11_T2.js": "FAIL", - "built-ins/decodeURIComponent/S15.1.3.2_A1.12_T1.js": "FAIL", - "built-ins/decodeURIComponent/S15.1.3.2_A1.12_T2.js": "FAIL", - "built-ins/decodeURIComponent/S15.1.3.2_A1.12_T3.js": "FAIL", "built-ins/decodeURIComponent/S15.1.3.2_A1.13_T1.js": "FAIL", "built-ins/decodeURIComponent/S15.1.3.2_A1.13_T2.js": "FAIL", "built-ins/decodeURIComponent/S15.1.3.2_A1.14_T1.js": "FAIL", @@ -9367,8 +9304,6 @@ "built-ins/decodeURIComponent/S15.1.3.2_A1.15_T5.js": "FAIL", "built-ins/decodeURIComponent/S15.1.3.2_A1.15_T6.js": "FAIL", "built-ins/decodeURIComponent/S15.1.3.2_A1.1_T1.js": "FAIL", - "built-ins/decodeURIComponent/S15.1.3.2_A1.2_T1.js": "FAIL", - "built-ins/decodeURIComponent/S15.1.3.2_A1.2_T2.js": "FAIL", "built-ins/decodeURIComponent/S15.1.3.2_A1.3_T1.js": "FAIL", "built-ins/decodeURIComponent/S15.1.3.2_A1.3_T2.js": "FAIL", "built-ins/decodeURIComponent/S15.1.3.2_A1.4_T1.js": "FAIL", @@ -9440,7 +9375,6 @@ "built-ins/global/property-descriptor.js": "FAIL", "built-ins/isFinite/tonumber-operations.js": "FAIL", "built-ins/isNaN/tonumber-operations.js": "FAIL", - "built-ins/parseFloat/S15.1.2.3_A6.js": "TIMEOUT", "harness/assert-throws-same-realm.js": "FAIL", "harness/asyncHelpers-throwsAsync-custom-typeerror.js": "CRASH", "harness/asyncHelpers-throwsAsync-func-throws-sync.js": "CRASH", @@ -12559,27 +12493,6 @@ "language/expressions/dynamic-import/for-await-resolution-and-error-agen-yield.js": "CRASH", "language/expressions/dynamic-import/for-await-resolution-and-error-agen.js": "CRASH", "language/expressions/dynamic-import/for-await-resolution-and-error.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-assert-enumeration-abrupt.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-assert-enumeration-enumerable.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-assert-enumeration.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-assert-non-object.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-assert-undefined.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-assert-value-abrupt.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-assert-value-non-string.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-await-expr.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-await-ident.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-evaluation-abrupt-return.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-evaluation-abrupt-throw.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-evaluation-sequence.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-get-assert-error.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-in.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-non-object.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-trailing-comma-fulfill.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-trailing-comma-reject.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-yield-expr.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/2nd-param-yield-ident-valid.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/trailing-comma-fulfill.js": "CRASH", - "language/expressions/dynamic-import/import-assertions/trailing-comma-reject.js": "CRASH", "language/expressions/dynamic-import/import-attributes/2nd-param-await-expr.js": "CRASH", "language/expressions/dynamic-import/import-attributes/2nd-param-await-ident.js": "CRASH", "language/expressions/dynamic-import/import-attributes/2nd-param-evaluation-abrupt-return.js": "CRASH", @@ -12686,20 +12599,14 @@ "language/expressions/dynamic-import/syntax/valid/nested-async-function-return-await-import-source-script-code-valid.js": "FAIL", "language/expressions/dynamic-import/syntax/valid/nested-async-function-return-await-script-code-valid.js": "FAIL", "language/expressions/dynamic-import/syntax/valid/nested-async-function-script-code-valid.js": "FAIL", - "language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-import-source-script-code-valid.js": "FAIL", "language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-script-code-valid.js": "FAIL", "language/expressions/dynamic-import/syntax/valid/nested-block-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-block-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-block-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-import-source-empty-str-is-valid-assign-expr.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-import-source-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-labeled-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-block-labeled-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-block-labeled-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-labeled-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-labeled-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-labeled-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -12709,8 +12616,6 @@ "language/expressions/dynamic-import/syntax/valid/nested-block-nested-imports.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-block-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-do-while-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-do-while-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-do-while-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-do-while-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-do-while-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-do-while-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -12718,8 +12623,6 @@ "language/expressions/dynamic-import/syntax/valid/nested-do-while-nested-imports.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-do-while-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-braceless-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-else-braceless-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-else-braceless-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-braceless-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-braceless-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-braceless-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -12727,8 +12630,6 @@ "language/expressions/dynamic-import/syntax/valid/nested-else-braceless-nested-imports.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-braceless-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-else-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-else-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-else-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -12740,8 +12641,6 @@ "language/expressions/dynamic-import/syntax/valid/nested-function-return-script-code-valid.js": "FAIL", "language/expressions/dynamic-import/syntax/valid/nested-function-script-code-valid.js": "FAIL", "language/expressions/dynamic-import/syntax/valid/nested-if-braceless-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-if-braceless-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-if-braceless-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-braceless-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-braceless-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-braceless-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -12749,8 +12648,6 @@ "language/expressions/dynamic-import/syntax/valid/nested-if-braceless-nested-imports.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-braceless-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-if-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-if-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -12758,8 +12655,6 @@ "language/expressions/dynamic-import/syntax/valid/nested-if-nested-imports.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-if-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-while-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-while-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-while-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-while-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-while-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-while-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -12768,16 +12663,12 @@ "language/expressions/dynamic-import/syntax/valid/nested-while-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-empty-str-is-valid-assign-expr.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-expression-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-with-expression-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-with-expression-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-expression-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-expression-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-expression-import-source-empty-str-is-valid-assign-expr.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-expression-import-source-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-expression-nested-imports.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-expression-script-code-valid.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-with-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/nested-with-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/nested-with-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -12786,8 +12677,6 @@ "language/expressions/dynamic-import/syntax/valid/nested-with-script-code-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/new-covered-expression-is-valid.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/top-level-empty-str-is-valid-assign-expr.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/top-level-import-assertions-trailing-comma-first.js": "CRASH", - "language/expressions/dynamic-import/syntax/valid/top-level-import-assertions-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/top-level-import-attributes-trailing-comma-first.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/top-level-import-attributes-trailing-comma-second.js": "CRASH", "language/expressions/dynamic-import/syntax/valid/top-level-import-source-empty-str-is-valid-assign-expr.js": "CRASH", @@ -13476,10 +13365,7 @@ "language/identifiers/part-unicode-15.0.0-class.js": "CRASH", "language/identifiers/part-unicode-15.1.0-class-escaped.js": "CRASH", "language/identifiers/part-unicode-15.1.0-class.js": "CRASH", - "language/identifiers/part-unicode-16.0.0-class-escaped.js": "TIMEOUT", - "language/identifiers/part-unicode-16.0.0-class.js": "FAIL", - "language/identifiers/part-unicode-16.0.0-escaped.js": "TIMEOUT", - "language/identifiers/part-unicode-16.0.0.js": "FAIL", + "language/identifiers/part-unicode-16.0.0-class.js": "CRASH", "language/identifiers/part-unicode-5.2.0-class-escaped.js": "CRASH", "language/identifiers/part-unicode-5.2.0-class.js": "CRASH", "language/identifiers/part-unicode-6.0.0-class-escaped.js": "CRASH", @@ -13506,10 +13392,7 @@ "language/identifiers/start-unicode-15.0.0-class.js": "CRASH", "language/identifiers/start-unicode-15.1.0-class-escaped.js": "CRASH", "language/identifiers/start-unicode-15.1.0-class.js": "CRASH", - "language/identifiers/start-unicode-16.0.0-class-escaped.js": "TIMEOUT", - "language/identifiers/start-unicode-16.0.0-class.js": "FAIL", - "language/identifiers/start-unicode-16.0.0-escaped.js": "TIMEOUT", - "language/identifiers/start-unicode-16.0.0.js": "FAIL", + "language/identifiers/start-unicode-16.0.0-class.js": "CRASH", "language/identifiers/start-unicode-5.2.0-class-escaped.js": "CRASH", "language/identifiers/start-unicode-5.2.0-class.js": "CRASH", "language/identifiers/start-unicode-6.0.0-class-escaped.js": "CRASH", @@ -17969,98 +17852,6 @@ "language/statements/with/unscopables-not-referenced-for-undef.js": "CRASH", "language/statements/with/unscopables-prop-get-err.js": "CRASH", "language/types/string/S8.4_A8.js": "FAIL", - "staging/ArrayBuffer/resizable/access-out-of-bounds-typed-array.js": "CRASH", - "staging/ArrayBuffer/resizable/array-fill-parameter-conversion-resizes.js": "CRASH", - "staging/ArrayBuffer/resizable/array-sort-with-default-comparison.js": "CRASH", - "staging/ArrayBuffer/resizable/at-parameter-conversion-resizes.js": "CRASH", - "staging/ArrayBuffer/resizable/at.js": "CRASH", - "staging/ArrayBuffer/resizable/construct-from-typed-array.js": "CRASH", - "staging/ArrayBuffer/resizable/construct-invalid.js": "CRASH", - "staging/ArrayBuffer/resizable/copy-within-parameter-conversion-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/copy-within-parameter-conversion-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/destructuring.js": "CRASH", - "staging/ArrayBuffer/resizable/entries-keys-values-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/entries-keys-values-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/entries-keys-values.js": "CRASH", - "staging/ArrayBuffer/resizable/enumerate-elements.js": "CRASH", - "staging/ArrayBuffer/resizable/every-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/every-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/every-some.js": "CRASH", - "staging/ArrayBuffer/resizable/fill-parameter-conversion-resizes.js": "CRASH", - "staging/ArrayBuffer/resizable/filter-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/filter-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/filter.js": "CRASH", - "staging/ArrayBuffer/resizable/find-find-index-find-last-find-last-index.js": "CRASH", - "staging/ArrayBuffer/resizable/find-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/find-index-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/find-index-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/find-last-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/find-last-index-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/find-last-index-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/find-last-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/find-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/for-each-reduce-reduce-right-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/for-each-reduce-reduce-right-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/for-each-reduce-reduce-right.js": "CRASH", - "staging/ArrayBuffer/resizable/function-apply.js": "CRASH", - "staging/ArrayBuffer/resizable/includes-parameter-conversion-resizes.js": "CRASH", - "staging/ArrayBuffer/resizable/includes-special-values.js": "CRASH", - "staging/ArrayBuffer/resizable/includes.js": "CRASH", - "staging/ArrayBuffer/resizable/index-of-last-index-of-special-values.js": "CRASH", - "staging/ArrayBuffer/resizable/index-of-last-index-of.js": "CRASH", - "staging/ArrayBuffer/resizable/index-of-parameter-conversion-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/index-of-parameter-conversion-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/iterate-typed-array-and-grow-just-before-iteration-would-end.js": "CRASH", - "staging/ArrayBuffer/resizable/iterate-typed-array-and-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/iterate-typed-array-and-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/iterate-typed-array-and-shrink-to-zero-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/iterate-typed-array.js": "CRASH", - "staging/ArrayBuffer/resizable/join-parameter-conversion-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/join-parameter-conversion-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/join-to-locale-string.js": "CRASH", - "staging/ArrayBuffer/resizable/last-index-of-parameter-conversion-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/last-index-of-parameter-conversion-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/length-tracking-1.js": "CRASH", - "staging/ArrayBuffer/resizable/length-tracking-2.js": "CRASH", - "staging/ArrayBuffer/resizable/map-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/map-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/map-species-create-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/map-species-create-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/object-define-property-define-properties.js": "CRASH", - "staging/ArrayBuffer/resizable/object-define-property-parameter-conversion-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/object-define-property-parameter-conversion-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/object-freeze.js": "CRASH", - "staging/ArrayBuffer/resizable/oobbehaves-like-detached.js": "CRASH", - "staging/ArrayBuffer/resizable/out-of-bounds-typed-array-and-has.js": "CRASH", - "staging/ArrayBuffer/resizable/reverse.js": "CRASH", - "staging/ArrayBuffer/resizable/set-grow-target-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/set-shrink-target-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/set-source-length-getter-grows-target.js": "CRASH", - "staging/ArrayBuffer/resizable/set-source-length-getter-shrinks-target.js": "CRASH", - "staging/ArrayBuffer/resizable/set-with-resizable-source.js": "CRASH", - "staging/ArrayBuffer/resizable/set-with-resizable-target.js": "CRASH", - "staging/ArrayBuffer/resizable/slice-parameter-conversion-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/slice-parameter-conversion-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/slice-species-create-resizes.js": "CRASH", - "staging/ArrayBuffer/resizable/slice.js": "CRASH", - "staging/ArrayBuffer/resizable/some-grow-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/some-shrink-mid-iteration.js": "CRASH", - "staging/ArrayBuffer/resizable/sort-callback-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/sort-callback-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/sort-with-custom-comparison.js": "CRASH", - "staging/ArrayBuffer/resizable/sort-with-default-comparison.js": "CRASH", - "staging/ArrayBuffer/resizable/subarray-parameter-conversion-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/subarray-parameter-conversion-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/subarray.js": "CRASH", - "staging/ArrayBuffer/resizable/test-copy-within.js": "CRASH", - "staging/ArrayBuffer/resizable/test-fill.js": "CRASH", - "staging/ArrayBuffer/resizable/test-map.js": "CRASH", - "staging/ArrayBuffer/resizable/to-locale-string-number-prototype-to-locale-string-grows.js": "CRASH", - "staging/ArrayBuffer/resizable/to-locale-string-number-prototype-to-locale-string-shrinks.js": "CRASH", - "staging/ArrayBuffer/resizable/typed-array-length-and-byte-length.js": "CRASH", - "staging/ArrayBuffer/resizable/typed-array-length-when-resized-out-of-bounds-1.js": "CRASH", - "staging/ArrayBuffer/resizable/typed-array-length-when-resized-out-of-bounds-2.js": "CRASH", - "staging/ArrayBuffer/resizable/typed-array-prototype.js": "CRASH", "staging/Intl402/Temporal/old/addition-across-lunisolar-leap-months.js": "FAIL", "staging/Intl402/Temporal/old/date-time-format.js": "FAIL", "staging/Intl402/Temporal/old/date-toLocaleString.js": "FAIL", @@ -18087,25 +17878,10 @@ "staging/Intl402/Temporal/old/zdt-tostring.js": "FAIL", "staging/Intl402/Temporal/old/zdt-with.js": "FAIL", "staging/Intl402/Temporal/old/zoneddatetime-dst-corner-cases.js": "FAIL", - "staging/JSON/json-parse-with-source-snapshot.js": "CRASH", - "staging/JSON/json-parse-with-source.js": "FAIL", "staging/Temporal/Duration/old/accepts-datetime-strings-or-fields-for-relativeTo.js": "FAIL", "staging/Temporal/Duration/old/balances-differently-depending-on-relativeto.js": "FAIL", "staging/Temporal/Duration/old/balances-up-to-next-unit-after-rounding.js": "FAIL", - "staging/Temporal/Duration/old/compare-no-precision-loss.js": "FAIL", - "staging/Temporal/Duration/old/limits.js": "FAIL", "staging/Temporal/Duration/old/relativeto-not-required-to-round-fixed-length-units-in-durations-without-variable-units.js": "FAIL", - "staging/Temporal/Duration/old/round.js": "FAIL", - "staging/Temporal/Duration/old/toString.js": "FAIL", - "staging/Temporal/Duration/old/total.js": "FAIL", - "staging/Temporal/Instant/old/add.js": "FAIL", - "staging/Temporal/Instant/old/compare.js": "FAIL", - "staging/Temporal/Instant/old/equals.js": "FAIL", - "staging/Temporal/Instant/old/limits.js": "FAIL", - "staging/Temporal/Instant/old/round.js": "FAIL", - "staging/Temporal/Instant/old/since.js": "FAIL", - "staging/Temporal/Instant/old/toZonedDateTimeISO.js": "FAIL", - "staging/Temporal/Instant/old/until.js": "FAIL", "staging/Temporal/Regex/old/duration.js": "FAIL", "staging/Temporal/Regex/old/instant.js": "FAIL", "staging/Temporal/Regex/old/plaindate.js": "FAIL", @@ -18113,26 +17889,6 @@ "staging/Temporal/Regex/old/plainmonthday.js": "FAIL", "staging/Temporal/Regex/old/plaintime.js": "FAIL", "staging/Temporal/Regex/old/plainyearmonth.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/add.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/compare.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/construction-and-properties.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/date-time-hours-overflow.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/equals.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/order-of-operations.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/property-bags.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/reversibility-of-differences.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/round.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/since.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/string-parsing.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/subtract.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/toInstant.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/toPlainDate.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/toPlainTime.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/toString.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/until.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/with.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/withPlainTime.js": "FAIL", - "staging/Temporal/ZonedDateTime/old/withTimezone.js": "FAIL", "staging/Temporal/removed-methods.js": "FAIL", "staging/built-ins/Object/preventExtensions/preventExtensions-variable-length-typed-arrays.js": "FAIL", "staging/built-ins/Object/seal/seal-variable-length-typed-arrays.js": "FAIL", @@ -18201,14 +17957,11 @@ "staging/sm/Array/isArray.js": "FAIL", "staging/sm/Array/length-01.js": "FAIL", "staging/sm/Array/length-nonwritable-redefine-nop.js": "FAIL", - "staging/sm/Array/length-truncate-nonconfigurable-sparse.js": "TIMEOUT", "staging/sm/Array/length-truncate-nonconfigurable.js": "FAIL", - "staging/sm/Array/length-truncate-with-indexed.js": "TIMEOUT", "staging/sm/Array/redefine-nonwritable-length-custom-conversion-call-counts.js": "FAIL", "staging/sm/Array/redefine-nonwritable-length-nonnumeric.js": "FAIL", "staging/sm/Array/set-with-indexed-property-on-prototype-chain.js": "FAIL", "staging/sm/Array/sort-non-function.js": "FAIL", - "staging/sm/Array/sort_small.js": "TIMEOUT", "staging/sm/Array/species.js": "FAIL", "staging/sm/Array/toLocaleString-01.js": "FAIL", "staging/sm/Array/toLocaleString-nointl.js": "FAIL", @@ -18362,7 +18115,6 @@ "staging/sm/Iterator/prototype/take/name.js": "FAIL", "staging/sm/Iterator/prototype/take/take-more-than-available.js": "FAIL", "staging/sm/Iterator/prototype/toArray/create-in-current-realm.js": "FAIL", - "staging/sm/JSON/parse-reviver-array-delete.js": "TIMEOUT", "staging/sm/JSON/parse-with-source.js": "FAIL", "staging/sm/JSON/stringify-gap.js": "FAIL", "staging/sm/JSON/stringify-replacer-array-edgecase-jsid-elements.js": "FAIL", @@ -18424,7 +18176,6 @@ "staging/sm/Proxy/getPrototypeOf.js": "FAIL", "staging/sm/Proxy/hasInstance.js": "FAIL", "staging/sm/Proxy/json-stringify-replacer-array-revocable-proxy.js": "FAIL", - "staging/sm/Proxy/ownkeys-linear.js": "TIMEOUT", "staging/sm/Proxy/proxy-__proto__.js": "FAIL", "staging/sm/Proxy/proxy-no-receiver-overwrite.js": "CRASH", "staging/sm/Proxy/proxy-with-revoked-arguments.js": "FAIL", @@ -18549,7 +18300,6 @@ "staging/sm/String/match-updates-global-lastIndex.js": "FAIL", "staging/sm/String/match.js": "FAIL", "staging/sm/String/matchAll.js": "CRASH", - "staging/sm/String/normalize-generateddata-input.js": "TIMEOUT", "staging/sm/String/raw.js": "FAIL", "staging/sm/String/regress-369778.js": "FAIL", "staging/sm/String/replace-bad-dollar-single-quote.js": "FAIL", @@ -18699,7 +18449,6 @@ "staging/sm/class/bytecodePatternMatching.js": "FAIL", "staging/sm/class/className.js": "FAIL", "staging/sm/class/compPropDestr.js": "CRASH", - "staging/sm/class/compPropNames.js": "TIMEOUT", "staging/sm/class/derivedConstructorArrowEvalNestedSuperCall.js": "FAIL", "staging/sm/class/derivedConstructorArrowEvalSuperCall.js": "FAIL", "staging/sm/class/extendBuiltinConstructors.js": "FAIL", @@ -18905,7 +18654,6 @@ "staging/sm/regress/regress-596103.js": "FAIL", "staging/sm/regress/regress-602621.js": "FAIL", "staging/sm/regress/regress-609617.js": "FAIL", - "staging/sm/regress/regress-610026.js": "TIMEOUT", "staging/sm/regress/regress-665355.js": "FAIL", "staging/sm/regress/regress-672892.js": "CRASH", "staging/sm/statements/for-in-with-gc-and-unvisited-deletion.js": "FAIL", diff --git a/tests/metrics.json b/tests/metrics.json index d6aac0ebd..c3d2a8ae4 100644 --- a/tests/metrics.json +++ b/tests/metrics.json @@ -1,8 +1,8 @@ { "results": { - "crash": 7312, - "fail": 11377, - "pass": 28031, + "crash": 7315, + "fail": 11362, + "pass": 28043, "skip": 81, "timeout": 0, "unresolved": 0