diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c
index 7d28e190d..bab92aa1f 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c
@@ -49,6 +49,7 @@ enum
#if !ENABLED (JERRY_ESNEXT)
ECMA_ARRAY_PROTOTYPE_TO_STRING,
#endif /* !ENABLED (JERRY_ESNEXT) */
+ ECMA_ARRAY_PROTOTYPE_SORT,
ECMA_ARRAY_PROTOTYPE_CONCAT,
ECMA_ARRAY_PROTOTYPE_TO_LOCALE_STRING,
ECMA_ARRAY_PROTOTYPE_JOIN,
@@ -57,7 +58,6 @@ enum
ECMA_ARRAY_PROTOTYPE_REVERSE,
ECMA_ARRAY_PROTOTYPE_SHIFT,
ECMA_ARRAY_PROTOTYPE_SLICE,
- ECMA_ARRAY_PROTOTYPE_SORT,
ECMA_ARRAY_PROTOTYPE_SPLICE,
ECMA_ARRAY_PROTOTYPE_UNSHIFT,
ECMA_ARRAY_PROTOTYPE_INDEX_OF,
@@ -1108,8 +1108,7 @@ ecma_builtin_array_prototype_object_sort_compare_helper (ecma_value_t lhs, /**<
static ecma_value_t
ecma_builtin_array_prototype_object_sort (ecma_value_t this_arg, /**< this argument */
ecma_value_t arg1, /**< comparefn */
- ecma_object_t *obj_p, /**< object */
- ecma_length_t len) /**< object's length */
+ ecma_object_t *obj_p) /**< object */
{
/* Check if the provided compare function is callable. */
if (!ecma_is_value_undefined (arg1) && !ecma_op_is_callable (arg1))
@@ -1117,6 +1116,13 @@ ecma_builtin_array_prototype_object_sort (ecma_value_t this_arg, /**< this argum
return ecma_raise_type_error (ECMA_ERR_MSG ("Compare function is not callable."));
}
+ ecma_length_t len;
+ ecma_value_t len_value = ecma_op_object_get_length (obj_p, &len);
+
+ if (ECMA_IS_VALUE_ERROR (len_value))
+ {
+ return len_value;
+ }
ecma_collection_t *array_index_props_p = ecma_new_collection ();
for (uint32_t i = 0; i < len; i++)
@@ -2917,17 +2923,23 @@ ecma_builtin_array_prototype_dispatch_routine (uint16_t builtin_routine_id, /**<
if (JERRY_UNLIKELY (builtin_routine_id <= ECMA_ARRAY_PROTOTYPE_CONCAT))
{
- ecma_value_t ret_value;
+ ecma_value_t ret_value = ECMA_VALUE_EMPTY;
#if !ENABLED (JERRY_ESNEXT)
if (builtin_routine_id == ECMA_ARRAY_PROTOTYPE_TO_STRING)
{
ret_value = ecma_array_object_to_string (obj_this);
}
- else
#endif /* !ENABLED (JERRY_ESNEXT) */
+ if (builtin_routine_id == ECMA_ARRAY_PROTOTYPE_SORT)
+ {
+ ret_value = ecma_builtin_array_prototype_object_sort (this_arg,
+ arguments_list_p[0],
+ obj_p);
+
+ }
+ else if (builtin_routine_id == ECMA_ARRAY_PROTOTYPE_CONCAT)
{
- JERRY_ASSERT (builtin_routine_id == ECMA_ARRAY_PROTOTYPE_CONCAT);
ret_value = ecma_builtin_array_prototype_object_concat (arguments_list_p,
arguments_number,
obj_p);
@@ -3014,14 +3026,6 @@ ecma_builtin_array_prototype_dispatch_routine (uint16_t builtin_routine_id, /**<
length);
break;
}
- case ECMA_ARRAY_PROTOTYPE_SORT:
- {
- ret_value = ecma_builtin_array_prototype_object_sort (this_arg,
- routine_arg_1,
- obj_p,
- length);
- break;
- }
case ECMA_ARRAY_PROTOTYPE_SPLICE:
{
ret_value = ecma_builtin_array_prototype_object_splice (arguments_list_p,
diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml
index 692419bf5..dc5e32e84 100644
--- a/tests/test262-esnext-excludelist.xml
+++ b/tests/test262-esnext-excludelist.xml
@@ -148,7 +148,6 @@
-