@@ -241,44 +241,18 @@ impl Eq for Expression {}
241241impl 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