]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/constant-folding-osr-exit.js
JavaScriptCore-7600.1.4.9.tar.gz
[apple/javascriptcore.git] / tests / stress / constant-folding-osr-exit.js
diff --git a/tests/stress/constant-folding-osr-exit.js b/tests/stress/constant-folding-osr-exit.js
new file mode 100644 (file)
index 0000000..12bbe18
--- /dev/null
@@ -0,0 +1,132 @@
+var foo = [
+    function(o) {
+        var x = true;
+        o.f.f;
+        if (x)
+            return;
+        throw new Error();
+    },
+    function(o) {
+        var x = true;
+        o.f.f;
+        if (!x)
+            throw new Error();
+        return;
+    },
+    function(o) {
+        var x = 0;
+        var y = 1;
+        o.f.f;
+        if (x < y)
+            return;
+        throw new Error();
+    },
+    function(o) {
+        var x = 1;
+        var y = 0;
+        o.f.f;
+        if (x > y)
+            return;
+        throw new Error();
+    },
+    function(o) {
+        var x = 0;
+        var y = 1;
+        o.f.f;
+        if (x <= y)
+            return;
+        throw new Error();
+    },
+    function(o) {
+        var x = 1;
+        var y = 0;
+        o.f.f;
+        if (x >= y)
+            return;
+        throw new Error();
+    },
+    function(o) {
+        var x = 0;
+        var y = 1;
+        o.f.f;
+        if (x >= y)
+            throw new Error();
+        return;
+    },
+    function(o) {
+        var x = 1;
+        var y = 0;
+        o.f.f;
+        if (x <= y)
+            throw new Error();
+        return;
+    },
+    function(o) {
+        var x = 0;
+        var y = 1;
+        o.f.f;
+        if (x > y)
+            throw new Error();
+        return;
+    },
+    function(o) {
+        var x = 1;
+        var y = 0;
+        o.f.f;
+        if (x < y)
+            throw new Error();
+        return;
+    },
+    function(o) {
+        var x = 42;
+        o.f.f;
+        if (x == 42)
+            return;
+        throw new Error();
+    },
+    function(o) {
+        var x = 42;
+        o.f.f;
+        if (x != 42)
+            throw new Error();
+        return;
+    },
+    function(o) {
+        var x = 42;
+        o.f.f;
+        if (x === 42)
+            return;
+        throw new Error();
+    },
+    function(o) {
+        var x = 42;
+        o.f.f;
+        if (x !== 42)
+            throw new Error();
+        return;
+    },
+];
+for (var i = 0; i < foo.length; ++i)
+    noInline(foo[i]);
+
+function test(o) {
+    var failed = [];
+    for (var i = 0; i < foo.length; ++i) {
+        try {
+            foo[i](o);
+        } catch (e) {
+            failed.push("Failed " + foo[i] + " with " + e);
+        }
+    }
+    if (failed.length)
+        throw failed;
+}
+
+var object = {f:{f:42}};
+
+for (var i = 0; i < 10000; ++i) {
+    test(object);
+}
+
+test({f:{g:43}});
+