Fix parsing of inclusive ranges (#214)

I'm not certain that this is correct, so extra eyes would be good
This commit is contained in:
DJMcNab
2018-12-17 22:34:18 +00:00
parent 0bd9d87e87
commit 20bbe0127c
6 changed files with 158 additions and 37 deletions

View File

@@ -143,7 +143,7 @@ fn current_op(p: &Parser) -> (u8, Op) {
let bp = match p.current() {
EQ => 1,
DOTDOT => 2,
DOTDOT | DOTDOTEQ => 2,
EQEQ | NEQ | L_ANGLE | R_ANGLE => 5,
PIPE => 6,
CARET => 7,
@@ -173,7 +173,7 @@ fn expr_bp(p: &mut Parser, r: Restrictions, bp: u8) -> BlockLike {
};
loop {
let is_range = p.current() == DOTDOT;
let is_range = p.current() == DOTDOT || p.current() == DOTDOTEQ;
let (op_bp, op) = current_op(p);
if op_bp < bp {
break;

View File

@@ -14,9 +14,13 @@ pub(super) fn pattern_r(p: &mut Parser, recovery_set: TokenSet) {
if let Some(lhs) = atom_pat(p, recovery_set) {
// test range_pat
// fn main() {
// match 92 { 0 ... 100 => () }
// match 92 {
// 0 ... 100 => (),
// 101 ..= 200 => (),
// 200 .. 301=> (),
// }
// }
if p.at(DOTDOTDOT) {
if p.at(DOTDOTDOT) || p.at(DOTDOTEQ) || p.at(DOTDOT) {
let m = lhs.precede(p);
p.bump();
atom_pat(p, recovery_set);