| // Copyright 2014 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: --noalways-opt |
| |
| Debug = debug.Debug |
| |
| var debug_step = 0; |
| var failure = null; |
| |
| function listener(event, exec_state, event_data, data) { |
| if (event != Debug.DebugEvent.Break) return; |
| try { |
| if (debug_step == 0) { |
| assertEquals(1, exec_state.frame(0).evaluate('a').value()); |
| assertEquals(3, exec_state.frame(0).evaluate('b').value()); |
| exec_state.frame(0).evaluate("a = 4").value(); |
| debug_step++; |
| } else { |
| assertEquals(4, exec_state.frame(0).evaluate('a').value()); |
| assertEquals(3, exec_state.frame(0).evaluate('b').value()); |
| exec_state.frame(0).evaluate("set_a_to_5()"); |
| exec_state.frame(0).evaluate("b = 5").value(); |
| } |
| } catch (e) { |
| failure = e; |
| } |
| } |
| |
| Debug.setListener(listener); |
| |
| function* generator(a, b) { |
| function set_a_to_5() { a = 5 } |
| // Make sure set_a_to_5 is 'used' so that it is visible to the debugger. |
| set_a_to_5; |
| var b = 3; // Shadows a parameter. |
| debugger; |
| yield a; |
| yield b; |
| debugger; |
| yield a; |
| return b; |
| } |
| |
| var foo = generator(1, 2); |
| |
| assertEquals(4, foo.next().value); |
| assertEquals(3, foo.next().value); |
| assertEquals(5, foo.next().value); |
| assertEquals(5, foo.next().value); |
| assertNull(failure); |
| |
| Debug.setListener(null); |