aboutsummaryrefslogtreecommitdiff
path: root/src/jdk/nashorn/internal/objects
diff options
context:
space:
mode:
authorhannesw <none@none>2013-09-30 15:54:05 +0200
committerhannesw <none@none>2013-09-30 15:54:05 +0200
commitde74ac26830f0a13c02bf65483ea4db378e40a73 (patch)
treeb0f231bcbb25d80e9081fd5f74c9d463a8be9886 /src/jdk/nashorn/internal/objects
parent715135a0b1ac6f0ced2deaeb597ba7a4d1dc6d3b (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.java9
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);