Skip to content

Commit 80fd4eb

Browse files
committed
Fix dummy position generated in binary_expr's grammar
1 parent e42e2fd commit 80fd4eb

File tree

1 file changed

+22
-21
lines changed

1 file changed

+22
-21
lines changed

src/grammar.rustpeg

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -94,29 +94,30 @@ comma_args -> Vec<ExprNode>
9494
= expr_node ** COMMA
9595

9696
binary_expr_node -> ExprNode
97-
= __ lpos:#position e:binary_expr rpos:#position __ {
98-
// hackily check if e is a proper binary expr
99-
if e.pos == (0, 0) {
100-
ExprNode { pos: (lpos, rpos), data: e.data }
101-
} else {
102-
// e is actually a single_expr, so just propagate
103-
e
104-
}
105-
}
97+
= binary_expr
98+
// __ lpos:#position e:binary_expr rpos:#position __ {
99+
// // hackily check if e is a proper binary expr
100+
// if e.pos == (0, 0) {
101+
// ExprNode { pos: (lpos, rpos), data: e.data }
102+
// } else {
103+
// // e is actually a single_expr, so just propagate
104+
// e
105+
// }
106+
// }
106107

107108
binary_expr -> ExprNode = #infix<single_expr_node> {
108-
#L x AND y { ExprNode { pos: (0, 0), data: Expr::BinaryLogical(Box::new(x), LogicalBinOp::And, Box::new(y)) } }
109-
x OR y { ExprNode { pos: (0, 0), data: Expr::BinaryLogical(Box::new(x), LogicalBinOp::Or, Box::new(y)) } }
110-
#L x OP_STRICT_EQUALS y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Eq, Box::new(y)) } }
111-
#L x OP_LESS_THAN y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Lt, Box::new(y)) } }
112-
x OP_LESS_THAN_OR_EQUAL y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Lte, Box::new(y)) } }
113-
x OP_GREATER_THAN y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Gt, Box::new(y)) } }
114-
x OP_GREATER_THAN_OR_EQUAL y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Gte, Box::new(y)) } }
115-
#L x OP_PLUS y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Add, Box::new(y)) } }
116-
x OP_MINUS y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Sub, Box::new(y)) } }
117-
#L x OP_ASTERISK y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Mul, Box::new(y)) } }
118-
x OP_SLASH y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Div, Box::new(y)) } }
119-
x OP_MOD y { ExprNode { pos: (0, 0), data: Expr::Binary(Box::new(x), BinOp::Mod, Box::new(y)) } }
109+
#L x AND y { ExprNode { pos: (x.pos.0, y.pos.1), data: Expr::BinaryLogical(Box::new(x), LogicalBinOp::And, Box::new(y)) } }
110+
x OR y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::BinaryLogical(Box::new(x), LogicalBinOp::Or, Box::new(y)) } }
111+
#L x OP_STRICT_EQUALS y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Eq, Box::new(y)) } }
112+
#L x OP_LESS_THAN y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Lt, Box::new(y)) } }
113+
x OP_LESS_THAN_OR_EQUAL y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Lte, Box::new(y)) } }
114+
x OP_GREATER_THAN y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Gt, Box::new(y)) } }
115+
x OP_GREATER_THAN_OR_EQUAL y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Gte, Box::new(y)) } }
116+
#L x OP_PLUS y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Add, Box::new(y)) } }
117+
x OP_MINUS y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Sub, Box::new(y)) } }
118+
#L x OP_ASTERISK y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Mul, Box::new(y)) } }
119+
x OP_SLASH y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Div, Box::new(y)) } }
120+
x OP_MOD y { ExprNode { pos : (x.pos.0, y.pos.1), data: Expr::Binary(Box::new(x), BinOp::Mod, Box::new(y)) } }
120121
}
121122

122123
single_expr_node -> ExprNode

0 commit comments

Comments
 (0)