promise-1.js (1582B)
1 // Mutating Promise.prototype.constructor pops the fuse. A no-op change is fine. 2 newGlobal().evaluate(` 3 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true); 4 let v = Promise.prototype.constructor; 5 Promise.prototype.constructor = v; 6 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true); 7 Promise.prototype.constructor = {}; 8 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, false); 9 `); 10 11 // Same for Promise.prototype.then. 12 newGlobal().evaluate(` 13 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true); 14 let v = Promise.prototype.then; 15 Promise.prototype.then = v; 16 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true); 17 Promise.prototype.then = x => x; 18 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, false); 19 `); 20 21 // Same for Promise.resolve. 22 newGlobal().evaluate(` 23 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true); 24 let v = Promise.resolve; 25 Promise.resolve = v; 26 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true); 27 delete Promise.resolve; 28 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, false); 29 `); 30 31 // Same for the Promise[@@species] getter. 32 newGlobal().evaluate(` 33 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true); 34 Object.defineProperty(Promise, Symbol.species, {}); 35 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true); 36 Object.defineProperty(Promise, Symbol.species, {value: null}); 37 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, false); 38 `); 39 40 assertEq(getUseCounterResults().OptimizePromiseLookupFuse, 4);