size_t RepoAuthType::hash() const { auto const iTag = static_cast<size_t>(tag()); if (hasClassName()) { return folly::hash::hash_128_to_64(iTag, clsName()->hash()); } if (mayHaveArrData() && array()) { return folly::hash::hash_128_to_64(iTag, array()->id()); } return iTag; }
bool ArrayTypeTable::check(const RepoAuthType::Array* arr) const { if (!arr) return true; switch (arr->tag()) { case RepoAuthType::Array::Tag::Packed: { for (uint32_t idx = 0; idx < arr->size(); ++idx) { auto rat = arr->packedElem(idx); assertx(rat.resolved()); if (rat.mayHaveArrData()) check(rat.array()); } break; } case RepoAuthType::Array::Tag::PackedN: { auto rat = arr->elemType(); assertx(rat.resolved()); if (rat.mayHaveArrData()) check(rat.array()); break; } } return true; }
const uint32_t RepoAuthType::arrayId() const { assert(mayHaveArrData()); if (resolved()) return m_data.ptr() ? array()->id() : kInvalidArrayId; return reinterpret_cast<uintptr_t>(m_data.ptr()); }