1// Copyright 2014 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: --allow-natives-syntax 6 7var v = 0; 8 9function push_wrapper(array, value) { 10 array.push(value); 11} 12function pop_wrapper(array) { 13 return array.pop(); 14} 15 16// Test that Object.observe() notification events are properly sent from 17// Array.push() and Array.pop() both from optimized and un-optimized code. 18var array = []; 19 20function somethingChanged(changes) { 21 v++; 22} 23 24Object.observe(array, somethingChanged); 25push_wrapper(array, 1); 26%RunMicrotasks(); 27assertEquals(1, array.length); 28assertEquals(1, v); 29push_wrapper(array, 1); 30%RunMicrotasks(); 31assertEquals(2, array.length); 32assertEquals(2, v); 33%OptimizeFunctionOnNextCall(push_wrapper); 34push_wrapper(array, 1); 35%RunMicrotasks(); 36assertEquals(3, array.length); 37assertEquals(3, v); 38push_wrapper(array, 1); 39%RunMicrotasks(); 40assertEquals(4, array.length); 41assertEquals(4, v); 42 43pop_wrapper(array); 44%RunMicrotasks(); 45assertEquals(3, array.length); 46assertEquals(5, v); 47pop_wrapper(array); 48%RunMicrotasks(); 49assertEquals(2, array.length); 50assertEquals(6, v); 51%OptimizeFunctionOnNextCall(pop_wrapper); 52pop_wrapper(array); 53%RunMicrotasks(); 54assertEquals(1, array.length); 55assertEquals(7, v); 56pop_wrapper(array); 57%RunMicrotasks(); 58assertEquals(0, array.length); 59assertEquals(8, v); 60