Skip to content

Commit 5c42e3d

Browse files
committed
Allow non-semicolon-requiring expressions to be followed by .field
There is no valid expression that starts with a dot token (.5 is a number token), so this introduces no ambiguities. Issue #1716
1 parent da61e1f commit 5c42e3d

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

src/comp/syntax/parse/parser.rs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,28 @@ fn parse_dot_or_call_expr_with(p: parser, e0: pexpr) -> pexpr {
10391039
let e = e0;
10401040
let lo = e.span.lo;
10411041
let hi = e.span.hi;
1042-
while !expr_is_complete(p, e) {
1042+
while true {
1043+
// expr.f
1044+
if eat(p, token::DOT) {
1045+
alt p.token {
1046+
token::IDENT(i, _) {
1047+
hi = p.span.hi;
1048+
p.bump();
1049+
let tys = if eat(p, token::MOD_SEP) {
1050+
expect(p, token::LT);
1051+
parse_seq_to_gt(some(token::COMMA),
1052+
{|p| parse_ty(p, false)}, p)
1053+
} else { [] };
1054+
e = mk_pexpr(p, lo, hi,
1055+
ast::expr_field(to_expr(e),
1056+
p.get_str(i),
1057+
tys));
1058+
}
1059+
t { unexpected(p, t); }
1060+
}
1061+
cont;
1062+
}
1063+
if expr_is_complete(p, e) { break; }
10431064
alt p.token {
10441065
// expr(...)
10451066
token::LPAREN if permits_call(p) {
@@ -1076,27 +1097,6 @@ fn parse_dot_or_call_expr_with(p: parser, e0: pexpr) -> pexpr {
10761097
e = mk_pexpr(p, lo, hi, ast::expr_index(to_expr(e), ix));
10771098
}
10781099

1079-
// expr.f
1080-
token::DOT {
1081-
p.bump();
1082-
alt p.token {
1083-
token::IDENT(i, _) {
1084-
hi = p.span.hi;
1085-
p.bump();
1086-
let tys = if eat(p, token::MOD_SEP) {
1087-
expect(p, token::LT);
1088-
parse_seq_to_gt(some(token::COMMA),
1089-
{|p| parse_ty(p, false)}, p)
1090-
} else { [] };
1091-
e = mk_pexpr(p, lo, hi,
1092-
ast::expr_field(to_expr(e),
1093-
p.get_str(i),
1094-
tys));
1095-
}
1096-
t { unexpected(p, t); }
1097-
}
1098-
}
1099-
11001100
_ { ret e; }
11011101
}
11021102
}

0 commit comments

Comments
 (0)