// Copyright 2019 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: --allow-natives-syntax --opt --experimental-stack-trace-frames // Verifies that "print" shows up in Error.stack when "bar" is optimized // by Turbofan: // Error // at foo (...) // at Object.toString (...) // at print () // at bar (...) // at (...) let prepareStackTraceCalled = false; Error.prepareStackTrace = (e, frames) => { prepareStackTraceCalled = true; assertEquals(5, frames.length); assertEquals(foo, frames[0].getFunction()); assertEquals(object.toString, frames[1].getFunction()); assertEquals("print", frames[2].getFunctionName()); assertEquals(bar, frames[3].getFunction()); return frames; }; function foo() { throw new Error(); } const object = { toString: () => { return foo(); } }; function bar() { print(object); } %PrepareFunctionForOptimization(bar); try { bar(); } catch (e) {} try { bar(); } catch (e) {} %OptimizeFunctionOnNextCall(bar); try { bar(); } catch(e) { // Trigger prepareStackTrace. e.stack; } assertOptimized(bar); assertTrue(prepareStackTraceCalled);