@@ -306,8 +306,9 @@ defmodule Module.Types.Expr do
306306 |> dynamic_unless_static ( stack )
307307 end
308308
309- def of_expr ( { :case , meta , [ case_expr , [ { :do , clauses } ] ] } , expected , expr , stack , context ) do
309+ def of_expr ( { :case , meta , [ case_expr , [ { :do , clauses } ] ] } , expected , _expr , stack , context ) do
310310 { case_type , context } = of_expr ( case_expr , @ pending , case_expr , stack , context )
311+ info = { :case , meta , case_expr }
311312
312313 added_meta =
313314 if Macro . quoted_literal? ( case_expr ) do
@@ -324,7 +325,7 @@ defmodule Module.Types.Expr do
324325 else
325326 clauses
326327 end
327- |> of_case_clauses ( case_type , expected , meta , case_expr , expr , stack , context )
328+ |> of_redundant_clauses ( case_type , expected , info , stack , context , none ( ) )
328329 |> dynamic_unless_static ( stack )
329330 end
330331
@@ -398,7 +399,7 @@ defmodule Module.Types.Expr do
398399 acc_context
399400
400401 { :do , clauses } , { acc , context } ->
401- of_clauses ( clauses , [ dynamic ( ) ] , expected , expr , :receive , stack , context , acc )
402+ of_redundant_clauses ( clauses , dynamic ( ) , expected , :receive , stack , context , acc )
402403
403404 { :after , [ { :-> , meta , [ [ timeout ] , body ] } ] = after_expr } , { acc , context } ->
404405 { timeout_type , context } = of_expr ( timeout , @ timeout_type , after_expr , stack , context )
@@ -737,16 +738,16 @@ defmodule Module.Types.Expr do
737738 end )
738739 end
739740
740- defp of_case_clauses ( clauses , domain , expected , case_meta , case_expr , expr , stack , original ) do
741+ defp of_redundant_clauses ( clauses , domain , expected , clause_info , stack , original , acc ) do
741742 % { failed: failed? } = original
742743
743744 { result , _previous , context } =
744- Enum . reduce ( clauses , { none ( ) , none ( ) , original } , fn
745+ Enum . reduce ( clauses , { acc , none ( ) , original } , fn
745746 { :-> , meta , [ [ clause ] = head , body ] } , { acc , previous , context } ->
746747 { failed? , context } = reset_failed ( context , failed? )
747748 { patterns , guards } = extract_head ( head )
748749
749- info = { :case , case_meta , domain , case_expr , previous }
750+ info = { clause_info , [ domain ] , [ previous ] }
750751
751752 { trees , precise? , context } =
752753 Pattern . of_head ( patterns , guards , [ domain ] , [ previous ] , info , meta , stack , context )
@@ -755,7 +756,7 @@ defmodule Module.Types.Expr do
755756 # The current clause will be easier to understand, so we prefer that
756757 { [ { clause_tree , _ , _ } ] , precise? , context } =
757758 if context . failed and previous != none ( ) do
758- info = { :case , case_meta , domain , case_expr , nil }
759+ info = { clause_info , [ domain ] , [ none ( ) ] }
759760
760761 case Pattern . of_head ( patterns , guards , [ domain ] , info , meta , stack , context ) do
761762 { _ , _ , % { failed: true } } = result -> result
@@ -784,7 +785,7 @@ defmodule Module.Types.Expr do
784785 end
785786 end
786787
787- { result , context } = of_expr ( body , expected , expr || body , stack , context )
788+ { result , context } = of_expr ( body , expected , body , stack , context )
788789
789790 { union ( result , acc ) , previous ,
790791 context |> set_failed ( failed? ) |> Of . reset_vars ( original ) }
0 commit comments