Skip to content

Commit 79ad0fe

Browse files
committed
---
yaml --- r: 4117 b: refs/heads/master c: 252b8ff h: refs/heads/master i: 4115: a4bf753 v: v3
1 parent c99341e commit 79ad0fe

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
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: 5ab213a464710d8477fdaaae692fb79e1a91c1d6
2+
refs/heads/master: 252b8ffe42a1db5b404b336b9d6c9141088b9926

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1593,7 +1593,17 @@ fn parse_auto_local(&parser p) -> @ast::local {
15931593
ret parse_local_full(none, p);
15941594
}
15951595

1596+
// FIXME simplify when old syntax is no longer supported
15961597
fn parse_let(&parser p) -> @ast::decl {
1598+
if alt p.peek() { token::IDENT(_, false) { true } _ { false } } {
1599+
alt p.look_ahead(1u) {
1600+
token::COLON | token::SEMI | token::COMMA | token::EQ |
1601+
token::LARROW {
1602+
ret parse_let_modern(p);
1603+
}
1604+
_ {}
1605+
}
1606+
}
15971607
auto lo = p.get_last_lo_pos();
15981608
auto locals = ~[parse_typed_local(p)];
15991609
while p.peek() == token::COMMA {
@@ -1603,6 +1613,29 @@ fn parse_let(&parser p) -> @ast::decl {
16031613
ret @spanned(lo, p.get_hi_pos(), ast::decl_local(locals));
16041614
}
16051615

1616+
fn parse_let_modern(&parser p) -> @ast::decl {
1617+
fn parse_local(&parser p) -> @ast::local {
1618+
auto lo = p.get_lo_pos();
1619+
auto ident = parse_value_ident(p);
1620+
auto ty = none;
1621+
if p.peek() == token::COLON {
1622+
p.bump();
1623+
ty = some(parse_ty(p));
1624+
}
1625+
auto init = parse_initializer(p);
1626+
ret @spanned(lo, p.get_last_hi_pos(),
1627+
rec(ty=ty, infer=false, ident=ident,
1628+
init=init, id=p.get_id()));
1629+
}
1630+
auto lo = p.get_lo_pos();
1631+
auto locals = ~[parse_local(p)];
1632+
while p.peek() == token::COMMA {
1633+
p.bump();
1634+
locals += ~[parse_local(p)];
1635+
}
1636+
ret @spanned(lo, p.get_last_hi_pos(), ast::decl_local(locals));
1637+
}
1638+
16061639
fn parse_auto(&parser p) -> @ast::decl {
16071640
auto lo = p.get_last_lo_pos();
16081641
auto locals = ~[parse_auto_local(p)];

0 commit comments

Comments
 (0)