Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
2013-dialyzer_succ_typings-Slightly-optimize-de...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2013-dialyzer_succ_typings-Slightly-optimize-decorate_suc.patch of Package erlang
From 60a1929cab0e7eed7473ec7cb2b5d4d97c69e271 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Mon, 13 Sep 2021 13:30:03 +0200 Subject: [PATCH 13/20] dialyzer_succ_typings: Slightly optimize decorate_succ_typings/2 * Avoid some work when there are no opaques. * Don't preserve the order of a list using lists:map/2 when order doesn't matter. --- lib/dialyzer/src/dialyzer_succ_typings.erl | 24 +++++++++++++--------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/dialyzer/src/dialyzer_succ_typings.erl b/lib/dialyzer/src/dialyzer_succ_typings.erl index 8a5e397070..c83e2fbd45 100644 --- a/lib/dialyzer/src/dialyzer_succ_typings.erl +++ b/lib/dialyzer/src/dialyzer_succ_typings.erl @@ -405,17 +405,21 @@ get_module_opaques(Contracts, Codeserver) -> [{M, lookup_opaques(M, Codeserver)} || M <- OpaqueModules]. decorate_succ_typings(FunTypesContracts, ModOpaques) -> - F = fun({{Label, Type}, {{M, _, _}, Contract}}) -> - Args = dialyzer_contracts:get_contract_args(Contract), - Ret = dialyzer_contracts:get_contract_return(Contract), - C = erl_types:t_fun(Args, Ret), - {M, Opaques} = lists:keyfind(M, 1, ModOpaques), - R = erl_types:t_decorate_with_opaque(Type, C, Opaques), - {Label, R}; - ({LabelType, no}) -> - LabelType + F = fun({{Label, Type}, {{M, _, _}, Contract}}, Acc) -> + case lists:keyfind(M, 1, ModOpaques) of + {M, []} -> + [{Label, Type}|Acc]; + {M, Opaques} -> + Args = dialyzer_contracts:get_contract_args(Contract), + Ret = dialyzer_contracts:get_contract_return(Contract), + C = erl_types:t_fun(Args, Ret), + R = erl_types:t_decorate_with_opaque(Type, C, Opaques), + [{Label, R}|Acc] + end; + ({LabelType, no}, Acc) -> + [LabelType|Acc] end, - orddict:from_list(lists:map(F, FunTypesContracts)). + orddict:from_list(lists:foldl(F, [], FunTypesContracts)). lookup_opaques(Module, Codeserver) -> Records = dialyzer_codeserver:lookup_mod_records(Module, Codeserver), -- 2.31.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor