blob: d8f6b28b2c35ed029498eae447affea58bf3c565 [file] [log] [blame]
// Makes sure we don't use base's tag register on 32-bit when an inline cache fails and jumps to the slow path
// because the slow path depends on the base being present.
var createCustomGetterObject = $vm.createCustomGetterObject;
function assert(b) {
if (!b)
throw new Error("baddd");
}
noInline(assert);
let customGetter = createCustomGetterObject();
let otherObj = {
customGetter: 20
};
function randomFunction() {}
noInline(randomFunction);
function foo(o, c) {
let baz = o.customGetter;
if (c) {
o = 42;
}
let jaz = o.foo;
let kaz = jaz + "hey";
let raz = kaz + "hey";
let result = o.customGetter;
randomFunction(!c, baz, jaz, kaz, raz);
return result;
}
noInline(foo);
for (let i = 0; i < 10000; i++) {
switch (i % 2) {
case 0:
assert(foo(customGetter) === 100);
break;
case 1:
assert(foo(otherObj) === 20);
break;
}
}
assert(foo({hello: 20, world:50, customGetter: 40}) === 40); // Make sure we don't trample registers in "o.customGetter" inline cache failure in foo.