@@ -293,7 +293,7 @@ fn parse_ty_fn(proto: ast::proto, p: parser) -> ast::ty_ {
293
293
ret ast:: ty_fn ( proto, inputs. node , ret_ty, ret_style, constrs) ;
294
294
}
295
295
296
- fn parse_proto ( p : parser ) -> ast:: proto {
296
+ fn parse_method_proto ( p : parser ) -> ast:: proto {
297
297
if eat_word ( p, "iter" ) {
298
298
ret ast:: proto_iter;
299
299
} else if eat_word ( p, "fn" ) {
@@ -306,7 +306,7 @@ fn parse_proto(p: parser) -> ast::proto {
306
306
fn parse_ty_obj ( p : parser , & hi: uint ) -> ast:: ty_ {
307
307
fn parse_method_sig ( p : parser ) -> ast:: ty_method {
308
308
let flo = p. get_lo_pos ( ) ;
309
- let proto: ast:: proto = parse_proto ( p) ;
309
+ let proto: ast:: proto = parse_method_proto ( p) ;
310
310
let ident = parse_value_ident ( p) ;
311
311
let f = parse_ty_fn ( proto, p) ;
312
312
expect ( p, token:: SEMI ) ;
@@ -568,7 +568,8 @@ fn parse_ty(p: parser, colons_before_params: bool) -> @ast::ty {
568
568
hi = p. get_hi_pos ( ) ;
569
569
expect ( p, token:: RBRACKET ) ;
570
570
} else if eat_word ( p, "fn" ) {
571
- t = parse_ty_fn ( ast:: proto_fn, p) ;
571
+ let proto = parse_fn_proto ( p) ;
572
+ t = parse_ty_fn ( proto, p) ;
572
573
alt t { ast : : ty_fn ( _, _, out, _, _) { hi = out. span . hi ; } }
573
574
} else if eat_word ( p, "block" ) {
574
575
t = parse_ty_fn ( ast:: proto_block, p) ;
@@ -844,7 +845,8 @@ fn parse_bottom_expr(p: parser) -> @ast::expr {
844
845
ret parse_spawn_expr(p);
845
846
*/
846
847
} else if eat_word ( p, "fn" ) {
847
- ret parse_fn_expr ( p, ast:: proto_fn) ;
848
+ let proto = parse_fn_proto ( p) ;
849
+ ret parse_fn_expr ( p, proto) ;
848
850
} else if eat_word ( p, "block" ) {
849
851
ret parse_fn_expr ( p, ast:: proto_block) ;
850
852
} else if eat_word ( p, "lambda" ) {
@@ -1851,7 +1853,7 @@ fn parse_anon_obj_field(p: parser) -> ast::anon_obj_field {
1851
1853
1852
1854
fn parse_method ( p : parser ) -> @ast:: method {
1853
1855
let lo = p. get_lo_pos ( ) ;
1854
- let proto = parse_proto ( p) ;
1856
+ let proto = parse_method_proto ( p) ;
1855
1857
let ident = parse_value_ident ( p) ;
1856
1858
let f = parse_fn ( p, proto, ast:: impure_fn, ast:: il_normal) ;
1857
1859
let meth = { ident: ident, meth: f, id: p. get_id ( ) } ;
@@ -2124,20 +2126,32 @@ fn parse_auth(p: parser) -> ast::_auth {
2124
2126
} else { unexpected ( p, p. peek ( ) ) ; }
2125
2127
}
2126
2128
2129
+ fn parse_fn_proto ( p : parser ) -> ast:: proto {
2130
+ if p. peek ( ) == token:: POUND {
2131
+ p. bump ( ) ;
2132
+ ast:: proto_fn
2133
+ } else {
2134
+ ast:: proto_fn
2135
+ }
2136
+ }
2137
+
2127
2138
fn parse_item ( p : parser , attrs : [ ast:: attribute ] ) -> option:: t < @ast:: item > {
2128
2139
if eat_word ( p, "const" ) {
2129
2140
ret some ( parse_item_const ( p, attrs) ) ;
2130
2141
} else if eat_word ( p, "inline" ) {
2131
2142
expect_word ( p, "fn" ) ;
2132
- ret some( parse_item_fn_or_iter ( p, ast:: impure_fn, ast:: proto_fn,
2143
+ let proto = parse_fn_proto ( p) ;
2144
+ ret some( parse_item_fn_or_iter ( p, ast:: impure_fn, proto,
2133
2145
attrs, ast:: il_inline) ) ;
2134
2146
} else if is_word ( p, "fn" ) && p. look_ahead ( 1 u) != token:: LPAREN {
2135
2147
p. bump ( ) ;
2136
- ret some( parse_item_fn_or_iter ( p, ast:: impure_fn, ast:: proto_fn,
2148
+ let proto = parse_fn_proto ( p) ;
2149
+ ret some( parse_item_fn_or_iter ( p, ast:: impure_fn, proto,
2137
2150
attrs, ast:: il_normal) ) ;
2138
2151
} else if eat_word ( p, "pure" ) {
2139
2152
expect_word ( p, "fn" ) ;
2140
- ret some( parse_item_fn_or_iter ( p, ast:: pure_fn, ast:: proto_fn, attrs,
2153
+ let proto = parse_fn_proto ( p) ;
2154
+ ret some( parse_item_fn_or_iter ( p, ast:: pure_fn, proto, attrs,
2141
2155
ast:: il_normal) ) ;
2142
2156
} else if eat_word ( p, "iter" ) {
2143
2157
ret some ( parse_item_fn_or_iter ( p, ast:: impure_fn, ast:: proto_iter,
0 commit comments