Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
0305-dialyzer-Refine-the-types-for-min-2-and-ma...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0305-dialyzer-Refine-the-types-for-min-2-and-max-2.patch of Package erlang
From 181ccf2e26fc507b59d70a7a5a6931bdcd9cb033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Fri, 10 Sep 2021 13:30:53 +0200 Subject: [PATCH 2/2] dialyzer: Refine the types for min/2 and max/2 --- erts/preloaded/src/erlang.erl | 2 ++ lib/dialyzer/src/erl_bif_types.erl | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index f76bf8d4ae..2b3f9f6d78 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -3987,6 +3987,7 @@ rvrs(Xs) -> rvrs(Xs, []). rvrs([],Ys) -> Ys; rvrs([X|Xs],Ys) -> rvrs(Xs, [X|Ys]). +%% Shadowed by erl_bif_types: erlang:min/2 -spec min(Term1, Term2) -> Minimum when Term1 :: term(), Term2 :: term(), @@ -3994,6 +3995,7 @@ rvrs([X|Xs],Ys) -> rvrs(Xs, [X|Ys]). min(A, B) when A > B -> B; min(A, _) -> A. +%% Shadowed by erl_bif_types: erlang:max/2 -spec max(Term1, Term2) -> Maximum when Term1 :: term(), Term2 :: term(), diff --git a/lib/dialyzer/src/erl_bif_types.erl b/lib/dialyzer/src/erl_bif_types.erl index 8e87af5f15..eb795af0c9 100644 --- a/lib/dialyzer/src/erl_bif_types.erl +++ b/lib/dialyzer/src/erl_bif_types.erl @@ -772,6 +772,10 @@ type(erlang, length, 1, Xs, Opaques) -> %% Guard bif, needs to be here. type(erlang, map_size, 1, Xs, Opaques) -> type(maps, size, 1, Xs, Opaques); +type(erlang, max, 2, Xs, Opaques) -> + strict(erlang, max, 2, Xs, + fun([A, B]) -> t_sup(A, B) end, + Opaques); %% Guard bif, needs to be here. type(erlang, map_get, 2, Xs, Opaques) -> type(maps, get, 2, Xs, Opaques); @@ -803,6 +807,10 @@ type(erlang, make_tuple, 3, Xs, Opaques) -> _Other -> t_tuple() end end, Opaques); +type(erlang, min, 2, Xs, Opaques) -> + strict(erlang, min, 2, Xs, + fun([A, B]) -> t_sup(A, B) end, + Opaques); type(erlang, nif_error, 1, Xs, Opaques) -> %% this BIF and the next one are stubs for NIFs and never return strict(erlang, nif_error, 1, Xs, fun (_) -> t_any() end, Opaques); @@ -2297,6 +2305,8 @@ arg_types(erlang, is_tuple, 1) -> %% Guard bif, needs to be here. arg_types(erlang, length, 1) -> [t_list()]; +arg_types(erlang, max, 2) -> + [t_any(), t_any()]; %% Guard bif, needs to be here. arg_types(erlang, map_size, 1) -> [t_map()]; @@ -2309,6 +2319,8 @@ arg_types(erlang, make_tuple, 2) -> [t_non_neg_fixnum(), t_any()]; % the value 0 is OK as first argument arg_types(erlang, make_tuple, 3) -> [t_non_neg_fixnum(), t_any(), t_list(t_tuple([t_pos_integer(), t_any()]))]; +arg_types(erlang, min, 2) -> + [t_any(), t_any()]; arg_types(erlang, nif_error, 1) -> [t_any()]; arg_types(erlang, nif_error, 2) -> -- 2.34.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