diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/jit-test/tests/ion/scripted-getter-setter.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/ion/scripted-getter-setter.js')
-rw-r--r-- | js/src/jit-test/tests/ion/scripted-getter-setter.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/ion/scripted-getter-setter.js b/js/src/jit-test/tests/ion/scripted-getter-setter.js new file mode 100644 index 0000000000..4e8842cba5 --- /dev/null +++ b/js/src/jit-test/tests/ion/scripted-getter-setter.js @@ -0,0 +1,59 @@ +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(); |