Assignment expression

This commit is contained in:
Aleksey Kladov 2018-08-04 17:17:20 +03:00
parent 82efdff34b
commit e4b84fbf36
4 changed files with 74 additions and 46 deletions

View File

@ -6,6 +6,7 @@ pub fn preorder<'a>(root: SyntaxNodeRef<'a>) -> impl Iterator<Item = SyntaxNodeR
WalkEvent::Exit(_) => None,
})
}
#[derive(Debug, Copy, Clone)]
pub enum WalkEvent<'a> {
Enter(SyntaxNodeRef<'a>),

View File

@ -35,13 +35,15 @@ struct Restrictions {
// test expr_binding_power
// fn foo() {
// 1 + 2 * 3 == 1 * 2 + 3
// 1 + 2 * 3 == 1 * 2 + 3;
// *x = 1 + 1;
// }
fn bp_of(op: SyntaxKind) -> u8 {
match op {
EQEQ | NEQ => 1,
MINUS | PLUS => 2,
STAR | SLASH => 3,
EQ => 1,
EQEQ | NEQ => 2,
MINUS | PLUS => 3,
STAR | SLASH => 4,
_ => 0
}
}
@ -106,7 +108,7 @@ fn unary_expr(p: &mut Parser, r: Restrictions) -> Option<CompletedMarker> {
return Some(postfix_expr(p, lhs))
}
};
expr(p);
unary_expr(p, r);
Some(m.complete(p, kind))
}
@ -247,7 +249,7 @@ fn struct_lit(p: &mut Parser) {
fn bin_expr(p: &mut Parser, r: Restrictions, lhs: CompletedMarker, bp: u8) -> CompletedMarker {
assert!(match p.current() {
MINUS | PLUS | STAR | SLASH | EQEQ | NEQ => true,
MINUS | PLUS | STAR | SLASH | EQEQ | NEQ | EQ => true,
_ => false,
});
let m = lhs.precede(p);

View File

@ -1,3 +1,4 @@
fn foo() {
1 + 2 * 3 == 1 * 2 + 3
1 + 2 * 3 == 1 * 2 + 3;
*x = 1 + 1;
}

View File

@ -1,5 +1,5 @@
FILE@[0; 40)
FN_ITEM@[0; 40)
FILE@[0; 57)
FN_ITEM@[0; 57)
FN_KW@[0; 2)
NAME@[2; 6)
WHITESPACE@[2; 3)
@ -8,41 +8,65 @@ FILE@[0; 40)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 40)
BLOCK_EXPR@[9; 57)
L_CURLY@[9; 10)
BIN_EXPR@[10; 38)
BIN_EXPR@[10; 25)
LITERAL@[10; 17)
WHITESPACE@[10; 15)
INT_NUMBER@[15; 16) "1"
WHITESPACE@[16; 17)
PLUS@[17; 18)
BIN_EXPR@[18; 25)
LITERAL@[18; 21)
WHITESPACE@[18; 19)
INT_NUMBER@[19; 20) "2"
WHITESPACE@[20; 21)
STAR@[21; 22)
LITERAL@[22; 25)
WHITESPACE@[22; 23)
INT_NUMBER@[23; 24) "3"
WHITESPACE@[24; 25)
EQEQ@[25; 27)
BIN_EXPR@[27; 38)
BIN_EXPR@[27; 34)
LITERAL@[27; 30)
WHITESPACE@[27; 28)
INT_NUMBER@[28; 29) "1"
WHITESPACE@[29; 30)
STAR@[30; 31)
LITERAL@[31; 34)
WHITESPACE@[31; 32)
INT_NUMBER@[32; 33) "2"
WHITESPACE@[33; 34)
PLUS@[34; 35)
LITERAL@[35; 38)
WHITESPACE@[35; 36)
INT_NUMBER@[36; 37) "3"
WHITESPACE@[37; 38)
R_CURLY@[38; 39)
WHITESPACE@[39; 40)
EXPR_STMT@[10; 43)
BIN_EXPR@[10; 37)
BIN_EXPR@[10; 25)
LITERAL@[10; 17)
WHITESPACE@[10; 15)
INT_NUMBER@[15; 16) "1"
WHITESPACE@[16; 17)
PLUS@[17; 18)
BIN_EXPR@[18; 25)
LITERAL@[18; 21)
WHITESPACE@[18; 19)
INT_NUMBER@[19; 20) "2"
WHITESPACE@[20; 21)
STAR@[21; 22)
LITERAL@[22; 25)
WHITESPACE@[22; 23)
INT_NUMBER@[23; 24) "3"
WHITESPACE@[24; 25)
EQEQ@[25; 27)
BIN_EXPR@[27; 37)
BIN_EXPR@[27; 34)
LITERAL@[27; 30)
WHITESPACE@[27; 28)
INT_NUMBER@[28; 29) "1"
WHITESPACE@[29; 30)
STAR@[30; 31)
LITERAL@[31; 34)
WHITESPACE@[31; 32)
INT_NUMBER@[32; 33) "2"
WHITESPACE@[33; 34)
PLUS@[34; 35)
LITERAL@[35; 37)
WHITESPACE@[35; 36)
INT_NUMBER@[36; 37) "3"
SEMI@[37; 38)
WHITESPACE@[38; 43)
EXPR_STMT@[43; 55)
BIN_EXPR@[43; 53)
DEREF_EXPR@[43; 46)
STAR@[43; 44)
PATH_EXPR@[44; 46)
PATH@[44; 46)
PATH_SEGMENT@[44; 46)
NAME_REF@[44; 46)
IDENT@[44; 45) "x"
WHITESPACE@[45; 46)
EQ@[46; 47)
BIN_EXPR@[47; 53)
LITERAL@[47; 50)
WHITESPACE@[47; 48)
INT_NUMBER@[48; 49) "1"
WHITESPACE@[49; 50)
PLUS@[50; 51)
LITERAL@[51; 53)
WHITESPACE@[51; 52)
INT_NUMBER@[52; 53) "1"
SEMI@[53; 54)
WHITESPACE@[54; 55)
R_CURLY@[55; 56)
WHITESPACE@[56; 57)