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-default-parameters 6 7// Get the Debug object exposed from the debug context global object. 8Debug = debug.Debug 9 10listenerComplete = false; 11breakPointCount = 0; 12 13function listener(event, exec_state, event_data, data) { 14 if (event == Debug.DebugEvent.Break) { 15 breakPointCount++; 16 if (breakPointCount == 1) { 17 // Break point in initializer for parameter `a`, invoked by 18 // initializer for parameter `b` 19 assertEquals('default', exec_state.frame(1).evaluate('mode').value()); 20 21 // initializer for `b` can't refer to `b` 22 assertThrows(function() { 23 exec_state.frame(1).evaluate('b').value(); 24 }, ReferenceError); 25 26 assertThrows(function() { 27 exec_state.frame(1).evaluate('c'); 28 }, ReferenceError); 29 } else if (breakPointCount == 2) { 30 // Break point in IIFE initializer for parameter `c` 31 assertEquals('modeFn', exec_state.frame(1).evaluate('a.name').value()); 32 assertEquals('default', exec_state.frame(1).evaluate('b').value()); 33 assertThrows(function() { 34 exec_state.frame(1).evaluate('c'); 35 }, ReferenceError); 36 } else if (breakPointCount == 3) { 37 // Break point in function body --- `c` parameter is shadowed 38 assertEquals('modeFn', exec_state.frame(0).evaluate('a.name').value()); 39 assertEquals('default', exec_state.frame(0).evaluate('b').value()); 40 assertEquals('local', exec_state.frame(0).evaluate('d').value()); 41 } 42 } 43}; 44 45// Add the debug event listener. 46Debug.setListener(listener); 47 48function f(a = function modeFn(mode) { debugger; return mode; }, 49 b = a("default"), 50 c = (function() { debugger; })()) { 51 var d = 'local'; 52 debugger; 53}; 54 55f(); 56 57// Make sure that the debug event listener vas invoked. 58assertEquals(3, breakPointCount); 59