summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/ion/super-prop.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/jit-test/tests/ion/super-prop.js
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/ion/super-prop.js')
-rw-r--r--js/src/jit-test/tests/ion/super-prop.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/ion/super-prop.js b/js/src/jit-test/tests/ion/super-prop.js
new file mode 100644
index 0000000000..004284730f
--- /dev/null
+++ b/js/src/jit-test/tests/ion/super-prop.js
@@ -0,0 +1,87 @@
+class Y {
+ a() {
+ assertEq(this.__proto__, X.prototype);
+ return 1;
+ }
+ b() {
+ assertEq(this.__proto__, X.prototype);
+ return 2;
+ }
+}
+
+class X extends Y {
+ a() { throw "not invoked"; }
+ b() {
+ return super.a() + super.b();
+ }
+ c(i) {
+ var a, b;
+
+ if (i % 2) {
+ a = "a";
+ b = "b"
+ } else {
+ a = "b";
+ b = "a";
+ }
+
+ return super[a]() + super[b]();
+ }
+}
+
+function simple() {
+ var x = new X();
+ assertEq(x.b(), 3);
+ assertEq(x.c(), 3);
+}
+
+class A {
+ b() { return 1;}
+}
+class B extends A {
+ a() {
+ assertEq(super.b(), 1);
+ }
+}
+
+function nullHomeObjectSuperBase(i) {
+ var b = new B();
+ if (i == 500) {
+ Object.setPrototypeOf(B.prototype, null);
+ // Don't crash
+ }
+ b.a();
+}
+
+class SArray extends Array {
+ constructor() {
+ super("a", "b");
+ }
+
+ a() {
+ assertEq(super.length, 0);
+ assertEq(this.length, 2);
+
+ assertEq(this[0], "a");
+ assertEq(this[1], "b");
+
+ assertEq(super[0], undefined);
+ assertEq(super[1], undefined);
+ }
+}
+
+function array() {
+ var s = new SArray();
+ s.a();
+}
+
+for (var i = 0; i < 1e4; i++) {
+ simple();
+ array();
+
+ try {
+ nullHomeObjectSuperBase(i);
+ } catch (e) {
+ assertEq(i >= 500, true);
+ }
+}