diff options
| author | bors <bors@rust-lang.org> | 2025-07-22 08:52:53 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-07-22 08:52:53 +0000 |
| commit | 1a8eaa852507b134fcd0557547b35308273b4b74 (patch) | |
| tree | 5656ed7794f557ce02b603c2aebafeeef5e4c31a /src/librustdoc/html/render/print_item.rs | |
| parent | 9748d87dc70a9a6725c5dbd76ce29d04752b4f90 (diff) | |
| parent | 8a5bcdde9d8668f92bd2f323898d5da1bdc5df5b (diff) | |
| download | rust-try.tar.gz rust-try.zip | |
Auto merge of #144287 - nnethercote:Symbol-with_interner, r=<try> try
Introduce `Symbol::with_interner`. It lets you get the contents of multiple symbols with a single TLS lookup and interner lock, instead of one per symbol. r? `@ghost`
Diffstat (limited to 'src/librustdoc/html/render/print_item.rs')
| -rw-r--r-- | src/librustdoc/html/render/print_item.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index 02ee34aaac6..aca2eb53c11 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -12,7 +12,7 @@ use rustc_hir::def_id::DefId; use rustc_index::IndexVec; use rustc_middle::ty::{self, TyCtxt}; use rustc_span::hygiene::MacroKind; -use rustc_span::symbol::{Symbol, sym}; +use rustc_span::symbol::{InternerInner, Symbol, sym}; use tracing::{debug, info}; use super::type_layout::document_type_layout; @@ -333,7 +333,12 @@ fn item_module(cx: &Context<'_>, item: &clean::Item, items: &[clean::Item]) -> i } } - fn cmp(i1: &clean::Item, i2: &clean::Item, tcx: TyCtxt<'_>) -> Ordering { + fn cmp( + i1: &clean::Item, + i2: &clean::Item, + interner: &InternerInner, + tcx: TyCtxt<'_>, + ) -> Ordering { let rty1 = reorder(i1.type_()); let rty2 = reorder(i2.type_()); if rty1 != rty2 { @@ -349,7 +354,9 @@ fn item_module(cx: &Context<'_>, item: &clean::Item, items: &[clean::Item]) -> i return is_stable2.cmp(&is_stable1); } match (i1.name, i2.name) { - (Some(name1), Some(name2)) => compare_names(name1.as_str(), name2.as_str()), + (Some(name1), Some(name2)) => { + compare_names(interner.get_str(name1), interner.get_str(name2)) + } (Some(_), None) => Ordering::Greater, (None, Some(_)) => Ordering::Less, (None, None) => Ordering::Equal, @@ -360,7 +367,9 @@ fn item_module(cx: &Context<'_>, item: &clean::Item, items: &[clean::Item]) -> i match cx.shared.module_sorting { ModuleSorting::Alphabetical => { - not_stripped_items.sort_by(|(_, i1), (_, i2)| cmp(i1, i2, tcx)); + Symbol::with_interner(|interner| { + not_stripped_items.sort_by(|(_, i1), (_, i2)| cmp(i1, i2, interner, tcx)); + }); } ModuleSorting::DeclarationOrder => {} } |
