block expr

This commit is contained in:
Aleksey Kladov 2018-08-01 10:51:42 +03:00
parent 490f8ba5b7
commit 53485030dc
50 changed files with 195 additions and 104 deletions

View File

@ -139,7 +139,7 @@ Grammar(
"STRUCT_LIT_FIELD", "STRUCT_LIT_FIELD",
"IF_EXPR", "IF_EXPR",
"EXTERN_BLOCK", "EXTERN_BLOCK_EXPR",
"ENUM_VARIANT", "ENUM_VARIANT",
"NAMED_FIELD", "NAMED_FIELD",
"POS_FIELD", "POS_FIELD",
@ -155,7 +155,7 @@ Grammar(
"ABI", "ABI",
"NAME", "NAME",
"NAME_REF", "NAME_REF",
"BLOCK", "BLOCK_EXPR",
"LET_STMT", "LET_STMT",
"EXPR_STMT", "EXPR_STMT",

View File

@ -53,31 +53,9 @@ pub(super) fn expr(p: &mut Parser) {
pub(super) fn block(p: &mut Parser) { pub(super) fn block(p: &mut Parser) {
if !p.at(L_CURLY) { if !p.at(L_CURLY) {
p.error("expected block"); p.error("expected block");
return;
} }
let m = p.start(); block_expr(p);
p.bump();
while !p.at(EOF) && !p.at(R_CURLY) {
match p.current() {
LET_KW => let_stmt(p),
c => {
// test block_items
// fn a() { fn b() {} }
if items::ITEM_FIRST.contains(c) {
items::item(p)
} else {
let expr_stmt = p.start();
expressions::expr(p);
if p.eat(SEMI) {
expr_stmt.complete(p, EXPR_STMT);
} else {
expr_stmt.abandon(p);
}
}
}
}
}
p.expect(R_CURLY);
m.complete(p, BLOCK);
} }
// test let_stmt; // test let_stmt;
@ -158,12 +136,14 @@ fn atom_expr(p: &mut Parser) -> Option<CompletedMarker> {
if paths::is_path_start(p) { if paths::is_path_start(p) {
return Some(path_expr(p)); return Some(path_expr(p));
} }
let la = p.nth(1);
let done = match p.current() { let done = match p.current() {
L_PAREN => tuple_expr(p), L_PAREN => tuple_expr(p),
PIPE => lambda_expr(p), PIPE => lambda_expr(p),
MOVE_KW if p.nth(1) == PIPE => lambda_expr(p), MOVE_KW if la == PIPE => lambda_expr(p),
IF_KW => if_expr(p), IF_KW => if_expr(p),
UNSAFE_KW if la == L_CURLY => block_expr(p),
L_CURLY => block_expr(p),
_ => { _ => {
p.err_and_bump("expected expression"); p.err_and_bump("expected expression");
return None; return None;
@ -223,6 +203,40 @@ fn if_expr(p: &mut Parser) -> CompletedMarker {
m.complete(p, IF_EXPR) m.complete(p, IF_EXPR)
} }
// test block_expr
// fn foo() {
// {};
// unsafe {};
// }
fn block_expr(p: &mut Parser) -> CompletedMarker {
assert!(p.at(L_CURLY) || p.at(UNSAFE_KW) && p.nth(1) == L_CURLY);
let m = p.start();
p.eat(UNSAFE_KW);
p.bump();
while !p.at(EOF) && !p.at(R_CURLY) {
match p.current() {
LET_KW => let_stmt(p),
c => {
// test block_items
// fn a() { fn b() {} }
if items::ITEM_FIRST.contains(c) {
items::item(p)
} else {
let expr_stmt = p.start();
expressions::expr(p);
if p.eat(SEMI) {
expr_stmt.complete(p, EXPR_STMT);
} else {
expr_stmt.abandon(p);
}
}
}
}
}
p.expect(R_CURLY);
m.complete(p, BLOCK_EXPR)
}
// test call_expr // test call_expr
// fn foo() { // fn foo() {
// let _ = f(); // let _ = f();

View File

@ -44,7 +44,7 @@ pub(super) fn item(p: &mut Parser) {
// extern {} // extern {}
L_CURLY => { L_CURLY => {
extern_block(p); extern_block(p);
EXTERN_BLOCK EXTERN_BLOCK_EXPR
} }
// test extern_struct // test extern_struct
// extern struct Foo; // extern struct Foo;

View File

@ -45,6 +45,7 @@ pub use {
yellow::{SyntaxNode, SyntaxNodeRef, SyntaxRoot, TreeRoot}, yellow::{SyntaxNode, SyntaxNodeRef, SyntaxRoot, TreeRoot},
}; };
pub fn parse(text: &str) -> SyntaxNode { pub fn parse(text: &str) -> SyntaxNode {
let tokens = tokenize(&text); let tokens = tokenize(&text);
parser_impl::parse::<yellow::GreenBuilder>(text, &tokens) parser_impl::parse::<yellow::GreenBuilder>(text, &tokens)

View File

@ -129,7 +129,7 @@ pub enum SyntaxKind {
STRUCT_LIT, STRUCT_LIT,
STRUCT_LIT_FIELD, STRUCT_LIT_FIELD,
IF_EXPR, IF_EXPR,
EXTERN_BLOCK, EXTERN_BLOCK_EXPR,
ENUM_VARIANT, ENUM_VARIANT,
NAMED_FIELD, NAMED_FIELD,
POS_FIELD, POS_FIELD,
@ -145,7 +145,7 @@ pub enum SyntaxKind {
ABI, ABI,
NAME, NAME,
NAME_REF, NAME_REF,
BLOCK, BLOCK_EXPR,
LET_STMT, LET_STMT,
EXPR_STMT, EXPR_STMT,
TYPE_PARAM_LIST, TYPE_PARAM_LIST,
@ -336,7 +336,7 @@ impl SyntaxKind {
STRUCT_LIT => &SyntaxInfo { name: "STRUCT_LIT" }, STRUCT_LIT => &SyntaxInfo { name: "STRUCT_LIT" },
STRUCT_LIT_FIELD => &SyntaxInfo { name: "STRUCT_LIT_FIELD" }, STRUCT_LIT_FIELD => &SyntaxInfo { name: "STRUCT_LIT_FIELD" },
IF_EXPR => &SyntaxInfo { name: "IF_EXPR" }, IF_EXPR => &SyntaxInfo { name: "IF_EXPR" },
EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" }, EXTERN_BLOCK_EXPR => &SyntaxInfo { name: "EXTERN_BLOCK_EXPR" },
ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" }, ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" },
NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" }, NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" },
POS_FIELD => &SyntaxInfo { name: "POS_FIELD" }, POS_FIELD => &SyntaxInfo { name: "POS_FIELD" },
@ -352,7 +352,7 @@ impl SyntaxKind {
ABI => &SyntaxInfo { name: "ABI" }, ABI => &SyntaxInfo { name: "ABI" },
NAME => &SyntaxInfo { name: "NAME" }, NAME => &SyntaxInfo { name: "NAME" },
NAME_REF => &SyntaxInfo { name: "NAME_REF" }, NAME_REF => &SyntaxInfo { name: "NAME_REF" },
BLOCK => &SyntaxInfo { name: "BLOCK" }, BLOCK_EXPR => &SyntaxInfo { name: "BLOCK_EXPR" },
LET_STMT => &SyntaxInfo { name: "LET_STMT" }, LET_STMT => &SyntaxInfo { name: "LET_STMT" },
EXPR_STMT => &SyntaxInfo { name: "EXPR_STMT" }, EXPR_STMT => &SyntaxInfo { name: "EXPR_STMT" },
TYPE_PARAM_LIST => &SyntaxInfo { name: "TYPE_PARAM_LIST" }, TYPE_PARAM_LIST => &SyntaxInfo { name: "TYPE_PARAM_LIST" },

View File

@ -30,7 +30,7 @@ FILE@[0; 54)
L_PAREN@[25; 26) L_PAREN@[25; 26)
R_PAREN@[26; 27) R_PAREN@[26; 27)
WHITESPACE@[27; 28) WHITESPACE@[27; 28)
BLOCK@[28; 34) BLOCK_EXPR@[28; 34)
L_CURLY@[28; 29) L_CURLY@[28; 29)
WHITESPACE@[29; 30) WHITESPACE@[29; 30)
R_CURLY@[30; 31) R_CURLY@[30; 31)
@ -53,7 +53,7 @@ FILE@[0; 54)
L_PAREN@[47; 48) L_PAREN@[47; 48)
R_PAREN@[48; 49) R_PAREN@[48; 49)
WHITESPACE@[49; 50) WHITESPACE@[49; 50)
BLOCK@[50; 54) BLOCK_EXPR@[50; 54)
L_CURLY@[50; 51) L_CURLY@[50; 51)
WHITESPACE@[51; 52) WHITESPACE@[51; 52)
R_CURLY@[52; 53) R_CURLY@[52; 53)

View File

@ -22,7 +22,7 @@ FILE@[0; 31)
PARAM_LIST@[23; 25) PARAM_LIST@[23; 25)
L_PAREN@[23; 24) L_PAREN@[23; 24)
R_PAREN@[24; 25) R_PAREN@[24; 25)
BLOCK@[25; 29) BLOCK_EXPR@[25; 29)
L_CURLY@[25; 26) L_CURLY@[25; 26)
R_CURLY@[26; 27) R_CURLY@[26; 27)
WHITESPACE@[27; 29) WHITESPACE@[27; 29)

View File

@ -8,7 +8,7 @@ FILE@[0; 95)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 14) BLOCK_EXPR@[9; 14)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
R_CURLY@[11; 12) R_CURLY@[11; 12)
@ -60,7 +60,7 @@ FILE@[0; 95)
L_PAREN@[88; 89) L_PAREN@[88; 89)
R_PAREN@[89; 90) R_PAREN@[89; 90)
WHITESPACE@[90; 91) WHITESPACE@[90; 91)
BLOCK@[91; 95) BLOCK_EXPR@[91; 95)
L_CURLY@[91; 92) L_CURLY@[91; 92)
WHITESPACE@[92; 93) WHITESPACE@[92; 93)
R_CURLY@[93; 94) R_CURLY@[93; 94)

View File

@ -0,0 +1,3 @@
fn main() {
|| -> () unsafe { () };
}

View File

@ -0,0 +1,40 @@
FILE@[0; 42)
FN_ITEM@[0; 42)
FN_KW@[0; 2)
NAME@[2; 7)
WHITESPACE@[2; 3)
IDENT@[3; 7) "main"
PARAM_LIST@[7; 10)
L_PAREN@[7; 8)
R_PAREN@[8; 9)
WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 42)
L_CURLY@[10; 11)
LAMBDA_EXPR@[11; 25)
PARAM_LIST@[11; 19)
WHITESPACE@[11; 16)
PIPE@[16; 17)
PIPE@[17; 18)
WHITESPACE@[18; 19)
THIN_ARROW@[19; 21)
TUPLE_TYPE@[21; 25)
WHITESPACE@[21; 22)
L_PAREN@[22; 23)
R_PAREN@[23; 24)
WHITESPACE@[24; 25)
err: `expected block`
EXPR_STMT@[25; 40)
BLOCK_EXPR@[25; 38)
UNSAFE_KW@[25; 31)
WHITESPACE@[31; 32)
L_CURLY@[32; 33)
TUPLE_EXPR@[33; 37)
WHITESPACE@[33; 34)
L_PAREN@[34; 35)
R_PAREN@[35; 36)
WHITESPACE@[36; 37)
R_CURLY@[37; 38)
SEMI@[38; 39)
WHITESPACE@[39; 40)
R_CURLY@[40; 41)
WHITESPACE@[41; 42)

View File

@ -12,7 +12,7 @@ FILE@[0; 25)
L_PAREN@[19; 20) L_PAREN@[19; 20)
R_PAREN@[20; 21) R_PAREN@[20; 21)
WHITESPACE@[21; 22) WHITESPACE@[21; 22)
BLOCK@[22; 25) BLOCK_EXPR@[22; 25)
L_CURLY@[22; 23) L_CURLY@[22; 23)
R_CURLY@[23; 24) R_CURLY@[23; 24)
WHITESPACE@[24; 25) WHITESPACE@[24; 25)

View File

@ -10,7 +10,7 @@ FILE@[0; 18)
L_PAREN@[12; 13) L_PAREN@[12; 13)
R_PAREN@[13; 14) R_PAREN@[13; 14)
WHITESPACE@[14; 15) WHITESPACE@[14; 15)
BLOCK@[15; 18) BLOCK_EXPR@[15; 18)
L_CURLY@[15; 16) L_CURLY@[15; 16)
R_CURLY@[16; 17) R_CURLY@[16; 17)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)

View File

@ -1,5 +1,5 @@
FILE@[0; 10) FILE@[0; 10)
EXTERN_BLOCK@[0; 10) EXTERN_BLOCK_EXPR@[0; 10)
ABI@[0; 7) ABI@[0; 7)
EXTERN_KW@[0; 6) EXTERN_KW@[0; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)

View File

@ -11,7 +11,7 @@ FILE@[0; 19)
L_PAREN@[13; 14) L_PAREN@[13; 14)
R_PAREN@[14; 15) R_PAREN@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
BLOCK@[16; 19) BLOCK_EXPR@[16; 19)
L_CURLY@[16; 17) L_CURLY@[16; 17)
R_CURLY@[17; 18) R_CURLY@[17; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)

View File

@ -10,7 +10,7 @@ FILE@[0; 19)
L_PAREN@[13; 14) L_PAREN@[13; 14)
R_PAREN@[14; 15) R_PAREN@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
BLOCK@[16; 19) BLOCK_EXPR@[16; 19)
L_CURLY@[16; 17) L_CURLY@[16; 17)
R_CURLY@[17; 18) R_CURLY@[17; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)

View File

@ -15,7 +15,7 @@ FILE@[0; 30)
L_PAREN@[24; 25) L_PAREN@[24; 25)
R_PAREN@[25; 26) R_PAREN@[25; 26)
WHITESPACE@[26; 27) WHITESPACE@[26; 27)
BLOCK@[27; 30) BLOCK_EXPR@[27; 30)
L_CURLY@[27; 28) L_CURLY@[27; 28)
R_CURLY@[28; 29) R_CURLY@[28; 29)
WHITESPACE@[29; 30) WHITESPACE@[29; 30)

View File

@ -7,7 +7,7 @@ FILE@[0; 33)
PARAM_LIST@[6; 8) PARAM_LIST@[6; 8)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
BLOCK@[8; 11) BLOCK_EXPR@[8; 11)
L_CURLY@[8; 9) L_CURLY@[8; 9)
R_CURLY@[9; 10) R_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
@ -27,7 +27,7 @@ FILE@[0; 33)
PARAM_LIST@[28; 30) PARAM_LIST@[28; 30)
L_PAREN@[28; 29) L_PAREN@[28; 29)
R_PAREN@[29; 30) R_PAREN@[29; 30)
BLOCK@[30; 33) BLOCK_EXPR@[30; 33)
L_CURLY@[30; 31) L_CURLY@[30; 31)
R_CURLY@[31; 32) R_CURLY@[31; 32)
WHITESPACE@[32; 33) WHITESPACE@[32; 33)

View File

@ -8,7 +8,7 @@ FILE@[0; 146)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK@[10; 146) BLOCK_EXPR@[10; 146)
L_CURLY@[10; 11) L_CURLY@[10; 11)
LET_STMT@[11; 32) LET_STMT@[11; 32)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)

View File

@ -8,7 +8,7 @@ FILE@[0; 52)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK@[10; 52) BLOCK_EXPR@[10; 52)
L_CURLY@[10; 11) L_CURLY@[10; 11)
LET_STMT@[11; 33) LET_STMT@[11; 33)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)

View File

@ -8,7 +8,7 @@ FILE@[0; 26)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK@[10; 26) BLOCK_EXPR@[10; 26)
L_CURLY@[10; 11) L_CURLY@[10; 11)
LET_STMT@[11; 24) LET_STMT@[11; 24)
WHITESPACE@[11; 12) WHITESPACE@[11; 12)

View File

@ -8,7 +8,7 @@ FILE@[0; 30)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 12) BLOCK_EXPR@[9; 12)
L_CURLY@[9; 10) L_CURLY@[9; 10)
R_CURLY@[10; 11) R_CURLY@[10; 11)
WHITESPACE@[11; 12) WHITESPACE@[11; 12)
@ -27,7 +27,7 @@ FILE@[0; 30)
L_PAREN@[24; 25) L_PAREN@[24; 25)
R_PAREN@[25; 26) R_PAREN@[25; 26)
WHITESPACE@[26; 27) WHITESPACE@[26; 27)
BLOCK@[27; 30) BLOCK_EXPR@[27; 30)
L_CURLY@[27; 28) L_CURLY@[27; 28)
R_CURLY@[28; 29) R_CURLY@[28; 29)
WHITESPACE@[29; 30) WHITESPACE@[29; 30)

View File

@ -8,7 +8,7 @@ FILE@[0; 68)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 68) BLOCK_EXPR@[9; 68)
L_CURLY@[9; 10) L_CURLY@[9; 10)
LET_STMT@[10; 30) LET_STMT@[10; 30)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)

View File

@ -8,7 +8,7 @@ FILE@[0; 189)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 189) BLOCK_EXPR@[9; 189)
L_CURLY@[9; 10) L_CURLY@[9; 10)
LET_STMT@[10; 33) LET_STMT@[10; 33)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)

View File

@ -8,7 +8,7 @@ FILE@[0; 57)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 57) BLOCK_EXPR@[9; 57)
L_CURLY@[9; 10) L_CURLY@[9; 10)
LET_STMT@[10; 32) LET_STMT@[10; 32)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)

