about summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2014-05-28 22:26:56 -0700
committerPatrick Walton <pcwalton@mimiga.net>2014-07-18 09:01:37 -0700
commit02adaca4dc7eb4594d8bda9a7e04bc0247fc2a74 (patch)
tree2edb47de67e3c8a0d006f61217d7dffaab824b27 /src/libsyntax/ext
parent5ddc7b4a252fbebee5f2ac87ed755139816d6823 (diff)
downloadrust-02adaca4dc7eb4594d8bda9a7e04bc0247fc2a74.tar.gz
rust-02adaca4dc7eb4594d8bda9a7e04bc0247fc2a74.zip
librustc: Implement unboxed closures with mutable receivers
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/deriving/generic/mod.rs27
-rw-r--r--src/libsyntax/ext/expand.rs10
2 files changed, 29 insertions, 8 deletions
diff --git a/src/libsyntax/ext/deriving/generic/mod.rs b/src/libsyntax/ext/deriving/generic/mod.rs
index f1c1784146a..871f277a2da 100644
--- a/src/libsyntax/ext/deriving/generic/mod.rs
+++ b/src/libsyntax/ext/deriving/generic/mod.rs
@@ -183,6 +183,8 @@
 use std::cell::RefCell;
 use std::gc::{Gc, GC};
 
+use abi::Abi;
+use abi;
 use ast;
 use ast::{P, EnumDef, Expr, Ident, Generics, StructDef};
 use ast_util;
@@ -477,9 +479,13 @@ impl<'a> TraitDef<'a> {
                                                      nonself_args.as_slice())
             };
 
-            method_def.create_method(cx, self,
-                                     type_ident, generics,
-                                     explicit_self, tys,
+            method_def.create_method(cx,
+                                     self,
+                                     type_ident,
+                                     generics,
+                                     abi::Rust,
+                                     explicit_self,
+                                     tys,
                                      body)
         }).collect();
 
@@ -513,9 +519,13 @@ impl<'a> TraitDef<'a> {
                                                    nonself_args.as_slice())
             };
 
-            method_def.create_method(cx, self,
-                                     type_ident, generics,
-                                     explicit_self, tys,
+            method_def.create_method(cx,
+                                     self,
+                                     type_ident,
+                                     generics,
+                                     abi::Rust,
+                                     explicit_self,
+                                     tys,
                                      body)
         }).collect();
 
@@ -622,9 +632,11 @@ impl<'a> MethodDef<'a> {
                      trait_: &TraitDef,
                      type_ident: Ident,
                      generics: &Generics,
+                     abi: Abi,
                      explicit_self: ast::ExplicitSelf,
                      arg_types: Vec<(Ident, P<ast::Ty>)> ,
-                     body: Gc<Expr>) -> Gc<ast::Method> {
+                     body: Gc<Expr>)
+                     -> Gc<ast::Method> {
         // create the generics that aren't for Self
         let fn_generics = self.generics.to_generics(cx, trait_.span, type_ident, generics);
 
@@ -653,6 +665,7 @@ impl<'a> MethodDef<'a> {
             span: trait_.span,
             node: ast::MethDecl(method_ident,
                                 fn_generics,
+                                abi,
                                 explicit_self,
                                 ast::NormalFn,
                                 fn_decl,
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index 1cbe863e4e4..fdb698441fc 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -910,7 +910,14 @@ impl<'a> Folder for PatIdentRenamer<'a> {
 fn expand_method(m: &ast::Method, fld: &mut MacroExpander) -> SmallVector<Gc<ast::Method>> {
     let id = fld.new_id(m.id);
     match m.node {
-        ast::MethDecl(ident, ref generics, ref explicit_self, fn_style, decl, body, vis) => {
+        ast::MethDecl(ident,
+                      ref generics,
+                      abi,
+                      ref explicit_self,
+                      fn_style,
+                      decl,
+                      body,
+                      vis) => {
             let (rewritten_fn_decl, rewritten_body)
                 = expand_and_rename_fn_decl_and_block(&*decl,body,fld);
             SmallVector::one(box(GC) ast::Method {
@@ -919,6 +926,7 @@ fn expand_method(m: &ast::Method, fld: &mut MacroExpander) -> SmallVector<Gc<ast
                     span: fld.new_span(m.span),
                     node: ast::MethDecl(fld.fold_ident(ident),
                                         fold_generics(generics, fld),
+                                        abi,
                                         fld.fold_explicit_self(explicit_self),
                                         fn_style,
                                         rewritten_fn_decl,