rustc_builtin_macros/deriving/
bounds.rs1use rustc_ast::{MetaItem, Safety};
2use rustc_expand::base::{Annotatable, ExtCtxt};
3use rustc_span::Span;
4
5use crate::deriving::generic::*;
6use crate::deriving::path_std;
7
8pub(crate) fn expand_deriving_copy(
9 cx: &ExtCtxt<'_>,
10 span: Span,
11 mitem: &MetaItem,
12 item: &Annotatable,
13 push: &mut dyn FnMut(Annotatable),
14 is_const: bool,
15) {
16 let trait_def = TraitDef {
17 span,
18 path: generic::ty::Path::new({
::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[sym::marker, sym::Copy]))
})path_std!(marker::Copy),
19 skip_path_as_bound: false,
20 needs_copy_as_bound_if_packed: false,
21 additional_bounds: SmallVec::new(),
22 supports_unions: true,
23 methods: SmallVec::new(),
24 associated_types: SmallVec::new(),
25 is_const,
26 safety: Safety::Default,
27 document: true,
28 };
29
30 trait_def.expand(cx, mitem, item, push);
31}
32
33pub(crate) fn expand_deriving_const_param_ty(
34 cx: &ExtCtxt<'_>,
35 span: Span,
36 mitem: &MetaItem,
37 item: &Annotatable,
38 push: &mut dyn FnMut(Annotatable),
39 is_const: bool,
40) {
41 let trait_def = TraitDef {
42 span,
43 path: generic::ty::Path::new({
::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[sym::marker, sym::ConstParamTy_]))
})path_std!(marker::ConstParamTy_),
44 skip_path_as_bound: false,
45 needs_copy_as_bound_if_packed: false,
46 additional_bounds: {
let count = 0usize + 1usize;
let mut vec = ::smallvec::SmallVec::new();
if count <= vec.inline_size() {
vec.push(ty::Ty::Path(generic::ty::Path::new({
::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[sym::cmp, sym::Eq]))
})));
vec
} else {
::smallvec::SmallVec::from_vec(::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[ty::Ty::Path(generic::ty::Path::new({
::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[sym::cmp, sym::Eq]))
}))])))
}
}smallvec![ty::Ty::Path(path_std!(cmp::Eq))],
47 supports_unions: false,
48 methods: SmallVec::new(),
49 associated_types: SmallVec::new(),
50 is_const,
51 safety: Safety::Default,
52 document: true,
53 };
54
55 trait_def.expand(cx, mitem, item, push);
56}