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: path_std!(marker::Copy),
19 skip_path_as_bound: false,
20 needs_copy_as_bound_if_packed: false,
21 additional_bounds: Vec::new(),
22 supports_unions: true,
23 methods: Vec::new(),
24 associated_types: Vec::new(),
25 is_const,
26 is_staged_api_crate: cx.ecfg.features.staged_api(),
27 safety: Safety::Default,
28 document: true,
29 };
30
31 trait_def.expand(cx, mitem, item, push);
32}
33
34pub(crate) fn expand_deriving_const_param_ty(
35 cx: &ExtCtxt<'_>,
36 span: Span,
37 mitem: &MetaItem,
38 item: &Annotatable,
39 push: &mut dyn FnMut(Annotatable),
40 is_const: bool,
41) {
42 let trait_def = TraitDef {
43 span,
44 path: path_std!(marker::ConstParamTy_),
45 skip_path_as_bound: false,
46 needs_copy_as_bound_if_packed: false,
47 additional_bounds: vec![ty::Ty::Path(path_std!(cmp::Eq))],
48 supports_unions: false,
49 methods: Vec::new(),
50 associated_types: Vec::new(),
51 is_const,
52 is_staged_api_crate: cx.ecfg.features.staged_api(),
53 safety: Safety::Default,
54 document: true,
55 };
56
57 trait_def.expand(cx, mitem, item, push);
58}