View File

@ -8,7 +8,7 @@ FILE@[0; 52)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 52) BLOCK_EXPR@[9; 52)
L_CURLY@[9; 10) L_CURLY@[9; 10)
LET_STMT@[10; 31) LET_STMT@[10; 31)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)

View File

@ -8,7 +8,7 @@ FILE@[0; 65)
L_PAREN@[4; 5) L_PAREN@[4; 5)
R_PAREN@[5; 6) R_PAREN@[5; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
BLOCK@[7; 10) BLOCK_EXPR@[7; 10)
L_CURLY@[7; 8) L_CURLY@[7; 8)
R_CURLY@[8; 9) R_CURLY@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
@ -21,7 +21,7 @@ FILE@[0; 65)
L_PAREN@[14; 15) L_PAREN@[14; 15)
R_PAREN@[15; 16) R_PAREN@[15; 16)
WHITESPACE@[16; 17) WHITESPACE@[16; 17)
BLOCK@[17; 32) BLOCK_EXPR@[17; 32)
L_CURLY@[17; 18) L_CURLY@[17; 18)
LET_STMT@[18; 30) LET_STMT@[18; 30)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)
@ -47,7 +47,7 @@ FILE@[0; 65)
L_PAREN@[36; 37) L_PAREN@[36; 37)
R_PAREN@[37; 38) R_PAREN@[37; 38)
WHITESPACE@[38; 39) WHITESPACE@[38; 39)
BLOCK@[39; 49) BLOCK_EXPR@[39; 49)
L_CURLY@[39; 40) L_CURLY@[39; 40)
EXPR_STMT@[40; 44) EXPR_STMT@[40; 44)
LITERAL@[40; 42) LITERAL@[40; 42)
@ -71,7 +71,7 @@ FILE@[0; 65)
L_PAREN@[53; 54) L_PAREN@[53; 54)
R_PAREN@[54; 55) R_PAREN@[54; 55)
WHITESPACE@[55; 56) WHITESPACE@[55; 56)
BLOCK@[56; 65) BLOCK_EXPR@[56; 65)
L_CURLY@[56; 57) L_CURLY@[56; 57)
EXPR_STMT@[57; 61) EXPR_STMT@[57; 61)
LITERAL@[57; 59) LITERAL@[57; 59)

