@@ -397,8 +397,8 @@ expand({'_', Meta, Kind} = Var, S, #{context := Context} = E) when is_atom(Kind)
397397expand ({Name , Meta , Kind }, S , #{context := match } = E ) when is_atom (Name ), is_atom (Kind ) ->
398398 # elixir_ex {
399399 prematch = {_ , _ , PrematchVersion },
400- unused = { Unused , Version },
401- vars = { Read , Write }
400+ vars = { Read , Write },
401+ unused = Unused
402402 } = S ,
403403
404404 Pair = {Name , elixir_utils :var_context (Meta , Kind )},
@@ -408,29 +408,31 @@ expand({Name, Meta, Kind}, S, #{context := match} = E) when is_atom(Name), is_at
408408 #{Pair := VarVersion } when VarVersion >= PrematchVersion ->
409409 maybe_warn_underscored_var_repeat (Meta , Name , Kind , E ),
410410 NewUnused = var_used (Pair , Meta , VarVersion , Unused ),
411- NewWrite = (Write /= false ) andalso Write #{Pair => Version },
411+ NewWrite = (Write /= false ) andalso Write #{Pair => VarVersion },
412412 Var = {Name , [{version , VarVersion } | Meta ], Kind },
413- {Var , S # elixir_ex {vars = {Read , NewWrite }, unused = { NewUnused , Version } }, E };
413+ {Var , S # elixir_ex {vars = {Read , NewWrite }, unused = NewUnused }, E };
414414
415415 % % Variable is being overridden now
416416 #{Pair := _ } ->
417+ Version = S # elixir_ex .version ,
417418 NewUnused = var_unused (Pair , Meta , Version , Unused , true ),
418419 NewRead = Read #{Pair => Version },
419420 NewWrite = (Write /= false ) andalso Write #{Pair => Version },
420421 Var = {Name , [{version , Version } | Meta ], Kind },
421- {Var , S # elixir_ex {vars = {NewRead , NewWrite }, unused = { NewUnused , Version + 1 } }, E };
422+ {Var , S # elixir_ex {vars = {NewRead , NewWrite }, unused = NewUnused , version = Version + 1 }, E };
422423
423424 % % Variable defined for the first time
424425 _ ->
426+ Version = S # elixir_ex .version ,
425427 NewUnused = var_unused (Pair , Meta , Version , Unused , false ),
426428 NewRead = Read #{Pair => Version },
427429 NewWrite = (Write /= false ) andalso Write #{Pair => Version },
428430 Var = {Name , [{version , Version } | Meta ], Kind },
429- {Var , S # elixir_ex {vars = {NewRead , NewWrite }, unused = { NewUnused , Version + 1 } }, E }
431+ {Var , S # elixir_ex {vars = {NewRead , NewWrite }, unused = NewUnused , version = Version + 1 }, E }
430432 end ;
431433
432434expand ({Name , Meta , Kind }, S , E ) when is_atom (Name ), is_atom (Kind ) ->
433- # elixir_ex {vars = {Read , _Write }, unused = { Unused , Version } , prematch = Prematch } = S ,
435+ # elixir_ex {vars = {Read , _Write }, unused = Unused , prematch = Prematch } = S ,
434436 Pair = {Name , elixir_utils :var_context (Meta , Kind )},
435437
436438 Result =
@@ -471,7 +473,7 @@ expand({Name, Meta, Kind}, S, E) when is_atom(Name), is_atom(Kind) ->
471473 {ok , PairVersion } ->
472474 maybe_warn_underscored_var_access (Meta , Name , Kind , E ),
473475 Var = {Name , [{version , PairVersion } | Meta ], Kind },
474- {Var , S # elixir_ex {unused = { var_used (Pair , Meta , PairVersion , Unused ), Version } }, E };
476+ {Var , S # elixir_ex {unused = var_used (Pair , Meta , PairVersion , Unused )}, E };
475477
476478 Error ->
477479 case lists :keyfind (if_undefined , 1 , Meta ) of
@@ -795,8 +797,8 @@ expand_case(Meta, Expr, Opts, S, E) ->
795797 false -> Opts
796798 end ,
797799
798- {EOpts , SO , EO } = elixir_clauses :'case' (Meta , ROpts , SE , EE ),
799- {{'case' , Meta , [EExpr , EOpts ]}, SO , EO }.
800+ {EOpts , # elixir_ex { version = Counter } = SO , EO } = elixir_clauses :'case' (Meta , ROpts , SE , EE ),
801+ {{'case' , [{ version , Counter } | Meta ] , [EExpr , EOpts ]}, SO # elixir_ex { version = Counter + 1 } , EO }.
800802
801803rewrite_case_clauses ([{do , [
802804 {'->' , FalseMeta , [
0 commit comments