[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / generator-type-check.js
1 function shouldThrow(func, errorMessage) {
2     var errorThrown = false;
3     var error = null;
4     try {
5         func();
6     } catch (e) {
7         errorThrown = true;
8         error = e;
9     }
10     if (!errorThrown)
11         throw new Error('not thrown');
12     if (String(error) !== errorMessage)
13         throw new Error(`bad error: ${String(error)}`);
14 }
15
16 var iterator;
17
18 var a = [];
19
20 function* foo(index) {
21     while (1) {
22         var q = a.pop();
23         if(q){
24             q.__proto__ = iterator;
25             q.next();
26         }
27         yield index++;
28     }
29 }
30
31 function* foo2(){
32     yield;
33 }
34
35 var temp = foo2(0);
36
37 for(var i = 0; i < 10; i++) { // make a few objects with @generatorState set
38     var q = {};
39     q.__proto__ = temp;
40     shouldThrow(() => {
41         q.next();
42     }, `TypeError: |this| should be a generator`);
43     q.__proto__ = {};
44     a.push(q);
45
46 }
47
48 iterator = foo(0);
49
50 var q = {};
51 q.__proto__ = iterator;
52 shouldThrow(() => {
53     q.next();
54 }, `TypeError: |this| should be a generator`);