Skip to content

Commit e2b3119

Browse files
committed
Always declare vars upfront
1 parent 1a58437 commit e2b3119

3 files changed

Lines changed: 4 additions & 13 deletions

File tree

lib/elixir/lib/module/types/expr.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,7 @@ defmodule Module.Types.Expr do
580580
_ ->
581581
expected = if structs == [], do: @exception, else: Enum.reduce(structs, &union/2)
582582
expr = {:__block__, [type_check: info], [expr]}
583+
context = Of.declare_var(var, context)
583584
{_ok?, _type, context} = Of.refine_head_var(var, expected, expr, stack, context)
584585
context
585586
end

lib/elixir/lib/module/types/of.ex

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ defmodule Module.Types.Of do
103103
because we want to refine types. Otherwise we should
104104
use compatibility.
105105
"""
106-
def refine_head_var(var, type, expr, stack, context) do
107-
{var_name, meta, var_context} = var
106+
def refine_head_var({_, meta, _}, type, expr, stack, context) do
108107
version = Keyword.fetch!(meta, :version)
109108

110109
case context.vars do
@@ -128,17 +127,6 @@ defmodule Module.Types.Of do
128127
context = %{context | vars: %{vars | version => data}}
129128
{:ok, new_type, context}
130129
end
131-
132-
%{} = vars ->
133-
data = %{
134-
type: type,
135-
name: var_name,
136-
context: var_context,
137-
off_traces: new_trace(expr, type, stack, [])
138-
}
139-
140-
context = %{context | vars: Map.put(vars, version, data)}
141-
{:ok, type, context}
142130
end
143131
end
144132

lib/elixir/lib/module/types/pattern.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,8 @@ defmodule Module.Types.Pattern do
406406
end
407407

408408
def of_match_var(var, expected, expr, stack, context) when is_var(var) do
409+
context = Of.declare_var(var, context)
410+
409411
case Of.refine_head_var(var, expected, expr, stack, context) do
410412
{:ok, type, context} ->
411413
{type, context}

0 commit comments

Comments
 (0)