infix range is range
This commit is contained in:
parent
ede506e031
commit
42e3a8ef77
3 changed files with 27 additions and 14 deletions
|
|
@ -92,17 +92,20 @@ fn expr_bp(p: &mut Parser, r: Restrictions, bp: u8) {
|
|||
};
|
||||
|
||||
loop {
|
||||
let is_range = p.current() == DOTDOT;
|
||||
let (op_bp, op) = current_op(p);
|
||||
if op_bp < bp {
|
||||
break;
|
||||
}
|
||||
let m = lhs.precede(p);
|
||||
match op {
|
||||
Op::Simple => p.bump(),
|
||||
Op::Composite(kind, n) => {
|
||||
p.bump_compound(kind, n);
|
||||
}
|
||||
}
|
||||
lhs = bin_expr(p, r, lhs, op_bp + 1);
|
||||
expr_bp(p, r, op_bp + 1);
|
||||
lhs = m.complete(p, if is_range { RANGE_EXPR } else { BIN_EXPR });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -330,9 +333,3 @@ fn struct_lit(p: &mut Parser) {
|
|||
}
|
||||
p.expect(R_CURLY);
|
||||
}
|
||||
|
||||
fn bin_expr(p: &mut Parser, r: Restrictions, lhs: CompletedMarker, bp: u8) -> CompletedMarker {
|
||||
let m = lhs.precede(p);
|
||||
expr_bp(p, r, bp);
|
||||
m.complete(p, BIN_EXPR)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,4 +2,5 @@ fn foo() {
|
|||
..1 + 1;
|
||||
..z = 2;
|
||||
x = false..1 == 1;
|
||||
let x = 1..;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
FILE@[0; 62)
|
||||
FN_ITEM@[0; 61)
|
||||
FILE@[0; 79)
|
||||
FN_ITEM@[0; 78)
|
||||
FN_KW@[0; 2)
|
||||
WHITESPACE@[2; 3)
|
||||
NAME@[3; 6)
|
||||
|
|
@ -8,7 +8,7 @@ FILE@[0; 62)
|
|||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
WHITESPACE@[8; 9)
|
||||
BLOCK_EXPR@[9; 61)
|
||||
BLOCK_EXPR@[9; 78)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 15)
|
||||
EXPR_STMT@[15; 23)
|
||||
|
|
@ -50,7 +50,7 @@ FILE@[0; 62)
|
|||
WHITESPACE@[42; 43)
|
||||
EQ@[43; 44)
|
||||
WHITESPACE@[44; 45)
|
||||
BIN_EXPR@[45; 58)
|
||||
RANGE_EXPR@[45; 58)
|
||||
LITERAL@[45; 50)
|
||||
FALSE_KW@[45; 50)
|
||||
DOTDOT@[50; 52)
|
||||
|
|
@ -63,6 +63,21 @@ FILE@[0; 62)
|
|||
LITERAL@[57; 58)
|
||||
INT_NUMBER@[57; 58) "1"
|
||||
SEMI@[58; 59)
|
||||
WHITESPACE@[59; 60)
|
||||
R_CURLY@[60; 61)
|
||||
WHITESPACE@[61; 62)
|
||||
WHITESPACE@[59; 64)
|
||||
LET_STMT@[64; 76)
|
||||
LET_KW@[64; 67)
|
||||
WHITESPACE@[67; 68)
|
||||
BIND_PAT@[68; 69)
|
||||
NAME@[68; 69)
|
||||
IDENT@[68; 69) "x"
|
||||
WHITESPACE@[69; 70)
|
||||
EQ@[70; 71)
|
||||
WHITESPACE@[71; 72)
|
||||
RANGE_EXPR@[72; 75)
|
||||
LITERAL@[72; 73)
|
||||
INT_NUMBER@[72; 73) "1"
|
||||
DOTDOT@[73; 75)
|
||||
SEMI@[75; 76)
|
||||
WHITESPACE@[76; 77)
|
||||
R_CURLY@[77; 78)
|
||||
WHITESPACE@[78; 79)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue