From 24a548933162c45c78a6f4eff29e2a2ccc947332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Csaba=20Osztrogon=C3=A1c?= Date: Tue, 27 Oct 2020 10:37:50 +0100 Subject: [PATCH] Implement ToIndex abstract operation (#4287) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.ecma-international.org/ecma-262/11.0/#sec-toindex Made DataView constructor, DataView.prototype.setXXX/getXXX methods ES11 conform. JerryScript-DCO-1.0-Signed-off-by: Csaba Osztrogonác csaba.osztrogonac@h-lab.eu --- .../ecma-builtin-dataview-prototype.inc.h | 16 +-- .../ecma-builtin-dataview.inc.h | 2 +- jerry-core/ecma/operations/ecma-conversion.c | 40 ++++++ jerry-core/ecma/operations/ecma-conversion.h | 1 + .../ecma/operations/ecma-dataview-object.c | 134 +++++++++--------- tests/jerry/es.next/dataview.js | 96 +++++-------- tests/test262-esnext-excludelist.xml | 54 ------- 7 files changed, 153 insertions(+), 190 deletions(-) diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.inc.h index 158c78888..8f5042d0e 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.inc.h @@ -46,16 +46,16 @@ ROUTINE (LIT_MAGIC_STRING_GET_INT32_UL, ECMA_DATAVIEW_PROTOTYPE_GET_INT32, 2, 1) ROUTINE (LIT_MAGIC_STRING_GET_UINT8_UL, ECMA_DATAVIEW_PROTOTYPE_GET_UINT8, 2, 1) ROUTINE (LIT_MAGIC_STRING_GET_UINT16_UL, ECMA_DATAVIEW_PROTOTYPE_GET_UINT16, 2, 1) ROUTINE (LIT_MAGIC_STRING_GET_UINT32_UL, ECMA_DATAVIEW_PROTOTYPE_GET_UINT32, 2, 1) -ROUTINE (LIT_MAGIC_STRING_SET_FLOAT_32_UL, ECMA_DATAVIEW_PROTOTYPE_SET_FLOAT32, 2, 1) +ROUTINE (LIT_MAGIC_STRING_SET_FLOAT_32_UL, ECMA_DATAVIEW_PROTOTYPE_SET_FLOAT32, 2, 2) #if ENABLED (JERRY_NUMBER_TYPE_FLOAT64) -ROUTINE (LIT_MAGIC_STRING_SET_FLOAT_64_UL, ECMA_DATAVIEW_PROTOTYPE_SET_FLOAT64, 2, 1) +ROUTINE (LIT_MAGIC_STRING_SET_FLOAT_64_UL, ECMA_DATAVIEW_PROTOTYPE_SET_FLOAT64, 2, 2) #endif /* ENABLED (JERRY_NUMBER_TYPE_FLOAT64) */ -ROUTINE (LIT_MAGIC_STRING_SET_INT8_UL, ECMA_DATAVIEW_PROTOTYPE_SET_INT8, 1, 1) -ROUTINE (LIT_MAGIC_STRING_SET_INT16_UL, ECMA_DATAVIEW_PROTOTYPE_SET_INT16, 2, 1) -ROUTINE (LIT_MAGIC_STRING_SET_INT32_UL, ECMA_DATAVIEW_PROTOTYPE_SET_INT32, 2, 1) -ROUTINE (LIT_MAGIC_STRING_SET_UINT8_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT8, 2, 1) -ROUTINE (LIT_MAGIC_STRING_SET_UINT16_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT16, 2, 1) -ROUTINE (LIT_MAGIC_STRING_SET_UINT32_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT32, 2, 1) +ROUTINE (LIT_MAGIC_STRING_SET_INT8_UL, ECMA_DATAVIEW_PROTOTYPE_SET_INT8, 1, 2) +ROUTINE (LIT_MAGIC_STRING_SET_INT16_UL, ECMA_DATAVIEW_PROTOTYPE_SET_INT16, 2, 2) +ROUTINE (LIT_MAGIC_STRING_SET_INT32_UL, ECMA_DATAVIEW_PROTOTYPE_SET_INT32, 2, 2) +ROUTINE (LIT_MAGIC_STRING_SET_UINT8_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT8, 2, 2) +ROUTINE (LIT_MAGIC_STRING_SET_UINT16_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT16, 2, 2) +ROUTINE (LIT_MAGIC_STRING_SET_UINT32_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT32, 2, 2) /* ECMA-262 v6, 24.2.4.1 */ ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_BUFFER, diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview.inc.h index 59f3ceaa4..0958a4e01 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview.inc.h @@ -26,7 +26,7 @@ /* ECMA-262 v6, 23.1.2 */ NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, - 3, + 1, ECMA_PROPERTY_FLAG_CONFIGURABLE) /* ECMA-262 v6, 23.1 */ diff --git a/jerry-core/ecma/operations/ecma-conversion.c b/jerry-core/ecma/operations/ecma-conversion.c index ceda55ba2..5e945e408 100644 --- a/jerry-core/ecma/operations/ecma-conversion.c +++ b/jerry-core/ecma/operations/ecma-conversion.c @@ -1011,6 +1011,46 @@ ecma_op_to_length (ecma_value_t value, /**< ecma value */ } /* ecma_op_to_length */ #if ENABLED (JERRY_ESNEXT) +/** + * ToIndex operation. + * + * See also: + * ECMA-262 v11, 7.1.22 + * + * @return ECMA_VALUE_EMPTY if successful + * conversion error otherwise + */ +ecma_value_t +ecma_op_to_index (ecma_value_t value, /**< ecma value */ + ecma_number_t *index) /**< [out] ecma number */ +{ + /* 1. */ + if (ecma_is_value_undefined (value)) + { + *index = 0; + return ECMA_VALUE_EMPTY; + } + + /* 2.a */ + ecma_number_t integer_index; + ecma_value_t index_value = ecma_op_to_integer (value, &integer_index); + + if (ECMA_IS_VALUE_ERROR (index_value)) + { + return index_value; + } + + /* 2.b - 2.d */ + if (integer_index < 0.0f || integer_index > ECMA_NUMBER_MAX_SAFE_INTEGER) + { + return ecma_raise_range_error (ECMA_ERR_MSG ("Invalid or out-of-range index")); + } + + /* 3. */ + *index = integer_index; + return ECMA_VALUE_EMPTY; +} /* ecma_op_to_index */ + /** * CreateListFromArrayLike operation. * Different types are not handled yet. diff --git a/jerry-core/ecma/operations/ecma-conversion.h b/jerry-core/ecma/operations/ecma-conversion.h index 8580b1b6b..1a53da34c 100644 --- a/jerry-core/ecma/operations/ecma-conversion.h +++ b/jerry-core/ecma/operations/ecma-conversion.h @@ -62,6 +62,7 @@ bool ecma_op_is_integer (ecma_number_t value); ecma_value_t ecma_op_to_integer (ecma_value_t value, ecma_number_t *number_p); ecma_value_t ecma_op_to_length (ecma_value_t value, ecma_length_t *length); #if ENABLED (JERRY_ESNEXT) +ecma_value_t ecma_op_to_index (ecma_value_t value, ecma_number_t *index); ecma_collection_t *ecma_op_create_list_from_array_like (ecma_value_t arr, bool prop_names_only); #endif /* ENABLED (JERRY_ESNEXT) */ diff --git a/jerry-core/ecma/operations/ecma-dataview-object.c b/jerry-core/ecma/operations/ecma-dataview-object.c index 2b2cc06fe..df6c03604 100644 --- a/jerry-core/ecma/operations/ecma-dataview-object.c +++ b/jerry-core/ecma/operations/ecma-dataview-object.c @@ -37,7 +37,7 @@ * Handle calling [[Construct]] of built-in DataView like objects * * See also: - * ECMA-262 v6, 24.2.2.1 + * ECMA-262 v11, 24.3.2.1 * * @return created DataView object as an ecma-value - if success * raised error - otherwise @@ -59,81 +59,67 @@ ecma_op_dataview_create (const ecma_value_t *arguments_list_p, /**< arguments li ecma_object_t *buffer_p = ecma_get_object_from_value (buffer); - /* 3. */ if (!ecma_object_class_is (buffer_p, LIT_MAGIC_STRING_ARRAY_BUFFER_UL)) { return ecma_raise_type_error (ECMA_ERR_MSG ("Argument buffer is not an arraybuffer.")); } - /* 4 - 6. */ - uint32_t offset = 0; + /* 3. */ + ecma_number_t offset = 0; if (arguments_list_len > 1) { - ecma_number_t number_offset, offset_num; - if (ECMA_IS_VALUE_ERROR (ecma_op_to_number (arguments_list_p[1], &number_offset))) + ecma_value_t offset_value = ecma_op_to_index (arguments_list_p[1], &offset); + if (ECMA_IS_VALUE_ERROR (offset_value)) { - return ECMA_VALUE_ERROR; + return offset_value; } - if (ECMA_IS_VALUE_ERROR (ecma_op_to_integer (arguments_list_p[1], &offset_num))) - { - return ECMA_VALUE_ERROR; - } - - /* 7. */ - if (number_offset != offset_num || offset_num < 0) - { - return ecma_raise_range_error (ECMA_ERR_MSG ("Start offset is outside the bounds of the buffer.")); - } - - offset = (uint32_t) offset_num; } - /* 8. */ + /* 4. */ if (ecma_arraybuffer_is_detached (buffer_p)) { return ecma_raise_type_error (ECMA_ERR_MSG ("ArrayBuffer has been detached.")); } - /* 9. */ - uint32_t buffer_byte_length = ecma_arraybuffer_get_length (buffer_p); + /* 5. */ + ecma_number_t buffer_byte_length = ecma_arraybuffer_get_length (buffer_p); - /* 10. */ + /* 6. */ if (offset > buffer_byte_length) { return ecma_raise_range_error (ECMA_ERR_MSG ("Start offset is outside the bounds of the buffer.")); } - /* 11 - 12. */ + /* 7. */ uint32_t view_byte_length; if (arguments_list_len > 2 && !ecma_is_value_undefined (arguments_list_p[2])) { - /* 12.a */ - ecma_length_t view_byte_to_length; - ecma_value_t byte_length_value = ecma_op_to_length (arguments_list_p[2], &view_byte_to_length); + /* 8.a */ + ecma_number_t byte_length_to_index; + ecma_value_t byte_length_value = ecma_op_to_index (arguments_list_p[2], &byte_length_to_index); - /* 12.b */ if (ECMA_IS_VALUE_ERROR (byte_length_value)) { return byte_length_value; } - /* 12.c */ - if ((ecma_number_t) offset + (ecma_number_t) view_byte_to_length > buffer_byte_length) + /* 8.b */ + if (offset + byte_length_to_index > buffer_byte_length) { return ecma_raise_range_error (ECMA_ERR_MSG ("Start offset is outside the bounds of the buffer.")); } - JERRY_ASSERT (view_byte_to_length <= UINT32_MAX); - view_byte_length = (uint32_t) view_byte_to_length; + JERRY_ASSERT (byte_length_to_index <= UINT32_MAX); + view_byte_length = (uint32_t) byte_length_to_index; } else { - /* 11.a */ + /* 7.a */ view_byte_length = (uint32_t) (buffer_byte_length - offset); } - /* 13. */ + /* 9. */ ecma_object_t *prototype_obj_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target), ECMA_BUILTIN_ID_DATAVIEW_PROTOTYPE); if (JERRY_UNLIKELY (prototype_obj_p == NULL)) @@ -141,17 +127,28 @@ ecma_op_dataview_create (const ecma_value_t *arguments_list_p, /**< arguments li return ECMA_VALUE_ERROR; } + /* 10. */ + if (ecma_arraybuffer_is_detached (buffer_p)) + { + ecma_deref_object (prototype_obj_p); + return ecma_raise_type_error (ECMA_ERR_MSG ("ArrayBuffer has been detached.")); + } + + /* 9. */ + /* It must happen after 10., because uninitialized object can't be destroyed properly. */ ecma_object_t *object_p = ecma_create_object (prototype_obj_p, sizeof (ecma_dataview_object_t), ECMA_OBJECT_TYPE_CLASS); + ecma_deref_object (prototype_obj_p); + + /* 11 - 14. */ ecma_dataview_object_t *dataview_obj_p = (ecma_dataview_object_t *) object_p; dataview_obj_p->header.u.class_prop.class_id = LIT_MAGIC_STRING_DATAVIEW_UL; dataview_obj_p->header.u.class_prop.u.length = view_byte_length; dataview_obj_p->buffer_p = buffer_p; dataview_obj_p->byte_offset = (uint32_t) offset; - ecma_deref_object (prototype_obj_p); return ecma_make_object_value (object_p); } /* ecma_op_dataview_create */ @@ -234,8 +231,8 @@ ecma_dataview_swap_order (bool system_is_little_endian, /**< true - if the syste * GetViewValue and SetViewValue abstact operation * * See also: - * ECMA-262 v6, 24.2.1.1 - * ECMA-262 v6, 24.2.1.2 + * ECMA-262 v11, 24.3.1.1 + * ECMA-262 v11, 24.3.1.2 * * @return ecma value */ @@ -255,57 +252,64 @@ ecma_op_dataview_get_set_view_value (ecma_value_t view, /**< the operation's 'vi return ECMA_VALUE_ERROR; } - /* 3 - 5. */ - ecma_number_t number_index; - ecma_value_t number_index_value = ecma_op_to_integer (request_index, &number_index); + ecma_object_t *buffer_p = view_p->buffer_p; + JERRY_ASSERT (ecma_object_class_is (buffer_p, LIT_MAGIC_STRING_ARRAY_BUFFER_UL)); + + /* 3. */ + ecma_number_t get_index; + ecma_value_t number_index_value = ecma_op_to_index (request_index, &get_index); if (ECMA_IS_VALUE_ERROR (number_index_value)) { return number_index_value; } - int32_t get_index = ecma_number_to_int32 (number_index); + /* TODO: Add BigInt support for SetViewValue 4 - 5. */ - /* 6. */ - if (number_index != get_index || get_index < 0) + /* SetViewValue 5. */ + ecma_number_t value_to_set_number = 0; + if (!ecma_is_value_empty (value_to_set)) { - return ecma_raise_range_error (ECMA_ERR_MSG ("Start offset is outside the bounds of the buffer.")); + ecma_value_t value; + value = ecma_op_to_number (value_to_set, &value_to_set_number); + + if (ECMA_IS_VALUE_ERROR (value)) + { + return value; + } } - /* 7. */ + /* GetViewValue 4., SetViewValue 6. */ bool is_little_endian = ecma_op_to_boolean (is_little_endian_value); - /* 8. TODO: Throw TypeError, when Detached ArrayBuffer will be supported. */ - - /* 9. */ - ecma_object_t *buffer_p = view_p->buffer_p; - JERRY_ASSERT (ecma_object_class_is (buffer_p, LIT_MAGIC_STRING_ARRAY_BUFFER_UL)); + /* GetViewValue 5 - 6., SetViewValue 7 - 8. */ if (ecma_arraybuffer_is_detached (buffer_p)) { return ecma_raise_type_error (ECMA_ERR_MSG ("ArrayBuffer has been detached.")); } - /* 10. */ + /* GetViewValue 7., SetViewValue 9. */ uint32_t view_offset = view_p->byte_offset; - /* 11. */ + /* GetViewValue 8., SetViewValue 10. */ uint32_t view_size = view_p->header.u.class_prop.u.length; - /* 12. */ + /* GetViewValue 9., SetViewValue 11. */ uint8_t element_size = (uint8_t) (1 << (ecma_typedarray_helper_get_shift_size (id))); - /* 13. */ - if ((uint32_t) get_index + element_size > view_size) + /* GetViewValue 10., SetViewValue 12. */ + if (get_index + element_size > (ecma_number_t) view_size) { return ecma_raise_range_error (ECMA_ERR_MSG ("Start offset is outside the bounds of the buffer.")); } - /* 14. */ + /* GetViewValue 11., SetViewValue 13. */ uint32_t buffer_index = (uint32_t) get_index + view_offset; lit_utf8_byte_t *block_p = ecma_arraybuffer_get_buffer (buffer_p) + buffer_index; bool system_is_little_endian = ecma_dataview_check_little_endian (); + /* GetViewValue 12. */ if (ecma_is_value_empty (value_to_set)) { JERRY_VLA (lit_utf8_byte_t, swap_block_p, element_size); @@ -314,18 +318,18 @@ ecma_op_dataview_get_set_view_value (ecma_value_t view, /**< the operation's 'vi return ecma_get_typedarray_element (swap_block_p, id); } - if (ecma_is_value_number (value_to_set)) + /* SetViewValue 14. */ + value_to_set = ecma_make_number_value (value_to_set_number); + ecma_value_t set_element = ecma_set_typedarray_element (block_p, value_to_set, id); + ecma_free_value (value_to_set); + + if (ECMA_IS_VALUE_ERROR (set_element)) { - ecma_value_t set_element = ecma_set_typedarray_element (block_p, value_to_set, id); - - if (ECMA_IS_VALUE_ERROR (set_element)) - { - return set_element; - } - - ecma_dataview_swap_order (system_is_little_endian, is_little_endian, element_size, block_p); + return set_element; } + ecma_dataview_swap_order (system_is_little_endian, is_little_endian, element_size, block_p); + return ECMA_VALUE_UNDEFINED; } /* ecma_op_dataview_get_set_view_value */ diff --git a/tests/jerry/es.next/dataview.js b/tests/jerry/es.next/dataview.js index b396757b4..5c6c2aa0c 100644 --- a/tests/jerry/es.next/dataview.js +++ b/tests/jerry/es.next/dataview.js @@ -13,7 +13,7 @@ * limitations under the License. */ -/* ES2015 24.2.2.1.1 */ +/* ES11 24.3.2.1.1 */ try { DataView (); assert (false); @@ -21,7 +21,7 @@ try { assert (e instanceof TypeError); } -/* ES2015 24.2.2.1.2 */ +/* ES11 24.3.2.1.2 (not object) */ try { new DataView (5); assert (false); @@ -29,7 +29,7 @@ try { assert (e instanceof TypeError); } -/* ES2015 24.2.2.1.3 */ +/* ES11 24.3.2.1.2 (no [[ArrayBufferData]] internal slot) */ try { new DataView ({}); assert (false); @@ -39,7 +39,23 @@ try { var buffer = new ArrayBuffer (16); -/* ES2015 24.2.2.1.6 */ +/* ES11 24.3.2.1.3 (offset < 0)*/ +try { + new DataView (buffer, -1); + assert (false); +} catch (e) { + assert (e instanceof RangeError); +} + +/* ES11 24.3.2.1.3 (offset > 2^53) */ +try { + new DataView (buffer, Number.MAX_SAFE_INTEGER + 1); + assert (false); +} catch (e) { + assert (e instanceof RangeError); +} + +/* ES11 24.3.2.1.3 (ToInteger throws ReferenceError) */ try { new DataView (buffer, { toString: function () { throw new ReferenceError ('foo') } }); assert (false); @@ -48,24 +64,8 @@ try { assert (e.message === 'foo'); } -/* ES2015 24.2.2.1.7 (numberOffset != offset)*/ -try { - new DataView (buffer, 1.5); - assert (false); -} catch (e) { - assert (e instanceof RangeError); -} - -/* ES2015 24.2.2.1.7 (offset < 0) */ -try { - new DataView (buffer, -1); - assert (false); -} catch (e) { - assert (e instanceof RangeError); -} - -/* ES2015 24.2.2.1.10 */ +/* ES11 24.3.2.1.6 */ try { new DataView (buffer, 17); assert (false); @@ -73,7 +73,7 @@ try { assert (e instanceof RangeError); } -/* ES2015 24.2.2.1.12.b */ +/* ES11 24.3.2.1.8.a */ try { new DataView (buffer, 0, { toString: function () { throw new ReferenceError ('bar') } }); assert (false); @@ -82,7 +82,7 @@ try { assert (e.message === 'bar'); } -/* ES2015 24.2.2.1.12.b */ +/* ES11 24.3.2.1.8.a */ try { new DataView (buffer, 0, Infinity); assert (false); @@ -90,7 +90,7 @@ try { assert (e instanceof RangeError); } -/* ES2015 24.2.2.1.12.c */ +/* ES11 24.3.2.1.8.b */ try { new DataView (buffer, 4, 13); assert (false); @@ -98,11 +98,10 @@ try { assert (e instanceof RangeError); } -/* Tests accessors: ES2015 24.2.2.1 - 24.2.2.3 */ -var accessorList = ['buffer', 'byteOffset', 'byteLength']; +/* Tests accessors: ES11 24.3.4.{1, 2, 3}.2 */ +var accessorList = ['buffer', 'byteLength', 'byteOffset']; accessorList.forEach (function (prop) { - /* ES2015 24.2.4.{1, 2, 3}.{2, 3} */ try { var obj = {}; Object.setPrototypeOf (obj, DataView.prototype); @@ -136,7 +135,7 @@ var setters = ['setInt8', 'setUint8', 'setInt16', 'setUint16', 'setInt32', 'setU var gettersSetters = getters.concat (setters); gettersSetters.forEach (function (propName) { - /* ES2015 24.2.1.{1, 2}.1 */ + /* ES11 24.3.1.{1, 2}.1 */ var routine = DataView.prototype[propName]; try { DataView.prototype[propName].call (5); @@ -145,7 +144,7 @@ gettersSetters.forEach (function (propName) { assert (e instanceof TypeError); } - /* ES2015 24.2.1.{1, 2}.2 */ + /* ES11 24.3.1.{1, 2}.1 */ try { DataView.prototype[propName].call ({}); assert (false); @@ -153,7 +152,7 @@ gettersSetters.forEach (function (propName) { assert (e instanceof TypeError); } - /* ES2015 24.2.1.{1, 2}.5 */ + /* ES11 24.3.1.{1, 2}.3 (ToInteger throws ReferenceError) */ try { var buffer = new ArrayBuffer (16); var view = new DataView (buffer) @@ -167,14 +166,7 @@ gettersSetters.forEach (function (propName) { var buffer = new ArrayBuffer (16); var view = new DataView (buffer) - /* ES2015 24.2.1.{1, 2}.6 (numberIndex != getIndex) */ - if (propName.indexOf("get") !== -1) { - assert(view[propName] (1.5) === 0); - } else { - assert(view[propName] (1.5) === undefined); - } - - /* ES2015 24.2.1.{1, 2}.6 (getIndex < 0) */ + /* ES11 24.3.1.{1, 2}.3 (getIndex < 0) */ try { view[propName] (-1); assert (false); @@ -182,7 +174,7 @@ gettersSetters.forEach (function (propName) { assert (e instanceof RangeError); } - /* ES2015 24.2.1.{1, 2}.13 */ + /* ES11 24.3.1.1.10, 24.3.1.2.12 */ try { view[propName] (20); assert (false); @@ -254,26 +246,6 @@ var dtviewF = new DataView (arrayBufferOk, null, 1); assert (dtviewF.byteLength === 1); assert (dtviewF.byteOffset === 0); -/* In ES6 the second argument is processed with ToNumber and ToInteger calls. - * A RangeError is reported if the values returned by the operations are different. - * The "undefined" value converted with ToNumber will return "NaN" and the ToInteger - * operation will return "0". Thus creating a RangeError. - * - * After ES6 the second argument should be converted via ToIndex. - * Providing "undefined" value for the ToIndex operation will return "0". - * Thus there is no error generated. - */ -try { - var dtviewF = new DataView (arrayBufferOk, undefined, 1); - - /* TODO: enable these tests after the DataView is updated for newer standard and - * remove the try-catch. - */ - /* - * assert(dtviewF.byteLength === 1); - * assert(dtviewF.byteOffset === 0); - */ - assert (false); -} catch (ex) { - assert (ex instanceof RangeError); -} +var dtviewF = new DataView (arrayBufferOk, undefined, 1); +assert(dtviewF.byteLength === 1); +assert(dtviewF.byteOffset === 0); diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml index 9875b0030..ebf903426 100644 --- a/tests/test262-esnext-excludelist.xml +++ b/tests/test262-esnext-excludelist.xml @@ -34,9 +34,6 @@ - - - @@ -75,57 +72,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -