diff options
| author | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-10-20 02:34:01 -0400 |
|---|---|---|
| committer | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-10-22 21:22:19 -0400 |
| commit | af163579ed674c4b1a37f5c8d50bf348722db439 (patch) | |
| tree | 415f973c647f0ffea0c361e451dd704b734abdeb /src/libsyntax | |
| parent | 5754848f8cd06bd3fc2bb084b5ca7bd41974e1b5 (diff) | |
| download | rust-af163579ed674c4b1a37f5c8d50bf348722db439.tar.gz rust-af163579ed674c4b1a37f5c8d50bf348722db439.zip | |
libsyntax/librustc: Allow specifying mut on ~self.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/ty.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 5 |
4 files changed, 15 insertions, 4 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 6631924239d..372f1950c1d 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -924,7 +924,7 @@ pub enum explicit_self_ { sty_value(Mutability), // `self` sty_region(Option<Lifetime>, Mutability), // `&'lt self` sty_box(Mutability), // `@self` - sty_uniq // `~self` + sty_uniq(Mutability) // `~self` } pub type explicit_self = Spanned<explicit_self_>; diff --git a/src/libsyntax/ext/deriving/ty.rs b/src/libsyntax/ext/deriving/ty.rs index a9fdafc8014..c60259304ae 100644 --- a/src/libsyntax/ext/deriving/ty.rs +++ b/src/libsyntax/ext/deriving/ty.rs @@ -246,7 +246,7 @@ pub fn get_explicit_self(cx: @ExtCtxt, span: Span, self_ptr: &Option<PtrTy>) let self_ty = respan( span, match *ptr { - Send => ast::sty_uniq, + Send => ast::sty_uniq(ast::MutImmutable), Managed(mutbl) => ast::sty_box(mutbl), Borrowed(ref lt, mutbl) => { let lt = lt.map(|s| cx.lifetime(span, cx.ident_of(s))); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 133934a746a..605e259cf0c 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3520,7 +3520,7 @@ impl Parser { self.span_err(*self.last_span, "mutability declaration not allowed here"); } - sty_uniq + sty_uniq(MutImmutable) }, self) } token::IDENT(*) if self.is_self_ident() => { @@ -3546,6 +3546,14 @@ impl Parser { self.expect_self_ident(); sty_value(mutability) } + _ if self.token_is_mutability(self.token) && + self.look_ahead(1, |t| *t == token::TILDE) && + self.look_ahead(2, |t| token::is_keyword(keywords::Self, t)) => { + let mutability = self.parse_mutability(); + self.bump(); + self.expect_self_ident(); + sty_uniq(mutability) + } _ => { sty_static } diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 9ce28e4d55a..0e330da31e6 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1690,7 +1690,10 @@ pub fn print_explicit_self(s: @ps, explicit_self: ast::explicit_self_) -> bool { print_mutability(s, m); word(s.s, "self"); } - ast::sty_uniq => { word(s.s, "~self"); } + ast::sty_uniq(m) => { + print_mutability(s, m); + word(s.s, "~self"); + } ast::sty_region(ref lt, m) => { word(s.s, "&"); print_opt_lifetime(s, lt); |
