summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/ion/setgname.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/ion/setgname.js')
-rw-r--r--js/src/jit-test/tests/ion/setgname.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/ion/setgname.js b/js/src/jit-test/tests/ion/setgname.js
new file mode 100644
index 0000000000..4d684e8136
--- /dev/null
+++ b/js/src/jit-test/tests/ion/setgname.js
@@ -0,0 +1,56 @@
+
+// aaa is initially undefined. Make sure it's set to the
+// correct value - we have to store the type tag, even though
+// its known type is int32.
+var aaa;
+function f() {
+ function g(x) {
+ if (x)
+ aaa = 22;
+ }
+ g(10);
+
+ function h() {
+ aaa = 22;
+ }
+ for (var i=0; i<70; i++) {
+ h();
+ }
+ assertEq(aaa, 22);
+}
+f();
+
+x = 0;
+function setX(i) {
+ x = i;
+}
+for (var i=0; i<70; i++)
+ setX(i);
+assertEq(x, 69);
+
+y = 3.14;
+y = true;
+y = [];
+function setY(arg) {
+ y = arg;
+}
+for (var i=0; i<70; i++)
+ setY([1]);
+setY([1, 2, 3]);
+assertEq(y.length, 3);
+
+// z is non-configurable, but can be made non-writable.
+var z = 10;
+
+function testNonWritable() {
+ function g() {
+ z = 11;
+ }
+ for (var i=0; i<70; i++) {
+ g();
+ }
+ Object.defineProperty(this, "z", {value: 1234, writable: false});
+ g();
+ assertEq(z, 1234);
+}
+testNonWritable();