// Only return early if we are marking a non-butterfly, since butterflies without indexed properties could point past the end of their allocation.
// If we do, and there is another live butterfly immediately following the first, we will mark the latter one here but we still need to
// mark the former.
if (isLive && !mayHaveIndexingHeader(cellKind)) {
static_assert(!JSString::numberOfLowerTierPreciseCells && !JSRopeString::numberOfLowerTierPreciseCells, "We only check for strings in MarkedBlocks so Strings better not have precise allocations");
// Since we're looking for strings we only need to check if we know we're not looking at an allocation with an IndexingHeader.
// FIXME: If we wanted to make this more performant we could have a JSString HeapCell::Kind or embed the JSType in the MarkedBlock::Handle.
if (auto* string = dynamicDowncast<const JSString>(std::bit_cast<const JSCell*>(pointer)))