#include "gdb-tests.h" #include "vm/JSContext.h" // When JSGC_ANALYSIS is #defined, Rooted needs the definition // of JSLinearString in order to figure out its ThingRootKind #include "vm/StringType.h" FRAGMENT(JSString, simple) { AutoSuppressHazardsForTest noanalysis; JS::Rooted empty(cx, JS_NewStringCopyN(cx, nullptr, 0)); JS::Rooted x(cx, JS_NewStringCopyN(cx, "x", 1)); JS::Rooted z(cx, JS_NewStringCopyZ(cx, "z")); // I expect this will be a non-inlined string. JS::Rooted stars(cx, JS_NewStringCopyZ(cx, "*************************" "*************************" "*************************" "*************************")); // This may well be an inlined string. JS::Rooted xz(cx, JS_ConcatStrings(cx, x, z)); // This will probably be a rope. JS::Rooted doubleStars(cx, JS_ConcatStrings(cx, stars, stars)); // Ensure we're not confused by typedefs for pointer types. JSString* xRaw = x; breakpoint(); use(empty); use(x); use(z); use(stars); use(xz); use(doubleStars); use(xRaw); } FRAGMENT(JSString, null) { AutoSuppressHazardsForTest noanalysis; JS::Rooted null(cx, nullptr); JSString* nullRaw = null; breakpoint(); use(null); use(nullRaw); } FRAGMENT(JSString, subclasses) { JS::Rooted linear( cx, JS_EnsureLinearString(cx, JS_NewStringCopyZ(cx, "Hi!"))); breakpoint(); use(linear); } FRAGMENT(JSString, atom) { JSAtom* molybdenum = js::Atomize(cx, "molybdenum", 10); breakpoint(); use(molybdenum); }