Skip to content

Commit c6ac860

Browse files
committed
impl_for_type -> PrimitiveType::impls
1 parent dae3a4f commit c6ac860

File tree

2 files changed

+59
-57
lines changed

2 files changed

+59
-57
lines changed

src/librustdoc/clean/types.rs

+57
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ use rustc_hir::lang_items;
1919
use rustc_hir::Mutability;
2020
use rustc_index::vec::IndexVec;
2121
use rustc_middle::middle::stability;
22+
use rustc_middle::ty::TyCtxt;
2223
use rustc_span::hygiene::MacroKind;
2324
use rustc_span::source_map::DUMMY_SP;
2425
use rustc_span::symbol::{kw, sym, Ident, Symbol};
2526
use rustc_span::{self, FileName};
2627
use rustc_target::abi::VariantIdx;
2728
use rustc_target::spec::abi::Abi;
29+
use smallvec::SmallVec;
2830

2931
use crate::clean::cfg::Cfg;
3032
use crate::clean::external_path;
@@ -1264,6 +1266,61 @@ impl PrimitiveType {
12641266
}
12651267
}
12661268

1269+
pub fn impls(&self, tcx: TyCtxt<'_>) -> SmallVec<[DefId; 4]> {
1270+
use self::PrimitiveType::*;
1271+
1272+
let both =
1273+
|a: Option<DefId>, b: Option<DefId>| -> SmallVec<_> { a.into_iter().chain(b).collect() };
1274+
1275+
let lang_items = tcx.lang_items();
1276+
let primary_impl = match self {
1277+
Isize => lang_items.isize_impl(),
1278+
I8 => lang_items.i8_impl(),
1279+
I16 => lang_items.i16_impl(),
1280+
I32 => lang_items.i32_impl(),
1281+
I64 => lang_items.i64_impl(),
1282+
I128 => lang_items.i128_impl(),
1283+
Usize => lang_items.usize_impl(),
1284+
U8 => lang_items.u8_impl(),
1285+
U16 => lang_items.u16_impl(),
1286+
U32 => lang_items.u32_impl(),
1287+
U64 => lang_items.u64_impl(),
1288+
U128 => lang_items.u128_impl(),
1289+
F32 => return both(lang_items.f32_impl(), lang_items.f32_runtime_impl()),
1290+
F64 => return both(lang_items.f64_impl(), lang_items.f64_runtime_impl()),
1291+
Char => lang_items.char_impl(),
1292+
Bool => lang_items.bool_impl(),
1293+
Str => return both(lang_items.str_impl(), lang_items.str_alloc_impl()),
1294+
Slice => {
1295+
return lang_items
1296+
.slice_impl()
1297+
.into_iter()
1298+
.chain(lang_items.slice_u8_impl())
1299+
.chain(lang_items.slice_alloc_impl())
1300+
.chain(lang_items.slice_u8_alloc_impl())
1301+
.collect();
1302+
}
1303+
Array => lang_items.array_impl(),
1304+
Tuple => None,
1305+
Unit => None,
1306+
RawPointer => {
1307+
return lang_items
1308+
.const_ptr_impl()
1309+
.into_iter()
1310+
.chain(lang_items.mut_ptr_impl())
1311+
.chain(lang_items.const_slice_ptr_impl())
1312+
.chain(lang_items.mut_slice_ptr_impl())
1313+
.collect();
1314+
}
1315+
Reference => None,
1316+
Fn => None,
1317+
Never => None,
1318+
};
1319+
1320+
primary_impl.into_iter().collect()
1321+
}
1322+
1323+
12671324
pub fn to_url_str(&self) -> &'static str {
12681325
self.as_str()
12691326
}

src/librustdoc/clean/utils.rs

+2-57
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ use rustc_hir::def::{DefKind, Res};
1515
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
1616
use rustc_middle::mir::interpret::{sign_extend, ConstValue, Scalar};
1717
use rustc_middle::ty::subst::{GenericArgKind, SubstsRef};
18-
use rustc_middle::ty::{self, DefIdTree, Ty, TyCtxt};
18+
use rustc_middle::ty::{self, DefIdTree, Ty};
1919
use rustc_span::symbol::{kw, sym, Symbol};
20-
use smallvec::SmallVec;
2120
use std::mem;
2221

2322
pub fn krate(mut cx: &mut DocContext<'_>) -> Crate {
@@ -350,60 +349,6 @@ pub fn qpath_to_string(p: &hir::QPath<'_>) -> String {
350349
s
351350
}
352351

353-
pub fn impl_for_type(tcx: TyCtxt<'_>, primitive: PrimitiveType) -> SmallVec<[DefId; 4]> {
354-
use self::PrimitiveType::*;
355-
356-
let both =
357-
|a: Option<DefId>, b: Option<DefId>| -> SmallVec<_> { a.into_iter().chain(b).collect() };
358-
359-
let lang_items = tcx.lang_items();
360-
let primary_impl = match primitive {
361-
Isize => lang_items.isize_impl(),
362-
I8 => lang_items.i8_impl(),
363-
I16 => lang_items.i16_impl(),
364-
I32 => lang_items.i32_impl(),
365-
I64 => lang_items.i64_impl(),
366-
I128 => lang_items.i128_impl(),
367-
Usize => lang_items.usize_impl(),
368-
U8 => lang_items.u8_impl(),
369-
U16 => lang_items.u16_impl(),
370-
U32 => lang_items.u32_impl(),
371-
U64 => lang_items.u64_impl(),
372-
U128 => lang_items.u128_impl(),
373-
F32 => return both(lang_items.f32_impl(), lang_items.f32_runtime_impl()),
374-
F64 => return both(lang_items.f64_impl(), lang_items.f64_runtime_impl()),
375-
Char => lang_items.char_impl(),
376-
Bool => lang_items.bool_impl(),
377-
Str => return both(lang_items.str_impl(), lang_items.str_alloc_impl()),
378-
Slice => {
379-
return lang_items
380-
.slice_impl()
381-
.into_iter()
382-
.chain(lang_items.slice_u8_impl())
383-
.chain(lang_items.slice_alloc_impl())
384-
.chain(lang_items.slice_u8_alloc_impl())
385-
.collect();
386-
}
387-
Array => lang_items.array_impl(),
388-
Tuple => None,
389-
Unit => None,
390-
RawPointer => {
391-
return lang_items
392-
.const_ptr_impl()
393-
.into_iter()
394-
.chain(lang_items.mut_ptr_impl())
395-
.chain(lang_items.const_slice_ptr_impl())
396-
.chain(lang_items.mut_slice_ptr_impl())
397-
.collect();
398-
}
399-
Reference => None,
400-
Fn => None,
401-
Never => None,
402-
};
403-
404-
primary_impl.into_iter().collect()
405-
}
406-
407352
pub fn build_deref_target_impls(cx: &DocContext<'_>, items: &[Item], ret: &mut Vec<Item>) {
408353
let tcx = cx.tcx;
409354

@@ -423,7 +368,7 @@ pub fn build_deref_target_impls(cx: &DocContext<'_>, items: &[Item], ret: &mut V
423368
None => continue,
424369
},
425370
};
426-
for did in impl_for_type(tcx, primitive) {
371+
for did in primitive.impls(tcx) {
427372
if !did.is_local() {
428373
inline::build_impl(cx, did, None, ret);
429374
}

0 commit comments

Comments
 (0)