Skip to main content

rustc_builtin_macros/deriving/
bounds.rs

1use 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}