]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/assignment-in-function-call-bracket-node.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / stress / assignment-in-function-call-bracket-node.js
diff --git a/tests/stress/assignment-in-function-call-bracket-node.js b/tests/stress/assignment-in-function-call-bracket-node.js
new file mode 100644 (file)
index 0000000..54f70fe
--- /dev/null
@@ -0,0 +1,126 @@
+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error('bad value: ' + actual);
+}
+
+// Simple assignment (not FunctionCallBracketNode).
+
+shouldBe(function () {
+    var object = {
+        null: 'ok'
+    };
+
+    return object[object = null];
+}(), 'ok');
+
+shouldBe(function (value) {
+    var object = { };
+    object.null = 'ok';
+
+    return object[object = value];
+}(null), 'ok');
+
+shouldBe(function () {
+    var object = {
+        null: 'ok'
+    };
+
+    return object['null'];
+}(), 'ok');
+
+shouldBe(function (value) {
+    var object = { };
+    object.null = 'ok';
+
+    return object['null'];
+}(null), 'ok');
+
+shouldBe(function () {
+    var object = {
+        null: 'ok'
+    };
+
+    function fill() {
+        return object = null;
+    }
+
+    return object[fill()];
+}(), 'ok');
+
+shouldBe(function (value) {
+    var object = { };
+    object.null = 'ok';
+
+    function fill() {
+        return object = value;
+    }
+
+    return object[fill()];
+}(null), 'ok');
+
+// FunctionCallBracketNode.
+
+shouldBe(function () {
+    var object = {
+        null: function () {
+            return 'ok';
+        }
+    };
+
+    return object[object = null]();
+}(), 'ok');
+
+shouldBe(function (value) {
+    var object = { };
+    object.null = function () {
+        return 'ok';
+    };
+
+    return object[object = value]();
+}(null), 'ok');
+
+shouldBe(function () {
+    var object = {
+        null: function () {
+            return 'ok';
+        }
+    };
+
+    return object['null']();
+}(), 'ok');
+
+shouldBe(function (value) {
+    var object = { };
+    object.null = function () {
+        return 'ok';
+    };
+
+    return object['null']();
+}(null), 'ok');
+
+shouldBe(function () {
+    var object = {
+        null: function () {
+            return 'ok';
+        }
+    };
+
+    function fill() {
+        return object = null;
+    }
+
+    return object[fill()]();
+}(), 'ok');
+
+shouldBe(function (value) {
+    var object = { };
+    object.null = function () {
+        return 'ok';
+    };
+
+    function fill() {
+        return object = value;
+    }
+
+    return object[fill()]();
+}(null), 'ok');