forked from extern/nushell
Fix not equal returning error when same things are compared in some cases (#709)
* Fix not equal returning error when same things are compared in some cases * Equality operators supports all type combinations
This commit is contained in:
parent
3b4baa31b6
commit
5fae96a6b1
@ -247,57 +247,8 @@ pub fn math_result_type(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Operator::Equal => match (&lhs.ty, &rhs.ty) {
|
Operator::Equal => (Type::Bool, None),
|
||||||
(Type::Float, Type::Int) => (Type::Bool, None),
|
Operator::NotEqual => (Type::Bool, None),
|
||||||
(Type::Int, Type::Float) => (Type::Bool, None),
|
|
||||||
(Type::Duration, Type::Duration) => (Type::Bool, None),
|
|
||||||
(Type::Filesize, Type::Filesize) => (Type::Bool, None),
|
|
||||||
|
|
||||||
(x, y) if x == y => (Type::Bool, None),
|
|
||||||
(Type::Nothing, _) => (Type::Bool, None),
|
|
||||||
(_, Type::Nothing) => (Type::Bool, None),
|
|
||||||
(Type::Unknown, _) => (Type::Bool, None),
|
|
||||||
(_, Type::Unknown) => (Type::Bool, None),
|
|
||||||
_ => {
|
|
||||||
*op = Expression::garbage(op.span);
|
|
||||||
(
|
|
||||||
Type::Unknown,
|
|
||||||
Some(ParseError::UnsupportedOperation(
|
|
||||||
op.span,
|
|
||||||
lhs.span,
|
|
||||||
lhs.ty.clone(),
|
|
||||||
rhs.span,
|
|
||||||
rhs.ty.clone(),
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Operator::NotEqual => match (&lhs.ty, &rhs.ty) {
|
|
||||||
(Type::Int, Type::Int) => (Type::Bool, None),
|
|
||||||
(Type::Float, Type::Int) => (Type::Bool, None),
|
|
||||||
(Type::Int, Type::Float) => (Type::Bool, None),
|
|
||||||
(Type::Float, Type::Float) => (Type::Bool, None),
|
|
||||||
(Type::Duration, Type::Duration) => (Type::Bool, None),
|
|
||||||
(Type::Filesize, Type::Filesize) => (Type::Bool, None),
|
|
||||||
|
|
||||||
(Type::Nothing, _) => (Type::Bool, None),
|
|
||||||
(_, Type::Nothing) => (Type::Bool, None),
|
|
||||||
(Type::Unknown, _) => (Type::Bool, None),
|
|
||||||
(_, Type::Unknown) => (Type::Bool, None),
|
|
||||||
_ => {
|
|
||||||
*op = Expression::garbage(op.span);
|
|
||||||
(
|
|
||||||
Type::Unknown,
|
|
||||||
Some(ParseError::UnsupportedOperation(
|
|
||||||
op.span,
|
|
||||||
lhs.span,
|
|
||||||
lhs.ty.clone(),
|
|
||||||
rhs.span,
|
|
||||||
rhs.ty.clone(),
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Operator::Contains => match (&lhs.ty, &rhs.ty) {
|
Operator::Contains => match (&lhs.ty, &rhs.ty) {
|
||||||
(Type::String, Type::String) => (Type::Bool, None),
|
(Type::String, Type::String) => (Type::Bool, None),
|
||||||
(Type::Unknown, _) => (Type::Bool, None),
|
(Type::Unknown, _) => (Type::Bool, None),
|
||||||
|
Loading…
Reference in New Issue
Block a user