/js/src/jit-test/tests/jaeger/recompile/exotic.js
http://github.com/zpao/v8monkey · JavaScript · 74 lines · 56 code · 12 blank · 6 comment · 10 complexity · 71c8864f4b31aad63f72922e9aab7026 MD5 · raw file
- // Test exotic ways of triggering recompilation.
- // Lowered native call.
- var x = 0;
- var y = true;
- for (var i = 0; i < 20; i++) {
- x += Array.map.apply(undefined, [[0], function(x) { if (i == 10) eval("y = 20"); return 1; }])[0];
- }
- assertEq(x, 20);
- assertEq(y, 20);
- // Recompilation triggered by local function.
- var o = {};
- function what(q) {
- function inner() { return q; }
- o.f = inner;
- var a = o.f();
- return a;
- }
- for (var i = 0; i < 10; i++) {
- var a = what(i);
- assertEq(a, i);
- }
- // Lowered scripted call to apply returning code pointer.
- var global = 3;
- function foo(x, y) {
- var q = x.apply(null, y);
- if (q != 10)
- assertEq(global, true);
- }
- foo(function(a) { global = a; return 10; }, [1]);
- foo(function(a) { global = a; return 10; }, [1]);
- foo(function(a) { global = a; return 10; }, [1]);
- assertEq(global, 1);
- foo(function(a) { global = a; return 3; }, [true]);
- assertEq(global, true);
- // Lowered scripted call returning NULL.
- var oglobal = 3;
- function xfoo(x, y) {
- var q = x.apply(null, y);
- if (q != 10)
- assertEq(oglobal, true);
- }
- xfoo(function(a) { oglobal = a; return 10; }, [1]);
- xfoo(function(a) { oglobal = a; return 10; }, [1]);
- xfoo(function(a) { oglobal = a; return 10; }, [1]);
- assertEq(oglobal, 1);
- xfoo(function(a) { <x></x>; oglobal = a; return 3; }, [true]);
- assertEq(oglobal, true);
- // Recompilation out of SplatApplyArgs.
- weirdarray = [,,1,2,3];
- Object.defineProperty(weirdarray, 0, {get: function() { vglobal = 'true'; }});
- var vglobal = 3;
- function yfoo(x, y) {
- var q = x.apply(null, y);
- if (q != 10)
- assertEq(vglobal, 'true');
- else
- assertEq(vglobal, 3);
- }
- yfoo(function(a) { return 10; }, [1]);
- yfoo(function(a) { return 10; }, [1]);
- yfoo(function(a) { return 10; }, [1]);
- yfoo(function() { return 0; }, weirdarray);