File 2004-Use-map-based-sets.patch of Package erlang
From 5df61852940c7303ce3596e223a95d9b3dd24521 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Mon, 13 Sep 2021 16:29:38 +0200
Subject: [PATCH 04/20] Use map-based sets
---
lib/dialyzer/src/cerl_closurean.erl | 2 +-
lib/dialyzer/src/cerl_typean.erl | 4 ++--
lib/dialyzer/src/dialyzer_analysis_callgraph.erl | 6 +++---
lib/dialyzer/src/dialyzer_callgraph.erl | 2 +-
lib/dialyzer/src/dialyzer_cl.erl | 4 ++--
lib/dialyzer/src/dialyzer_codeserver.erl | 2 +-
lib/dialyzer/src/dialyzer_dataflow.erl | 4 ++--
lib/dialyzer/src/dialyzer_dep.erl | 4 ++--
lib/dialyzer/src/dialyzer_typesig.erl | 2 +-
9 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/lib/dialyzer/src/cerl_closurean.erl b/lib/dialyzer/src/cerl_closurean.erl
index 55dcfeed1d..e4718cb819 100644
--- a/lib/dialyzer/src/cerl_closurean.erl
+++ b/lib/dialyzer/src/cerl_closurean.erl
@@ -763,7 +763,7 @@ queue__get({In, _}) ->
%% The work list - a queue without repeated elements.
init_work() ->
- {queue__new(), sets:new()}.
+ {queue__new(), sets:new([{version, 2}])}.
add_work(Ls, {Q, Set}) ->
add_work(Ls, Q, Set).
diff --git a/lib/dialyzer/src/cerl_typean.erl b/lib/dialyzer/src/cerl_typean.erl
index 3deb4af3e1..b0e5c10d7d 100644
--- a/lib/dialyzer/src/cerl_typean.erl
+++ b/lib/dialyzer/src/cerl_typean.erl
@@ -268,7 +268,7 @@ analyze(Tree, Limit, Esc0, Dep0, Par) ->
%% receive any values as inputs. Also add an extra dependency edge
%% from each fun-expression label to its parent fun-expression.
%%% io:fwrite("Escape: ~p.\n",[Esc0]),
- Esc = sets:from_list(Esc0),
+ Esc = sets:from_list(Esc0, [{version, 2}]),
Any = t_any(),
None = t_none(),
Funs0 = dict:new(),
@@ -828,7 +828,7 @@ queue__get({In, _}) ->
%% The work list - a queue without repeated elements.
init_work() ->
- {queue__put(external, queue__new()), sets:new()}.
+ {queue__put(external, queue__new()), sets:new([{version, 2}])}.
add_work(Ls, {Q, Set}) ->
add_work(Ls, Q, Set).
diff --git a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
index 898ed26daf..ea3770270d 100644
--- a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
+++ b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
@@ -143,7 +143,7 @@ analysis_start(Parent, Analysis, LegalWarnings) ->
Plt1 = dialyzer_plt:insert_callbacks(Plt1_a, NewCServer),
State1 = State#analysis_state{codeserver = NewCServer, plt = Plt1},
Exports = dialyzer_codeserver:get_exports(NewCServer),
- NonExports = sets:subtract(sets:from_list(AllNodes), Exports),
+ NonExports = sets:subtract(sets:from_list(AllNodes, [{version, 2}]), Exports),
NonExportsList = sets:to_list(NonExports),
NewCallgraph =
case Analysis#analysis.race_detection of
@@ -382,7 +382,7 @@ cleanup_callgraph(#analysis_state{plt = InitPlt, parent = Parent,
{BadCalls1, RealExtCalls} =
if ExtCalls1 =:= [] -> {[], []};
true ->
- ModuleSet = sets:from_list(Modules),
+ ModuleSet = sets:from_list(Modules, [{version, 2}]),
PltModuleSet = dialyzer_plt:all_modules(InitPlt),
AllModules = sets:union(ModuleSet, PltModuleSet),
Pred = fun({_From, {M, _F, _A}}) -> sets:is_element(M, AllModules) end,
@@ -475,7 +475,7 @@ get_exported_types_from_core(Core) ->
cerl:concrete(L1) =:= 'export_type'],
ExpTypes2 = lists:flatten(ExpTypes1),
M = cerl:atom_val(cerl:module_name(Core)),
- sets:from_list([{M, F, A} || {F, A} <- ExpTypes2]).
+ sets:from_list([{M, F, A} || {F, A} <- ExpTypes2], [{version, 2}]).
get_exports_from_core(Core) ->
Tree = cerl:from_records(Core),
diff --git a/lib/dialyzer/src/dialyzer_callgraph.erl b/lib/dialyzer/src/dialyzer_callgraph.erl
index fcf2c9d8af..506a785885 100644
--- a/lib/dialyzer/src/dialyzer_callgraph.erl
+++ b/lib/dialyzer/src/dialyzer_callgraph.erl
@@ -222,7 +222,7 @@ remove_external(#callgraph{digraph = DG} = CG) ->
non_local_calls(#callgraph{digraph = DG}) ->
Edges = digraph_edges(DG),
- find_non_local_calls(Edges, sets:new()).
+ find_non_local_calls(Edges, sets:new([{version, 2}])).
-type call_tab() :: sets:set(mfa_call()).
diff --git a/lib/dialyzer/src/dialyzer_cl.erl b/lib/dialyzer/src/dialyzer_cl.erl
index 2dd56ebb08..39c4634d74 100644
--- a/lib/dialyzer/src/dialyzer_cl.erl
+++ b/lib/dialyzer/src/dialyzer_cl.erl
@@ -452,8 +452,8 @@ clean_plt(PltFile, RemovedMods) ->
Plt, RemovedMods).
expand_dependent_modules(Md5, DiffMd5, ModDeps) ->
- ChangedMods = sets:from_list([M || {differ, M} <- DiffMd5]),
- RemovedMods = sets:from_list([M || {removed, M} <- DiffMd5]),
+ ChangedMods = sets:from_list([M || {differ, M} <- DiffMd5], [{version, 2}]),
+ RemovedMods = sets:from_list([M || {removed, M} <- DiffMd5], [{version, 2}]),
BigSet = sets:union(ChangedMods, RemovedMods),
BigList = sets:to_list(BigSet),
ExpandedSet = expand_dependent_modules_1(BigList, BigSet, ModDeps),
diff --git a/lib/dialyzer/src/dialyzer_codeserver.erl b/lib/dialyzer/src/dialyzer_codeserver.erl
index b25ea791d2..9b8a165dd0 100644
--- a/lib/dialyzer/src/dialyzer_codeserver.erl
+++ b/lib/dialyzer/src/dialyzer_codeserver.erl
@@ -122,7 +122,7 @@ ets_set_insert_list(List, Table) ->
ets_set_to_set(Table) ->
Fold = fun({E}, Set) -> sets:add_element(E, Set) end,
- ets:foldl(Fold, sets:new(), Table).
+ ets:foldl(Fold, sets:new([{version, 2}]), Table).
%%--------------------------------------------------------------------
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 2323889a51..49353ff945 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -3093,7 +3093,7 @@ state__new(Callgraph, Codeserver, Tree, Plt, Module, Records) ->
envs = Env, fun_tab = FunTab, fun_homes = FunHomes, opaques = Opaques,
plt = Plt, races = dialyzer_races:new(), records = Records,
warning_mode = false, warnings = [], work = Work, tree_map = TreeMap,
- module = Module, reachable_funs = sets:new()}.
+ module = Module, reachable_funs = sets:new([{version, 2}])}.
state__warning_mode(#state{warning_mode = WM}) ->
WM.
@@ -3628,7 +3628,7 @@ renew_race_public_tables([Var], #state{races = Races, callgraph = Callgraph,
%%% ===========================================================================
init_work(List) ->
- {List, [], sets:from_list(List)}.
+ {List, [], sets:from_list(List, [{version, 2}])}.
get_work({[], [], _Set}) ->
none;
diff --git a/lib/dialyzer/src/dialyzer_dep.erl b/lib/dialyzer/src/dialyzer_dep.erl
index 1880e1ee5c..f5885a8567 100644
--- a/lib/dialyzer/src/dialyzer_dep.erl
+++ b/lib/dialyzer/src/dialyzer_dep.erl
@@ -319,10 +319,10 @@ primop(Tree, ArgFuns, State) ->
-record(set, {set :: sets:set()}).
set__singleton(Val) ->
- #set{set = sets:add_element(Val, sets:new())}.
+ #set{set = sets:add_element(Val, sets:new([{version, 2}]))}.
set__from_list(List) ->
- #set{set = sets:from_list(List)}.
+ #set{set = sets:from_list(List, [{version, 2}])}.
set__is_element(_El, none) ->
false;
diff --git a/lib/dialyzer/src/dialyzer_typesig.erl b/lib/dialyzer/src/dialyzer_typesig.erl
index 8daf5d5b69..aadefb7a94 100644
--- a/lib/dialyzer/src/dialyzer_typesig.erl
+++ b/lib/dialyzer/src/dialyzer_typesig.erl
@@ -181,7 +181,7 @@ analyze_scc(SCC, NextLabel, CallGraph, CServer, Plt, PropTypes, Solvers0) ->
Solvers = solvers(Solvers0),
State1 = new_state(SCC, NextLabel, CallGraph, CServer, Plt, PropTypes,
Solvers),
- DefSet = add_def_list(maps:values(State1#state.name_map), sets:new()),
+ DefSet = add_def_list(maps:values(State1#state.name_map), sets:new([{version, 2}])),
State2 = traverse_scc(SCC, CServer, DefSet, State1),
State3 = state__finalize(State2),
Funs = state__scc(State3),
--
2.31.1