diff options
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/parse/obsolete.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 10 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 2ade0810dea..9f5a79c4f81 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -56,6 +56,7 @@ pub enum ObsoleteSyntax { ObsoleteBareFnType, ObsoleteNewtypeEnum, ObsoleteMode, + ObsoleteImplicitSelf, } impl to_bytes::IterBytes for ObsoleteSyntax { @@ -181,6 +182,11 @@ pub impl Parser { "obsolete argument mode", "replace `-` or `++` mode with `+`" ), + ObsoleteImplicitSelf => ( + "implicit self", + "use an explicit `self` declaration or declare the method as \ + static" + ), }; self.report(sp, kind, kind_str, desc); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 0f06976249b..815a8bfab5d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -78,7 +78,7 @@ use parse::obsolete::{ObsoleteMutVector, ObsoleteTraitImplVisibility}; use parse::obsolete::{ObsoleteRecordType, ObsoleteRecordPattern}; use parse::obsolete::{ObsoleteAssertion, ObsoletePostFnTySigil}; use parse::obsolete::{ObsoleteBareFnType, ObsoleteNewtypeEnum}; -use parse::obsolete::{ObsoleteMode}; +use parse::obsolete::{ObsoleteMode, ObsoleteImplicitSelf}; use parse::prec::{as_prec, token_to_binop}; use parse::token::{can_begin_expr, is_ident, is_ident_or_path}; use parse::token::{is_plain_ident, INTERPOLATED, special_idents}; @@ -471,6 +471,10 @@ pub impl Parser { // XXX: Wrong. Shouldn't allow both static and self_ty let self_ty = if is_static { static_sty } else { self_ty }; + if self_ty.node == sty_by_ref { + self.obsolete(self_ty.span, ObsoleteImplicitSelf); + } + let hi = p.last_span.hi; debug!("parse_trait_methods(): trait method signature ends in \ `%s`", @@ -2981,6 +2985,10 @@ pub impl Parser { // XXX: interaction between staticness, self_ty is broken now let self_ty = if is_static { static_sty} else { self_ty }; + if self_ty.node == sty_by_ref { + self.obsolete(self_ty.span, ObsoleteImplicitSelf); + } + let (inner_attrs, body) = self.parse_inner_attrs_and_block(true); let hi = body.span.hi; let attrs = vec::append(attrs, inner_attrs); |
