// 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);
