bool allocateSigId(JSContext* cx, const Sig& sig, const void** sigId) { Map::AddPtr p = map_.lookupForAdd(sig); if (p) { MOZ_ASSERT(p->value() > 0); p->value()++; *sigId = p->key(); return true; } UniquePtr<Sig> clone = MakeUnique<Sig>(); if (!clone || !clone->clone(sig) || !map_.add(p, clone.get(), 1)) { ReportOutOfMemory(cx); return false; } *sigId = clone.release(); MOZ_ASSERT(!(uintptr_t(*sigId) & SigIdDesc::ImmediateBit)); return true; }