Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
2011-dialyzer_succ_typings-Eliminate-use-of-the...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2011-dialyzer_succ_typings-Eliminate-use-of-the-sets-modu.patch of Package erlang
From 73122979895687c72b89abb76e6fadb8c16045b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Mon, 13 Sep 2021 09:01:23 +0200 Subject: [PATCH 11/20] dialyzer_succ_typings: Eliminate use of the sets module Use the `sofs` module to avoid building a `sets` set. That will be slightly faster. --- lib/dialyzer/src/dialyzer_succ_typings.erl | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/dialyzer/src/dialyzer_succ_typings.erl b/lib/dialyzer/src/dialyzer_succ_typings.erl index c53ea15ae1..d4b4296e9a 100644 --- a/lib/dialyzer/src/dialyzer_succ_typings.erl +++ b/lib/dialyzer/src/dialyzer_succ_typings.erl @@ -344,17 +344,22 @@ find_succ_types_for_scc(SCC0, {Codeserver, Callgraph, Plt, Solvers}) -> collect_fun_info([Fun]) end || MFA <- SCC]), PropTypes = get_fun_types_from_plt(AllFuns, Callgraph, Plt), + %% Assume that the PLT contains the current propagated types FunTypes = dialyzer_typesig:analyze_scc(SCC, Label, Callgraph, Codeserver, Plt, PropTypes, Solvers), - AllFunSet = sets:from_list([X || {X, _} <- AllFuns]), - FilteredFunTypes = - orddict:filter(fun(F, _T) -> sets:is_element(F, AllFunSet) - end, FunTypes), + + %% FunTypes may now have picked up funs outside of SCC. Get rid of them. + AllFunKeys = [X || {X, _} <- AllFuns], + Set = sofs:set(AllFunKeys, [id]), + BinRel = sofs:from_external(FunTypes, [{id,type}]), %Already sorted. + FilteredFunTypes = sofs:to_external(sofs:restriction(BinRel, Set)), + {FunMFAContracts, ModOpaques} = prepare_decoration(FilteredFunTypes, Callgraph, Codeserver), DecoratedFunTypes = decorate_succ_typings(FunMFAContracts, ModOpaques), + %% Check contracts Contracts = orddict:from_list([{MFA, Contract} || {_, {MFA, Contract}} <- FunMFAContracts]), @@ -372,12 +377,12 @@ find_succ_types_for_scc(SCC0, {Codeserver, Callgraph, Plt, Solvers}) -> ContractFixpoint = NewPltContracts =:= [], Plt = insert_into_plt(DecoratedFunTypes, Callgraph, Plt), Plt = dialyzer_plt:insert_contract_list(Plt, NewPltContracts), - case (ContractFixpoint andalso - reached_fixpoint_strict(PropTypes, DecoratedFunTypes)) of + case ContractFixpoint andalso + reached_fixpoint_strict(PropTypes, DecoratedFunTypes) of true -> []; false -> ?debug("Not fixpoint for: ~tw\n", [AllFuns]), - [Fun || {Fun, _Arity} <- AllFuns] + AllFunKeys end. prepare_decoration(FunTypes, Callgraph, 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