90 lines
1.7 KiB
JavaScript
90 lines
1.7 KiB
JavaScript
if (this.description)
|
|
description("Test caching with re-entrancy.");
|
|
|
|
function test1() {
|
|
var objects = [{prop:1}, {get prop(){return 2}}];
|
|
|
|
function g(o) {
|
|
return o.prop;
|
|
}
|
|
|
|
for (var i = 0; i < 10000; i++) {
|
|
var o = {
|
|
get prop() {
|
|
try {
|
|
g(objects[++j]);
|
|
}catch(e){
|
|
}
|
|
return 1;
|
|
}
|
|
};
|
|
o[i] = i;
|
|
objects.push(o);
|
|
}
|
|
var j=0;
|
|
g(objects[0]);
|
|
g(objects[1]);
|
|
g(objects[2]);
|
|
g(objects[3]);
|
|
}
|
|
|
|
|
|
function test2() {
|
|
var objects = [Object.create({prop:1}), Object.create({get prop(){return 2}})];
|
|
|
|
function g(o) {
|
|
return o.prop;
|
|
}
|
|
var proto = {
|
|
get prop() {
|
|
try {
|
|
g(objects[++j]);
|
|
}catch(e){
|
|
}
|
|
return 1;
|
|
}
|
|
};
|
|
for (var i = 0; i < 10000; i++) {
|
|
var o = Object.create(proto);
|
|
o[i] = i;
|
|
objects.push(o);
|
|
}
|
|
var j=0;
|
|
g(objects[0]);
|
|
g(objects[1]);
|
|
g(objects[2]);
|
|
g(objects[3]);
|
|
}
|
|
|
|
|
|
function test3() {
|
|
var objects = [Object.create(Object.create({prop:1})), Object.create(Object.create({get prop(){return 2}}))];
|
|
|
|
function g(o) {
|
|
return o.prop;
|
|
}
|
|
var proto = {
|
|
get prop() {
|
|
try {
|
|
g(objects[++j]);
|
|
}catch(e){
|
|
}
|
|
return 1;
|
|
}
|
|
};
|
|
for (var i = 0; i < 10000; i++) {
|
|
var o = Object.create(Object.create(proto));
|
|
o[i] = i;
|
|
objects.push(o);
|
|
}
|
|
var j=0;
|
|
g(objects[0]);
|
|
g(objects[1]);
|
|
g(objects[2]);
|
|
g(objects[3]);
|
|
}
|
|
|
|
test1();
|
|
test2();
|
|
test3();
|