// Test handling of tenured dependent strings pointing to nursery base strings.
gczeal(0);
function makeExtensibleStrFrom(str) { var left = str.substr(0, str.length/2); var right = str.substr(str.length/2, str.length); var ropeStr = left + right; return ensureLinearString(ropeStr);
}
function repr(s) { return JSON.parse(stringRepresentation(s));
}
// Fail to construct T3 -> Tbase3 -> Nbase4. It will refuse because T3 would be using // chars from Nbase4 that can't be updated since T3 is not in the store buffer. Instead, // it will allocate a new buffer for the rope root, leaving Tbase3 alone and keeping // T3 -> Tbase3. var Tbase3 = makeExtensibleStrFrom('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm');
minorgc(); var T3 = newDependentString(Tbase3, 0, 30, { tenured: true }); var Nbase4 = newRope(Tbase3, "DEF");
ensureLinearString(Nbase4);
assertEq(repr(Tbase3).isTenured, true, "Tbase3 is tenured");
assertEq(repr(Tbase3).flags.includes("EXTENSIBLE"), true, "Tbase3 is extensible");
assertEq(repr(Nbase4).flags.includes("DEPENDENT_BIT"), false, "expect: Nbase4 is not a dependent string")
assertEq(repr(T3).flags.includes("DEPENDENT_BIT"), true, "expect: T3 is a dependent string")
assertEq(dependsOn(T3, Tbase3), "expect: T3 -> Tbase3");
function bug1879918() { const s = JSON.parse('["abcdefabcdefabcdefabcdefabcdefabcdefabcdef"]')[0]; const dep = newDependentString(s, 1, { tenured: true });
minorgc();
assertEq(dep, "bcdefabcdefabcdefabcdefabcdefabcdefabcdef");
}
bug1879918();
Messung V0.5
¤ Dauer der Verarbeitung: 0.0 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.