@@ -2050,7 +2050,7 @@ fn parse_outer_attrs_or_ext(&parser p) -> attr_or_ext {
2050
2050
auto lo = p. get_lo_pos ( ) ;
2051
2051
p. bump ( ) ;
2052
2052
if ( p. peek ( ) == token:: LBRACKET ) {
2053
- auto first_attr = parse_attribute_naked ( p, lo) ;
2053
+ auto first_attr = parse_attribute_naked ( p, ast :: attr_outer , lo) ;
2054
2054
ret some ( left ( [ first_attr] + parse_outer_attributes ( p) ) ) ;
2055
2055
} else {
2056
2056
ret some ( right ( parse_syntax_ext_naked ( p, lo) ) ) ;
@@ -2064,23 +2064,24 @@ fn parse_outer_attrs_or_ext(&parser p) -> attr_or_ext {
2064
2064
fn parse_outer_attributes ( & parser p) -> vec[ ast:: attribute ] {
2065
2065
let vec[ ast:: attribute] attrs = [ ] ;
2066
2066
while ( p. peek ( ) == token:: POUND ) {
2067
- attrs += [ parse_attribute ( p) ] ;
2067
+ attrs += [ parse_attribute ( p, ast :: attr_outer ) ] ;
2068
2068
}
2069
2069
ret attrs;
2070
2070
}
2071
2071
2072
- fn parse_attribute ( & parser p) -> ast:: attribute {
2072
+ fn parse_attribute ( & parser p, ast :: attr_style style ) -> ast:: attribute {
2073
2073
auto lo = p. get_lo_pos ( ) ;
2074
2074
expect ( p, token:: POUND ) ;
2075
- ret parse_attribute_naked ( p, lo) ;
2075
+ ret parse_attribute_naked ( p, style , lo) ;
2076
2076
}
2077
2077
2078
- fn parse_attribute_naked ( & parser p, uint lo) -> ast:: attribute {
2078
+ fn parse_attribute_naked ( & parser p, ast:: attr_style style,
2079
+ uint lo) -> ast:: attribute {
2079
2080
expect ( p, token:: LBRACKET ) ;
2080
2081
auto meta_item = parse_meta_item ( p) ;
2081
2082
expect ( p, token:: RBRACKET ) ;
2082
2083
auto hi = p. get_hi_pos ( ) ;
2083
- ret spanned( lo, hi, rec ( style=ast :: attr_outer , value=* meta_item) ) ;
2084
+ ret spanned( lo, hi, rec ( style=style , value=* meta_item) ) ;
2084
2085
}
2085
2086
2086
2087
// Parse attributes that appear after the opening of an item, each terminated
@@ -2094,12 +2095,17 @@ fn parse_inner_attributes(&parser p) -> tup(vec[ast::attribute],
2094
2095
let vec[ ast:: attribute] inner_attrs = [ ] ;
2095
2096
let vec[ ast:: attribute] next_outer_attrs = [ ] ;
2096
2097
while ( p. peek ( ) == token:: POUND ) {
2097
- auto attr = parse_attribute ( p) ;
2098
+ auto attr = parse_attribute ( p, ast :: attr_inner ) ;
2098
2099
if ( p. peek ( ) == token:: SEMI ) {
2099
2100
p. bump ( ) ;
2100
2101
inner_attrs += [ attr] ;
2101
2102
} else {
2102
- next_outer_attrs += [ attr] ;
2103
+ // It's not really an inner attribute
2104
+ auto outer_attr = spanned ( attr. span . lo ,
2105
+ attr. span . hi ,
2106
+ rec ( style=ast:: attr_outer,
2107
+ value=attr. node . value ) ) ;
2108
+ next_outer_attrs += [ outer_attr] ;
2103
2109
break ;
2104
2110
}
2105
2111
}
0 commit comments