| // Copyright 2020 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --always-opt --ignore-unhandled-promises |
| |
| var __caught = 0; |
| |
| (function main() { |
| function foo(f) { |
| const pr = new Promise(function executor() { |
| f(function resolvefun() { |
| try { |
| throw 42; |
| } catch (e) { |
| __caught++; |
| } |
| }, function rejectfun() {}); |
| }); |
| pr.__proto__ = foo.prototype; |
| return pr; |
| } |
| foo.__proto__ = Promise; |
| foo.prototype.then = function thenfun() {}; |
| new foo(); |
| foo.prototype = undefined; |
| foo.all([foo.resolve()]); |
| })(); |
| |
| assertEquals(2, __caught); |