View File

@ -8,7 +8,7 @@ FILE@[0; 77)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 77) BLOCK_EXPR@[9; 77)
L_CURLY@[9; 10) L_CURLY@[9; 10)
LET_STMT@[10; 26) LET_STMT@[10; 26)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)

View File

@ -8,7 +8,7 @@ FILE@[0; 44)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 44) BLOCK_EXPR@[9; 44)
L_CURLY@[9; 10) L_CURLY@[9; 10)
EXPR_STMT@[10; 28) EXPR_STMT@[10; 28)
METHOD_CALL_EXPR@[10; 22) METHOD_CALL_EXPR@[10; 22)

View File

@ -8,7 +8,7 @@ FILE@[0; 37)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 37) BLOCK_EXPR@[9; 37)
L_CURLY@[9; 10) L_CURLY@[9; 10)
EXPR_STMT@[10; 26) EXPR_STMT@[10; 26)
FIELD_EXPR@[10; 20) FIELD_EXPR@[10; 20)

View File

@ -8,7 +8,7 @@ FILE@[0; 21)
L_PAREN@[4; 5) L_PAREN@[4; 5)
R_PAREN@[5; 6) R_PAREN@[5; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
BLOCK@[7; 21) BLOCK_EXPR@[7; 21)
L_CURLY@[7; 8) L_CURLY@[7; 8)
FN_ITEM@[8; 19) FN_ITEM@[8; 19)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
@ -20,7 +20,7 @@ FILE@[0; 21)
L_PAREN@[13; 14) L_PAREN@[13; 14)
R_PAREN@[14; 15) R_PAREN@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
BLOCK@[16; 19) BLOCK_EXPR@[16; 19)
L_CURLY@[16; 17) L_CURLY@[16; 17)
R_CURLY@[17; 18) R_CURLY@[17; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)

View File

@ -53,7 +53,7 @@ FILE@[0; 89)
L_PAREN@[60; 61) L_PAREN@[60; 61)
R_PAREN@[61; 62) R_PAREN@[61; 62)
WHITESPACE@[62; 63) WHITESPACE@[62; 63)
BLOCK@[63; 70) BLOCK_EXPR@[63; 70)
L_CURLY@[63; 64) L_CURLY@[63; 64)
R_CURLY@[64; 65) R_CURLY@[64; 65)
WHITESPACE@[65; 70) WHITESPACE@[65; 70)
@ -69,7 +69,7 @@ FILE@[0; 89)
SELF_KW@[78; 82) SELF_KW@[78; 82)
R_PAREN@[82; 83) R_PAREN@[82; 83)
WHITESPACE@[83; 84) WHITESPACE@[83; 84)
BLOCK@[84; 87) BLOCK_EXPR@[84; 87)
L_CURLY@[84; 85) L_CURLY@[84; 85)
R_CURLY@[85; 86) R_CURLY@[85; 86)
WHITESPACE@[86; 87) WHITESPACE@[86; 87)

View File

@ -21,7 +21,7 @@ FILE@[0; 106)
SELF_KW@[18; 22) SELF_KW@[18; 22)
R_PAREN@[22; 23) R_PAREN@[22; 23)
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
BLOCK@[24; 31) BLOCK_EXPR@[24; 31)
L_CURLY@[24; 25) L_CURLY@[24; 25)
R_CURLY@[25; 26) R_CURLY@[25; 26)
WHITESPACE@[26; 31) WHITESPACE@[26; 31)
@ -38,7 +38,7 @@ FILE@[0; 106)
COMMA@[41; 42) COMMA@[41; 42)
R_PAREN@[42; 43) R_PAREN@[42; 43)
WHITESPACE@[43; 44) WHITESPACE@[43; 44)
BLOCK@[44; 51) BLOCK_EXPR@[44; 51)
L_CURLY@[44; 45) L_CURLY@[44; 45)
R_CURLY@[45; 46) R_CURLY@[45; 46)
WHITESPACE@[46; 51) WHITESPACE@[46; 51)
@ -57,7 +57,7 @@ FILE@[0; 106)
COMMA@[64; 65) COMMA@[64; 65)
R_PAREN@[65; 66) R_PAREN@[65; 66)
WHITESPACE@[66; 67) WHITESPACE@[66; 67)
BLOCK@[67; 74) BLOCK_EXPR@[67; 74)
L_CURLY@[67; 68) L_CURLY@[67; 68)
R_CURLY@[68; 69) R_CURLY@[68; 69)
WHITESPACE@[69; 74) WHITESPACE@[69; 74)
@ -90,7 +90,7 @@ FILE@[0; 106)
IDENT@[96; 99) "i32" IDENT@[96; 99) "i32"
R_PAREN@[99; 100) R_PAREN@[99; 100)
WHITESPACE@[100; 101) WHITESPACE@[100; 101)
BLOCK@[101; 104) BLOCK_EXPR@[101; 104)
L_CURLY@[101; 102) L_CURLY@[101; 102)
R_CURLY@[102; 103) R_CURLY@[102; 103)
WHITESPACE@[103; 104) WHITESPACE@[103; 104)

View File

@ -22,7 +22,7 @@ FILE@[0; 29)
WHITESPACE@[20; 21) WHITESPACE@[20; 21)
IDENT@[21; 25) "Copy" IDENT@[21; 25) "Copy"
WHITESPACE@[25; 26) WHITESPACE@[25; 26)
BLOCK@[26; 29) BLOCK_EXPR@[26; 29)
L_CURLY@[26; 27) L_CURLY@[26; 27)
R_CURLY@[27; 28) R_CURLY@[27; 28)
WHITESPACE@[28; 29) WHITESPACE@[28; 29)

View File

@ -26,7 +26,7 @@ FILE@[0; 28)
PARAM_LIST@[23; 25) PARAM_LIST@[23; 25)
L_PAREN@[23; 24) L_PAREN@[23; 24)
R_PAREN@[24; 25) R_PAREN@[24; 25)
BLOCK@[25; 28) BLOCK_EXPR@[25; 28)
L_CURLY@[25; 26) L_CURLY@[25; 26)
R_CURLY@[26; 27) R_CURLY@[26; 27)
WHITESPACE@[27; 28) WHITESPACE@[27; 28)

View File

@ -8,7 +8,7 @@ FILE@[0; 86)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 86) BLOCK_EXPR@[9; 86)
L_CURLY@[9; 10) L_CURLY@[9; 10)
EXPR_STMT@[10; 25) EXPR_STMT@[10; 25)
STRUCT_LIT@[10; 19) STRUCT_LIT@[10; 19)

