Skip to main content

rustc_builtin_macros/deriving/
const_param_ty.rs

1use rustc_expand::base::ExtCtxt;
2use rustc_span::Span;
3
4use crate::deriving::generic::*;
5use crate::deriving::path_std;
6
7pub(crate) fn expand_deriving_const_param_ty(
8    cx: &ExtCtxt<'_>,
9    span: Span,
10    item: &ast::Item,
11    push: &mut dyn FnMut(Box<ast::Item>),
12    is_const: bool,
13) {
14    let trait_def = TraitDef {
15        span,
16        path: cx.std_path(span, { &[sym::marker, sym::ConstParamTy_] })path_std!(cx, span, marker::ConstParamTy_),
17        needs_copy_as_bound_if_packed: false,
18        additional_bounds: {
    let count = 0usize + 1usize;
    let mut vec = ::smallvec::SmallVec::new();
    if count <= vec.inline_size() {
        vec.push(cx.std_path(span, { &[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(),
                    [cx.std_path(span, { &[sym::cmp, sym::Eq] })])))
    }
}smallvec![path_std!(cx, span, cmp::Eq)],
19        supports_unions: false,
20        methods: SmallVec::new(),
21        is_const,
22        ..
23    };
24
25    trait_def.expand(cx, item, push);
26}