| // Copyright 2018 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: --async-stack-traces |
| |
| // Check that Error.prepareStackTrace properly exposes async |
| // stack frames and special Promise.all() stack frames. |
| Error.prepareStackTrace = (e, frames) => { |
| assertEquals(two, frames[0].getFunction()); |
| assertEquals(two.name, frames[0].getFunctionName()); |
| assertEquals(null, frames[0].getPromiseIndex()); |
| assertFalse(frames[0].isAsync()); |
| assertEquals(Promise.all, frames[1].getFunction()); |
| assertEquals(0, frames[1].getPromiseIndex()); |
| assertTrue(frames[1].isAsync()); |
| assertTrue(frames[1].isPromiseAll()); |
| assertEquals(one, frames[2].getFunction()); |
| assertEquals(one.name, frames[2].getFunctionName()); |
| assertEquals(null, frames[2].getPromiseIndex()); |
| assertTrue(frames[2].isAsync()); |
| assertFalse(frames[2].isPromiseAll()); |
| return frames; |
| }; |
| |
| async function one(x) { |
| return await Promise.all([two(x)]); |
| } |
| |
| async function two(x) { |
| try { |
| x = await x; |
| throw new Error(); |
| } catch (e) { |
| return e.stack; |
| } |
| } |
| |
| one(1).catch(e => setTimeout(_ => {throw e}, 0)); |