• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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