1958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// Copyright 2014 the V8 project authors. All rights reserved.
2958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// Use of this source code is governed by a BSD-style license that can be
3958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// found in the LICENSE file.
4958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
5958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// Flags: --expose-debug-as debug
6958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
7958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierDebug = debug.Debug;
8958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniervar exception = null;
9958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniervar error_count = 0;
10958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
11958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierfunction f() {
12958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier  return 0;  // Break
13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}            // Break
14958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
15958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierfunction listener(event, exec_state, event_data, data) {
16958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier  if (event != Debug.DebugEvent.Break) return;
17958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier  try {
18958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier    if (exec_state.frame(0).sourceLineText().indexOf("Break") <0) {
19958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier      error_count++;
20958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier    }
21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    exec_state.prepareStep(Debug.StepAction.StepIn);
22958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier    f();  // We should not break in this call of f().
23958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier  } catch (e) {
24958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier    print(e + e.stack);
25958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier    exception = e;
26958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier  }
27958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier}
28958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
29958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierDebug.setListener(listener);
30958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
31958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierdebugger;  // Break
32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochf();       // Break
33958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
34958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierDebug.setListener(null);  // Break
35958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
36958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierassertNull(exception);
37958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierassertEquals(0, error_count);
38