diff options
| author | bors <bors@rust-lang.org> | 2013-11-25 01:12:36 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-11-25 01:12:36 -0800 |
| commit | 55201ed858fa42112bd36aa5bdf72fb070173530 (patch) | |
| tree | da8a71c1262e2503b52c755940d26f14295f6eab /src/libsyntax/parse/parser.rs | |
| parent | ce32f72f1d164d4b94caa511cb430e822b166ee0 (diff) | |
| parent | e36cb0d5c1176f8dcb3538e545c86631d5619f00 (diff) | |
| download | rust-55201ed858fa42112bd36aa5bdf72fb070173530.tar.gz rust-55201ed858fa42112bd36aa5bdf72fb070173530.zip | |
auto merge of #10628 : huonw/rust/3614, r=alexcrichton
Fixes #3614.
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 315872ce8cd..349e544004e 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3869,9 +3869,14 @@ impl Parser { Some(inner_attrs)) } - // parse a method in a trait impl - fn parse_method(&self) -> @method { - let attrs = self.parse_outer_attributes(); + // parse a method in a trait impl, starting with `attrs` attributes. + fn parse_method(&self, already_parsed_attrs: Option<~[Attribute]>) -> @method { + let next_attrs = self.parse_outer_attributes(); + let attrs = match already_parsed_attrs { + Some(mut a) => { a.push_all_move(next_attrs); a } + None => next_attrs + }; + let lo = self.span.lo; let visa = self.parse_visibility(); @@ -3964,16 +3969,21 @@ impl Parser { }; let mut meths = ~[]; - if self.eat(&token::SEMI) { + let inner_attrs = if self.eat(&token::SEMI) { self.obsolete(*self.last_span, ObsoleteEmptyImpl); + None } else { self.expect(&token::LBRACE); + let (inner_attrs, next) = self.parse_inner_attrs_and_next(); + let mut method_attrs = Some(next); while !self.eat(&token::RBRACE) { - meths.push(self.parse_method()); + meths.push(self.parse_method(method_attrs)); + method_attrs = None; } - } + Some(inner_attrs) + }; - (ident, item_impl(generics, opt_trait, ty, meths), None) + (ident, item_impl(generics, opt_trait, ty, meths), inner_attrs) } // parse a::B<~str,int> |
