diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2013-02-14 21:17:26 -0800 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2013-02-15 16:59:56 -0800 |
| commit | bb833ca0f0e878d381c3dc0c9afe958a810e4427 (patch) | |
| tree | 7766fd3354b2b0f0418c5ff317df0696b41dbcc1 /src/libsyntax/parse | |
| parent | 566bcf2225634ee4d4698247fe89364440eb534c (diff) | |
| download | rust-bb833ca0f0e878d381c3dc0c9afe958a810e4427.tar.gz rust-bb833ca0f0e878d381c3dc0c9afe958a810e4427.zip | |
librustc: Stop parsing `impl Type : Trait` and fix several declarations that slipped through. r=tjc
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/lexer.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/parse/obsolete.rs | 9 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 14 |
3 files changed, 14 insertions, 11 deletions
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index cb9382ebbb6..92c4f1e828f 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -127,7 +127,7 @@ impl reader for StringReader { fn dup(@mut self) -> reader { dup_string_reader(self) as reader } } -pub impl TtReader: reader { +pub impl reader for TtReader { fn is_eof(@mut self) -> bool { self.cur_tok == token::EOF } fn next_token(@mut self) -> TokenAndSpan { tt_next_token(self) } fn fatal(@mut self, m: ~str) -> ! { diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 1b4493b7ec9..bf04996838c 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -45,10 +45,11 @@ pub enum ObsoleteSyntax { ObsoleteMoveInit, ObsoleteBinaryMove, ObsoleteUnsafeBlock, - ObsoleteUnenforcedBound + ObsoleteUnenforcedBound, + ObsoleteImplSyntax } -pub impl ObsoleteSyntax: to_bytes::IterBytes { +pub impl to_bytes::IterBytes for ObsoleteSyntax { #[inline(always)] pure fn iter_bytes(&self, +lsb0: bool, f: to_bytes::Cb) { (*self as uint).iter_bytes(lsb0, f); @@ -115,6 +116,10 @@ pub impl Parser { "unenforced type parameter bound", "use trait bounds on the functions that take the type as \ arguments, not on the types themselves" + ), + ObsoleteImplSyntax => ( + "colon-separated impl syntax", + "write `impl Trait for Type`" ) }; diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index b4fd7a5d2e8..15258a6bbee 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -74,7 +74,7 @@ use parse::obsolete::{ObsoleteLet, ObsoleteFieldTerminator}; use parse::obsolete::{ObsoleteMoveInit, ObsoleteBinaryMove}; use parse::obsolete::{ObsoleteStructCtor, ObsoleteWith}; use parse::obsolete::{ObsoleteSyntax, ObsoleteLowerCaseKindBounds}; -use parse::obsolete::{ObsoleteUnsafeBlock}; +use parse::obsolete::{ObsoleteUnsafeBlock, ObsoleteImplSyntax}; 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}; @@ -2829,16 +2829,11 @@ pub impl Parser { // XXX: clownshoes let ident = special_idents::clownshoes_extensions; - // Parse the type. (If this is `impl trait for type`, however, this - // actually parses the trait.) + // Parse the trait. let mut ty = self.parse_ty(false); // Parse traits, if necessary. - let opt_trait = if self.token == token::COLON { - // Old-style trait. - self.bump(); - Some(self.parse_trait_ref()) - } else if self.eat_keyword(~"for") { + let opt_trait = if self.eat_keyword(~"for") { // New-style trait. Reinterpret the type as a trait. let opt_trait_ref = match ty.node { ty_path(path, node_id) => { @@ -2855,6 +2850,9 @@ pub impl Parser { ty = self.parse_ty(false); opt_trait_ref + } else if self.eat(token::COLON) { + self.obsolete(copy self.span, ObsoleteImplSyntax); + Some(self.parse_trait_ref()) } else { None }; |
