about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorSeth Pink <sethpink@gmail.com>2013-02-09 23:00:55 +1000
committerSeth Pink <sethpink@gmail.com>2013-02-09 23:00:55 +1000
commit8ebdb3d0abefc5359e4fb986a0ecb17733f0f74a (patch)
tree303eb125f5af1270190b1dff76193c1eb7c04e5a /src/libsyntax/parse
parent0c2b4edff5009ff4d2330723d9acbc85af4b12ab (diff)
downloadrust-8ebdb3d0abefc5359e4fb986a0ecb17733f0f74a.tar.gz
rust-8ebdb3d0abefc5359e4fb986a0ecb17733f0f74a.zip
Issue #4830 fix
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/obsolete.rs5
-rw-r--r--src/libsyntax/parse/parser.rs71
2 files changed, 24 insertions, 52 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs
index cdde542bb1f..66ce36fa476 100644
--- a/src/libsyntax/parse/obsolete.rs
+++ b/src/libsyntax/parse/obsolete.rs
@@ -39,7 +39,6 @@ pub enum ObsoleteSyntax {
     ObsoleteFieldTerminator,
     ObsoleteStructCtor,
     ObsoleteWith,
-    ObsoleteClassMethod,
     ObsoleteClassTraits,
     ObsoletePrivSection,
     ObsoleteModeInFnType,
@@ -85,10 +84,6 @@ pub impl Parser {
                 "record update is done with `..`, e.g. \
                  `MyStruct { foo: bar, .. baz }`"
             ),
-            ObsoleteClassMethod => (
-                "class method",
-                "methods should be defined inside impls"
-            ),
             ObsoleteClassTraits => (
                 "class traits",
                 "implemented traits are specified on the impl, as in \
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 7fb3064c388..6382413b081 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -72,7 +72,7 @@ use parse::lexer::TokenAndSpan;
 use parse::obsolete::{ObsoleteClassTraits, ObsoleteModeInFnType};
 use parse::obsolete::{ObsoleteLet, ObsoleteFieldTerminator};
 use parse::obsolete::{ObsoleteMoveInit, ObsoleteBinaryMove};
-use parse::obsolete::{ObsoleteStructCtor, ObsoleteWith, ObsoleteClassMethod};
+use parse::obsolete::{ObsoleteStructCtor, ObsoleteWith};
 use parse::obsolete::{ObsoleteSyntax, ObsoleteLowerCaseKindBounds};
 use parse::obsolete::{ObsoleteUnsafeBlock};
 use parse::prec::{as_prec, token_to_binop};
@@ -3002,52 +3002,29 @@ pub impl Parser {
     }
 
     fn parse_single_class_item(vis: visibility) -> @struct_field {
-        let obsolete_let = self.eat_obsolete_ident("let");
-        if obsolete_let { self.obsolete(copy self.last_span, ObsoleteLet) }
-
-        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 self.eat_obsolete_ident("let") {
+            self.obsolete(copy self.last_span, ObsoleteLet);
+        }
 
-        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)));
-              }
-            }
-            a_var
-        } else {
-            self.obsolete(copy self.span, ObsoleteClassMethod);
-            self.parse_method();
-            // bogus value
-            @spanned(
-                self.span.lo,
-                self.span.hi,
-                ast::struct_field_ {
-                    kind: unnamed_field,
-                    id: self.get_id(),
-                    ty: @ast::Ty {
-                        id: self.get_id(),
-                        node: ty_nil,
-                        span: copy self.span,
-                    }
-                }
-            )
+        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)));
+          }
         }
+        a_var
     }
 
     fn parse_dtor(attrs: ~[attribute]) -> class_contents {
@@ -3062,6 +3039,8 @@ pub impl Parser {
             return members(~[]);
         }
 
+        let attrs = self.parse_outer_attributes();
+
         if self.eat_keyword(~"priv") {
             return members(~[self.parse_single_class_item(private)])
         }
@@ -3070,8 +3049,6 @@ pub impl Parser {
            return members(~[self.parse_single_class_item(public)]);
         }
 
-        let attrs = self.parse_outer_attributes();
-
         if self.try_parse_obsolete_struct_ctor() {
             return members(~[]);
         }