| // Copyright 2015 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: --noanalyze-environment-liveness |
| |
| |
| Debug = debug.Debug |
| |
| listenerComplete = false; |
| breakPointCount = 0; |
| exception = null; |
| |
| function listener(event, exec_state, event_data, data) { |
| if (event != Debug.DebugEvent.Break) return; |
| try { |
| breakPointCount++; |
| if (breakPointCount == 1) { |
| // Break point in initializer for parameter `a`, invoked by |
| // initializer for parameter `b` |
| assertEquals('default', exec_state.frame(0).evaluate('mode').value()); |
| assertTrue(exec_state.frame(1).evaluate('b').isUndefined()); |
| assertTrue(exec_state.frame(1).evaluate('c').isUndefined()); |
| } else if (breakPointCount == 2) { |
| // Break point in IIFE initializer for parameter `c` |
| assertEquals('modeFn', exec_state.frame(1).evaluate('a.name').value()); |
| assertEquals('default', exec_state.frame(1).evaluate('b').value()); |
| assertTrue(exec_state.frame(1).evaluate('c').isUndefined()); |
| } else if (breakPointCount == 3) { |
| // Break point in function body --- `c` parameter is shadowed |
| assertEquals('modeFn', exec_state.frame(0).evaluate('a.name').value()); |
| assertEquals('default', exec_state.frame(0).evaluate('b').value()); |
| assertEquals('local', exec_state.frame(0).evaluate('d').value()); |
| } |
| } catch (e) { |
| exception = e; |
| } |
| }; |
| |
| // Add the debug event listener. |
| Debug.setListener(listener); |
| |
| function f(a = function modeFn(mode) { debugger; return mode; }, |
| b = a("default"), |
| c = (function() { debugger; })()) { |
| var d = 'local'; |
| debugger; |
| }; |
| |
| f(); |
| |
| // Make sure that the debug event listener vas invoked. |
| assertEquals(3, breakPointCount); |
| assertNull(exception); |