mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1028418 - Part 7: Tests for caching edge cases; r=shu
This commit is contained in:
parent
b8d0989a23
commit
0797a7c1e5
35
js/src/jit-test/tests/saved-stacks/caching-and-ccws.js
Normal file
35
js/src/jit-test/tests/saved-stacks/caching-and-ccws.js
Normal file
@ -0,0 +1,35 @@
|
||||
// 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);
|
||||
}());
|
@ -0,0 +1,38 @@
|
||||
// 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…
Reference in New Issue
Block a user