blob: cbbbd7ffda3395514738e39eaaa735d4a640605a (
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
|
// |jit-test| skip-if: !hasFunction.oomTest
// Test for OOM hitting a breakpoint in a generator.
//
// (The purpose is to test OOM-handling in the code that creates the
// Debugger.Frame object and associates it with the generator object.)
let g = newGlobal({newCompartment: true});
g.eval(`\
function* gen(x) { // line 1
x++; // 2
yield x; // 3
} // 4
`);
let dbg = new Debugger;
// On OOM in the debugger, propagate it to the debuggee.
dbg.uncaughtExceptionHook = exc => exc === "out of memory" ? {throw: exc} : null;
let gw = dbg.addDebuggee(g);
let script = gw.makeDebuggeeValue(g.gen).script;
let hits = 0;
let handler = {
hit(frame) {
hits++;
print("x=", frame.environment.getVariable("x"));
}
};
for (let offset of script.getLineOffsets(2))
script.setBreakpoint(offset, handler);
let result;
oomTest(() => {
hits = 0;
result = g.gen(1).next();
}, false);
assertEq(hits, 1);
assertEq(result.done, false);
assertEq(result.value, 2);
|