syntax: Stop supporting old impl syntax

This commit is contained in:
Brian Anderson 2012-08-08 15:34:17 -07:00
parent 43c9c637d3
commit 436a90e3d7

View file

@ -2440,66 +2440,19 @@ class parser {
tps = ~[];
}
let mut ident;
let ty, traits;
if !self.is_keyword(~"of") &&
!self.token_is_keyword(~"of", self.look_ahead(1)) &&
!self.token_is_keyword(~"for", self.look_ahead(1)) &&
self.look_ahead(1) != token::BINOP(token::SLASH) &&
(self.look_ahead(1) != token::LT
|| (self.look_ahead(1) == token::LT && tps.is_not_empty())) {
// This is a new-style impl declaration.
ident = @~"__extensions__"; // XXX: clownshoes
let ident = @~"__extensions__"; // XXX: clownshoes
// Parse the type.
ty = self.parse_ty(false);
let ty = self.parse_ty(false);
// Parse traits, if necessary.
if self.token == token::COLON {
let traits = if self.token == token::COLON {
self.bump();
traits = self.parse_trait_ref_list(token::LBRACE);
self.parse_trait_ref_list(token::LBRACE)
} else {
traits = ~[];
}
} else {
self.warn(~"old-style named impl?");
let mut ident_old;
if self.token == token::BINOP(token::SLASH) {
self.parse_region_param();
ident_old = none;
tps = self.parse_ty_params();
} else if self.is_keyword(~"of") {
ident_old = none;
} else {
ident_old = some(self.parse_ident());
self.parse_region_param();
tps = self.parse_ty_params();
}
if self.eat_keyword(~"of") {
let for_atom = (*self.reader.interner()).intern(@~"for");
traits = self.parse_trait_ref_list
(token::IDENT(for_atom, false));
if traits.len() >= 1 && option::is_none(ident_old) {
ident_old = some(vec::last(traits[0].path.idents));
}
if traits.len() == 0 {
self.fatal(~"BUG: 'of' but no trait");
}
if traits.len() > 1 {
self.fatal(~"BUG: multiple traits");
}
} else {
traits = ~[];
~[]
};
ident = match ident_old {
some(name) => name,
none => { self.expect_keyword(~"of"); fail; }
};
self.expect_keyword(~"for");
ty = self.parse_ty(false);
}
let mut meths = ~[];
self.expect(token::LBRACE);