Skip to content

Commit eda51dc

Browse files
committed
---
yaml --- r: 5874 b: refs/heads/master c: 070c39c h: refs/heads/master v: v3
1 parent 92d49fb commit eda51dc

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 686d6a485f71b98fe9ea7dddd25de0c33efeea7a
2+
refs/heads/master: 070c39ca1d4792a96f08d19c22378d5b5b019f02

trunk/src/comp/syntax/parse/parser.rs

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ fn parse_ty(p: parser, colons_before_params: bool) -> @ast::ty {
569569
hi = p.get_hi_pos();
570570
expect(p, token::RBRACKET);
571571
} else if eat_word(p, "fn") {
572-
let proto = parse_fn_proto(p);
572+
let proto = parse_fn_ty_proto(p);
573573
t = parse_ty_fn(proto, p);
574574
alt t { ast::ty_fn(_, _, out, _, _) { hi = out.span.hi; } }
575575
} else if eat_word(p, "block") {
@@ -846,7 +846,7 @@ fn parse_bottom_expr(p: parser) -> @ast::expr {
846846
ret parse_spawn_expr(p);
847847
*/
848848
} else if eat_word(p, "fn") {
849-
let proto = parse_fn_proto(p);
849+
let proto = parse_fn_anon_proto(p);
850850
ret parse_fn_expr(p, proto);
851851
} else if eat_word(p, "block") {
852852
ret parse_fn_expr(p, ast::proto_block);
@@ -2143,7 +2143,31 @@ fn parse_auth(p: parser) -> ast::_auth {
21432143
} else { unexpected(p, p.peek()); }
21442144
}
21452145

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 {
21472171
if p.peek() == token::POUND {
21482172
p.bump();
21492173
ast::proto_bare
@@ -2160,17 +2184,17 @@ fn parse_item(p: parser, attrs: [ast::attribute]) -> option::t<@ast::item> {
21602184
ret some(parse_item_const(p, attrs));
21612185
} else if eat_word(p, "inline") {
21622186
expect_word(p, "fn");
2163-
let proto = parse_fn_proto(p);
2187+
let proto = parse_fn_item_proto(p);
21642188
ret some(parse_item_fn_or_iter(p, ast::impure_fn, proto,
21652189
attrs, ast::il_inline));
21662190
} else if is_word(p, "fn") && p.look_ahead(1u) != token::LPAREN {
21672191
p.bump();
2168-
let proto = parse_fn_proto(p);
2192+
let proto = parse_fn_item_proto(p);
21692193
ret some(parse_item_fn_or_iter(p, ast::impure_fn, proto,
21702194
attrs, ast::il_normal));
21712195
} else if eat_word(p, "pure") {
21722196
expect_word(p, "fn");
2173-
let proto = parse_fn_proto(p);
2197+
let proto = parse_fn_item_proto(p);
21742198
ret some(parse_item_fn_or_iter(p, ast::pure_fn, proto, attrs,
21752199
ast::il_normal));
21762200
} else if is_word(p, "unsafe") && p.look_ahead(1u) != token::LBRACE {

0 commit comments

Comments
 (0)