View File

@ -8,7 +8,7 @@ FILE@[0; 23)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 23) BLOCK_EXPR@[9; 23)
L_CURLY@[9; 10) L_CURLY@[9; 10)
EXPR_STMT@[10; 21) EXPR_STMT@[10; 21)
DEREF_EXPR@[10; 19) DEREF_EXPR@[10; 19)

View File

@ -8,7 +8,7 @@ FILE@[0; 74)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 74) BLOCK_EXPR@[9; 74)
L_CURLY@[9; 10) L_CURLY@[9; 10)
EXPR_STMT@[10; 26) EXPR_STMT@[10; 26)
LAMBDA_EXPR@[10; 20) LAMBDA_EXPR@[10; 20)
@ -36,7 +36,7 @@ FILE@[0; 74)
WHITESPACE@[31; 32) WHITESPACE@[31; 32)
IDENT@[32; 35) "i32" IDENT@[32; 35) "i32"
WHITESPACE@[35; 36) WHITESPACE@[35; 36)
BLOCK@[36; 42) BLOCK_EXPR@[36; 42)
L_CURLY@[36; 37) L_CURLY@[36; 37)
LITERAL@[37; 41) LITERAL@[37; 41)
WHITESPACE@[37; 38) WHITESPACE@[37; 38)

