about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-09-10 17:26:20 -0700
committerBrian Anderson <banderson@mozilla.com>2012-09-10 17:48:33 -0700
commit73eb89430569d80a2f3ff124514f2905b25dbe68 (patch)
tree043cbdf83b4d77acd776de0873f9c329ccd70b3c /src/libsyntax
parentdf790261696fb85c0cc4dee3950d7ba89804eb49 (diff)
downloadrust-73eb89430569d80a2f3ff124514f2905b25dbe68.tar.gz
rust-73eb89430569d80a2f3ff124514f2905b25dbe68.zip
Report obsolete class method syntax
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/parse/obsolete.rs7
-rw-r--r--src/libsyntax/parse/parser.rs48
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 {