| var createDOMJITGetterComplexObject = $vm.createDOMJITGetterComplexObject; |
| |
| function assert(b) { |
| if (!b) throw new Error("bad value"); |
| } |
| noInline(assert); |
| |
| let i; |
| var o1 = createDOMJITGetterComplexObject(); |
| o1.x = "x"; |
| |
| var o2 = { |
| customGetter: 40 |
| } |
| |
| var o3 = { |
| x: 100, |
| customGetter: "f" |
| } |
| |
| function bar(i) { |
| if (i === -1000) |
| return o1; |
| |
| if (i % 2) |
| return o3; |
| else |
| return o2; |
| } |
| noInline(bar); |
| |
| function foo(i) { |
| var o = bar(i); |
| let v; |
| let v2; |
| let v3; |
| try { |
| v2 = o.x; |
| v = o.customGetter + v2; |
| } catch(e) { |
| assert(v2 === "x"); |
| assert(o === o1); |
| } |
| } |
| noInline(foo); |
| |
| foo(i); |
| for (i = 0; i < 1000; i++) |
| foo(i); |
| |
| o1.enableException(); |
| i = -1000; |
| for (let j = 0; j < 1000; j++) |
| foo(i); |