Home | History | Annotate | Download | only in regress
      1 // Copyright 2016 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Flags: --expose-gc
      6 
      7 array = new Array(10);
      8 array[0] = 0.1;
      9 // array[1] = THE_HOLE, reading through the prototype chain
     10 array[2] = 2.1;
     11 array[3] = 3.1;
     12 
     13 var copy = array.slice(0, array.length);
     14 
     15 // Change the array's prototype.
     16 var proto = {};
     17 array.__proto__ = proto;
     18 
     19 // Define [1] on the prototype to alter the array during concatenation.
     20 Object.defineProperty(
     21   proto, 1, {
     22     get() {
     23       // Alter the array.
     24       array.length = 1;
     25       // Force gc to move the array.
     26       gc();
     27       return "value from proto";
     28     },
     29     set(new_value) { }
     30 });
     31 
     32 var concatted_array = Array.prototype.concat.call(array);
     33 assertEquals(concatted_array[0], 0.1);
     34 assertEquals(concatted_array[1], "value from proto");
     35 assertEquals(concatted_array[2], undefined);
     36 assertEquals(concatted_array[3], undefined);
     37