function bar(a, b) {
let result = a + b; if (result >= fns.length) { return b + a;
} return result;
}
function baz(a, b) { return a + b;
}
let fns = [];
// This is pretty fiddly. What we are trying to test here is a specific path // in the bailout code which needs to know which ICScript to load, and has to // decide between the script's own ICScript, or the trial-inlined ICScript // which belongs to the outer script. It uses the ICFallbackStub's // trialInliningState to make this decision, which can change out from // underneath us if the inlined call fails. So what were doing here is getting // into a state where we've monomorphic inlined a function, and gone to Ion // with it. We then cause the inlined call to fail by calling a function which // doesn't match what we expect, which transitions us to a failed // trialInliningState. We then will bail out *inside* bar, due to the // previously unseen inside of the result >= fns.length check, exercising the // bailout code in question. for (let i = 0; i < 2000; i++) {
fns.push(bar);
}
fns.push(baz);
fns.push(bar);
for (let i = 0; i < fns.length; i++) {
assertEq(foo(fns[i], i, 1), i + 1);
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.