Skip to content

Commit

Permalink
Union/intersection subtyping order
Browse files Browse the repository at this point in the history
  • Loading branch information
soutaro committed Sep 9, 2024
1 parent 8af2e27 commit f1bef62
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions lib/steep/subtyping/check.rb
Original file line number Diff line number Diff line change
Expand Up @@ -354,20 +354,19 @@ def check_type0(relation)
when relation.super_type.is_a?(AST::Types::Var) || relation.sub_type.is_a?(AST::Types::Var)
Failure(relation, Result::Failure::UnknownPairError.new(relation: relation))

when relation.sub_type.is_a?(AST::Types::Union)
when relation.super_type.is_a?(AST::Types::Intersection)
All(relation) do |result|
relation.sub_type.types.each do |sub_type|
rel = Relation.new(sub_type: sub_type, super_type: relation.super_type)
result.add(rel) do
relation.super_type.types.each do |super_type|
result.add(Relation.new(sub_type: relation.sub_type, super_type: super_type)) do |rel|
check_type(rel)
end
end
end

when relation.super_type.is_a?(AST::Types::Union)
Any(relation) do |result|
relation.super_type.types.sort_by {|ty| (path = hole_path(ty)) ? -path.size : -Float::INFINITY }.each do |super_type|
rel = Relation.new(sub_type: relation.sub_type, super_type: super_type)
when relation.sub_type.is_a?(AST::Types::Union)
All(relation) do |result|
relation.sub_type.types.each do |sub_type|
rel = Relation.new(sub_type: sub_type, super_type: relation.super_type)
result.add(rel) do
check_type(rel)
end
Expand All @@ -384,10 +383,11 @@ def check_type0(relation)
end
end

when relation.super_type.is_a?(AST::Types::Intersection)
All(relation) do |result|
relation.super_type.types.each do |super_type|
result.add(Relation.new(sub_type: relation.sub_type, super_type: super_type)) do |rel|
when relation.super_type.is_a?(AST::Types::Union)
Any(relation) do |result|
relation.super_type.types.sort_by {|ty| (path = hole_path(ty)) ? -path.size : -Float::INFINITY }.each do |super_type|
rel = Relation.new(sub_type: relation.sub_type, super_type: super_type)
result.add(rel) do
check_type(rel)
end
end
Expand Down

0 comments on commit f1bef62

Please sign in to comment.