summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/cacheir/bug1420910.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/cacheir/bug1420910.js')
-rw-r--r--js/src/jit-test/tests/cacheir/bug1420910.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/cacheir/bug1420910.js b/js/src/jit-test/tests/cacheir/bug1420910.js
new file mode 100644
index 0000000000..41d17376dd
--- /dev/null
+++ b/js/src/jit-test/tests/cacheir/bug1420910.js
@@ -0,0 +1,35 @@
+// Testing InstanceOf IC.
+
+Array.prototype.sum = function() {
+ return this.reduce(( acc, cur ) => acc + cur, 0);
+}
+
+
+Iters = 20;
+
+function resultArray(fn, obj) {
+ res = new Array();
+ for (var x = 0; x < Iters; x++) {
+ res.push(fn(obj) ? 1 : 0);
+ }
+ return res;
+}
+
+// Ensure alteration of .prototype invalidates IC
+function basic() {};
+
+protoA = { prop1: "1"};
+basic.prototype = protoA;
+
+io1 = x => { return x instanceof basic; }
+
+var x = new basic();
+beforePrototypeModification = resultArray(io1,x).sum(); //Attach and test IC
+assertEq(beforePrototypeModification,Iters);
+
+basic.prototype = {}; // Invalidate IC
+afterPrototypeModification = resultArray(io1,x).sum(); //Test
+assertEq(afterPrototypeModification,0);
+
+//Primitive LHS returns false.
+assertEq(resultArray(io1,0).sum(),0); \ No newline at end of file