about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-03-14 12:25:48 -0700
committerPatrick Walton <pcwalton@mimiga.net>2013-03-18 17:21:15 -0700
commitc4db4faefaf13ac814f34c2a6cf105b7684de019 (patch)
tree77aef8ed0a89e3faab9021179a61b27b2b810660 /src/libsyntax
parent352c070365c941e174c17574f7fb3231e2981c5d (diff)
downloadrust-c4db4faefaf13ac814f34c2a6cf105b7684de019.tar.gz
rust-c4db4faefaf13ac814f34c2a6cf105b7684de019.zip
libsyntax: Stop parsing old lifetimes, except for the ones on data type declarations.
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/parse/obsolete.rs6
-rw-r--r--src/libsyntax/parse/parser.rs5
2 files changed, 11 insertions, 0 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs
index 9f5a79c4f81..f5e83a1beae 100644
--- a/src/libsyntax/parse/obsolete.rs
+++ b/src/libsyntax/parse/obsolete.rs
@@ -57,6 +57,7 @@ pub enum ObsoleteSyntax {
     ObsoleteNewtypeEnum,
     ObsoleteMode,
     ObsoleteImplicitSelf,
+    ObsoleteLifetimeNotation,
 }
 
 impl to_bytes::IterBytes for ObsoleteSyntax {
@@ -187,6 +188,11 @@ pub impl Parser {
                 "use an explicit `self` declaration or declare the method as \
                  static"
             ),
+            ObsoleteLifetimeNotation => (
+                "`/` lifetime notation",
+                "instead of `&foo/bar`, write `&'foo bar`; instead of \
+                 `bar/&foo`, write `&bar<'foo>"
+            ),
         };
 
         self.report(sp, kind, kind_str, desc);
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 7b7d246c324..2ea304a0a9b 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -79,6 +79,7 @@ use parse::obsolete::{ObsoleteRecordType, ObsoleteRecordPattern};
 use parse::obsolete::{ObsoleteAssertion, ObsoletePostFnTySigil};
 use parse::obsolete::{ObsoleteBareFnType, ObsoleteNewtypeEnum};
 use parse::obsolete::{ObsoleteMode, ObsoleteImplicitSelf};
+use parse::obsolete::{ObsoleteLifetimeNotation};
 use parse::prec::{as_prec, token_to_binop};
 use parse::token::{can_begin_expr, is_ident, is_ident_or_path};
 use parse::token::{is_plain_ident, INTERPOLATED, special_idents};
@@ -686,6 +687,7 @@ pub impl Parser {
                     self.token_is_closure_keyword(&self.look_ahead(2u))
                 {
                     let lifetime = @self.parse_lifetime();
+                    self.obsolete(*self.last_span, ObsoleteLifetimeNotation);
                     return self.parse_ty_closure(sigil, Some(lifetime));
                 } else if self.token_is_closure_keyword(&copy *self.token) {
                     return self.parse_ty_closure(sigil, None);
@@ -963,6 +965,7 @@ pub impl Parser {
             // Also accept the (obsolete) syntax `foo/`
             token::IDENT(*) => {
                 if self.look_ahead(1u) == token::BINOP(token::SLASH) {
+                    self.obsolete(*self.last_span, ObsoleteLifetimeNotation);
                     Some(@self.parse_lifetime())
                 } else {
                     None
@@ -997,6 +1000,7 @@ pub impl Parser {
                 let span = copy self.span;
                 self.bump();
                 self.expect(&token::BINOP(token::SLASH));
+                self.obsolete(*self.last_span, ObsoleteLifetimeNotation);
                 return ast::Lifetime {
                     id: self.get_id(),
                     span: *span,
@@ -3653,6 +3657,7 @@ pub impl Parser {
 
     fn parse_region_param(&self) {
         if self.eat(&token::BINOP(token::SLASH)) {
+            self.obsolete(*self.last_span, ObsoleteLifetimeNotation);
             self.expect(&token::BINOP(token::AND));
         }
     }