File 0142-erl_lint-no-need-to-pass-around-empty-Bvt-in-pattern.patch of Package erlang

From c24814321310926e360a8c713876bf056b2a4864 Mon Sep 17 00:00:00 2001
From: Richard Carlsson <carlsson.richard@gmail.com>
Date: Tue, 6 Oct 2020 14:08:01 +0200
Subject: [PATCH 2/3] erl_lint: no need to pass around empty Bvt in patterns

---
 lib/stdlib/src/erl_lint.erl | 94 ++++++++++++++++++-------------------
 1 file changed, 47 insertions(+), 47 deletions(-)

diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index b19cbaf88c..94da474b40 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -1603,12 +1603,12 @@ head(Ps, Vt, St0) ->
     head(Ps, Vt, Vt, St0).    % Old = Vt
 
 head([P|Ps], Vt, Old, St0) ->
-    {Pvt,Bvt1,St1} = pattern(P, Vt, Old, [], St0),
+    {Pvt,Bvt1,St1} = pattern(P, Vt, Old, St0),
     {Psvt,Bvt2,St2} = head(Ps, Vt, Old, St1),
     {vtmerge_pat(Pvt, Psvt),vtmerge_pat(Bvt1,Bvt2),St2};
 head([], _Vt, _Env, St) -> {[],[],St}.
 
-%% pattern(Pattern, VarTable, Old, BinVarTable, State) ->
+%% pattern(Pattern, VarTable, Old, State) ->
 %%                  {UpdVarTable,BinVarTable,State}.
 %%  Check pattern return variables. Old is the set of variables used for
 %%  deciding whether an occurrence is a binding occurrence or a use, and
@@ -1622,67 +1622,67 @@ head([], _Vt, _Env, St) -> {[],[],St}.
 %%  A = 4, fun(<<A:8,16:A>>) -> % A #1 unused
 
 pattern(P, Vt, St) ->
-    pattern(P, Vt, Vt, [], St).    % Old = Vt
+    pattern(P, Vt, Vt, St).    % Old = Vt
 
-pattern({var,_Line,'_'}, _Vt, _Old, _Bvt, St) ->
+pattern({var,_Line,'_'}, _Vt, _Old, St) ->
     {[],[],St}; %Ignore anonymous variable
-pattern({var,Line,V}, _Vt, Old, Bvt, St) ->
-    pat_var(V, Line, Old, Bvt, St);
-pattern({char,_Line,_C}, _Vt, _Old, _Bvt, St) -> {[],[],St};
-pattern({integer,_Line,_I}, _Vt, _Old, _Bvt, St) -> {[],[],St};
-pattern({float,_Line,_F}, _Vt, _Old, _Bvt, St) -> {[],[],St};
-pattern({atom,Line,A}, _Vt, _Old, _Bvt, St) ->
+pattern({var,Line,V}, _Vt, Old, St) ->
+    pat_var(V, Line, Old, [], St);
+pattern({char,_Line,_C}, _Vt, _Old, St) -> {[],[],St};
+pattern({integer,_Line,_I}, _Vt, _Old, St) -> {[],[],St};
+pattern({float,_Line,_F}, _Vt, _Old, St) -> {[],[],St};
+pattern({atom,Line,A}, _Vt, _Old, St) ->
     {[],[],keyword_warning(Line, A, St)};
-pattern({string,_Line,_S}, _Vt, _Old, _Bvt, St) -> {[],[],St};
-pattern({nil,_Line}, _Vt, _Old, _Bvt, St) -> {[],[],St};
-pattern({cons,_Line,H,T}, Vt, Old,  Bvt, St0) ->
-    {Hvt,Bvt1,St1} = pattern(H, Vt, Old, Bvt, St0),
-    {Tvt,Bvt2,St2} = pattern(T, Vt, Old, Bvt, St1),
+pattern({string,_Line,_S}, _Vt, _Old, St) -> {[],[],St};
+pattern({nil,_Line}, _Vt, _Old, St) -> {[],[],St};
+pattern({cons,_Line,H,T}, Vt, Old,  St0) ->
+    {Hvt,Bvt1,St1} = pattern(H, Vt, Old, St0),
+    {Tvt,Bvt2,St2} = pattern(T, Vt, Old, St1),
     {vtmerge_pat(Hvt, Tvt),vtmerge_pat(Bvt1,Bvt2),St2};
