iterator-indices-megamorphic-permissive.js (864B)
1 function test(obj, expected) { 2 var count = 0; 3 for (var s in obj) { 4 if (obj.hasOwnProperty(s)) { 5 count += obj[s]; 6 } 7 } 8 assertEq(count, expected); 9 } 10 11 function test2(obj, expected) { 12 var count = 0; 13 var keys = Object.keys(obj); 14 for (var i = 0; i < keys.length; i++) { 15 var s = keys[i]; 16 if (obj.hasOwnProperty(s)) { 17 count += obj[s]; 18 } 19 } 20 assertEq(count, expected); 21 } 22 23 var arr = []; 24 for (var i = 0; i < 20; i++) { 25 var obj = {}; 26 for (var j = 0; j < i; j++) { 27 if (j == i - 1) { 28 Object.defineProperty(obj, "x_" + i + "_" + j, { 29 get() { 30 return 1; 31 }, 32 enumerable: true, 33 }) 34 } else { 35 obj["x_" + i + "_" + j] = 1; 36 } 37 } 38 39 arr.push(obj); 40 } 41 42 with ({}) {} 43 for (var i = 0; i < 2000; i++) { 44 var idx = i % arr.length; 45 test(arr[idx], idx); 46 test2(arr[idx], idx); 47 }