Source code

Revision control

Copy as Markdown

Other Tools

if (typeof disassemble !== "function") {
quit();
}
const g = newGlobal({ newCompartment: true });
g.eval(`
async function func() {
await 10;
}
async function * func2() {
await 10;
}
var func_dis = disassemble(func);
var func2_dis = disassemble(func2);
`);
const d = new Debugger();
const dg = d.addDebuggee(g);
const script = dg.makeDebuggeeValue(g.func).script;
const script2 = dg.makeDebuggeeValue(g.func2).script;
function getOffsets(code) {
let CanSkipAwait_offset = -1;
let Await_offset = -1;
let m;
for (const line of code.split("\n")) {
m = line.match(/(\d+):\s+\d+\s+CanSkipAwait\s/);
if (m) {
CanSkipAwait_offset = parseInt(m[1], 10);
}
m = line.match(/(\d+):\s+\d+\s+Await\s/);
if (m) {
Await_offset = parseInt(m[1], 10);
}
}
assertEq(CanSkipAwait_offset !== -1, true);
assertEq(Await_offset !== -1, true);
return [CanSkipAwait_offset, Await_offset];
}
let [CanSkipAwait_offset, Await_offset] = getOffsets(g.func_dis);
assertEq(script.getEffectfulOffsets().includes(CanSkipAwait_offset), true);
assertEq(script.getEffectfulOffsets().includes(Await_offset), true);
[CanSkipAwait_offset, Await_offset] = getOffsets(g.func2_dis);
assertEq(script2.getEffectfulOffsets().includes(CanSkipAwait_offset), true);
assertEq(script2.getEffectfulOffsets().includes(Await_offset), true);