1a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 2a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 3a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// found in the LICENSE file. 4a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 5d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org// Flags: --expose-debug-as debug 6a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 7a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgDebug = debug.Debug 8a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 9a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgvar debug_step = 0; 10a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgvar failure = null; 11a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 12a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgfunction listener(event, exec_state, event_data, data) { 13a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (event != Debug.DebugEvent.Break) return; 14a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org try { 15a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (debug_step == 0) { 16a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org assertEquals(1, exec_state.frame(0).evaluate('a').value()); 17a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org assertEquals(3, exec_state.frame(0).evaluate('b').value()); 18a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org exec_state.frame(0).evaluate("a = 4").value(); 19a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org debug_step++; 20a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } else { 21a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org assertEquals(4, exec_state.frame(0).evaluate('a').value()); 22a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org assertEquals(3, exec_state.frame(0).evaluate('b').value()); 23a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org exec_state.frame(0).evaluate("b = 5").value(); 24a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } 25a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } catch (e) { 26a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org failure = e; 27a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } 28a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org} 29a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 30a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgDebug.setListener(listener); 31a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 32a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgfunction* generator(a, b) { 33a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org var b = 3; // Shadows a parameter. 34a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org debugger; 35a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org yield a; 36a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org yield b; 37a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org debugger; 38a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org return b; 39a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org} 40a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 41a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgvar foo = generator(1, 2); 42a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 43a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgassertEquals(4, foo.next().value); 44a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgassertEquals(3, foo.next().value); 45a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgassertEquals(5, foo.next().value); 46a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgassertNull(failure); 47a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 48a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgDebug.setListener(null); 49