// Copyright 2016 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: --allow-natives-syntax

(function TestGeneratorOSRSimple() {
  function* gen1() {
    for (var i = 0; i < 3; ++i) {
      if (i == 1) %OptimizeOsr();
    }
    return 23;
  }
  var g = gen1();
  assertEquals({ value:23, done:true }, g.next());
})();

(function TestGeneratorOSRYield() {
  function* gen2() {
    for (var i = 0; i < 3; ++i) {
      if (i == 1) %OptimizeOsr();
      yield i;
    }
    return 23;
  }
  var g = gen2();
  assertEquals({ value:0, done:false }, g.next());
  assertEquals({ value:1, done:false }, g.next());
  assertEquals({ value:2, done:false }, g.next());
  assertEquals({ value:23, done:true }, g.next());
})();

(function TestGeneratorOSRNested() {
  function* gen3() {
    for (var i = 0; i < 3; ++i) {
      for (var j = 0; j < 3; ++j) {
        for (var k = 0; k < 10; ++k) {
          if (k == 5) %OptimizeOsr();
        }
      }
      yield i;
    }
    return 23;
  }
  var g = gen3();
  assertEquals({ value:0, done:false }, g.next());
  assertEquals({ value:1, done:false }, g.next());
  assertEquals({ value:2, done:false }, g.next());
  assertEquals({ value:23, done:true }, g.next());
})();
