diff options
Diffstat (limited to 'src/eval')
| -rw-r--r-- | src/eval/cast.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/eval/cast.rs b/src/eval/cast.rs index 7b507dbb..92e4212f 100644 --- a/src/eval/cast.rs +++ b/src/eval/cast.rs @@ -237,7 +237,7 @@ impl<T> Variadics for Vec<T> { } /// Describes a possible value for a cast. -#[derive(Debug, Clone, Hash)] +#[derive(Debug, Clone, Hash, PartialEq, PartialOrd)] pub enum CastInfo { /// Any value is okay. Any, @@ -302,15 +302,23 @@ impl Add for CastInfo { fn add(self, rhs: Self) -> Self { Self::Union(match (self, rhs) { (Self::Union(mut lhs), Self::Union(rhs)) => { - lhs.extend(rhs); + for cast in rhs { + if !lhs.contains(&cast) { + lhs.push(cast); + } + } lhs } (Self::Union(mut lhs), rhs) => { - lhs.push(rhs); + if !lhs.contains(&rhs) { + lhs.push(rhs); + } lhs } (lhs, Self::Union(mut rhs)) => { - rhs.insert(0, lhs); + if !rhs.contains(&lhs) { + rhs.insert(0, lhs); + } rhs } (lhs, rhs) => vec![lhs, rhs], |
