Source code
Revision control
Copy as Markdown
Other Tools
function setSlot() {
var o = {x: 1, y: 2};
for (var i=0; i<100; i++) {
var p = (i & 1) ? "x" : "y";
o[p] = i;
assertEq((i & 1) ? o.x : o.y, i);
}
}
setSlot();
function setUnboxed() {
var arr = [];
for (var i=0; i<100; i++)
arr.push({x: 1, y: 2});
for (var i=0; i<100; i++) {
var o = arr[i];
var p = (i & 1) ? "x" : "y";
o[p] = i;
assertEq((i & 1) ? o.x : o.y, i);
}
}
setUnboxed();
function setUnboxedExpando() {
var arr = [];
for (var i=0; i<100; i++)
arr.push({x: 1, y: 2});
for (var i=0; i<100; i++) {
var o = arr[i];
o.a = 1;
o.b = 2;
var p = (i & 1) ? "a" : "b";
o[p] = i;
o[p] = o[p] + 4;
assertEq((i & 1) ? o.a : o.b, i + 4);
}
}
setUnboxedExpando();
function setArrayLength() {
var arr = [];
for (var i=0; i<100; i++) {
var p = (i & 1) ? "length" : "x";
arr[p] = i;
assertEq((i & 1) ? arr.length : arr.x, i);
}
}
setArrayLength();
function setter() {
var c = 0;
var o = {set x(i) { c += i; }, set y(i) { c += i + 2; }};
for (var i=0; i<100; i++) {
var p = (i & 1) ? "x" : "y";
o[p] = i;
}
assertEq(c, 5050);
}
setter();
function addSlot() {
for (var i=0; i<100; i++) {
var o = {};
var p1 = (i & 1) ? "x" : "y";
var p2 = (i % 3) ? "a" : "b";
o[p1] = i;
o[p2] = i;
assertEq((i & 1) ? o.x : o.y, i);
assertEq((i % 3) ? o.a : o.b, i);
}
}
addSlot();
function addExpandoSlot() {
var arr = [];
for (var i=0; i<100; i++)
arr.push({c: 1, d: 2});
for (var i=0; i<100; i++) {
var o = arr[i];
var p1 = (i & 1) ? "x" : "y";
var p2 = (i % 3) ? "a" : "b";
o[p1] = i;
o[p2] = i;
assertEq((i & 1) ? o.x : o.y, i);
assertEq((i % 3) ? o.a : o.b, i);
}
}
addExpandoSlot();