@@ -569,7 +569,7 @@ fn parse_ty(p: parser, colons_before_params: bool) -> @ast::ty {
569
569
hi = p. get_hi_pos ( ) ;
570
570
expect ( p, token:: RBRACKET ) ;
571
571
} else if eat_word ( p, "fn" ) {
572
- let proto = parse_fn_proto ( p) ;
572
+ let proto = parse_fn_ty_proto ( p) ;
573
573
t = parse_ty_fn ( proto, p) ;
574
574
alt t { ast : : ty_fn ( _, _, out, _, _) { hi = out. span . hi ; } }
575
575
} else if eat_word ( p, "block" ) {
@@ -846,7 +846,7 @@ fn parse_bottom_expr(p: parser) -> @ast::expr {
846
846
ret parse_spawn_expr(p);
847
847
*/
848
848
} else if eat_word ( p, "fn" ) {
849
- let proto = parse_fn_proto ( p) ;
849
+ let proto = parse_fn_anon_proto ( p) ;
850
850
ret parse_fn_expr ( p, proto) ;
851
851
} else if eat_word ( p, "block" ) {
852
852
ret parse_fn_expr ( p, ast:: proto_block) ;
@@ -2143,7 +2143,31 @@ fn parse_auth(p: parser) -> ast::_auth {
2143
2143
} else { unexpected ( p, p. peek ( ) ) ; }
2144
2144
}
2145
2145
2146
- fn parse_fn_proto ( p : parser ) -> ast:: proto {
2146
+ fn parse_fn_item_proto ( p : parser ) -> ast:: proto {
2147
+ if p. peek ( ) == token:: POUND {
2148
+ p. bump ( ) ;
2149
+ ast:: proto_bare
2150
+ } else if p. peek ( ) == token:: AT {
2151
+ p. bump ( ) ;
2152
+ ast:: proto_fn
2153
+ } else {
2154
+ ast:: proto_fn
2155
+ }
2156
+ }
2157
+
2158
+ fn parse_fn_ty_proto ( p : parser ) -> ast:: proto {
2159
+ if p. peek ( ) == token:: POUND {
2160
+ p. bump ( ) ;
2161
+ ast:: proto_bare
2162
+ } else if p. peek ( ) == token:: AT {
2163
+ p. bump ( ) ;
2164
+ ast:: proto_fn
2165
+ } else {
2166
+ ast:: proto_fn
2167
+ }
2168
+ }
2169
+
2170
+ fn parse_fn_anon_proto ( p : parser ) -> ast:: proto {
2147
2171
if p. peek ( ) == token:: POUND {
2148
2172
p. bump ( ) ;
2149
2173
ast:: proto_bare
@@ -2160,17 +2184,17 @@ fn parse_item(p: parser, attrs: [ast::attribute]) -> option::t<@ast::item> {
2160
2184
ret some ( parse_item_const ( p, attrs) ) ;
2161
2185
} else if eat_word ( p, "inline" ) {
2162
2186
expect_word ( p, "fn" ) ;
2163
- let proto = parse_fn_proto ( p) ;
2187
+ let proto = parse_fn_item_proto ( p) ;
2164
2188
ret some( parse_item_fn_or_iter ( p, ast:: impure_fn, proto,
2165
2189
attrs, ast:: il_inline) ) ;
2166
2190
} else if is_word ( p, "fn" ) && p. look_ahead ( 1 u) != token:: LPAREN {
2167
2191
p. bump ( ) ;
2168
- let proto = parse_fn_proto ( p) ;
2192
+ let proto = parse_fn_item_proto ( p) ;
2169
2193
ret some( parse_item_fn_or_iter ( p, ast:: impure_fn, proto,
2170
2194
attrs, ast:: il_normal) ) ;
2171
2195
} else if eat_word ( p, "pure" ) {
2172
2196
expect_word ( p, "fn" ) ;
2173
- let proto = parse_fn_proto ( p) ;
2197
+ let proto = parse_fn_item_proto ( p) ;
2174
2198
ret some( parse_item_fn_or_iter ( p, ast:: pure_fn, proto, attrs,
2175
2199
ast:: il_normal) ) ;
2176
2200
} else if is_word ( p, "unsafe" ) && p. look_ahead ( 1 u) != token:: LBRACE {
0 commit comments