summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/gc/weakmap-expose.js
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);