@@ -30,7 +30,10 @@ expand(Meta, Args, S, E, RequireSize) ->
3030expand (_BitstrMeta , _Fun , [], Acc , S , E , Alignment , _RequireSize ) ->
3131 {lists :reverse (Acc ), Alignment , S , E };
3232expand (BitstrMeta , Fun , [{'::' , Meta , [Left , Right ]} | T ], Acc , S , E , Alignment , RequireSize ) ->
33- {ELeft , {SL , OriginalS }, EL } = expand_expr (Left , Fun , S , E ),
33+ % We don't want to consider variables added in the Left pattern inside the Right specs
34+ {# elixir_ex {vars = BeforeVars }, _ } = S ,
35+
36+ {ELeft , {# elixir_ex {vars = AfterVars } = SL , OriginalS }, EL } = expand_expr (Left , Fun , S , E ),
3437 validate_expr (ELeft , Meta , E ),
3538
3639 MatchOrRequireSize = RequireSize or is_match_size (T , EL ),
@@ -40,10 +43,11 @@ expand(BitstrMeta, Fun, [{'::', Meta, [Left, Right]} | T], Acc, S, E, Alignment,
4043 {'^' , _ , [{_ , _ , _ }]} -> {infer , ELeft };
4144 _ -> required
4245 end ,
43- {ERight , EAlignment , SS , ES } = expand_specs (EType , Meta , Right , SL , OriginalS , EL , ExpectSize ),
46+
47+ {ERight , EAlignment , SS , ES } = expand_specs (EType , Meta , Right , SL # elixir_ex {vars = BeforeVars }, OriginalS , EL , ExpectSize ),
4448
4549 EAcc = concat_or_prepend_bitstring (Meta , ELeft , ERight , Acc , ES , MatchOrRequireSize ),
46- expand (BitstrMeta , Fun , T , EAcc , {SS , OriginalS }, ES , alignment (Alignment , EAlignment ), RequireSize );
50+ expand (BitstrMeta , Fun , T , EAcc , {SS # elixir_ex { vars = AfterVars } , OriginalS }, ES , alignment (Alignment , EAlignment ), RequireSize );
4751expand (BitstrMeta , Fun , [H | T ], Acc , S , E , Alignment , RequireSize ) ->
4852 Meta = extract_meta (H , BitstrMeta ),
4953 {ELeft , {SS , OriginalS }, ES } = expand_expr (H , Fun , S , E ),
0 commit comments