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: 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}