[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / generator-function-declaration-sinking-put.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error('bad value: ' + actual);
4 }
5 var GeneratorFunctionPrototype = (function*(){}).__proto__;
6
7 function sink (p, q) {
8     function *g(x) { return x; };
9     if (p) { if (q) g.inner = 42; return g; }
10     function *f(x) { return x; };
11     return f;
12 }
13 noInline(sink);
14
15 for (var i = 0; i < 10000; ++i) {
16     var f = sink(true, true);
17     shouldBe(f.__proto__, GeneratorFunctionPrototype);
18     var result = f(42);
19     if (result.next().value != 42)
20     throw "Error: expected 42 but got " + result;
21 }
22
23 // At this point, the function should be compiled down to the FTL
24
25 // Test the allocation on the implicit inner else branch
26 var f = sink(true, false);
27 shouldBe(f.__proto__, GeneratorFunctionPrototype);
28 var result = f(12);
29 if (result.next().value != 12)
30     // This shouldn't matter as it should be either correct or completely crash
31     throw "Error: expected 12 but got " + result;
32
33 // Check that the allocation did not sink beyond the property assignment
34 var f = sink(true, true);
35 shouldBe(f.__proto__, GeneratorFunctionPrototype);
36 var result = f.inner;
37 if (result != 42)
38     throw "Error: inner should be 42 but is " + result;