Loading js/src/jit-test/tests/saved-stacks/caching-and-ccws.js 0 → 100644 +35 −0 Original line number Diff line number Diff line // Test that the SavedFrame caching doesn't get messed up in the presence of // cross-compartment calls. const funcSource = "function call(f) { return f(); }"; const g1 = newGlobal(); const g2 = newGlobal(); g1.eval(funcSource); g2.eval(funcSource); eval(funcSource); function doSaveStack() { return saveStack(); } const captureStacksAcrossCompartmens = () => [this, g1, g2].map(g => g.call(doSaveStack)); (function f0() { const stacks = []; for (var i = 0; i < 2; i++) stacks.push(...captureStacksAcrossCompartmens()); const [s1, s2, s3, s4, s5, s6] = stacks; assertEq(s1 != s2, true); assertEq(s2 != s3, true); assertEq(s3 != s1, true); assertEq(s1, s4); assertEq(s2, s5); assertEq(s3, s6); }()); js/src/jit-test/tests/saved-stacks/caching-and-frame-count.js 0 → 100644 +38 −0 Original line number Diff line number Diff line // Test that the SavedFrame caching doesn't mess up counts. Specifically, that // if we capture only the first n frames of a stack, we don't cache that stack // and return it for when someone else captures another stack and asks for more // frames than that last time. function stackLength(stack) { return stack === null ? 0 : 1 + stackLength(stack.parent); } (function f0() { (function f1() { (function f2() { (function f3() { (function f4() { (function f5() { (function f6() { (function f7() { (function f8() { (function f9() { const s1 = saveStack(3); const s2 = saveStack(5); const s3 = saveStack(0 /* no limit */); assertEq(stackLength(s1), 3); assertEq(stackLength(s2), 5); assertEq(stackLength(s3), 11); }()); }()); }()); }()); }()); }()); }()); }()); }()); }()); Loading
js/src/jit-test/tests/saved-stacks/caching-and-ccws.js 0 → 100644 +35 −0 Original line number Diff line number Diff line // Test that the SavedFrame caching doesn't get messed up in the presence of // cross-compartment calls. const funcSource = "function call(f) { return f(); }"; const g1 = newGlobal(); const g2 = newGlobal(); g1.eval(funcSource); g2.eval(funcSource); eval(funcSource); function doSaveStack() { return saveStack(); } const captureStacksAcrossCompartmens = () => [this, g1, g2].map(g => g.call(doSaveStack)); (function f0() { const stacks = []; for (var i = 0; i < 2; i++) stacks.push(...captureStacksAcrossCompartmens()); const [s1, s2, s3, s4, s5, s6] = stacks; assertEq(s1 != s2, true); assertEq(s2 != s3, true); assertEq(s3 != s1, true); assertEq(s1, s4); assertEq(s2, s5); assertEq(s3, s6); }());
js/src/jit-test/tests/saved-stacks/caching-and-frame-count.js 0 → 100644 +38 −0 Original line number Diff line number Diff line // Test that the SavedFrame caching doesn't mess up counts. Specifically, that // if we capture only the first n frames of a stack, we don't cache that stack // and return it for when someone else captures another stack and asks for more // frames than that last time. function stackLength(stack) { return stack === null ? 0 : 1 + stackLength(stack.parent); } (function f0() { (function f1() { (function f2() { (function f3() { (function f4() { (function f5() { (function f6() { (function f7() { (function f8() { (function f9() { const s1 = saveStack(3); const s2 = saveStack(5); const s3 = saveStack(0 /* no limit */); assertEq(stackLength(s1), 3); assertEq(stackLength(s2), 5); assertEq(stackLength(s3), 11); }()); }()); }()); }()); }()); }()); }()); }()); }()); }());