diff options
Diffstat (limited to 'erts/preloaded/src/erlang.erl')
-rw-r--r-- | erts/preloaded/src/erlang.erl | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index 552121d485..b88a316205 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -29,25 +29,16 @@ -export([send_nosuspend/2, send_nosuspend/3]). -export([localtime_to_universaltime/1]). -export([suspend_process/1]). --export([min/2,max/2]). - +-export([min/2, max/2]). -export([dlink/1, dunlink/1, dsend/2, dsend/3, dgroup_leader/2, dexit/2, dmonitor_node/3, dmonitor_p/2]). - -export([delay_trap/2]). - -export([set_cookie/2, get_cookie/0]). - -export([nodes/0]). - -export([concat_binary/1]). - -export([list_to_integer/2,integer_to_list/2]). - -export([flush_monitor_message/2]). - -export([set_cpu_topology/1, format_cpu_topology/1]). - -export([await_proc_exit/3]). -deprecated([hash/2]). @@ -55,14 +46,22 @@ -compile(nowarn_bif_clash). +%%-------------------------------------------------------------------------- + +-type date() :: {pos_integer(), pos_integer(), pos_integer()}. +-type time() :: {non_neg_integer(), non_neg_integer(), non_neg_integer()}. +-type date_time() :: {date(), time()}. + +%%-------------------------------------------------------------------------- + apply(Fun, Args) -> apply(Fun, Args). apply(Mod, Name, Args) -> apply(Mod, Name, Args). +%% Spawns with a fun -% Spawns with a fun spawn(F) when is_function(F) -> spawn(erlang, apply, [F, []]); spawn({M,F}=MF) when is_atom(M), is_atom(F) -> @@ -125,7 +124,7 @@ spawn_opt(N, {M,F}=MF, O) when is_atom(M), is_atom(F) -> spawn_opt(N, F, O) -> erlang:error(badarg, [N, F, O]). -% Spawns with MFA +%% Spawns with MFA spawn(N,M,F,A) when N =:= node(), is_atom(M), is_atom(F), is_list(A) -> spawn(M,F,A); @@ -254,12 +253,17 @@ crasher(Node,Mod,Fun,Args,Opts,Reason) -> [Mod,Fun,Args,Opts,Node]), exit(Reason). +-spec yield() -> 'true'. yield() -> erlang:yield(). -nodes() -> erlang:nodes(visible). +-spec nodes() -> [node()]. +nodes() -> + erlang:nodes(visible). -disconnect_node(Node) -> net_kernel:disconnect(Node). +-spec disconnect_node(node()) -> boolean(). +disconnect_node(Node) -> + net_kernel:disconnect(Node). fun_info(Fun) when is_function(Fun) -> Keys = [type,env,arity,name,uniq,index,new_uniq,new_index,module,pid], @@ -285,9 +289,11 @@ send_nosuspend(Pid, Msg, Opts) -> _ -> false end. +-spec localtime_to_universaltime(date_time()) -> date_time(). localtime_to_universaltime(Localtime) -> erlang:localtime_to_universaltime(Localtime, undefined). +-spec suspend_process(pid()) -> 'true'. suspend_process(P) -> case catch erlang:suspend_process(P, []) of {'EXIT', {Reason, _}} -> erlang:error(Reason, [P]); @@ -298,10 +304,11 @@ suspend_process(P) -> %% %% If the emulator wants to perform a distributed command and %% a connection is not established to the actual node the following -%% functions is called in order to set up the connection and then +%% functions are called in order to set up the connection and then %% reactivate the command. %% +-spec dlink(pid() | port()) -> 'true'. dlink(Pid) -> case net_kernel:connect(node(Pid)) of true -> link(Pid); @@ -309,6 +316,7 @@ dlink(Pid) -> end. %% Can this ever happen? +-spec dunlink(identifier()) -> 'true'. dunlink(Pid) -> case net_kernel:connect(node(Pid)) of true -> unlink(Pid); @@ -322,7 +330,7 @@ dmonitor_node(Node, Flag, []) -> end; dmonitor_node(Node, Flag, Opts) -> - case lists:member(allow_passive_connect,Opts) of + case lists:member(allow_passive_connect, Opts) of true -> case net_kernel:passive_cnct(Node) of true -> erlang:monitor_node(Node, Flag, Opts); @@ -378,11 +386,11 @@ dsend({Name, Node}, Msg, Opts) -> ignored -> ok % Not distributed. end. +-spec dmonitor_p('process', pid() | {atom(),atom()}) -> reference(). dmonitor_p(process, ProcSpec) -> %% ProcSpec = pid() | {atom(),atom()} %% ProcSpec CANNOT be an atom because a locally registered process %% is never handled here. - Node = case ProcSpec of {S,N} when is_atom(S), is_atom(N), N =/= node() -> N; _ when is_pid(ProcSpec) -> node(ProcSpec) @@ -400,6 +408,7 @@ dmonitor_p(process, ProcSpec) -> %% Trap function used when modified timing has been enabled. %% +-spec delay_trap(Result, timeout()) -> Result. delay_trap(Result, 0) -> erlang:yield(), Result; delay_trap(Result, Timeout) -> receive after Timeout -> Result end. @@ -423,13 +432,15 @@ set_cookie(Node, C) when Node =/= nonode@nohost, is_atom(Node) -> error -> exit(badarg); Other -> Other end. - + +-spec get_cookie() -> atom(). get_cookie() -> auth:get_cookie(). concat_binary(List) -> list_to_binary(List). +-spec integer_to_list(integer(), 1..255) -> string(). integer_to_list(I, 10) -> erlang:integer_to_list(I); integer_to_list(I, Base) @@ -457,7 +468,6 @@ integer_to_list(I0, Base, R0) -> end. - list_to_integer(L, 10) -> erlang:list_to_integer(L); list_to_integer(L, Base) @@ -662,6 +672,7 @@ rvrs([X|Xs],Ys) -> rvrs(Xs, [X|Ys]). %% functions in bif.c. Do not make %% any changes to it without reading %% the comment about them in bif.c! +-spec await_proc_exit(dst(), 'apply' | 'data' | 'reason', term()) -> term(). await_proc_exit(Proc, Op, Data) -> Mon = erlang:monitor(process, Proc), receive @@ -677,8 +688,10 @@ await_proc_exit(Proc, Op, Data) -> end end. +-spec min(term(), term()) -> term(). min(A, B) when A > B -> B; min(A, _) -> A. +-spec max(term(), term()) -> term(). max(A, B) when A < B -> B; max(A, _) -> A. |