View File

@ -8,7 +8,7 @@ FILE@[0; 67)
L_PAREN@[4; 5) L_PAREN@[4; 5)
R_PAREN@[5; 6) R_PAREN@[5; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
BLOCK@[7; 10) BLOCK_EXPR@[7; 10)
L_CURLY@[7; 8) L_CURLY@[7; 8)
R_CURLY@[8; 9) R_CURLY@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
@ -32,7 +32,7 @@ FILE@[0; 67)
IDENT@[18; 21) "i32" IDENT@[18; 21) "i32"
R_PAREN@[21; 22) R_PAREN@[21; 22)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)
BLOCK@[23; 26) BLOCK_EXPR@[23; 26)
L_CURLY@[23; 24) L_CURLY@[23; 24)
R_CURLY@[24; 25) R_CURLY@[24; 25)
WHITESPACE@[25; 26) WHITESPACE@[25; 26)
@ -58,7 +58,7 @@ FILE@[0; 67)
WHITESPACE@[38; 39) WHITESPACE@[38; 39)
R_PAREN@[39; 40) R_PAREN@[39; 40)
WHITESPACE@[40; 41) WHITESPACE@[40; 41)
BLOCK@[41; 44) BLOCK_EXPR@[41; 44)
L_CURLY@[41; 42) L_CURLY@[41; 42)
R_CURLY@[42; 43) R_CURLY@[42; 43)
WHITESPACE@[43; 44) WHITESPACE@[43; 44)
@ -93,7 +93,7 @@ FILE@[0; 67)
R_PAREN@[61; 62) R_PAREN@[61; 62)
R_PAREN@[62; 63) R_PAREN@[62; 63)
WHITESPACE@[63; 64) WHITESPACE@[63; 64)
BLOCK@[64; 67) BLOCK_EXPR@[64; 67)
L_CURLY@[64; 65) L_CURLY@[64; 65)
R_CURLY@[65; 66) R_CURLY@[65; 66)
WHITESPACE@[66; 67) WHITESPACE@[66; 67)

