diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js
index 2854f65b5992..fa812a2b67b5 100644
--- a/src/librustdoc/html/static/js/search.js
+++ b/src/librustdoc/html/static/js/search.js
@@ -4031,7 +4031,11 @@ class DocSearch {
return empty_postings_list;
}
const typeFilter = itemTypeFromName(elem.typeFilter);
- const searchResults = await index.search(elem.normalizedPathLast);
+ const [searchResults, upla, uplb] = await Promise.all([
+ index.search(elem.normalizedPathLast),
+ unpackPostingsListAll(elem.generics, polarity),
+ unpackPostingsListBindings(elem.bindings, polarity),
+ ]);
/**
* @type {Promise<[
* number,
@@ -4196,8 +4200,6 @@ class DocSearch {
})) {
continue;
}
- const upla = await unpackPostingsListAll(elem.generics, polarity);
- const uplb = await unpackPostingsListBindings(elem.bindings, polarity);
for (const {invertedIndex: genericsIdx, queryElem: generics} of upla) {
for (const {invertedIndex: bindingsIdx, queryElem: bindings} of uplb) {
results.push({
@@ -4303,19 +4305,23 @@ class DocSearch {
queryElem: new Map(),
}];
}
- const firstKeyIds = await index.search(firstKey);
+ // HEADS UP!
+ // We must put this map back the way we found it before returning,
+ // otherwise things break.
+ elems.delete(firstKey);
+ const [firstKeyIds, firstPostingsList, remainingAll] = await Promise.all([
+ index.search(firstKey),
+ unpackPostingsListAll(firstList, polarity),
+ unpackPostingsListBindings(elems, polarity),
+ ]);
if (!firstKeyIds) {
+ elems.set(firstKey, firstList);
// User specified a non-existent key.
return [{
invertedIndex: empty_inverted_index,
queryElem: new Map(),
}];
}
- elems.delete(firstKey);
- const [firstPostingsList, remainingAll] = await Promise.all([
- unpackPostingsListAll(firstList, polarity),
- unpackPostingsListBindings(elems, polarity),
- ]);
/** @type {PostingsList