Skip to content

Commit

Permalink
Auto merge of #28090 - mystor:derive-unsafe-trait, r=Manishearth
Browse files Browse the repository at this point in the history
  • Loading branch information
bors committed Aug 29, 2015
2 parents 3f002a4 + 38d450f commit 09dd65c
Show file tree
Hide file tree
Showing 15 changed files with 25 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/bounds.rs
Expand Up @@ -40,6 +40,7 @@ pub fn expand_deriving_copy(cx: &mut ExtCtxt,
path: path,
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: Vec::new(),
associated_types: Vec::new(),
};
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/clone.rs
Expand Up @@ -31,6 +31,7 @@ pub fn expand_deriving_clone(cx: &mut ExtCtxt,
path: path_std!(cx, core::clone::Clone),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
MethodDef {
name: "clone",
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/cmp/eq.rs
Expand Up @@ -51,6 +51,7 @@ pub fn expand_deriving_eq(cx: &mut ExtCtxt,
path: path_std!(cx, core::cmp::Eq),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
MethodDef {
name: "assert_receiver_is_total_eq",
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/cmp/ord.rs
Expand Up @@ -32,6 +32,7 @@ pub fn expand_deriving_ord(cx: &mut ExtCtxt,
path: path_std!(cx, core::cmp::Ord),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
MethodDef {
name: "cmp",
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/cmp/partial_eq.rs
Expand Up @@ -85,6 +85,7 @@ pub fn expand_deriving_partial_eq(cx: &mut ExtCtxt,
path: path_std!(cx, core::cmp::PartialEq),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
md!("eq", cs_eq),
md!("ne", cs_ne)
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/cmp/partial_ord.rs
Expand Up @@ -73,6 +73,7 @@ pub fn expand_deriving_partial_ord(cx: &mut ExtCtxt,
path: path_std!(cx, core::cmp::PartialOrd),
additional_bounds: vec![],
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec![
partial_cmp_def,
md!("lt", true, false),
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/decodable.rs
Expand Up @@ -59,6 +59,7 @@ fn expand_deriving_decodable_imp(cx: &mut ExtCtxt,
path: Path::new_(vec!(krate, "Decodable"), None, vec!(), true),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
MethodDef {
name: "decode",
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/default.rs
Expand Up @@ -31,6 +31,7 @@ pub fn expand_deriving_default(cx: &mut ExtCtxt,
path: path_std!(cx, core::default::Default),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
MethodDef {
name: "default",
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/encodable.rs
Expand Up @@ -135,6 +135,7 @@ fn expand_deriving_encodable_imp(cx: &mut ExtCtxt,
path: Path::new_(vec!(krate, "Encodable"), None, vec!(), true),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
MethodDef {
name: "encode",
Expand Down
12 changes: 11 additions & 1 deletion src/libsyntax/ext/deriving/generic/mod.rs
Expand Up @@ -229,6 +229,9 @@ pub struct TraitDef<'a> {
/// Any extra lifetimes and/or bounds, e.g. `D: serialize::Decoder`
pub generics: LifetimeBounds<'a>,

/// Is it an `unsafe` trait?
pub is_unsafe: bool,

pub methods: Vec<MethodDef<'a>>,

pub associated_types: Vec<(ast::Ident, Ty<'a>)>,
Expand Down Expand Up @@ -625,11 +628,18 @@ impl<'a> TraitDef<'a> {
InternedString::new("unused_qualifications"))]));
let mut a = vec![attr, unused_qual];
a.extend(self.attributes.iter().cloned());

let unsafety = if self.is_unsafe {
ast::Unsafety::Unsafe
} else {
ast::Unsafety::Normal
};

cx.item(
self.span,
ident,
a,
ast::ItemImpl(ast::Unsafety::Normal,
ast::ItemImpl(unsafety,
ast::ImplPolarity::Positive,
trait_generics,
opt_trait_ref,
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/hash.rs
Expand Up @@ -32,6 +32,7 @@ pub fn expand_deriving_hash(cx: &mut ExtCtxt,
path: path,
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
MethodDef {
name: "hash",
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/primitive.rs
Expand Up @@ -32,6 +32,7 @@ pub fn expand_deriving_from_primitive(cx: &mut ExtCtxt,
path: path_std!(cx, core::num::FromPrimitive),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec!(
MethodDef {
name: "from_i64",
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/ext/deriving/show.rs
Expand Up @@ -34,6 +34,7 @@ pub fn expand_deriving_show(cx: &mut ExtCtxt,
path: path_std!(cx, core::fmt::Debug),
additional_bounds: Vec::new(),
generics: LifetimeBounds::empty(),
is_unsafe: false,
methods: vec![
MethodDef {
name: "fmt",
Expand Down
1 change: 1 addition & 0 deletions src/test/auxiliary/custom_derive_plugin.rs
Expand Up @@ -46,6 +46,7 @@ fn expand(cx: &mut ExtCtxt,
additional_bounds: vec![],
generics: LifetimeBounds::empty(),
associated_types: vec![],
is_unsafe: false,
methods: vec![
MethodDef {
name: "total_sum",
Expand Down
1 change: 1 addition & 0 deletions src/test/auxiliary/custom_derive_plugin_attr.rs
Expand Up @@ -48,6 +48,7 @@ fn expand(cx: &mut ExtCtxt,
additional_bounds: vec![],
generics: LifetimeBounds::empty(),
associated_types: vec![],
is_unsafe: false,
methods: vec![
MethodDef {
name: "total_sum",
Expand Down

0 comments on commit 09dd65c

Please sign in to comment.