]> git.lizzy.rs Git - rust.git/commitdiff
syntax: obsolete the `for Sized?` syntax
authorJorge Aparicio <japaricious@gmail.com>
Mon, 5 Jan 2015 18:51:29 +0000 (13:51 -0500)
committerJorge Aparicio <japaricious@gmail.com>
Mon, 5 Jan 2015 19:56:49 +0000 (14:56 -0500)
src/libsyntax/parse/obsolete.rs
src/libsyntax/parse/parser.rs
src/test/compile-fail/obsolete-for-sized.rs [new file with mode: 0644]

index e1e456f880ed7020d356fc4f8e645a0d2a7f31be..d63f432589dd1a866386cd889ce86ab9860f647a 100644 (file)
@@ -24,6 +24,7 @@
 /// The specific types of unsupported syntax
 #[derive(Copy, PartialEq, Eq, Hash)]
 pub enum ObsoleteSyntax {
+    ObsoleteForSized,
     ObsoleteOwnedType,
     ObsoleteOwnedExpr,
     ObsoleteOwnedPattern,
@@ -55,6 +56,11 @@ impl<'a> ParserObsoleteMethods for parser::Parser<'a> {
     /// Reports an obsolete syntax non-fatal error.
     fn obsolete(&mut self, sp: Span, kind: ObsoleteSyntax) {
         let (kind_str, desc) = match kind {
+            ObsoleteForSized => (
+                "for Sized?",
+                "no longer required, traits apply to sized and unsized types by default, use \
+                `: Sized` to opt-out of unsized types",
+            ),
             ObsoleteProcType => (
                 "the `proc` type",
                 "use unboxed closures instead",
index cc67079e538794843be6cb4696d6009af19fb824..aedfaac59c581391e3aff36508d558e7dfe8a088 100644 (file)
@@ -5003,6 +5003,7 @@ fn parse_for_sized(&mut self) -> Option<ast::TraitRef> {
         // re-jigged shortly in any case, so leaving the hacky version for now.
         if self.eat_keyword(keywords::For) {
             let span = self.span;
+
             let mut ate_question = false;
             if self.eat(&token::Question) {
                 ate_question = true;
@@ -5020,8 +5021,11 @@ fn parse_for_sized(&mut self) -> Option<ast::TraitRef> {
                     "expected `?Sized` after `for` in trait item");
                 return None;
             }
-            let tref = Parser::trait_ref_from_ident(ident, span);
-            Some(tref)
+            let _tref = Parser::trait_ref_from_ident(ident, span);
+
+            self.obsolete(span, ObsoleteForSized);
+
+            None
         } else {
             None
         }
diff --git a/src/test/compile-fail/obsolete-for-sized.rs b/src/test/compile-fail/obsolete-for-sized.rs
new file mode 100644 (file)
index 0000000..1b86d08
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Test that we generate obsolete syntax errors around usages of `for Sized?`
+
+trait Foo for Sized? {} //~ ERROR obsolete syntax: for Sized?
+
+trait Bar for ?Sized {} //~ ERROR obsolete syntax: for Sized?
+
+fn main() { }