summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/ignition/osr-from-generator.js
blob: 2344a31ce4f8b932a170dc01d5442fc78de228ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// 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 TestGeneratorOSRYieldAfterArming() {
  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 TestGeneratorOSRYieldBeforeArming() {
  function* gen3() {
    for (var i = 0; i < 3; ++i) {
      yield i;
      if (i == 1) %OptimizeOsr();
    }
    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());
})();

(function TestGeneratorOSRNested() {
  function* gen4() {
    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 = gen4();
  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());
})();