bool read() {
     if (!reader_.more())
         return false;
     offset_ = reader_.readUnsigned();
     extOffset_ = reader_.readUnsigned();
     return true;
 }
static void
TraceDataRelocations(JSTracer *trc, uint8 *buffer, CompactBufferReader &reader)
{
    while (reader.more()) {
        size_t offset = reader.readUnsigned();
        void **ptr = JSC::X86Assembler::getPointerRef(buffer + offset);

        // No barrier needed since these are constants.
        gc::MarkThingOrValueUnbarriered(trc, reinterpret_cast<uintptr_t *>(ptr), "imm-gc-word");
    }
}