rustc_builtin_macros/deriving/
const_param_ty.rs1use 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}