@@ -1797,12 +1797,12 @@ fn parse_fn_header(&parser p)
1797
1797
ret tup( id, ty_params) ;
1798
1798
}
1799
1799
1800
- fn parse_item_fn_or_iter ( & parser p, ast:: purity purity, ast:: proto proto)
1801
- -> @ast:: item {
1800
+ fn parse_item_fn_or_iter ( & parser p, ast:: purity purity, ast:: proto proto,
1801
+ vec [ ast :: attribute ] attrs ) -> @ast:: item {
1802
1802
auto lo = p. get_last_lo_pos ( ) ;
1803
1803
auto t = parse_fn_header ( p) ;
1804
1804
auto f = parse_fn ( p, proto, purity) ;
1805
- auto item = ast:: item_fn ( t. _0 , f, t. _1 ,
1805
+ auto item = ast:: item_fn ( t. _0 , f, t. _1 , attrs ,
1806
1806
p. next_def_id ( ) , p. get_ann ( ) ) ;
1807
1807
ret @spanned ( lo, f. body . span . hi , item) ;
1808
1808
}
@@ -1846,7 +1846,8 @@ fn parse_dtor(&parser p) -> @ast::method {
1846
1846
ret @spanned ( lo, f. body . span . hi , m) ;
1847
1847
}
1848
1848
1849
- fn parse_item_obj ( & parser p, ast:: layer lyr) -> @ast:: item {
1849
+ fn parse_item_obj ( & parser p, ast:: layer lyr,
1850
+ vec[ ast:: attribute ] attrs ) -> @ast:: item {
1850
1851
auto lo = p. get_last_lo_pos ( ) ;
1851
1852
auto ident = parse_value_ident ( p) ;
1852
1853
auto ty_params = parse_ty_params ( p) ;
@@ -1877,7 +1878,7 @@ fn parse_item_obj(&parser p, ast::layer lyr) -> @ast::item {
1877
1878
dtor=dtor) ;
1878
1879
1879
1880
auto odid = rec ( ty=p. next_def_id ( ) , ctor=p. next_def_id ( ) ) ;
1880
- auto item = ast:: item_obj ( ident, ob, ty_params, odid, p. get_ann ( ) ) ;
1881
+ auto item = ast:: item_obj ( ident, ob, ty_params, attrs , odid, p. get_ann ( ) ) ;
1881
1882
1882
1883
ret @spanned ( lo, hi, item) ;
1883
1884
}
@@ -1900,15 +1901,16 @@ fn parse_mod_items(&parser p, token::token term) -> ast::_mod {
1900
1901
ret rec( view_items=view_items, items=items) ;
1901
1902
}
1902
1903
1903
- fn parse_item_const ( & parser p) -> @ast:: item {
1904
+ fn parse_item_const ( & parser p, vec [ ast :: attribute ] attrs ) -> @ast:: item {
1904
1905
auto lo = p. get_last_lo_pos ( ) ;
1905
1906
auto ty = parse_ty ( p) ;
1906
1907
auto id = parse_value_ident ( p) ;
1907
1908
expect ( p, token:: EQ ) ;
1908
1909
auto e = parse_expr ( p) ;
1909
1910
auto hi = p. get_hi_pos ( ) ;
1910
1911
expect ( p, token:: SEMI ) ;
1911
- auto item = ast:: item_const ( id, ty, e, p. next_def_id ( ) , p. get_ann ( ) ) ;
1912
+ auto item = ast:: item_const ( id, ty, e, attrs,
1913
+ p. next_def_id ( ) , p. get_ann ( ) ) ;
1912
1914
ret @spanned ( lo, hi, item) ;
1913
1915
}
1914
1916
@@ -1994,7 +1996,7 @@ fn default_native_name(session::session sess, str id) -> str {
1994
1996
ret n. prefix + id + n. suffix ;
1995
1997
}
1996
1998
1997
- fn parse_item_native_mod ( & parser p) -> @ast:: item {
1999
+ fn parse_item_native_mod ( & parser p, vec [ ast :: attribute ] attrs ) -> @ast:: item {
1998
2000
auto lo = p. get_last_lo_pos ( ) ;
1999
2001
auto abi = ast:: native_abi_cdecl;
2000
2002
if ( !is_word ( p, "mod" ) ) {
@@ -2024,7 +2026,7 @@ fn parse_item_native_mod(&parser p) -> @ast::item {
2024
2026
auto m = parse_native_mod_items ( p, native_name, abi) ;
2025
2027
auto hi = p. get_hi_pos ( ) ;
2026
2028
expect ( p, token:: RBRACE ) ;
2027
- auto item = ast:: item_native_mod ( id, m, p. next_def_id ( ) ) ;
2029
+ auto item = ast:: item_native_mod ( id, m, attrs , p. next_def_id ( ) ) ;
2028
2030
ret @spanned ( lo, hi, item) ;
2029
2031
}
2030
2032
@@ -2034,19 +2036,20 @@ fn parse_type_decl(&parser p) -> tup(uint, ast::ident) {
2034
2036
ret tup( lo, id) ;
2035
2037
}
2036
2038
2037
- fn parse_item_type ( & parser p) -> @ast:: item {
2039
+ fn parse_item_type ( & parser p, vec [ ast :: attribute ] attrs ) -> @ast:: item {
2038
2040
auto t = parse_type_decl ( p) ;
2039
2041
auto tps = parse_ty_params ( p) ;
2040
2042
2041
2043
expect ( p, token:: EQ ) ;
2042
2044
auto ty = parse_ty ( p) ;
2043
2045
auto hi = p. get_hi_pos ( ) ;
2044
2046
expect ( p, token:: SEMI ) ;
2045
- auto item = ast:: item_ty ( t. _1 , ty, tps, p. next_def_id ( ) , p. get_ann ( ) ) ;
2047
+ auto item = ast:: item_ty ( t. _1 , ty, tps, attrs,
2048
+ p. next_def_id ( ) , p. get_ann ( ) ) ;
2046
2049
ret @spanned ( t. _0 , hi, item) ;
2047
2050
}
2048
2051
2049
- fn parse_item_tag ( & parser p) -> @ast:: item {
2052
+ fn parse_item_tag ( & parser p, vec [ ast :: attribute ] attrs ) -> @ast:: item {
2050
2053
auto lo = p. get_last_lo_pos ( ) ;
2051
2054
auto id = parse_ident ( p) ;
2052
2055
auto ty_params = parse_ty_params ( p) ;
@@ -2092,8 +2095,8 @@ fn parse_item_tag(&parser p) -> @ast::item {
2092
2095
auto hi = p. get_hi_pos ( ) ;
2093
2096
p. bump ( ) ;
2094
2097
2095
- auto item = ast:: item_tag ( id, variants, ty_params, p . next_def_id ( ) ,
2096
- p. get_ann ( ) ) ;
2098
+ auto item = ast:: item_tag ( id, variants, ty_params, attrs ,
2099
+ p . next_def_id ( ) , p. get_ann ( ) ) ;
2097
2100
ret @spanned ( lo, hi, item) ;
2098
2101
}
2099
2102
@@ -2128,29 +2131,31 @@ tag parsed_item {
2128
2131
fn parse_item ( & parser p, vec[ ast:: attribute ] attrs ) -> parsed_item {
2129
2132
2130
2133
if ( eat_word ( p, "const" ) ) {
2131
- ret got_item ( parse_item_const ( p) ) ;
2134
+ ret got_item ( parse_item_const ( p, attrs ) ) ;
2132
2135
} else if ( eat_word ( p, "fn" ) ) {
2133
2136
// This is an anonymous function
2134
2137
if ( p. peek ( ) == token:: LPAREN ) { ret fn_no_item; }
2135
- ret got_item( parse_item_fn_or_iter ( p, ast:: impure_fn, ast:: proto_fn) ) ;
2138
+ ret got_item( parse_item_fn_or_iter ( p, ast:: impure_fn,
2139
+ ast:: proto_fn, attrs) ) ;
2136
2140
} else if ( eat_word ( p, "pred" ) ) {
2137
- ret got_item ( parse_item_fn_or_iter ( p, ast:: pure_fn, ast:: proto_fn) ) ;
2141
+ ret got_item ( parse_item_fn_or_iter ( p, ast:: pure_fn,
2142
+ ast:: proto_fn, attrs) ) ;
2138
2143
} else if ( eat_word ( p, "iter" ) ) {
2139
2144
ret got_item ( parse_item_fn_or_iter ( p, ast:: impure_fn,
2140
- ast:: proto_iter) ) ;
2145
+ ast:: proto_iter, attrs ) ) ;
2141
2146
} else if ( eat_word ( p, "mod" ) ) {
2142
2147
ret got_item ( parse_item_mod ( p, attrs) ) ;
2143
2148
} else if ( eat_word ( p, "native" ) ) {
2144
- ret got_item ( parse_item_native_mod ( p) ) ;
2149
+ ret got_item ( parse_item_native_mod ( p, attrs ) ) ;
2145
2150
}
2146
2151
2147
2152
auto lyr = parse_layer ( p) ;
2148
2153
if ( eat_word ( p, "type" ) ) {
2149
- ret got_item ( parse_item_type ( p) ) ;
2154
+ ret got_item ( parse_item_type ( p, attrs ) ) ;
2150
2155
} else if ( eat_word ( p, "tag" ) ) {
2151
- ret got_item ( parse_item_tag ( p) ) ;
2156
+ ret got_item ( parse_item_tag ( p, attrs ) ) ;
2152
2157
} else if ( eat_word ( p, "obj" ) ) {
2153
- ret got_item ( parse_item_obj ( p, lyr) ) ;
2158
+ ret got_item ( parse_item_obj ( p, lyr, attrs ) ) ;
2154
2159
} else {
2155
2160
ret no_item;
2156
2161
}
0 commit comments