about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-09-10 18:00:03 -0700
committerBrian Anderson <banderson@mozilla.com>2012-09-10 18:12:35 -0700
commit6957af770bb92b71485f852beb9071733e5f178b (patch)
treeb1e231b803ada6963d4391bfb008291c18904dc8 /src
parent9869d071d101c580e1b54f077a30af8ee0fc960c (diff)
downloadrust-6957af770bb92b71485f852beb9071733e5f178b.tar.gz
rust-6957af770bb92b71485f852beb9071733e5f178b.zip
Report obsolete trait lists on structs
Diffstat (limited to 'src')
-rw-r--r--src/libsyntax/parse/obsolete.rs6
-rw-r--r--src/libsyntax/parse/parser.rs8
-rw-r--r--src/test/compile-fail/class-method-missing.rs5
-rw-r--r--src/test/compile-fail/obsolete-syntax.rs4
4 files changed, 19 insertions, 4 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs
index 3dadc90321c..9a2b6474b19 100644
--- a/src/libsyntax/parse/obsolete.rs
+++ b/src/libsyntax/parse/obsolete.rs
@@ -20,6 +20,7 @@ pub enum ObsoleteSyntax {
     ObsoleteStructCtor,
     ObsoleteWith,
     ObsoleteClassMethod,
+    ObsoleteClassTraits
 }
 
 impl ObsoleteSyntax : cmp::Eq {
@@ -76,6 +77,11 @@ impl parser : ObsoleteReporter {
                 "class method",
                 "methods should be defined inside impls"
             ),
+            ObsoleteClassTraits => (
+                "class traits",
+                "implemented traits are specified on the impl, as in \
+                 `impl foo : bar {`"
+            ),
         };
 
         self.report(sp, kind, kind_str, desc);
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index aff662a3f35..49fa14c5b7d 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, ObsoleteClassMethod
+    ObsoleteWith, ObsoleteClassMethod, ObsoleteClassTraits
 };
 use ast::{_mod, add, alt_check, alt_exhaustive, arg, arm, attribute,
              bind_by_ref, bind_by_implicit_ref, bind_by_value, bind_by_move,
@@ -2648,8 +2648,10 @@ impl parser {
         let class_name = self.parse_value_ident();
         self.parse_region_param();
         let ty_params = self.parse_ty_params();
-        let traits : ~[@trait_ref] = if self.eat(token::COLON)
-            { self.parse_trait_ref_list(token::LBRACE) }
+        let traits : ~[@trait_ref] = if self.eat(token::COLON) {
+            self.obsolete(copy self.span, ObsoleteClassTraits);
+            self.parse_trait_ref_list(token::LBRACE)
+        }
         else { ~[] };
 
         let mut fields: ~[@struct_field];
diff --git a/src/test/compile-fail/class-method-missing.rs b/src/test/compile-fail/class-method-missing.rs
index 955c3e8aa46..642a26e6e9e 100644
--- a/src/test/compile-fail/class-method-missing.rs
+++ b/src/test/compile-fail/class-method-missing.rs
@@ -3,10 +3,13 @@ trait animal {
   fn eat();
 }
 
-struct cat : animal {
+struct cat {
   meows: uint,
 }
 
+impl cat : animal {
+}
+
 fn cat(in_x : uint) -> cat {
     cat {
         meows: in_x
diff --git a/src/test/compile-fail/obsolete-syntax.rs b/src/test/compile-fail/obsolete-syntax.rs
index 5f147e035f9..9a3939692f5 100644
--- a/src/test/compile-fail/obsolete-syntax.rs
+++ b/src/test/compile-fail/obsolete-syntax.rs
@@ -27,6 +27,10 @@ struct ss {
     //~^ ERROR obsolete syntax: class method
 }
 
+struct q : r {
+    //~^ ERROR obsolete syntax: class traits
+}
+
 fn obsolete_with() {
     struct S {
         foo: (),