mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Fix Array.prototype.splice() deletecount calculation
JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély zsborbely.u-szeged@partner.samsung.com
This commit is contained in:
parent
64c81cc44d
commit
33be4883a2
@ -1462,6 +1462,11 @@ ecma_builtin_array_prototype_object_splice (ecma_value_t this_arg, /**< this arg
|
||||
else
|
||||
{
|
||||
delete_count = ecma_number_is_infinity (delete_num) ? len : ecma_number_to_uint32 (delete_num);
|
||||
|
||||
if (delete_count > len - start)
|
||||
{
|
||||
delete_count = len - start;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@ -29,7 +29,7 @@ assert (array[3] == "sunshine");
|
||||
assert (array1.length == 0);
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues();
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array2 = array.splice(2);
|
||||
|
||||
assert (array.length == 2);
|
||||
@ -40,7 +40,7 @@ assert (array2[0] == -127);
|
||||
assert (array2[1] == "sunshine");
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues();
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array3 = array.splice(2, 1);
|
||||
|
||||
assert (array.length == 3);
|
||||
@ -51,7 +51,7 @@ assert (array3.length == 1);
|
||||
assert (array3[0] == -127);
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues();
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array4 = array.splice(0, 3, 6720, "Szeged");
|
||||
|
||||
assert (array.length == 3);
|
||||
@ -64,7 +64,7 @@ assert (array4[1] == undefined);
|
||||
assert (array4[2] == -127);
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues();
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array5 = array.splice(-2, -2, 6720, "Szeged");
|
||||
|
||||
assert (array.length == 6);
|
||||
@ -77,7 +77,7 @@ assert (array[5] == "sunshine");
|
||||
assert (array5.length == 0);
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues();
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array6 = array.splice(undefined, undefined, undefined);
|
||||
|
||||
assert (array.length == 5);
|
||||
@ -89,7 +89,7 @@ assert (array[4] == "sunshine");
|
||||
assert (array6.length == 0);
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues();
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array7 = array.splice(Infinity, NaN);
|
||||
assert (array.length == 4);
|
||||
assert (array[0] == 54);
|
||||
@ -99,7 +99,7 @@ assert (array[3] == "sunshine");
|
||||
assert (array7.length == 0);
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues();
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array8 = array.splice(-Infinity, Infinity);
|
||||
|
||||
assert (array.length == 0);
|
||||
@ -110,7 +110,7 @@ assert (array8[2] == -127);
|
||||
assert (array8[3] == "sunshine");
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues();
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array9 = array.splice(NaN, -Infinity);
|
||||
assert (array.length == 4);
|
||||
assert (array[0] == 54);
|
||||
@ -119,6 +119,18 @@ assert (array[2] == -127);
|
||||
assert (array[3] == "sunshine");
|
||||
assert (array9.length == 0);
|
||||
|
||||
// --------------------------------------------------------
|
||||
array = setDefaultValues(); // 54, undefined, -127, "sunshine"
|
||||
var array10 = array.splice(-3, 4, Infinity, "university");
|
||||
assert (array.length == 3);
|
||||
assert (array[0] == 54);
|
||||
assert (array[1] == Infinity);
|
||||
assert (array[2] == "university");
|
||||
assert (array10.length == 3);
|
||||
assert (array10[0] == undefined);
|
||||
assert (array10[1] == -127);
|
||||
assert (array10[2] == "sunshine");
|
||||
|
||||
// Checking behavior when unable to get length
|
||||
var obj = {splice : Array.prototype.splice};
|
||||
Object.defineProperty(obj, 'length', { 'get' : function () { throw new ReferenceError ("foo"); } });
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user