-pattern({tuple,_Line,Ps}, Vt, Old, Bvt, St) ->
-    pattern_list(Ps, Vt, Old, Bvt, St);
-pattern({map,_Line,Ps}, Vt, Old, Bvt, St) ->
-    pattern_map(Ps, Vt, Old, Bvt, St);
-pattern({record_index,Line,Name,Field}, _Vt, _Old, _Bvt, St) ->
+pattern({tuple,_Line,Ps}, Vt, Old, St) ->
+    pattern_list(Ps, Vt, Old, St);
+pattern({map,_Line,Ps}, Vt, Old, St) ->
+    pattern_map(Ps, Vt, Old, St);
+pattern({record_index,Line,Name,Field}, _Vt, _Old, St) ->
     {Vt1,St1} =
         check_record(Line, Name, St,
                      fun (Dfs, St1) ->
                              pattern_field(Field, Name, Dfs, St1)
                      end),
     {Vt1,[],St1};
-pattern({record,Line,Name,Pfs}, Vt, Old, Bvt, St) ->
+pattern({record,Line,Name,Pfs}, Vt, Old, St) ->
     case maps:find(Name, St#lint.records) of
         {ok,{_Line,Fields}} ->
             St1 = used_record(Name, St),
             St2 = check_multi_field_init(Pfs, Line, Fields, St1),
-            pattern_fields(Pfs, Name, Fields, Vt, Old, Bvt, St2);
+            pattern_fields(Pfs, Name, Fields, Vt, Old, St2);
         error -> {[],[],add_error(Line, {undefined_record,Name}, St)}
     end;
-pattern({bin,_,Fs}, Vt, Old, Bvt, St) ->
-    pattern_bin(Fs, Vt, Old, Bvt, St);
-pattern({op,_Line,'++',{nil,_},R}, Vt, Old, Bvt, St) ->
-    pattern(R, Vt, Old, Bvt, St);
-pattern({op,_Line,'++',{cons,Li,{char,_L2,_C},T},R}, Vt, Old, Bvt, St) ->
-    pattern({op,Li,'++',T,R}, Vt, Old, Bvt, St);    %Char unimportant here
-pattern({op,_Line,'++',{cons,Li,{integer,_L2,_I},T},R}, Vt, Old, Bvt, St) ->
-    pattern({op,Li,'++',T,R}, Vt, Old, Bvt, St);    %Weird, but compatible!
-pattern({op,_Line,'++',{string,_Li,_S},R}, Vt, Old, Bvt, St) ->
-    pattern(R, Vt, Old, Bvt, St);                   %String unimportant here
-pattern({match,_Line,Pat1,Pat2}, Vt, Old, Bvt, St0) ->
-    {Lvt,Bvt1,St1} = pattern(Pat1, Vt, Old, Bvt, St0),
-    {Rvt,Bvt2,St2} = pattern(Pat2, Vt, Old, Bvt, St1),
+pattern({bin,_,Fs}, Vt, Old, St) ->
+    pattern_bin(Fs, Vt, Old, St);
+pattern({op,_Line,'++',{nil,_},R}, Vt, Old, St) ->
+    pattern(R, Vt, Old, St);
+pattern({op,_Line,'++',{cons,Li,{char,_L2,_C},T},R}, Vt, Old, St) ->
+    pattern({op,Li,'++',T,R}, Vt, Old, St);    %Char unimportant here
+pattern({op,_Line,'++',{cons,Li,{integer,_L2,_I},T},R}, Vt, Old, St) ->
+    pattern({op,Li,'++',T,R}, Vt, Old, St);    %Weird, but compatible!
+pattern({op,_Line,'++',{string,_Li,_S},R}, Vt, Old, St) ->
+    pattern(R, Vt, Old, St);                   %String unimportant here
+pattern({match,_Line,Pat1,Pat2}, Vt, Old, St0) ->
+    {Lvt,Bvt1,St1} = pattern(Pat1, Vt, Old, St0),
+    {Rvt,Bvt2,St2} = pattern(Pat2, Vt, Old, St1),
     St3 = reject_invalid_alias(Pat1, Pat2, Vt, St2),
     {vtmerge_pat(Lvt, Rvt),vtmerge_pat(Bvt1,Bvt2),St3};
 %% Catch legal constant expressions, including unary +,-.
-pattern(Pat, _Vt, _Old, _Bvt, St) ->
+pattern(Pat, _Vt, _Old, St) ->
     case is_pattern_expr(Pat) of
         true -> {[],[],St};
         false -> {[],[],add_error(element(2, Pat), illegal_pattern, St)}
     end.
 
-pattern_list(Ps, Vt, Old, Bvt0, St) ->
+pattern_list(Ps, Vt, Old, St) ->
     foldl(fun (P, {Psvt,Bvt,St0}) ->
-                  {Pvt,Bvt1,St1} = pattern(P, Vt, Old, Bvt0, St0),
+                  {Pvt,Bvt1,St1} = pattern(P, Vt, Old, St0),
                   {vtmerge_pat(Pvt, Psvt),vtmerge_pat(Bvt,Bvt1),St1}
           end, {[],[],St}, Ps).
 
@@ -1823,27 +1823,27 @@ is_pattern_expr_1({op,_Line,Op,A1,A2}) ->
     erl_internal:arith_op(Op, 2) andalso all(fun is_pattern_expr/1, [A1,A2]);
 is_pattern_expr_1(_Other) -> false.
 
-pattern_map(Ps, Vt, Old, Bvt, St) ->
+pattern_map(Ps, Vt, Old, St) ->
     foldl(fun({map_field_assoc,L,_,_}, {Psvt,Bvt0,St0}) ->
                   {Psvt,Bvt0,add_error(L, illegal_pattern, St0)};
              ({map_field_exact,_L,K,V}, {Psvt,Bvt0,St0}) ->
                   St1 = St0#lint{gexpr_context=map_key},
                   {Kvt,St2} = gexpr(K, Vt, St1),
-                  {Vvt,Bvt2,St3} = pattern(V, Vt, Old, Bvt, St2),
+                  {Vvt,Bvt2,St3} = pattern(V, Vt, Old, St2),
                   {vtmerge_pat(vtmerge_pat(Kvt, Vvt), Psvt),
                    vtmerge_pat(Bvt0, Bvt2),
                    St3}
           end, {[],[],St}, Ps).
 
-%% pattern_bin([Element], VarTable, Old, BinVarTable, State) ->
+%% pattern_bin([Element], VarTable, Old, State) ->
 %%           {UpdVarTable,UpdBinVarTable,State}.
 %%  Check a pattern group. BinVarTable are used binsize variables.
 
-pattern_bin(Es, Vt, Old, Bvt0, St0) ->
+pattern_bin(Es, Vt, Old, St0) ->
     {_Sz,Esvt,Bvt,St1} = foldl(fun (E, Acc) ->
 				       pattern_element(E, Vt, Old, Acc)
 			       end,
-			       {0,[],Bvt0,St0}, Es),
+			       {0,[],[],St0}, Es),
     {Esvt,Bvt,St1}.
 
 pattern_element({bin_element,Line,{string,_,_},Size,Ts}=Be, Vt,
@@ -2770,11 +2770,11 @@ pattern_field({atom,La,F}, Name, Fields, St) ->
     end.
 
 %% pattern_fields([PatField],RecordName,[RecDefField],
-%%                VarTable,Old,Bvt,State) ->
+%%                VarTable,Old,State) ->
 %%      {UpdVarTable,UpdBinVarTable,State}.
 
