diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2015-05-17 11:28:19 +0530 |
|---|---|---|
| committer | Manish Goregaokar <manishsmail@gmail.com> | 2015-05-17 14:56:13 +0530 |
| commit | 5b63841d91c3de96aac8bc79df1fc22b47ed993e (patch) | |
| tree | 9c62cf7a351d7fc03f0689867409fd510f28fcb7 /src/libsyntax/ext/deriving/generic | |
| parent | 4f83c4b8513fe77ab27e1f8d07cf5c7d577a1fe2 (diff) | |
| download | rust-5b63841d91c3de96aac8bc79df1fc22b47ed993e.tar.gz rust-5b63841d91c3de96aac8bc79df1fc22b47ed993e.zip | |
Allow #[derive()] to generate unsafe methods
Diffstat (limited to 'src/libsyntax/ext/deriving/generic')
| -rw-r--r-- | src/libsyntax/ext/deriving/generic/mod.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/libsyntax/ext/deriving/generic/mod.rs b/src/libsyntax/ext/deriving/generic/mod.rs index 1525f1a822b..b9968ca9608 100644 --- a/src/libsyntax/ext/deriving/generic/mod.rs +++ b/src/libsyntax/ext/deriving/generic/mod.rs @@ -253,6 +253,9 @@ pub struct MethodDef<'a> { pub attributes: Vec<ast::Attribute>, + // Is it an `unsafe fn`? + pub is_unsafe: bool, + pub combine_substructure: RefCell<CombineSubstructureFunc<'a>>, } @@ -859,6 +862,12 @@ impl<'a> MethodDef<'a> { let fn_decl = cx.fn_decl(args, ret_type); let body_block = cx.block_expr(body); + let unsafety = if self.is_unsafe { + ast::Unsafety::Unsafe + } else { + ast::Unsafety::Normal + }; + // Create the method. P(ast::ImplItem { id: ast::DUMMY_NODE_ID, @@ -870,7 +879,7 @@ impl<'a> MethodDef<'a> { generics: fn_generics, abi: abi, explicit_self: explicit_self, - unsafety: ast::Unsafety::Normal, + unsafety: unsafety, decl: fn_decl }, body_block) }) |
