diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-09-10 17:26:20 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-09-10 17:48:33 -0700 |
| commit | 73eb89430569d80a2f3ff124514f2905b25dbe68 (patch) | |
| tree | 043cbdf83b4d77acd776de0873f9c329ccd70b3c /src/libsyntax/parse | |
| parent | df790261696fb85c0cc4dee3950d7ba89804eb49 (diff) | |
| download | rust-73eb89430569d80a2f3ff124514f2905b25dbe68.tar.gz rust-73eb89430569d80a2f3ff124514f2905b25dbe68.zip | |
Report obsolete class method syntax
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/obsolete.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 48 |
2 files changed, 35 insertions, 20 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 1a4c08747bf..3dadc90321c 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -18,7 +18,8 @@ pub enum ObsoleteSyntax { ObsoleteLet, ObsoleteFieldTerminator, ObsoleteStructCtor, - ObsoleteWith + ObsoleteWith, + ObsoleteClassMethod, } impl ObsoleteSyntax : cmp::Eq { @@ -71,6 +72,10 @@ impl parser : ObsoleteReporter { "record update is done with `..`, e.g. \ `MyStruct { foo: bar, .. baz }`" ), + ObsoleteClassMethod => ( + "class method", + "methods should be defined inside impls" + ), }; self.report(sp, kind, kind_str, desc); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index e597d33a836..aff662a3f35 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -19,7 +19,7 @@ use obsolete::{ ObsoleteReporter, ObsoleteSyntax, ObsoleteLowerCaseKindBounds, ObsoleteLet, ObsoleteFieldTerminator, ObsoleteStructCtor, - ObsoleteWith + ObsoleteWith, ObsoleteClassMethod }; use ast::{_mod, add, alt_check, alt_exhaustive, arg, arm, attribute, bind_by_ref, bind_by_implicit_ref, bind_by_value, bind_by_move, @@ -2778,25 +2778,35 @@ impl parser { let obsolete_let = self.eat_obsolete_ident("let"); if obsolete_let { self.obsolete(copy self.last_span, ObsoleteLet) } - let a_var = self.parse_instance_var(vis); - match self.token { - token::SEMI => { - self.obsolete(copy self.span, ObsoleteFieldTerminator); - self.bump(); - } - token::COMMA => { - self.bump(); - } - token::RBRACE => {} - _ => { - self.span_fatal(copy self.span, - fmt!("expected `;`, `,`, or '}' but \ - found `%s`", - token_to_str(self.reader, - self.token))); - } + let parse_obsolete_method = + !((obsolete_let || self.is_keyword(~"mut") || + !self.is_any_keyword(copy self.token)) + && !self.token_is_pound_or_doc_comment(copy self.token)); + + if !parse_obsolete_method { + let a_var = self.parse_instance_var(vis); + match self.token { + token::SEMI => { + self.obsolete(copy self.span, ObsoleteFieldTerminator); + self.bump(); + } + token::COMMA => { + self.bump(); + } + token::RBRACE => {} + _ => { + self.span_fatal(copy self.span, + fmt!("expected `;`, `,`, or '}' but \ + found `%s`", + token_to_str(self.reader, + self.token))); + } + } + return a_var; + } else { + self.obsolete(copy self.span, ObsoleteClassMethod); + return @method_member(self.parse_method(vis)); } - return a_var; } fn parse_dtor(attrs: ~[attribute]) -> class_contents { |
