Type ascription in let

This commit is contained in:
Aleksey Kladov 2018-07-31 15:33:51 +03:00
parent 580340d1b8
commit f843f23aba
3 changed files with 90 additions and 2 deletions

View file

@ -267,13 +267,24 @@ fn fn_item(p: &mut Parser) {
m.complete(p, BLOCK); m.complete(p, BLOCK);
} }
// test let_stmt;
// fn foo() {
// let a;
// let b: i32;
// let c = 92;
// let d: i32 = 92;
// }
fn let_stmt(p: &mut Parser) { fn let_stmt(p: &mut Parser) {
assert!(p.at(LET_KW)); assert!(p.at(LET_KW));
let m = p.start(); let m = p.start();
p.bump(); p.bump();
patterns::pattern(p); patterns::pattern(p);
p.expect(EQ); if p.eat(COLON) {
expressions::expr(p); types::type_(p);
}
if p.eat(EQ) {
expressions::expr(p);
}
p.expect(SEMI); p.expect(SEMI);
m.complete(p, LET_STMT); m.complete(p, LET_STMT);
} }

View file

@ -0,0 +1,6 @@
fn foo() {
let a;
let b: i32;
let c = 92;
let d: i32 = 92;
}

View file

@ -0,0 +1,71 @@
FILE@[0; 77)
FN_ITEM@[0; 77)
FN_KW@[0; 2)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 9)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
WHITESPACE@[8; 9)
BLOCK@[9; 77)
L_CURLY@[9; 10)
LET_STMT@[10; 26)
WHITESPACE@[10; 15)
LET_KW@[15; 18)
BIND_PAT@[18; 20)
NAME@[18; 20)
WHITESPACE@[18; 19)
IDENT@[19; 20) "a"
SEMI@[20; 21)
WHITESPACE@[21; 26)
LET_STMT@[26; 42)
LET_KW@[26; 29)
BIND_PAT@[29; 31)
NAME@[29; 31)
WHITESPACE@[29; 30)
IDENT@[30; 31) "b"
COLON@[31; 32)
PATH_TYPE@[32; 36)
PATH@[32; 36)
PATH_SEGMENT@[32; 36)
NAME_REF@[32; 36)
WHITESPACE@[32; 33)
IDENT@[33; 36) "i32"
SEMI@[36; 37)
WHITESPACE@[37; 42)
LET_STMT@[42; 58)
LET_KW@[42; 45)
BIND_PAT@[45; 48)
NAME@[45; 48)
WHITESPACE@[45; 46)
IDENT@[46; 47) "c"
WHITESPACE@[47; 48)
EQ@[48; 49)
LITERAL@[49; 52)
WHITESPACE@[49; 50)
INT_NUMBER@[50; 52)
SEMI@[52; 53)
WHITESPACE@[53; 58)
LET_STMT@[58; 75)
LET_KW@[58; 61)
BIND_PAT@[61; 63)
NAME@[61; 63)
WHITESPACE@[61; 62)
IDENT@[62; 63) "d"
COLON@[63; 64)
PATH_TYPE@[64; 69)
PATH@[64; 69)
PATH_SEGMENT@[64; 69)
NAME_REF@[64; 69)
WHITESPACE@[64; 65)
IDENT@[65; 68) "i32"
WHITESPACE@[68; 69)
EQ@[69; 70)
LITERAL@[70; 73)
WHITESPACE@[70; 71)
INT_NUMBER@[71; 73)
SEMI@[73; 74)
WHITESPACE@[74; 75)
R_CURLY@[75; 76)
WHITESPACE@[76; 77)