-pattern_fields(Fs, Name, Fields, Vt0, Old, Bvt, St0) ->
-    CheckFun = fun (Val, Vt, St) -> pattern(Val, Vt, Old, Bvt, St) end,
+pattern_fields(Fs, Name, Fields, Vt0, Old, St0) ->
+    CheckFun = fun (Val, Vt, St) -> pattern(Val, Vt, Old, St) end,
     {_SeenFields,Uvt,Bvt1,St1} =
         foldl(fun (Field, {Sfsa,Vta,Bvt1,Sta}) ->
                       case check_field(Field, Name, Fields,
@@ -3504,7 +3504,7 @@ handle_generator(P,E,Vt,Uvt,St0) ->
     %% Forget variables local to E immediately.
     Vt1 = vtupdate(vtold(Evt, Vt), Vt),
     {_, St2} = check_unused_vars(Evt, Vt, St1),
-    {Pvt,Binvt,St3} = pattern(P, Vt1, [], [], St2),
+    {Pvt,Binvt,St3} = pattern(P, Vt1, [], St2),
     %% Have to keep fresh variables separated from used variables somehow
     %% in order to handle for example X = foo(), [X || <<X:X>> <- bar()].
     %%                                1           2      2 1
-- 
2.26.2

openSUSE Build Service is sponsored by