summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Gustavsson <bjorn@erlang.org>2023-03-07 07:00:38 +0100
committerBjörn Gustavsson <bjorn@erlang.org>2023-03-07 07:22:50 +0100
commit7118057bf83317918dd0a63221c8412597185279 (patch)
treeb3ed113c506d7e7ee8299bcc794e09d94c3c8efc
parent90ae02f46908a6545d96092e731e8bccb868636b (diff)
downloaderlang-7118057bf83317918dd0a63221c8412597185279.tar.gz
compiler: Use map generators instead of maps:fold/3
-rw-r--r--lib/compiler/src/beam_ssa_codegen.erl12
-rw-r--r--lib/compiler/src/beam_ssa_pre_codegen.erl4
-rw-r--r--lib/compiler/src/beam_ssa_type.erl6
-rw-r--r--lib/compiler/src/beam_types.erl11
-rw-r--r--lib/compiler/src/v3_kernel.erl4
5 files changed, 14 insertions, 23 deletions
diff --git a/lib/compiler/src/beam_ssa_codegen.erl b/lib/compiler/src/beam_ssa_codegen.erl
index 9e7a525c3f..08b0e5d856 100644
--- a/lib/compiler/src/beam_ssa_codegen.erl
+++ b/lib/compiler/src/beam_ssa_codegen.erl
@@ -157,13 +157,11 @@ assert_exception_block(Blocks) ->
add_parameter_annos([{label, _}=Entry | Body], Anno) ->
ParamTypes = maps:get(parameter_info, Anno, #{}),
- Annos = maps:fold(
- fun(K, V, Acc) when is_map_key(K, ParamTypes) ->
- Info = map_get(K, ParamTypes),
- [{'%', {var_info, V, Info}} | Acc];
- (_K, _V, Acc) ->
- Acc
- end, [], maps:get(registers, Anno)),
+ Annos = [begin
+ Info = map_get(K, ParamTypes),
+ {'%', {var_info, V, Info}}
+ end || K := V <- map_get(registers, Anno),
+ is_map_key(K, ParamTypes)],
[Entry | sort(Annos)] ++ Body.
diff --git a/lib/compiler/src/beam_ssa_pre_codegen.erl b/lib/compiler/src/beam_ssa_pre_codegen.erl
index e1b5f59738..e3406f12de 100644
--- a/lib/compiler/src/beam_ssa_pre_codegen.erl
+++ b/lib/compiler/src/beam_ssa_pre_codegen.erl
@@ -2993,8 +2993,8 @@ init_free(Res) ->
#{x:=Xs0} = Free1 = maps:from_list(Free0),
Xs = init_xregs(Xs0),
Free = Free1#{x:=Xs},
- Next = maps:fold(fun(K, V, A) -> [{{next,K},length(V)}|A] end, [], Free),
- maps:merge(Free, maps:from_list(Next)).
+ Next = #{{next,K} => length(V) || K := V <- Free},
+ maps:merge(Free, Next).
init_free_1([{_,{prefer,{x,_}=Reg}}|Res]) ->
[{x,Reg}|init_free_1(Res)];
diff --git a/lib/compiler/src/beam_ssa_type.erl b/lib/compiler/src/beam_ssa_type.erl
index 5419090ddc..725eb9ee29 100644
--- a/lib/compiler/src/beam_ssa_type.erl
+++ b/lib/compiler/src/beam_ssa_type.erl
@@ -378,11 +378,7 @@ init_sig_st(StMap, FuncDb) ->
wl=wl_defer_list(Roots, wl_new()) }.
init_sig_roots(FuncDb) ->
- maps:fold(fun(Id, #func_info{exported=true}, Acc) ->
- [Id | Acc];
- (_, _, Acc) ->
- Acc
- end, [], FuncDb).
+ [Id || Id := #func_info{exported=true} <- FuncDb].
init_sig_args([Root | Roots], StMap, Acc) ->
#opt_st{args=Args0} = map_get(Root, StMap),
diff --git a/lib/compiler/src/beam_types.erl b/lib/compiler/src/beam_types.erl
index 5f7350516d..cf81c34670 100644
--- a/lib/compiler/src/beam_types.erl
+++ b/lib/compiler/src/beam_types.erl
@@ -1368,12 +1368,11 @@ verified_normal_type(#t_tuple{size=Size,elements=Es}=T) ->
%% union). 'any' is prohibited since it's implicit and should never be
%% present in the map, and a 'none' element ought to have reduced the
%% entire tuple to 'none'.
- maps:fold(fun(Index, Element, _) when is_integer(Index),
- 1 =< Index, Index =< Size,
- Index =< ?TUPLE_ELEMENT_LIMIT,
- Element =/= any, Element =/= none ->
- verified_type(Element)
- end, [], Es),
+ _ = [verified_type(Element) ||
+ Index := Element <- Es,
+ is_integer(Index), 1 =< Index, Index =< Size,
+ Index =< ?TUPLE_ELEMENT_LIMIT,
+ Element =/= any, Element =/= none],
T.
%%%
diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl
index 3443f43959..809924c7f3 100644
--- a/lib/compiler/src/v3_kernel.erl
+++ b/lib/compiler/src/v3_kernel.erl
@@ -1565,9 +1565,7 @@ group_value(_, Us, Cs) ->
Map = group_values(Cs, #{}),
%% We must sort the grouped values to ensure consistent
%% order from compilation to compilation.
- sort(maps:fold(fun (_, Vcs, Css) ->
- [{Us,reverse(Vcs)}|Css]
- end, [], Map)).
+ sort([{Us,reverse(Vcs)} || _ := Vcs <- Map]).
group_values([C|Cs], Acc) ->
Val = clause_val(C),