blob: 45ebc7d5a9fbdc36ebf6f64d8f9ea73bc4680279 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
// Test that WeakMap.get() doesn't return a gray GC thing.
function checkNotGray(value) {
// Assigning a gray GC thing to an object propery will assert.
let test = {};
test.property = value;
}
// 1. Make a black WeakMap with a gray key and gray value.
gczeal(0);
let key = {};
let value = {};
let map = new WeakMap();
map.set(key, value);
let gray = grayRoot();
gray.key = key;
addMarkObservers([map, key, value]);
gray = null;
key = null;
value = null;
gc();
let marks = getMarks();
assertEq(marks[0], "black");
assertEq(marks[1], "gray");
assertEq(marks[2], "gray");
// 2. Get our key back, which will expose it and mark it black.
key = nondeterministicGetWeakMapKeys(map)[0];
checkNotGray(key);
// 3. Look up the value in the map and check it's not gray.
value = map.get(key);
checkNotGray(value);
|