Source code
Revision control
Copy as Markdown
Other Tools
// Mutating Promise.prototype.constructor pops the fuse. A no-op change is fine.
newGlobal().evaluate(`
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
let v = Promise.prototype.constructor;
Promise.prototype.constructor = v;
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
Promise.prototype.constructor = {};
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, false);
`);
// Same for Promise.prototype.then.
newGlobal().evaluate(`
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
let v = Promise.prototype.then;
Promise.prototype.then = v;
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
Promise.prototype.then = x => x;
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, false);
`);
// Same for Promise.resolve.
newGlobal().evaluate(`
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
let v = Promise.resolve;
Promise.resolve = v;
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
delete Promise.resolve;
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, false);
`);
// Same for the Promise[@@species] getter.
newGlobal().evaluate(`
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
Object.defineProperty(Promise, Symbol.species, {});
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
Object.defineProperty(Promise, Symbol.species, {value: null});
assertEq(getFuseState().OptimizePromiseLookupFuse.intact, false);
`);
assertEq(getUseCounterResults().OptimizePromiseLookupFuse, 4);