View File

@ -8,7 +8,7 @@ FILE@[0; 93)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 93) BLOCK_EXPR@[9; 93)
L_CURLY@[9; 10) L_CURLY@[9; 10)
EXPR_STMT@[10; 31) EXPR_STMT@[10; 31)
IF_EXPR@[10; 25) IF_EXPR@[10; 25)
@ -18,7 +18,7 @@ FILE@[0; 93)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)
TRUE_KW@[18; 22) TRUE_KW@[18; 22)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)
BLOCK@[23; 25) BLOCK_EXPR@[23; 25)
L_CURLY@[23; 24) L_CURLY@[23; 24)
R_CURLY@[24; 25) R_CURLY@[24; 25)
SEMI@[25; 26) SEMI@[25; 26)
@ -30,12 +30,12 @@ FILE@[0; 93)
WHITESPACE@[33; 34) WHITESPACE@[33; 34)
TRUE_KW@[34; 38) TRUE_KW@[34; 38)
WHITESPACE@[38; 39) WHITESPACE@[38; 39)
BLOCK@[39; 42) BLOCK_EXPR@[39; 42)
L_CURLY@[39; 40) L_CURLY@[39; 40)
R_CURLY@[40; 41) R_CURLY@[40; 41)
WHITESPACE@[41; 42) WHITESPACE@[41; 42)
ELSE_KW@[42; 46) ELSE_KW@[42; 46)
BLOCK@[46; 49) BLOCK_EXPR@[46; 49)
WHITESPACE@[46; 47) WHITESPACE@[46; 47)
L_CURLY@[47; 48) L_CURLY@[47; 48)
R_CURLY@[48; 49) R_CURLY@[48; 49)
@ -47,7 +47,7 @@ FILE@[0; 93)
WHITESPACE@[57; 58) WHITESPACE@[57; 58)
TRUE_KW@[58; 62) TRUE_KW@[58; 62)
WHITESPACE@[62; 63) WHITESPACE@[62; 63)
BLOCK@[63; 66) BLOCK_EXPR@[63; 66)
L_CURLY@[63; 64) L_CURLY@[63; 64)
R_CURLY@[64; 65) R_CURLY@[64; 65)
WHITESPACE@[65; 66) WHITESPACE@[65; 66)
@ -59,12 +59,12 @@ FILE@[0; 93)
WHITESPACE@[73; 74) WHITESPACE@[73; 74)
FALSE_KW@[74; 79) FALSE_KW@[74; 79)
WHITESPACE@[79; 80) WHITESPACE@[79; 80)
BLOCK@[80; 83) BLOCK_EXPR@[80; 83)
L_CURLY@[80; 81) L_CURLY@[80; 81)
R_CURLY@[81; 82) R_CURLY@[81; 82)
WHITESPACE@[82; 83) WHITESPACE@[82; 83)
ELSE_KW@[83; 87) ELSE_KW@[83; 87)
BLOCK@[87; 91) BLOCK_EXPR@[87; 91)
WHITESPACE@[87; 88) WHITESPACE@[87; 88)
L_CURLY@[88; 89) L_CURLY@[88; 89)
R_CURLY@[89; 90) R_CURLY@[89; 90)

