// Copyright 2014 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --harmony-object-observe // Flags: --allow-natives-syntax var v = 0; function push_wrapper(array, value) { array.push(value); } function pop_wrapper(array) { return array.pop(); } // Test that Object.observe() notification events are properly sent from // Array.push() and Array.pop() both from optimized and un-optimized code. var array = []; function somethingChanged(changes) { v++; } Object.observe(array, somethingChanged); push_wrapper(array, 1); %RunMicrotasks(); assertEquals(1, array.length); assertEquals(1, v); push_wrapper(array, 1); %RunMicrotasks(); assertEquals(2, array.length); assertEquals(2, v); %OptimizeFunctionOnNextCall(push_wrapper); push_wrapper(array, 1); %RunMicrotasks(); assertEquals(3, array.length); assertEquals(3, v); push_wrapper(array, 1); %RunMicrotasks(); assertEquals(4, array.length); assertEquals(4, v); pop_wrapper(array); %RunMicrotasks(); assertEquals(3, array.length); assertEquals(5, v); pop_wrapper(array); %RunMicrotasks(); assertEquals(2, array.length); assertEquals(6, v); %OptimizeFunctionOnNextCall(pop_wrapper); pop_wrapper(array); %RunMicrotasks(); assertEquals(1, array.length); assertEquals(7, v); pop_wrapper(array); %RunMicrotasks(); assertEquals(0, array.length); assertEquals(8, v);