pretenured-operations.js (991B)
1 // Check individual operations that support pretenuring their result. 2 3 load(libdir + "pretenure.js"); 4 5 let a; 6 7 function run(op) { 8 a = []; 9 for (let i = 0; i < 1000; i++) { 10 a.push(op()); 11 } 12 return a[0]; 13 } 14 15 function check(op) { 16 assertEq(isNurseryAllocated(run(op)), true); 17 minorgc(); 18 assertEq(isNurseryAllocated(run(op)), false); 19 20 a = undefined; 21 gc(); 22 } 23 24 setupPretenureTest(); 25 26 // Object allocation. 27 check(() => { return {}; }); 28 29 // Array allocation. 30 check(() => { return []; }); 31 32 // Object construction. 33 check(() => { return new Object(); }); 34 check(() => { return Object(); }); 35 36 // Array construction. 37 check(() => { return Array(); }); 38 check(() => { return Array(150); }); 39 check(() => { return new Array(); }); 40 check(() => { return new Array(150); }); 41 42 // Lambda objects. 43 check(() => { return () => 0 }); 44 function f() { 45 let x = 1; 46 check(() => { return () => x }); 47 x = 2; 48 } 49 f(); 50 51 // DOM Allocations 52 let fdo = new FakeDOMObject(); 53 check(() => { return fdo.doBar(); })