@@ -1595,7 +1595,7 @@ fn parse_source_stmt(&parser p) -> @ast::stmt {
1595
1595
auto hi = p. get_span ( ) ;
1596
1596
ret @spanned ( lo, decl. span . hi , ast:: stmt_decl ( decl, p. get_ann ( ) ) ) ;
1597
1597
} else {
1598
- alt ( parse_item ( p) ) {
1598
+ alt ( parse_item ( p, [ ] ) ) {
1599
1599
case ( got_item ( ?i) ) {
1600
1600
auto hi = i. span . hi ;
1601
1601
auto decl = @spanned ( lo, hi, ast:: decl_item ( i) ) ;
@@ -1886,7 +1886,8 @@ fn parse_mod_items(&parser p, token::token term) -> ast::_mod {
1886
1886
auto view_items = parse_view ( p) ;
1887
1887
let vec[ @ast:: item] items = [ ] ;
1888
1888
while ( p. peek ( ) != term) {
1889
- alt ( parse_item ( p) ) {
1889
+ auto attrs = parse_attributes ( p) ;
1890
+ alt ( parse_item ( p, attrs) ) {
1890
1891
case ( got_item ( ?i) ) {
1891
1892
vec:: push ( items, i) ;
1892
1893
}
@@ -1911,14 +1912,14 @@ fn parse_item_const(&parser p) -> @ast::item {
1911
1912
ret @spanned ( lo, hi, item) ;
1912
1913
}
1913
1914
1914
- fn parse_item_mod ( & parser p) -> @ast:: item {
1915
+ fn parse_item_mod ( & parser p, vec [ ast :: meta_item ] attrs ) -> @ast:: item {
1915
1916
auto lo = p. get_last_lo_pos ( ) ;
1916
1917
auto id = parse_ident ( p) ;
1917
1918
expect ( p, token:: LBRACE ) ;
1918
1919
auto m = parse_mod_items ( p, token:: RBRACE ) ;
1919
1920
auto hi = p. get_hi_pos ( ) ;
1920
1921
expect ( p, token:: RBRACE ) ;
1921
- auto item = ast:: item_mod ( id, m, [ ] , p. next_def_id ( ) ) ;
1922
+ auto item = ast:: item_mod ( id, m, attrs , p. next_def_id ( ) ) ;
1922
1923
ret @spanned ( lo, hi, item) ;
1923
1924
}
1924
1925
@@ -2124,7 +2125,8 @@ tag parsed_item {
2124
2125
fn_no_item;
2125
2126
}
2126
2127
2127
- fn parse_item ( & parser p) -> parsed_item {
2128
+ fn parse_item ( & parser p, vec[ ast:: meta_item ] attrs ) -> parsed_item {
2129
+
2128
2130
if ( eat_word ( p, "const" ) ) {
2129
2131
ret got_item ( parse_item_const ( p) ) ;
2130
2132
} else if ( eat_word ( p, "fn" ) ) {
@@ -2137,7 +2139,7 @@ fn parse_item(&parser p) -> parsed_item {
2137
2139
ret got_item ( parse_item_fn_or_iter ( p, ast:: impure_fn,
2138
2140
ast:: proto_iter) ) ;
2139
2141
} else if ( eat_word ( p, "mod" ) ) {
2140
- ret got_item ( parse_item_mod ( p) ) ;
2142
+ ret got_item ( parse_item_mod ( p, attrs ) ) ;
2141
2143
} else if ( eat_word ( p, "native" ) ) {
2142
2144
ret got_item ( parse_item_native_mod ( p) ) ;
2143
2145
}
@@ -2154,6 +2156,19 @@ fn parse_item(&parser p) -> parsed_item {
2154
2156
}
2155
2157
}
2156
2158
2159
+ fn parse_attributes ( & parser p) -> vec[ ast:: meta_item ] {
2160
+ let vec[ ast:: meta_item] attrs = [ ] ;
2161
+
2162
+ while ( p. peek ( ) == token:: POUND ) {
2163
+ p. bump ( ) ;
2164
+ expect ( p, token:: LBRACKET ) ;
2165
+ attrs += [ * parse_meta_item ( p) ] ;
2166
+ expect ( p, token:: RBRACKET ) ;
2167
+ }
2168
+
2169
+ ret attrs;
2170
+ }
2171
+
2157
2172
fn parse_meta_item ( & parser p) -> @ast:: meta_item {
2158
2173
auto lo = p. get_lo_pos ( ) ;
2159
2174
auto ident = parse_ident ( p) ;
0 commit comments