View File

@ -8,7 +8,7 @@ FILE@[0; 79)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 79) BLOCK_EXPR@[9; 79)
L_CURLY@[9; 10) L_CURLY@[9; 10)
EXPR_STMT@[10; 26) EXPR_STMT@[10; 26)
LAMBDA_EXPR@[10; 20) LAMBDA_EXPR@[10; 20)
@ -36,7 +36,7 @@ FILE@[0; 79)
WHITESPACE@[31; 32) WHITESPACE@[31; 32)
IDENT@[32; 35) "i32" IDENT@[32; 35) "i32"
WHITESPACE@[35; 36) WHITESPACE@[35; 36)
BLOCK@[36; 42) BLOCK_EXPR@[36; 42)
L_CURLY@[36; 37) L_CURLY@[36; 37)
LITERAL@[37; 41) LITERAL@[37; 41)
WHITESPACE@[37; 38) WHITESPACE@[37; 38)

View File

@ -8,7 +8,7 @@ FILE@[0; 25)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 25) BLOCK_EXPR@[9; 25)
L_CURLY@[9; 10) L_CURLY@[9; 10)
EXPR_STMT@[10; 23) EXPR_STMT@[10; 23)
NOT_EXPR@[10; 21) NOT_EXPR@[10; 21)

View File

@ -0,0 +1,4 @@
fn foo() {
{};
unsafe {};
}

View File

@ -0,0 +1,29 @@
FILE@[0; 36)
FN_ITEM@[0; 36)
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_EXPR@[9; 36)
L_CURLY@[9; 10)
EXPR_STMT@[10; 23)
BLOCK_EXPR@[10; 17)
WHITESPACE@[10; 15)
L_CURLY@[15; 16)
R_CURLY@[16; 17)
SEMI@[17; 18)
WHITESPACE@[18; 23)
EXPR_STMT@[23; 34)
BLOCK_EXPR@[23; 32)
UNSAFE_KW@[23; 29)
WHITESPACE@[29; 30)
L_CURLY@[30; 31)
R_CURLY@[31; 32)
SEMI@[32; 33)
WHITESPACE@[33; 34)
R_CURLY@[34; 35)
WHITESPACE@[35; 36)

View File

@ -8,7 +8,7 @@ FILE@[0; 13)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK@[9; 13) BLOCK_EXPR@[9; 13)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
R_CURLY@[11; 12) R_CURLY@[11; 12)

View File

@ -33,7 +33,7 @@ FILE@[0; 118)
L_PAREN@[37; 38) L_PAREN@[37; 38)
R_PAREN@[38; 39) R_PAREN@[38; 39)
WHITESPACE@[39; 40) WHITESPACE@[39; 40)
BLOCK@[40; 52) BLOCK_EXPR@[40; 52)
L_CURLY@[40; 41) L_CURLY@[40; 41)
WHITESPACE@[41; 46) WHITESPACE@[41; 46)
R_CURLY@[46; 47) R_CURLY@[46; 47)

View File

@ -26,7 +26,7 @@ FILE@[0; 35)
L_PAREN@[29; 30) L_PAREN@[29; 30)
R_PAREN@[30; 31) R_PAREN@[30; 31)
WHITESPACE@[31; 32) WHITESPACE@[31; 32)
BLOCK@[32; 35) BLOCK_EXPR@[32; 35)
L_CURLY@[32; 33) L_CURLY@[32; 33)
R_CURLY@[33; 34) R_CURLY@[33; 34)
WHITESPACE@[34; 35) WHITESPACE@[34; 35)

View File

