]> git.lizzy.rs Git - rust.git/commitdiff
Resolved #56 -- `mut` was eaten out of `mut self` in fn args.
authordefyrlt <defyrlt@gmail.com>
Fri, 1 May 2015 11:08:22 +0000 (14:08 +0300)
committerdefyrlt <defyrlt@gmail.com>
Fri, 1 May 2015 11:14:04 +0000 (14:14 +0300)
src/functions.rs
tests/idem/fn.rs

index 3d6fcb88c25462ae52017e45fc5390b61ba6ed50..d4f06c1c7ac0114f679258870c904df23a01d3cb 100644 (file)
@@ -164,7 +164,22 @@ fn rewrite_args(&self,
                     arg_item_strs[0] = format!("self: {}", pprust::ty_to_string(ty));
                 }
                 ast::ExplicitSelf_::SelfValue(_) => {
-                    arg_item_strs[0] = "self".to_owned();
+                    assert!(args.len() >= 1, "&[ast::Arg] shouldn't be empty.");
+
+                    // this hacky solution caused by absence of `Mutability` in `SelfValue`.
+                    let mut_str = {
+                        if let ast::Pat_::PatIdent(ast::BindingMode::BindByValue(mutability), _, _)
+                                = args[0].pat.node {
+                            match mutability {
+                                ast::Mutability::MutMutable => "mut ",
+                                ast::Mutability::MutImmutable => "",
+                            }
+                        } else {
+                            panic!("there is a bug or change in structure of AST, aborting.");
+                        }
+                    };
+
+                    arg_item_strs[0] = format!("{}self", mut_str);
                     min_args = 2;
                 }
                 _ => {}
index a4875815e5d6332979a25bdc9f2129c7c50ae1e2..8566ad0d3b9de10dd267c9d04eec13672a742358 100644 (file)
@@ -39,6 +39,12 @@ fn with_no_errors<T, F>(&mut self, f: F) -> T
         where F: FnOnce(&mut Resolver) -> T
     {
     }
+
+    fn foo(mut self, mut bar: u32) {
+    }
+
+    fn bar(self, mut bazz: u32) {
+    }
 }
 
 pub fn render<'a, N: Clone+'a, E: Clone+'a, G: Labeller<'a, N, E>+GraphWalk<'a, N, E>, W: Write>