FRAGMENT(JSString, simple) { js::Rooted<JSString *> empty(cx, JS_NewStringCopyN(cx, NULL, 0)); js::Rooted<JSString *> x(cx, JS_NewStringCopyN(cx, "x", 1)); js::Rooted<JSString *> z(cx, JS_NewStringCopyZ(cx, "z")); // I expect this will be a non-inlined string. js::Rooted<JSString *> stars(cx, JS_NewStringCopyZ(cx, "*************************" "*************************" "*************************" "*************************")); // This may well be an inlined string. js::Rooted<JSString *> xz(cx, JS_ConcatStrings(cx, x, z)); // This will probably be a rope. js::Rooted<JSString *> doubleStars(cx, JS_ConcatStrings(cx, stars, stars)); breakpoint(); (void) empty; (void) x; (void) z; (void) stars; (void) xz; (void) doubleStars; }
FRAGMENT(JSString, simple) { AutoSuppressHazardsForTest noanalysis; JS::Rooted<JSString*> empty(cx, JS_NewStringCopyN(cx, nullptr, 0)); JS::Rooted<JSString*> x(cx, JS_NewStringCopyN(cx, "x", 1)); JS::Rooted<JSString*> z(cx, JS_NewStringCopyZ(cx, "z")); // I expect this will be a non-inlined string. JS::Rooted<JSString*> stars(cx, JS_NewStringCopyZ(cx, "*************************" "*************************" "*************************" "*************************")); // This may well be an inlined string. JS::Rooted<JSString*> xz(cx, JS_ConcatStrings(cx, x, z)); // This will probably be a rope. JS::Rooted<JSString*> 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); }