/* static */ bool InefficientNonFlatteningStringHashPolicy::match(const JSString *const &k, const Lookup &l) { // We can't use js::EqualStrings, because that flattens our strings. if (k->length() != l->length()) return false; const jschar *c1; ScopedJSFreePtr<jschar> ownedChars1; if (k->hasPureChars()) { c1 = k->pureChars(); } else { if (!k->copyNonPureChars(/* tcx */ nullptr, ownedChars1)) MOZ_CRASH("oom"); c1 = ownedChars1; } const jschar *c2; ScopedJSFreePtr<jschar> ownedChars2; if (l->hasPureChars()) { c2 = l->pureChars(); } else { if (!l->copyNonPureChars(/* tcx */ nullptr, ownedChars2)) MOZ_CRASH("oom"); c2 = ownedChars2; } return PodEqual(c1, c2, k->length()); }
/* static */ HashNumber InefficientNonFlatteningStringHashPolicy::hash(const Lookup &l) { ScopedJSFreePtr<jschar> ownedChars; const jschar *chars; if (l->hasPureChars()) { chars = l->pureChars(); } else { // Slowest hash function evar! if (!l->copyNonPureChars(/* tcx */ nullptr, ownedChars)) MOZ_CRASH("oom"); chars = ownedChars; } return mozilla::HashString(chars, l->length()); }