recover-newarrayiterator.js (1351B)
1 var max = 40; 2 setJitCompilerOption("ion.warmup.trigger", max - 10); 3 4 // Prevent the GC from cancelling Ion compilations, when we expect them to succeed 5 gczeal(0); 6 7 function selfhosted() { 8 if (typeof getSelfHostedValue === "undefined") 9 return; 10 11 var NewArrayIterator = getSelfHostedValue("NewArrayIterator"); 12 var iter = NewArrayIterator(); 13 bailout(); 14 // assertRecoveredOnBailout(iter, true); 15 } 16 17 function iterator(i) { 18 var array = [1, i]; 19 var iter = array[Symbol.iterator](); 20 assertEq(iter.next().value, 1); 21 bailout(); 22 // This sometimes fails 23 // assertRecoveredOnBailout(iter, true); 24 var result = iter.next(); 25 assertEq(result.value, i); 26 assertEq(result.done, false); 27 assertEq(iter.next().done, true); 28 } 29 30 function forof(i) { 31 var array = [1, i]; 32 var first = true; 33 34 for (var x of array) { 35 if (first) { 36 assertEq(x, 1); 37 bailout(); 38 first = false; 39 } else { 40 assertEq(x, i); 41 } 42 } 43 } 44 45 var data = { 46 a: 'foo', 47 b: {c: 'd'}, 48 arr: [1, 2, 3] 49 }; 50 51 function fn() { 52 var {a, b:{c:b}, arr:[, c]} = data; 53 return c; 54 } 55 56 function destructuring() { 57 for (var i = 0; i < max; i++) 58 assertEq(fn(), 2); 59 } 60 61 for (var i = 0; i < max; i++) { 62 selfhosted(); 63 iterator(i); 64 forof(i); 65 destructuring(); 66 }