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",
"IF_EXPR",
"EXTERN_BLOCK",
"EXTERN_BLOCK_EXPR",
"ENUM_VARIANT",
"NAMED_FIELD",
"POS_FIELD",
@ -155,7 +155,7 @@ Grammar(
"ABI",
"NAME",
"NAME_REF",
"BLOCK",
"BLOCK_EXPR",
"LET_STMT",
"EXPR_STMT",

View File

@ -53,31 +53,9 @@ pub(super) fn expr(p: &mut Parser) {
pub(super) fn block(p: &mut Parser) {
if !p.at(L_CURLY) {
p.error("expected block");
return;
}
let m = p.start();
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);
block_expr(p);
}
// test let_stmt;
@ -158,12 +136,14 @@ fn atom_expr(p: &mut Parser) -> Option<CompletedMarker> {
if paths::is_path_start(p) {
return Some(path_expr(p));
}
let la = p.nth(1);
let done = match p.current() {
L_PAREN => tuple_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),
UNSAFE_KW if la == L_CURLY => block_expr(p),
L_CURLY => block_expr(p),
_ => {
p.err_and_bump("expected expression");
return None;
@ -223,6 +203,40 @@ fn if_expr(p: &mut Parser) -> CompletedMarker {
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
// fn foo() {
// let _ = f();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -8,7 +8,7 @@ FILE@[0; 95)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
WHITESPACE@[8; 9)
BLOCK@[9; 14)
BLOCK_EXPR@[9; 14)
L_CURLY@[9; 10)
WHITESPACE@[10; 11)
R_CURLY@[11; 12)
@ -60,7 +60,7 @@ FILE@[0; 95)
L_PAREN@[88; 89)
R_PAREN@[89; 90)
WHITESPACE@[90; 91)
BLOCK@[91; 95)
BLOCK_EXPR@[91; 95)
L_CURLY@[91; 92)
WHITESPACE@[92; 93)
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)
R_PAREN@[20; 21)
WHITESPACE@[21; 22)
BLOCK@[22; 25)
BLOCK_EXPR@[22; 25)
L_CURLY@[22; 23)
R_CURLY@[23; 24)
WHITESPACE@[24; 25)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -8,7 +8,7 @@ FILE@[0; 25)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
WHITESPACE@[8; 9)
BLOCK@[9; 25)
BLOCK_EXPR@[9; 25)
L_CURLY@[9; 10)
EXPR_STMT@[10; 23)
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)
R_PAREN@[7; 8)
WHITESPACE@[8; 9)
BLOCK@[9; 13)
BLOCK_EXPR@[9; 13)
L_CURLY@[9; 10)
WHITESPACE@[10; 11)
R_CURLY@[11; 12)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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