Reviewers: Michael Starzinger,

Description:
SimpleMove now calls [[Has]] before [[Get]] when moving elements

BUG=v8:3643
LOG=n

Please review this at https://codereview.chromium.org/678753002/

Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+23, -22 lines):
  M src/array.js
  M test/mjsunit/regress/regress-3643.js


Index: src/array.js
diff --git a/src/array.js b/src/array.js
index 55dd79751c27fc960c5caca1bc068b7a0c5ecc22..29fa8318e2bfee8c8cfa4ba95af4da5bd777590e 100644
--- a/src/array.js
+++ b/src/array.js
@@ -302,12 +302,8 @@ function SimpleMove(array, start_i, del_count, len, num_additional_args) {
       for (var i = len - del_count; i > start_i; i--) {
         var from_index = i + del_count - 1;
         var to_index = i + num_additional_args - 1;
-        // The spec could also be interpreted such that
-        // %HasOwnProperty would be the appropriate test.  We follow
-        // KJS in consulting the prototype.
-        var current = array[from_index];
-        if (!IS_UNDEFINED(current) || from_index in array) {
-          array[to_index] = current;
+        if (from_index in array) {
+          array[to_index] = array[from_index];
         } else {
           delete array[to_index];
         }
@@ -316,12 +312,8 @@ function SimpleMove(array, start_i, del_count, len, num_additional_args) {
       for (var i = start_i; i < len - del_count; i++) {
         var from_index = i + del_count;
         var to_index = i + num_additional_args;
-        // The spec could also be interpreted such that
-        // %HasOwnProperty would be the appropriate test.  We follow
-        // KJS in consulting the prototype.
-        var current = array[from_index];
-        if (!IS_UNDEFINED(current) || from_index in array) {
-          array[to_index] = current;
+        if (from_index in array) {
+          array[to_index] = array[from_index];
         } else {
           delete array[to_index];
         }
Index: test/mjsunit/regress/regress-3643.js
diff --git a/test/mjsunit/regress/regress-3643.js b/test/mjsunit/regress/regress-3643.js index cc61a1c68ec5628674b97a469162aef85d40dec4..bbc94fd73b9905445c465c43709568b6a68b8367 100644
--- a/test/mjsunit/regress/regress-3643.js
+++ b/test/mjsunit/regress/regress-3643.js
@@ -2,20 +2,29 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.

-var a = [1, 2, 3];
-Object.defineProperty(a, '1', {
-  get: function() { delete this[1]; return undefined; },
-  configurable: true
-});
+function newArrayWithGetter() {
+  var arr = [1, 2, 3];
+  Object.defineProperty(arr, '1', {
+    get: function() { delete this[1]; return undefined; },
+    configurable: true
+  });
+  return arr;
+}
+
+var a = newArrayWithGetter();
 var s = a.slice(1);
 assertTrue('0' in s);

// Sparse case should hit the same code as above due to presence of the getter.
-a = [1, 2, 3];
+a = newArrayWithGetter();
 a[0xffff] = 4;
-Object.defineProperty(a, '1', {
-  get: function() { delete this[1]; return undefined; },
-  configurable: true
-});
 s = a.slice(1);
 assertTrue('0' in s);
+
+a = newArrayWithGetter();
+a.shift();
+assertTrue('0' in a);
+
+a = newArrayWithGetter();
+a.unshift(0);
+assertTrue('2' in a);


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to