| "use strict"; |
| |
| // This test passes when JSC doesn't crash. |
| |
| let p = new Proxy(function() { }, { |
| apply: function() { |
| return bar(); |
| } |
| }); |
| |
| function bar() { |
| let item = getItem(); |
| return item.foo; |
| } |
| |
| let i; |
| let shouldReturnBad = false; |
| let good = [function() {return 1}, {b: 20}, {c: 40}, {d:50}] |
| let bad = [{asdfhasf: 20}, {e:50}, {j:70}, {k:100}, null]; |
| function getItem() { |
| if (shouldReturnBad) |
| return bad[i % bad.length]; |
| return good[i % good.length]; |
| } |
| noInline(getItem); |
| |
| function start() { |
| for (i = 0; i < 1000; i++) { |
| p(); |
| } |
| |
| shouldReturnBad = true; |
| for (i = 0; i < 10000; i++) { |
| try { |
| p(); |
| } catch(e) { } |
| } |
| } |
| start(); |