@ -8,7 +8,7 @@ FILE@[0; 98)
L_PAREN@[4; 5) L_PAREN@[4; 5)
R_PAREN@[5; 6) R_PAREN@[5; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
BLOCK@[7; 10) BLOCK_EXPR@[7; 10)
L_CURLY@[7; 8) L_CURLY@[7; 8)
R_CURLY@[8; 9) R_CURLY@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
@ -24,7 +24,7 @@ FILE@[0; 98)
L_PAREN@[18; 19) L_PAREN@[18; 19)
R_PAREN@[19; 20) R_PAREN@[19; 20)
WHITESPACE@[20; 21) WHITESPACE@[20; 21)
BLOCK@[21; 24) BLOCK_EXPR@[21; 24)
L_CURLY@[21; 22) L_CURLY@[21; 22)
R_CURLY@[22; 23) R_CURLY@[22; 23)
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
@ -43,7 +43,7 @@ FILE@[0; 98)
L_PAREN@[39; 40) L_PAREN@[39; 40)
R_PAREN@[40; 41) R_PAREN@[40; 41)
WHITESPACE@[41; 42) WHITESPACE@[41; 42)
BLOCK@[42; 45) BLOCK_EXPR@[42; 45)
L_CURLY@[42; 43) L_CURLY@[42; 43)
R_CURLY@[43; 44) R_CURLY@[43; 44)
WHITESPACE@[44; 45) WHITESPACE@[44; 45)
@ -62,7 +62,7 @@ FILE@[0; 98)
L_PAREN@[60; 61) L_PAREN@[60; 61)
R_PAREN@[61; 62) R_PAREN@[61; 62)
WHITESPACE@[62; 63) WHITESPACE@[62; 63)
BLOCK@[63; 66) BLOCK_EXPR@[63; 66)
L_CURLY@[63; 64) L_CURLY@[63; 64)
R_CURLY@[64; 65) R_CURLY@[64; 65)
WHITESPACE@[65; 66) WHITESPACE@[65; 66)
@ -96,7 +96,7 @@ FILE@[0; 98)
L_PAREN@[92; 93) L_PAREN@[92; 93)
R_PAREN@[93; 94) R_PAREN@[93; 94)
WHITESPACE@[94; 95) WHITESPACE@[94; 95)
BLOCK@[95; 98) BLOCK_EXPR@[95; 98)
L_CURLY@[95; 96) L_CURLY@[95; 96)
R_CURLY@[96; 97) R_CURLY@[96; 97)
WHITESPACE@[97; 98) WHITESPACE@[97; 98)

View File

@ -20,7 +20,7 @@ FILE@[0; 23)
L_PAREN@[17; 18) L_PAREN@[17; 18)
R_PAREN@[18; 19) R_PAREN@[18; 19)
WHITESPACE@[19; 20) WHITESPACE@[19; 20)
BLOCK@[20; 23) BLOCK_EXPR@[20; 23)
L_CURLY@[20; 21) L_CURLY@[20; 21)
R_CURLY@[21; 22) R_CURLY@[21; 22)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)

View File

@ -11,7 +11,7 @@ FILE@[0; 71)
L_PAREN@[13; 14) L_PAREN@[13; 14)
R_PAREN@[14; 15) R_PAREN@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
BLOCK@[16; 21) BLOCK_EXPR@[16; 21)
L_CURLY@[16; 17) L_CURLY@[16; 17)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)
R_CURLY@[18; 19) R_CURLY@[18; 19)
@ -30,7 +30,7 @@ FILE@[0; 71)
L_PAREN@[38; 39) L_PAREN@[38; 39)
R_PAREN@[39; 40) R_PAREN@[39; 40)
WHITESPACE@[40; 41) WHITESPACE@[40; 41)
BLOCK@[41; 46) BLOCK_EXPR@[41; 46)
L_CURLY@[41; 42) L_CURLY@[41; 42)
WHITESPACE@[42; 43) WHITESPACE@[42; 43)
R_CURLY@[43; 44) R_CURLY@[43; 44)
@ -49,7 +49,7 @@ FILE@[0; 71)
L_PAREN@[64; 65) L_PAREN@[64; 65)
R_PAREN@[65; 66) R_PAREN@[65; 66)
WHITESPACE@[66; 67) WHITESPACE@[66; 67)
BLOCK@[67; 71) BLOCK_EXPR@[67; 71)
L_CURLY@[67; 68) L_CURLY@[67; 68)
WHITESPACE@[68; 69) WHITESPACE@[68; 69)
R_CURLY@[69; 70) R_CURLY@[69; 70)

View File

@ -1,5 +1,5 @@
FILE@[0; 27) FILE@[0; 27)
EXTERN_BLOCK@[0; 12) EXTERN_BLOCK_EXPR@[0; 12)
ABI@[0; 7) ABI@[0; 7)
EXTERN_KW@[0; 6) EXTERN_KW@[0; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
@ -7,7 +7,7 @@ FILE@[0; 27)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
R_CURLY@[9; 10) R_CURLY@[9; 10)
WHITESPACE@[10; 12) WHITESPACE@[10; 12)
EXTERN_BLOCK@[12; 27) EXTERN_BLOCK_EXPR@[12; 27)
ABI@[12; 23) ABI@[12; 23)
EXTERN_KW@[12; 18) EXTERN_KW@[12; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)