Update ToLength operation to conform ES6 spec (#4007)

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
Robert Fancsik
2020-07-29 11:13:34 +02:00
committed by GitHub
parent 56e328be41
commit 3eb69075f7
31 changed files with 735 additions and 485 deletions
@@ -105,11 +105,12 @@ ecma_op_dataview_create (const ecma_value_t *arguments_list_p, /**< arguments li
}
/* 11 - 12. */
uint32_t viewByteLength;
uint32_t view_byte_length;
if (arguments_list_len > 2 && !ecma_is_value_undefined (arguments_list_p[2]))
{
/* 12.a */
ecma_value_t byte_length_value = ecma_op_to_length (arguments_list_p[2], &viewByteLength);
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);
/* 12.b */
if (ECMA_IS_VALUE_ERROR (byte_length_value))
@@ -118,15 +119,18 @@ ecma_op_dataview_create (const ecma_value_t *arguments_list_p, /**< arguments li
}
/* 12.c */
if ((ecma_number_t) offset + viewByteLength > buffer_byte_length)
if ((ecma_number_t) offset + (ecma_number_t) view_byte_to_length > 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;
}
else
{
/* 11.a */
viewByteLength = (uint32_t) (buffer_byte_length - offset);
view_byte_length = (uint32_t) (buffer_byte_length - offset);
}
/* 13. */
@@ -143,7 +147,7 @@ ecma_op_dataview_create (const ecma_value_t *arguments_list_p, /**< arguments li
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 = viewByteLength;
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;