28 * @run |
28 * @run |
29 */ |
29 */ |
30 |
30 |
31 // Make sure synthetic names of anonymous functions have correct line numbers |
31 // Make sure synthetic names of anonymous functions have correct line numbers |
32 |
32 |
|
33 function getFirstScriptFrame(stack) { |
|
34 for (frameNum in stack) { |
|
35 var frame = stack[frameNum]; |
|
36 if (frame.className.startsWith("jdk.nashorn.internal.scripts.Script$")) { |
|
37 return frame; |
|
38 } |
|
39 } |
|
40 } |
|
41 |
33 function testMethodName(f, expected) { |
42 function testMethodName(f, expected) { |
34 try { |
43 try { |
35 f(); |
44 f(); |
36 fail("expected error"); |
45 fail("expected error"); |
37 } catch (e) { |
46 } catch (e) { |
38 var stack = e.getStackTrace(); |
47 var stack = e.nashornException.getStackTrace(); |
39 if (stack[0].methodName !== expected) { |
48 var name = getFirstScriptFrame(stack).methodName; |
|
49 if (name !== expected) { |
40 fail("got " + stack[0].methodName + ", expected " + expected); |
50 fail("got " + stack[0].methodName + ", expected " + expected); |
41 } |
51 } |
42 } |
52 } |
43 } |
53 } |
44 |
54 |
45 testMethodName(function() { |
55 testMethodName(function() { |
46 return a.b.c; |
56 return a.b.c; |
47 }, "_L45"); |
57 }, "L:55"); |
48 |
58 |
49 testMethodName(function() { throw new Error() }, "_L49"); |
59 testMethodName(function() { throw new Error() }, "L:59"); |
50 |
60 |
51 var f = (function() { |
61 var f = (function() { |
52 return function() { a.b.c; }; |
62 return function() { a.b.c; }; |
53 })(); |
63 })(); |
54 testMethodName(f, "_L51$_L52"); |
64 testMethodName(f, "L:61$L:62"); |
55 |
65 |
56 testMethodName((function() { |
66 testMethodName((function() { |
57 return function() { return a.b.c; }; |
67 return function() { return a.b.c; }; |
58 })(), "_L56$_L57"); |
68 })(), "L:66$L:67"); |