diff --git a/src/ast/label.rs b/src/ast/label.rs index 06aa185..9e56f32 100644 --- a/src/ast/label.rs +++ b/src/ast/label.rs @@ -47,14 +47,14 @@ impl LabelType { (_, LabelType::And(left, right)) => { LabelType::is_subtype(l1, left) && LabelType::is_subtype(l1, right) } + (_, LabelType::Or(left, right)) => { + LabelType::is_subtype(l1, left) || LabelType::is_subtype(l1, right) + } (LabelType::And(left, right), _) => { LabelType::is_subtype(left, l2) || LabelType::is_subtype(right, l2) } (LabelType::Or(left, right), _) => { - LabelType::is_subtype(left, l2) && LabelType::is_subtype(right, l2) - } - (_, LabelType::Or(left, right)) => { - LabelType::is_subtype(l1, left) || LabelType::is_subtype(l1, right) + LabelType::is_subtype(left, l2) || LabelType::is_subtype(right, l2) } } } diff --git a/src/typechecker/variable_type.rs b/src/typechecker/variable_type.rs index 80b8033..0a424f3 100644 --- a/src/typechecker/variable_type.rs +++ b/src/typechecker/variable_type.rs @@ -288,7 +288,7 @@ impl VariableType { VariableType::is_subtype(inner1, inner2) } (VariableType::Union(t1a, t1b), _) => { - VariableType::is_subtype(t1a, t2) && VariableType::is_subtype(t1b, t2) + VariableType::is_subtype(t1a, t2) || VariableType::is_subtype(t1b, t2) } (_, VariableType::Union(t2a, t2b)) => { VariableType::is_subtype(t1, t2a) || VariableType::is_subtype(t1, t2b)