| var foos = [ |
| function(o) { o.ff = 42; }, |
| function(o) { o.ff = 42; }, |
| function(o) { o.ff = 42; }, |
| function(o) { o.ff = 42; }, |
| function(o) { o.ff = 42; }, |
| function(o) { o.ff = 42; }, |
| function(o) { o.ff = 42; }, |
| function(o) { o.ff = 42; } |
| ]; |
| |
| if (foos.length != 8) |
| throw "Error"; |
| |
| function bar(o, n) { |
| if (n == 0) |
| return; |
| o.na = 1; |
| if (n == 1) |
| return; |
| o.nb = 2; |
| if (n == 2) |
| return; |
| o.nc = 3; |
| if (n == 3) |
| return; |
| o.nd = 4; |
| if (n == 4) |
| return; |
| o.ne = 5; |
| if (n == 5) |
| return; |
| o.nf = 6; |
| if (n == 6) |
| return; |
| o.ng = 7; |
| if (n == 7) |
| return; |
| o.nh = 8; |
| } |
| |
| function baz(o, n) { |
| if (n == 0) |
| return; |
| if (o.na != 1) |
| throw "Memory corruption"; |
| if (n == 1) |
| return; |
| if (o.nb != 2) |
| throw "Memory corruption"; |
| if (n == 2) |
| return; |
| if (o.nc != 3) |
| throw "Memory corruption"; |
| if (n == 3) |
| return; |
| if (o.nd != 4) |
| throw "Memory corruption"; |
| if (n == 4) |
| return; |
| if (o.ne != 5) |
| throw "Memory corruption"; |
| if (n == 5) |
| return; |
| if (o.nf != 6) |
| throw "Memory corruption"; |
| if (n == 6) |
| return; |
| if (o.ng != 7) |
| throw "Memory corruption"; |
| if (n == 7) |
| return; |
| if (o.nh != 8) |
| throw "Memory corruption"; |
| } |
| |
| for (var i = 0; i < 8; ++i) |
| noInline(foos[i]); |
| noInline(bar); |
| |
| for (var i = 0; i < 100000; ++i) { |
| var o = {}; |
| var p = {a:1, b:2, c:3, d:4, e:5, f:6}; |
| bar(o, i % 8); |
| bar(p, i % 8); |
| |
| foos[i % 8](o); |
| foos[i % 8](p); |
| |
| if (o.ff != 42) |
| throw "Bad result in o: " + o.ff; |
| if (p.ff != 42) |
| throw "Bad result in o: " + p.ff; |
| |
| if (p.a != 1 || p.b != 2 || p.c != 3 || p.d != 4 || p.e != 5 || p.f != 6) |
| throw "Memory corruption" |
| baz(o, i % 8); |
| baz(p, i % 8); |
| } |
| |