1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/ion/evalCallingName.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,43 @@ 1.4 + 1.5 +function a() { 1.6 + return "a"; 1.7 +} 1.8 +function b() { 1.9 + return "b"; 1.10 +} 1.11 +function c() { 1.12 + return "c"; 1.13 +} 1.14 +var names = ["a","b","c"]; 1.15 + 1.16 +function foo(name) { 1.17 + return eval(name + "()"); 1.18 +} 1.19 + 1.20 +for (var i = 0; i < names.length; i++) 1.21 + assertEq(foo(names[i]), names[i]); 1.22 + 1.23 +// Test bailout due to bad name passed to eval. 1.24 +try { 1.25 + foo("missing"); 1.26 +} catch (e) { 1.27 + assertEq(/missing/.test(e), true); 1.28 +} 1.29 + 1.30 +function bar(name) { 1.31 + return eval(name + "()"); 1.32 +} 1.33 + 1.34 +for (var i = 0; i < names.length; i++) 1.35 + assertEq(bar(names[i]), names[i]); 1.36 + 1.37 +function recursion() { 1.38 + return bar({ valueOf: function() { return "gotcha"; }}); 1.39 +} 1.40 + 1.41 +function gotcha() { 1.42 + return "gotcha"; 1.43 +} 1.44 + 1.45 +// Test invalidation within call made after name lookup. 1.46 +assertEq(bar("recursion"), "gotcha");