diff options
author | hannesw <none@none> | 2013-09-30 15:54:05 +0200 |
---|---|---|
committer | hannesw <none@none> | 2013-09-30 15:54:05 +0200 |
commit | de74ac26830f0a13c02bf65483ea4db378e40a73 (patch) | |
tree | b0f231bcbb25d80e9081fd5f74c9d463a8be9886 /src/jdk/nashorn/internal/objects | |
parent | 715135a0b1ac6f0ced2deaeb597ba7a4d1dc6d3b (diff) |
8025589: Array.prototype.shift should only copy defined elements in generic mode
Reviewed-by: sundar, attila
Diffstat (limited to 'src/jdk/nashorn/internal/objects')
-rw-r--r-- | src/jdk/nashorn/internal/objects/NativeArray.java | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/jdk/nashorn/internal/objects/NativeArray.java b/src/jdk/nashorn/internal/objects/NativeArray.java index 0cdc13a5..fa325753 100644 --- a/src/jdk/nashorn/internal/objects/NativeArray.java +++ b/src/jdk/nashorn/internal/objects/NativeArray.java @@ -819,8 +819,15 @@ public final class NativeArray extends ScriptObject { if (bulkable(sobj)) { sobj.getArray().shiftLeft(1); } else { + boolean hasPrevious = true; for (long k = 1; k < len; k++) { - sobj.set(k - 1, sobj.get(k), true); + boolean hasCurrent = sobj.has(k); + if (hasCurrent) { + sobj.set(k - 1, sobj.get(k), true); + } else if (hasPrevious) { + sobj.delete(k - 1, true); + } + hasPrevious = hasCurrent; } } sobj.delete(--len, true); |