js/src/jit-test/tests/ion/evalCallingName.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:fac1bfeeff86
1
2 function a() {
3 return "a";
4 }
5 function b() {
6 return "b";
7 }
8 function c() {
9 return "c";
10 }
11 var names = ["a","b","c"];
12
13 function foo(name) {
14 return eval(name + "()");
15 }
16
17 for (var i = 0; i < names.length; i++)
18 assertEq(foo(names[i]), names[i]);
19
20 // Test bailout due to bad name passed to eval.
21 try {
22 foo("missing");
23 } catch (e) {
24 assertEq(/missing/.test(e), true);
25 }
26
27 function bar(name) {
28 return eval(name + "()");
29 }
30
31 for (var i = 0; i < names.length; i++)
32 assertEq(bar(names[i]), names[i]);
33
34 function recursion() {
35 return bar({ valueOf: function() { return "gotcha"; }});
36 }
37
38 function gotcha() {
39 return "gotcha";
40 }
41
42 // Test invalidation within call made after name lookup.
43 assertEq(bar("recursion"), "gotcha");

mercurial