1// Copyright 2015 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-debug-as debug --harmony-destructuring-bind
6
7var exception = null;
8var Debug = debug.Debug;
9var break_count = 0;
10
11function listener(event, exec_state, event_data, data) {
12  if (event != Debug.DebugEvent.Break) return;
13  try {
14    var source = exec_state.frame(0).sourceLineText();
15    print(source, break_count);
16    assertTrue(source.indexOf(`B${break_count++}`) > 0);
17    if (source.indexOf("assertEquals") > 0) {
18      exec_state.prepareStep(Debug.StepAction.StepNext);
19    } else {
20      exec_state.prepareStep(Debug.StepAction.StepIn);
21    }
22  } catch (e) {
23    exception = e;
24    print(e);
25  }
26};
27
28Debug.setListener(listener);
29
30var id = x => x;                                  // B9 B10 B36 B37
31
32function test() {
33  debugger;                                       // B0
34  function fx1([
35                a,                                // B2
36                b                                 // B3
37              ]) {
38    assertEquals([1, 2], [a, b]);                 // B4
39  }                                               // B5
40  fx1([1, 2, 3]);                                 // B1
41
42  function f2([
43                a,                                // B7
44                b = id(3)                         // B8
45              ]) {
46    assertEquals([4, 3], [a, b]);                 // B11
47  }                                               // B12
48  f2([4]);                                        // B6
49
50  function f3({
51                x: a,                             // B14
52                y: b                              // B15
53              }) {
54    assertEquals([5, 6], [a, b]);                 // B16
55  }                                               // B17
56  f3({y: 6, x: 5});                               // B13
57
58  function f4([
59                a,                                // B19
60                {
61                  b,                              // B20
62                  c,                              // B21
63                }
64              ]) {
65    assertEquals([2, 4, 6], [a, b, c]);           // B22
66  }                                               // B23
67  f4([2, {c: 6, b: 4}]);                          // B18
68
69  function f5([
70                {
71                  a,                              // B25
72                  b = 7                           // B26
73                },
74                c = 3                             // B27
75              ] = [{a:1}]) {
76    assertEquals([1, 7, 3], [a, b, c]);           // B28
77  }                                               // B29
78  f5();                                           // B24
79
80  var name = "x";                                 // B30
81  function f6({
82                [id(name)]: a,                    // B34 B35
83                b = a                             // B38
84              }) {
85    assertEquals([9, 9], [a, b]);                 // B39
86  }                                               // B40
87  var o6 = {};                                    // B31
88  o6[name] = 9;                                   // B32
89  f6(o6);                                         // B33
90
91  try {
92    throw [3, 4];                                 // B41
93  } catch ([
94             a,                                   // B42
95             b,                                   // B43
96             c = 6                                // B44
97           ]) {
98    assertEquals([3, 4, 6], [a, b, c]);           // B45
99  }
100
101  var {                                           // B46
102    x: a,                                         // B47
103    y: b = 9                                      // B48
104  } = { x: 4 };
105  assertEquals([4, 9], [a, b]);                   // B49
106}                                                 // B50
107
108test();
109Debug.setListener(null);                          // B51
110assertNull(exception);
111