X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/escape-object-in-diamond-then-exit.js diff --git a/tests/stress/escape-object-in-diamond-then-exit.js b/tests/stress/escape-object-in-diamond-then-exit.js new file mode 100644 index 0000000..fbb903d --- /dev/null +++ b/tests/stress/escape-object-in-diamond-then-exit.js @@ -0,0 +1,40 @@ +var global = null; + +function foo(p, q) { + var o = {f:42}; + if (p) + global = o; + var tmp = q + 1; + return o.f + tmp; +} + +noInline(foo); + +var lastObject = null; + +function validateEscape(when) { + if (global === lastObject) + throw "Error: bad value in global " + when + ", identical to lastObject."; + if (global === null || !(typeof global == "object")) + throw "Error: bad value in global " + when + ": it's not an object."; + if (global.f != 42) + throw "Error: bad value in global " + when + ": f isn't 42, it's: " + global.f; + lastObject = global; + global = null; +} + +for (var i = 0; i < 10000; ++i) { + var escape = !!(i & 1); + var result = foo(escape, 42); + if (result != 42 + 42 + 1) + throw "Error: bad result: " + result; + if (escape) + validateEscape("in loop"); + else if (global !== null) + throw "Error: bad value in global: " + global; +} + +var result = foo(true, 2147483647); +if (result != 42 + 2147483647 + 1) + throw "Error: bad result at end: " + result; +validateEscape("at end");