function markConstant(obj, key) {
assertEq(getObjectFuseState(obj).properties[key], "Untracked"); // This relies on the fact that storing to an Untracked property marks it // Constant. Use getOwnPropertyDescriptor to prevent interacting with JIT // optimizations.
obj[key] = Object.getOwnPropertyDescriptor(obj, key).value;
} function testGlobal() { var g = newGlobal({sameCompartmentAs: this, useWindowProxy: false});
addObjectFuse(g);
assertEq(getObjectFuseState(g).generation, 0);
// Ensure global variables are marked untracked or constant.
g.evaluate("var foo = 1; var bar; bar = function() {}; function baz() {};"); var state = getObjectFuseState(g);
assertEq(state.properties.foo, "Constant");
assertEq(state.properties.bar, "Constant");
assertEq(state.properties.baz, "Untracked");
// Shadowing a non-constant global on the lexical environment doesn't change // the generation.
g.evaluate("let Object = {};");
assertEq(getObjectFuseState(g).generation, 0);
// Shadowing a constant property does change the generation.
markConstant(g, "Function");
g.evaluate("let Function = {};");
assertEq(getObjectFuseState(g).generation, 1);
// Shadowing a no-longer-constant property must also change the generation because // IC stubs may still have guards for this property.
g.Math = 1;
g.Math = 2;
g.evaluate("let Math = {};");
assertEq(getObjectFuseState(g).generation, 2);
}
testGlobal();
testGlobal();
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet am 2026-08-25)
¤
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.