// Copyright 2015 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. var o = { f: function() { throw new Error(); }, get j() { o.h(); }, set k(_) { o.j; }, }; o.g1 = function() { o.f() } o.g2 = o.g1; o.h = function() { o.g1() } try { o.k = 42; } catch (e) { Error.prepareStackTrace = function(e, frames) { return frames; }; var frames = e.stack; Error.prepareStackTrace = undefined; assertEquals("f", frames[0].getMethodName()); assertEquals(null, frames[1].getMethodName()); assertEquals("h", frames[2].getMethodName()); assertEquals("j", frames[3].getMethodName()); assertEquals("k", frames[4].getMethodName()); assertEquals(null, frames[5].getMethodName()); } function testMethodName(f, frameNumber, expectedName) { try { Error.prepareStackTrace = function(e, frames) { return frames; } f(); assertUnreachable(); } catch (e) { const frame = e.stack[frameNumber]; assertEquals(expectedName, frame.getMethodName()); } finally { Error.prepareStackTrace = undefined; } } const thrower = { valueOf: () => { throw new Error(); }}; { const str = ""; testMethodName(() => { str.indexOf(str, thrower); }, 1, "indexOf"); } { const nr = 42; testMethodName(() => { nr.toString(thrower); }, 1, "toString"); }