if (getJitCompilerOptions()["ion.warmup.trigger"] > 50) setJitCompilerOption("ion.warmup.trigger", 50); function getObjects() { var objs = []; // Own scripted getter/setter. objs.push({x: 0, get prop() { assertJitStackInvariants(); return ++this.x; }, set prop(v) { assertJitStackInvariants(); this.x += v; }}); // Scripted getter/setter on prototype. Also verify extra formal args are // handled correctly. function getter(a, b, c) { assertEq(arguments.length, 0); assertEq(a, undefined); assertEq(b, undefined); assertEq(c, undefined); assertJitStackInvariants(); bailout(); return ++this.y; } function setter1(a, b) { assertEq(arguments.length, 1); assertEq(b, undefined); assertJitStackInvariants(); this.y = a; bailout(); return "unused"; } var proto = {}; Object.defineProperty(proto, "prop", {get: getter, set: setter1}); objs.push(Object.create(proto)); function setter2() { assertEq(arguments.length, 1); assertJitStackInvariants(); this.y = arguments[0]; } proto = {}; Object.defineProperty(proto, "prop", {get: getter, set: setter2}); objs.push(Object.create(proto)); return objs; } function f() { var objs = getObjects(); var res = 0; for (var i=0; i<200; i++) { var o = objs[i % objs.length]; o.prop = 2; res += o.prop; } assertEq(res, 7233); } f();