setelem-id-guard.js (1959B)
1 function setSlot() { 2 var o = {x: 1, y: 2}; 3 for (var i=0; i<100; i++) { 4 var p = (i & 1) ? "x" : "y"; 5 o[p] = i; 6 assertEq((i & 1) ? o.x : o.y, i); 7 } 8 } 9 setSlot(); 10 11 function setUnboxed() { 12 var arr = []; 13 for (var i=0; i<100; i++) 14 arr.push({x: 1, y: 2}); 15 16 for (var i=0; i<100; i++) { 17 var o = arr[i]; 18 var p = (i & 1) ? "x" : "y"; 19 o[p] = i; 20 assertEq((i & 1) ? o.x : o.y, i); 21 } 22 } 23 setUnboxed(); 24 25 function setUnboxedExpando() { 26 var arr = []; 27 for (var i=0; i<100; i++) 28 arr.push({x: 1, y: 2}); 29 30 for (var i=0; i<100; i++) { 31 var o = arr[i]; 32 o.a = 1; 33 o.b = 2; 34 var p = (i & 1) ? "a" : "b"; 35 o[p] = i; 36 o[p] = o[p] + 4; 37 assertEq((i & 1) ? o.a : o.b, i + 4); 38 } 39 } 40 setUnboxedExpando(); 41 42 function setArrayLength() { 43 var arr = []; 44 for (var i=0; i<100; i++) { 45 var p = (i & 1) ? "length" : "x"; 46 arr[p] = i; 47 assertEq((i & 1) ? arr.length : arr.x, i); 48 } 49 } 50 setArrayLength(); 51 52 function setter() { 53 var c = 0; 54 var o = {set x(i) { c += i; }, set y(i) { c += i + 2; }}; 55 for (var i=0; i<100; i++) { 56 var p = (i & 1) ? "x" : "y"; 57 o[p] = i; 58 } 59 assertEq(c, 5050); 60 } 61 setter(); 62 63 function addSlot() { 64 for (var i=0; i<100; i++) { 65 var o = {}; 66 var p1 = (i & 1) ? "x" : "y"; 67 var p2 = (i % 3) ? "a" : "b"; 68 o[p1] = i; 69 o[p2] = i; 70 assertEq((i & 1) ? o.x : o.y, i); 71 assertEq((i % 3) ? o.a : o.b, i); 72 } 73 } 74 addSlot(); 75 76 function addExpandoSlot() { 77 var arr = []; 78 for (var i=0; i<100; i++) 79 arr.push({c: 1, d: 2}); 80 81 for (var i=0; i<100; i++) { 82 var o = arr[i]; 83 var p1 = (i & 1) ? "x" : "y"; 84 var p2 = (i % 3) ? "a" : "b"; 85 o[p1] = i; 86 o[p2] = i; 87 assertEq((i & 1) ? o.x : o.y, i); 88 assertEq((i % 3) ? o.a : o.b, i); 89 } 90 } 91 addExpandoSlot();