Skip to content

Commit 441c915

Browse files
committed
Refactor PartialOrd for Expression struct
1 parent 1c2f06a commit 441c915

File tree

1 file changed

+6
-32
lines changed

1 file changed

+6
-32
lines changed

src/ast.rs

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -241,44 +241,18 @@ impl Eq for Expression {}
241241
impl PartialOrd for Expression {
242242
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
243243
match (self, other) {
244-
// Compare NumberLiteral
245244
(Expression::NumberLiteral(l), Expression::NumberLiteral(r)) => l.partial_cmp(r),
246-
// Compare BooleanLiteral
247-
(Expression::BooleanLiteral(l), Expression::BooleanLiteral(r)) => l.partial_cmp(r),
248-
// Compare StringLiteral
245+
(Expression::BooleanLiteral(l), Expression::BooleanLiteral(r)) => l.partial_cmp(r),
249246
(Expression::StringLiteral(l), Expression::StringLiteral(r)) => l.partial_cmp(r),
250-
// Compare NilLiteral
251247
(Expression::NilLiteral, Expression::NilLiteral) => Some(Ordering::Equal),
252-
// Compare IdentifierExpression
253-
(Expression::IdentifierExpression(l), Expression::IdentifierExpression(r)) => {
254-
l.partial_cmp(r)
255-
}
256-
// Compare TableLiteral
248+
(Expression::IdentifierExpression(l), Expression::IdentifierExpression(r)) => l.partial_cmp(r),
257249
(Expression::TableLiteral(l), Expression::TableLiteral(r)) => {
258-
if let Some(ord) = l.keys().partial_cmp(r.keys()) {
259-
Some(ord.then_with(|| match ord {
260-
Ordering::Equal => l.values().partial_cmp(r.values()).unwrap(),
261-
_ => ord,
262-
}))
263-
} else {
264-
None
265-
}
266-
}
267-
// Compare BinaryExpression
250+
l.iter().partial_cmp(r.iter())
251+
},
268252
(Expression::BinaryExpression(l, _, r), Expression::BinaryExpression(ll, _, rr)) => {
269-
if let Some(ord) = l.partial_cmp(ll) {
270-
Some(ord.then_with(|| match ord {
271-
Ordering::Equal => r.partial_cmp(rr).unwrap(),
272-
_ => ord,
273-
}))
274-
} else {
275-
None
276-
}
277-
}
278-
// Compare FunctionCall
253+
l.partial_cmp(ll).and_then(|ord| Some(ord.then(r.partial_cmp(rr)?)))
254+
},
279255
(Expression::FunctionCall(l, _), Expression::FunctionCall(r, _)) => l.partial_cmp(r),
280-
281-
// Different types are incomparable
282256
_ => None,
283257
}
284258
}

0 commit comments

Comments
 (0)