From 0288a046efecdd46ee08c6bf847cc6053a941c99 Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Tue, 24 Jan 2012 14:10:41 +0100 Subject: erlang.erl with specs for all (but one) bif --- erts/preloaded/src/erlang.erl | 2117 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 2018 insertions(+), 99 deletions(-) (limited to 'erts/preloaded/src/erlang.erl') diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index 4affc9bffe..7191713cf4 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1996-2011. All Rights Reserved. +%% Copyright Ericsson AB 1996-2012. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -46,8 +46,6 @@ -deprecated([hash/2]). % Get rid of autoimports of spawn to avoid clashes with ourselves. --compile({no_auto_import,[spawn/1]}). --compile({no_auto_import,[spawn/4]}). -compile({no_auto_import,[spawn_link/1]}). -compile({no_auto_import,[spawn_link/4]}). -compile({no_auto_import,[spawn_opt/2]}). @@ -56,10 +54,1911 @@ -export_type([timestamp/0]). +-type ext_binary() :: binary(). -type timestamp() :: {MegaSecs :: non_neg_integer(), Secs :: non_neg_integer(), MicroSecs :: non_neg_integer()}. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Native code BIF stubs and their types +%% (BIF's actually implemented in this module goes last in the file) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Exports for all native code stubs +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +-export([adler32/1, adler32/2, adler32_combine/3, append_element/2]). +-export([atom_to_binary/2, atom_to_list/1, binary_part/2, binary_part/3]). +-export([binary_to_atom/2, binary_to_existing_atom/2, binary_to_list/1]). +-export([binary_to_list/3, binary_to_term/1, binary_to_term/2]). +-export([bit_size/1, bitsize/1, bitstr_to_list/1, bitstring_to_list/1]). +-export([bump_reductions/1, byte_size/1, call_on_load_function/1]). +-export([cancel_timer/1, check_old_code/1, check_process_code/2, crc32/1]). +-export([crc32/2, crc32_combine/3, date/0, decode_packet/3]). +-export([delete_module/1, demonitor/1, demonitor/2, display/1]). +-export([display_nl/0, display_string/1, dist_exit/3, erase/0, erase/1]). +-export([error/1, error/2, exit/1, exit/2, external_size/1]). +-export([external_size/2, finish_after_on_load/2, float/1]). +-export([float_to_list/1, fun_info/2, fun_to_list/1, function_exported/3]). +-export([garbage_collect/0, garbage_collect/1]). +-export([garbage_collect_message_area/0, get/0, get/1, get_keys/1]). +-export([get_module_info/1, get_stacktrace/0, group_leader/0]). +-export([group_leader/2, halt/0, halt/1, hash/2, hibernate/3]). +-export([integer_to_list/1, iolist_size/1, iolist_to_binary/1]). +-export([is_alive/0, is_builtin/3, is_process_alive/1, length/1, link/1]). +-export([list_to_atom/1, list_to_binary/1, list_to_bitstr/1]). +-export([list_to_bitstring/1, list_to_existing_atom/1, list_to_float/1]). +-export([list_to_integer/1, list_to_pid/1, list_to_tuple/1, loaded/0]). +-export([localtime/0, make_ref/0, match_spec_test/3, md5/1, md5_final/1]). +-export([md5_init/0, md5_update/2, module_loaded/1, monitor/2]). +-export([monitor_node/2, monitor_node/3, nif_error/1, nif_error/2]). +-export([node/0, node/1, now/0, phash/2, phash2/1, phash2/2]). +-export([pid_to_list/1, port_close/1, port_command/2, port_command/3]). +-export([port_connect/2, port_control/3, port_get_data/1]). +-export([port_set_data/2, port_to_list/1, ports/0]). +-export([posixtime_to_universaltime/1, pre_loaded/0, process_display/2]). +-export([process_flag/3, process_info/1, processes/0, purge_module/1]). +-export([put/2, raise/3, read_timer/1, ref_to_list/1, register/2]). +-export([registered/0, resume_process/1, round/1, self/0, send_after/3]). +-export([seq_trace/2, seq_trace_print/1, seq_trace_print/2, setnode/2]). +-export([setnode/3, size/1, spawn/3, spawn_link/3, split_binary/2]). +-export([start_timer/3, suspend_process/2, system_monitor/0]). +-export([system_monitor/1, system_monitor/2, system_profile/0]). +-export([system_profile/2, throw/1, time/0, trace/3, trace_delivered/1]). +-export([trace_info/2, trunc/1, tuple_size/1, universaltime/0]). +-export([universaltime_to_posixtime/1, unlink/1, unregister/1, whereis/1]). + +-export([abs/1, append/2, element/2, get_module_info/2, hd/1, + is_atom/1, is_binary/1, is_bitstring/1, is_boolean/1, + is_float/1, is_function/1, is_function/2, is_integer/1, + is_list/1, is_number/1, is_pid/1, is_port/1, is_record/2, + is_record/3, is_reference/1, is_tuple/1, load_module/2, + load_nif/2, localtime_to_universaltime/2, make_fun/3, + make_tuple/2, make_tuple/3, nodes/1, open_port/2, + port_call/3, port_info/1, port_info/2, process_flag/2, + process_info/2, send/2, send/3, seq_trace_info/1, + %setelement/3, %% Does not work (yet) + statistics/1, subtract/2, system_flag/2, + term_to_binary/1, term_to_binary/2, tl/1, trace_pattern/2, + trace_pattern/3, tuple_to_list/1, system_info/1, + universaltime_to_localtime/1]). + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Simple native code BIFs +%%% These are here for the types/specs, the real implementation is in the C code. +%%% The first chunk is originally auto-generated from +%%% $ERL_TOP/lib/hipe/cerl/erl_bif_types.erl as released in R15B. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%% types + +-type fun_info_item() :: + arity | + env | + index | + name | + module | + new_index | + new_uniq | + pid | + type | + uniq. + +-type seq_trace_info() :: + 'send' | + 'receive' | + 'print' | + 'timestamp' | + 'label' | + 'serial'. + +-type seq_trace_info_returns() :: + { seq_trace_info(), non_neg_integer() | + boolean() | + { non_neg_integer(), non_neg_integer() } } | + []. + +-type system_profile_option() :: + 'exclusive' | + 'runnable_ports' | + 'runnable_procs' | + 'scheduler'. + +-type system_monitor_option() :: + 'busy_port' | + 'busy_dist_port' | + {'long_gc', non_neg_integer()} | + {'large_heap', non_neg_integer()}. + + +-type raise_stacktrace() :: + [{atom(), atom(), arity() | [term()]} | + {function(), [term()]}] | + [{atom(), atom(), arity() | [term()], [{atom(),term()}]} | + {function(), [term()], [{atom(),term()}]}]. + +-type decode_packet_type() :: + 'raw' | 0..4 | 'asn1' | 'cdr' | 'sunrm' | 'fcgi' | 'tpkt' | + 'line' | 'http' | 'http_bin' | 'httph' | 'httph_bin'. +-type http_packet() :: + http_request() | http_response() | http_header() | 'http_eoh' | http_error(). +-type http_request() :: + {'http_request', http_method(), http_uri(), http_version()}. +-type http_response() :: + {'http_response', http_version(), integer(), binary() | string()}. +-type http_header() :: + {'http_header', integer(), http_field(), any(), binary() | string()}. +-type http_error() :: + {'http_error', binary() | string()}. +-type http_method() :: + 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | binary() | string(). +-type http_uri() :: + '*' | + { 'http' | 'https', binary() | string(), non_neg_integer() | 'undefined', binary() | string()} | + {'scheme', binary() | string(), binary() | string()} | + {'abs_path', binary() | string()} | + binary() | + string(). +-type http_version() :: + {non_neg_integer(), non_neg_integer()}. +-type http_field() :: + 'Cache-Control' | + 'Connection' | + 'Date' | + 'Pragma' | + 'Transfer-Encoding' | + 'Upgrade' | + 'Via' | + 'Accept' | + 'Accept-Charset' | + 'Accept-Encoding' | + 'Accept-Language' | + 'Authorization' | + 'From' | + 'Host' | + 'If-Modified-Since' | + 'If-Match' | + 'If-None-Match' | + 'If-Range' | + 'If-Unmodified-Since' | + 'Max-Forwards' | + 'Proxy-Authorization' | + 'Range' | + 'Referer' | + 'User-Agent' | + 'Age' | + 'Location' | + 'Proxy-Authenticate' | + 'Public' | + 'Retry-After' | + 'Server' | + 'Vary' | + 'Warning' | + 'Www-Authenticate' | + 'Allow' | + 'Content-Base' | + 'Content-Encoding' | + 'Content-Language' | + 'Content-Length' | + 'Content-Location' | + 'Content-Md5' | + 'Content-Range' | + 'Content-Type' | + 'Etag' | + 'Expires' | + 'Last-Modified' | + 'Accept-Ranges' | + 'Set-Cookie' | + 'Set-Cookie2' | + 'X-Forwarded-For' | + 'Cookie' | + 'Keep-Alive' | + 'Proxy-Connection' | + binary() | + string(). + +-type bitstring_list() :: + maybe_improper_list(byte() | bitstring() | bitstring_list(), bitstring() | []). + +-type trace_flag() :: + all | + send | + 'receive' | + procs | + call | + silent | + return_to | + running | + exiting | + garbage_collection | + timestamp | + cpu_timestamp | + arity | + set_on_spawn | + set_on_first_spawn | + set_on_link | + set_on_first_link | + {tracer, pid() | port()}. + +-type trace_info_item_result() :: + {traced, global | local | false | undefined} | + {match_spec, trace_match_spec() | false | undefined} | + {meta, pid() | port() | false | undefined | []} | + {meta_match_spec, trace_match_spec() | false | undefined} | + {call_count, non_neg_integer() | boolean() | undefined} | + {call_time, [{pid(), non_neg_integer(), + non_neg_integer(), non_neg_integer()}] | boolean() | undefined}. + +-type trace_info_flag() :: + send | + 'receive' | + set_on_spawn | + call | + return_to | + procs | + set_on_first_spawn | + set_on_link | + running | + garbage_collection | + timestamp | + arity. + +-type trace_info_return() :: + undefined | + {flags, [trace_info_flag()]} | + {tracer, pid() | port() | []} | + trace_info_item_result() | + {all, [ trace_info_item_result() ] | false | undefined}. + +%% Specs and stubs +% adler32/1 +-spec erlang:adler32(Data) -> non_neg_integer() when + Data :: iodata(). +adler32(_Data) -> + erlang:nif_error(undefined). + +% adler32/2 +-spec erlang:adler32(OldAdler, Data) -> non_neg_integer() when + OldAdler :: non_neg_integer(), + Data :: iodata(). +adler32(_OldAdler, _Data) -> + erlang:nif_error(undefined). + +% adler32_combine/3 +-spec erlang:adler32_combine(FirstAdler, SecondAdler, SecondSize) -> non_neg_integer() when + FirstAdler :: non_neg_integer(), + SecondAdler :: non_neg_integer(), + SecondSize :: non_neg_integer(). +adler32_combine(_FirstAdler, _SecondAdler, _SecondSize) -> + erlang:nif_error(undefined). + +% append_element/2 +-spec erlang:append_element(Tuple, Term) -> ResTuple when + Tuple :: tuple(), + Term :: term(), + ResTuple :: tuple(). +append_element(_Tuple, _Term) -> + erlang:nif_error(undefined). + +% atom_to_binary/2 +-spec atom_to_binary(Atom, Encoding) -> binary() when + Atom :: atom(), + Encoding :: latin1 | unicode | utf8. +atom_to_binary(_Atom, _Encoding) -> + erlang:nif_error(undefined). + +% atom_to_list/1 +-spec atom_to_list(Atom) -> string() when + Atom :: atom(). +atom_to_list(_Atom) -> + erlang:nif_error(undefined). + +% binary_part/2 +-spec binary_part(Subject, PosLen) -> binary() when + Subject :: binary(), + PosLen :: {non_neg_integer(), integer()}. +binary_part(_Subject, _PosLen) -> + erlang:nif_error(undefined). + +% binary_part/3 +-spec binary_part(Subject, Start, Length) -> binary() when + Subject :: binary(), + Start :: non_neg_integer(), + Length :: integer(). +binary_part(_Subject, _Start, _Length) -> + erlang:nif_error(undefined). + +% binary_to_atom/2 +-spec binary_to_atom(Binary, Encoding) -> atom() when + Binary :: binary(), + Encoding :: latin1 | unicode | utf8. +binary_to_atom(_Binary, _Encoding) -> + erlang:nif_error(undefined). + +% binary_to_existing_atom/2 +-spec binary_to_existing_atom(Binary, Encoding) -> atom() when + Binary :: binary(), + Encoding :: latin1 | unicode | utf8. +binary_to_existing_atom(_Binary, _Encoding) -> + erlang:nif_error(undefined). + +% binary_to_list/1 +-spec binary_to_list(Binary) -> [byte()] when + Binary :: binary(). +binary_to_list(_Binary) -> + erlang:nif_error(undefined). + +% binary_to_list/3 +-spec binary_to_list(Binary, Start, Stop) -> [byte()] when + Binary :: binary(), + Start :: pos_integer(), + Stop :: pos_integer(). +binary_to_list(_Binary, _Start, _Stop) -> + erlang:nif_error(undefined). + +% binary_to_term/1 +-spec binary_to_term(Binary) -> term() when + Binary :: ext_binary(). +binary_to_term(_Binary) -> + erlang:nif_error(undefined). + +% binary_to_term/2 +-spec binary_to_term(Binary, Opts) -> term() when + Binary :: ext_binary(), + Opts :: [safe]. +binary_to_term(_Binary, _Opts) -> + erlang:nif_error(undefined). + +% bit_size/1 +-spec bit_size(Bitstring) -> non_neg_integer() when + Bitstring :: bitstring(). +bit_size(_Bitstring) -> + erlang:nif_error(undefined). + +% bitsize/1 +-spec bitsize(P1) -> non_neg_integer() when + P1 :: bitstring(). +bitsize(_P1) -> + erlang:nif_error(undefined). + +% bitstr_to_list/1 +-spec erlang:bitstr_to_list(P1) -> [byte() | bitstring()] when + P1 :: bitstring(). +bitstr_to_list(_P1) -> + erlang:nif_error(undefined). + +% bitstring_to_list/1 +-spec bitstring_to_list(Bitstring) -> [byte() | bitstring()] when + Bitstring :: bitstring(). +bitstring_to_list(_Bitstring) -> + erlang:nif_error(undefined). + +% bump_reductions/1 +-spec erlang:bump_reductions(Reductions) -> true when + Reductions :: pos_integer(). +bump_reductions(_Reductions) -> + erlang:nif_error(undefined). + +% byte_size/1 +-spec byte_size(Bitstring) -> non_neg_integer() when + Bitstring :: bitstring(). +byte_size(_Bitstring) -> + erlang:nif_error(undefined). + +% call_on_load_function/1 +-spec erlang:call_on_load_function(P1) -> term() when + P1 :: atom(). +call_on_load_function(_P1) -> + erlang:nif_error(undefined). + +% cancel_timer/1 +-spec erlang:cancel_timer(TimerRef) -> Remains when + TimerRef :: reference(), + Remains :: integer() | false. +cancel_timer(_TimerRef) -> + erlang:nif_error(undefined). + +% check_old_code/1 +-spec erlang:check_old_code(Module) -> boolean() when + Module :: atom(). +check_old_code(_Module) -> + erlang:nif_error(undefined). + +% check_process_code/2 +-spec check_process_code(Pid, Module) -> boolean() when + Pid :: pid(), + Module :: atom(). +check_process_code(_Pid, _Module) -> + erlang:nif_error(undefined). + +% crc32/1 +-spec erlang:crc32(Data) -> non_neg_integer() when + Data :: iodata(). +crc32(_Data) -> + erlang:nif_error(undefined). + +% crc32/2 +-spec erlang:crc32(OldCrc, Data) -> non_neg_integer() when + OldCrc :: non_neg_integer(), + Data :: iodata(). +crc32(_OldCrc, _Data) -> + erlang:nif_error(undefined). + +% crc32_combine/3 +-spec erlang:crc32_combine(FirstCrc, SecondCrc, SecondSize) -> non_neg_integer() when + FirstCrc :: non_neg_integer(), + SecondCrc :: non_neg_integer(), + SecondSize :: non_neg_integer(). +crc32_combine(_FirstCrc, _SecondCrc, _SecondSize) -> + erlang:nif_error(undefined). + +% date/0 +-spec date() -> Date when + Date :: calendar:date(). +date() -> + erlang:nif_error(undefined). + +% decode_packet/3 +-spec erlang:decode_packet(Type, Bin, Options) -> {ok, binary() | http_packet(), binary()} | {more, non_neg_integer() | undefined} | {error, term()} when + Type :: decode_packet_type(), + Bin :: binary(), + Options :: [{packet_size, non_neg_integer()} | {line_length, non_neg_integer()}]. +decode_packet(_Type, _Bin, _Options) -> + erlang:nif_error(undefined). + +% delete_module/1 +-spec delete_module(Module) -> true | undefined when + Module :: atom(). +delete_module(_Module) -> + erlang:nif_error(undefined). + +% demonitor/1 +-spec demonitor(MonitorRef) -> true when + MonitorRef :: reference(). +demonitor(_MonitorRef) -> + erlang:nif_error(undefined). + +% demonitor/2 +-spec demonitor(MonitorRef, OptionList) -> boolean() when + MonitorRef :: reference(), + OptionList :: manual. +demonitor(_MonitorRef, _OptionList) -> + erlang:nif_error(undefined). + +% display/1 +-spec erlang:display(Term) -> true when + Term :: term(). +display(_Term) -> + erlang:nif_error(undefined). + +% display_nl/0 +-spec erlang:display_nl() -> true. +display_nl() -> + erlang:nif_error(undefined). + +% display_string/1 +-spec erlang:display_string(P1) -> true when + P1 :: string(). +display_string(_P1) -> + erlang:nif_error(undefined). + +% dist_exit/3 +-spec erlang:dist_exit(P1, P2, P3) -> true when + P1 :: pid(), + P2 :: kill | noconnection | normal, + P3 :: pid() | port(). +dist_exit(_P1, _P2, _P3) -> + erlang:nif_error(undefined). + +% erase/0 +-spec erase() -> [{term(), term()}]. +erase() -> + erlang:nif_error(undefined). + +% erase/1 +-spec erase(Key) -> undefined | term() when + Key :: term(). +erase(_Key) -> + erlang:nif_error(undefined). + +% error/1 +-spec error(Reason) -> none() when + Reason :: term(). +error(_Reason) -> + erlang:nif_error(undefined). + +% error/2 +-spec error(Reason, Args) -> none() when + Reason :: term(), + Args :: [term()]. +error(_Reason, _Args) -> + erlang:nif_error(undefined). + +% exit/1 +-spec exit(Reason) -> none() when + Reason :: term(). +exit(_Reason) -> + erlang:nif_error(undefined). + +% exit/2 +-spec exit(Pid, Reason) -> true when + Pid :: pid(), + Reason :: term(). +exit(_Pid, _Reason) -> + erlang:nif_error(undefined). + +% external_size/1 +-spec erlang:external_size(Term) -> non_neg_integer() when + Term :: term(). +external_size(_Term) -> + erlang:nif_error(undefined). + +% external_size/2 +-spec erlang:external_size(Term, Options) -> non_neg_integer() when + Term :: term(), + Options :: [{minor_version, non_neg_integer()}]. +external_size(_Term, _Options) -> + erlang:nif_error(undefined). + +% finish_after_on_load/2 +-spec erlang:finish_after_on_load(P1, P2) -> true when + P1 :: atom(), + P2 :: boolean(). +finish_after_on_load(_P1, _P2) -> + erlang:nif_error(undefined). + +% float/1 +-spec float(Number) -> float() when + Number :: number(). +float(_Number) -> + erlang:nif_error(undefined). + +% float_to_list/1 +-spec float_to_list(Float) -> string() when + Float :: float(). +float_to_list(_Float) -> + erlang:nif_error(undefined). + +% fun_info/2 +-spec erlang:fun_info(Fun, Item) -> {fun_info_item(), term()} when + Fun :: function(), + Item :: fun_info_item(). +fun_info(_Fun, _Item) -> + erlang:nif_error(undefined). + +% fun_to_list/1 +-spec erlang:fun_to_list(Fun) -> string() when + Fun :: function(). +fun_to_list(_Fun) -> + erlang:nif_error(undefined). + +% function_exported/3 +-spec erlang:function_exported(Module, Function, Arity) -> boolean() when + Module :: atom(), + Function :: atom(), + Arity :: arity(). +function_exported(_Module, _Function, _Arity) -> + erlang:nif_error(undefined). + +% garbage_collect/0 +-spec garbage_collect() -> true. +garbage_collect() -> + erlang:nif_error(undefined). + +% garbage_collect/1 +-spec garbage_collect(Pid) -> boolean() when + Pid :: pid(). +garbage_collect(_Pid) -> + erlang:nif_error(undefined). + +% garbage_collect_message_area/0 +-spec erlang:garbage_collect_message_area() -> boolean(). +garbage_collect_message_area() -> + erlang:nif_error(undefined). + +% get/0 +-spec get() -> [{term(), term()}]. +get() -> + erlang:nif_error(undefined). + +% get/1 +-spec get(Key) -> term() when + Key :: term(). +get(_Key) -> + erlang:nif_error(undefined). + +% get_keys/1 +-spec get_keys(Val) -> [term()] when + Val :: term(). +get_keys(_Val) -> + erlang:nif_error(undefined). + +% get_module_info/1 +-spec erlang:get_module_info(P1) -> [{atom(), [{atom(), term()}]}] when + P1 :: atom(). +get_module_info(_P1) -> + erlang:nif_error(undefined). + +% get_stacktrace/0 +-spec erlang:get_stacktrace() -> [stack_item()]. +get_stacktrace() -> + erlang:nif_error(undefined). + +% group_leader/0 +-spec group_leader() -> pid(). +group_leader() -> + erlang:nif_error(undefined). + +% group_leader/2 +-spec group_leader(GroupLeader, Pid) -> true when + GroupLeader :: pid(), + Pid :: pid(). +group_leader(_GroupLeader, _Pid) -> + erlang:nif_error(undefined). + +% halt/0 +-spec halt() -> none(). +halt() -> + erlang:nif_error(undefined). + +% halt/1 +-spec halt(Status) -> none() when + Status :: term(). +halt(_Status) -> + erlang:nif_error(undefined). + +% hash/2 +-spec erlang:hash(Term, Range) -> integer() when + Term :: term(), + Range :: integer(). +hash(_Term, _Range) -> + erlang:nif_error(undefined). + +% hibernate/3 +-spec erlang:hibernate(Module, Function, Args) -> none() when + Module :: atom(), + Function :: atom(), + Args :: [term()]. +hibernate(_Module, _Function, _Args) -> + erlang:nif_error(undefined). + +% integer_to_list/1 +-spec integer_to_list(Integer) -> string() when + Integer :: integer(). +integer_to_list(_Integer) -> + erlang:nif_error(undefined). + +% iolist_size/1 +-spec iolist_size(Item) -> non_neg_integer() when + Item :: iolist() | binary(). +iolist_size(_Item) -> + erlang:nif_error(undefined). + +% iolist_to_binary/1 +-spec iolist_to_binary(IoListOrBinary) -> binary() when + IoListOrBinary :: iolist() | binary(). +iolist_to_binary(_IoListOrBinary) -> + erlang:nif_error(undefined). + +% is_alive/0 +-spec is_alive() -> boolean(). +is_alive() -> + erlang:nif_error(undefined). + +% is_builtin/3 +-spec erlang:is_builtin(Module, Function, Arity) -> boolean() when + Module :: atom(), + Function :: atom(), + Arity :: arity(). +is_builtin(_Module, _Function, _Arity) -> + erlang:nif_error(undefined). + +% is_process_alive/1 +-spec is_process_alive(Pid) -> boolean() when + Pid :: pid(). +is_process_alive(_Pid) -> + erlang:nif_error(undefined). + +% length/1 +-spec length(List) -> non_neg_integer() when + List :: list(). +length(_List) -> + erlang:nif_error(undefined). + +% link/1 +-spec link(PidOrPort) -> true when + PidOrPort :: pid() | port(). +link(_PidOrPort) -> + erlang:nif_error(undefined). + +% list_to_atom/1 +-spec list_to_atom(String) -> atom() when + String :: string(). +list_to_atom(_String) -> + erlang:nif_error(undefined). + +% list_to_binary/1 +-spec list_to_binary(IoList) -> binary() when + IoList :: iolist(). +list_to_binary(_IoList) -> + erlang:nif_error(undefined). + +% list_to_bitstr/1 +-spec erlang:list_to_bitstr(P1) -> bitstring() when + P1 :: bitstring_list(). +list_to_bitstr(_P1) -> + erlang:nif_error(undefined). + +% list_to_bitstring/1 +-spec list_to_bitstring(BitstringList) -> bitstring() when + BitstringList :: bitstring_list(). +list_to_bitstring(_BitstringList) -> + erlang:nif_error(undefined). + +% list_to_existing_atom/1 +-spec list_to_existing_atom(String) -> atom() when + String :: string(). +list_to_existing_atom(_String) -> + erlang:nif_error(undefined). + +% list_to_float/1 +-spec list_to_float(String) -> float() when + String :: string(). +list_to_float(_String) -> + erlang:nif_error(undefined). + +% list_to_integer/1 +-spec list_to_integer(String) -> integer() when + String :: string(). +list_to_integer(_String) -> + erlang:nif_error(undefined). + +% list_to_pid/1 +-spec list_to_pid(String) -> pid() when + String :: string(). +list_to_pid(_String) -> + erlang:nif_error(undefined). + +% list_to_tuple/1 +-spec list_to_tuple(List) -> tuple() when + List :: list(). +list_to_tuple(_List) -> + erlang:nif_error(undefined). + +% loaded/0 +-spec erlang:loaded() -> [atom()]. +loaded() -> + erlang:nif_error(undefined). + +% localtime/0 +-spec erlang:localtime() -> DateTime when + DateTime :: calendar:datetime(). +localtime() -> + erlang:nif_error(undefined). + +% make_ref/0 +-spec make_ref() -> reference(). +make_ref() -> + erlang:nif_error(undefined). + +% match_spec_test/3 +-spec erlang:match_spec_test(P1, P2, P3) -> TestResult when + P1 :: list() | tuple(), + P2 :: term(), + P3 :: table | trace, + TestResult :: {ok, term(), [return_trace], [ {error | warning, string()} ]} | {error, [ {error | warning, string()} ]}. +match_spec_test(_P1, _P2, _P3) -> + erlang:nif_error(undefined). + +% md5/1 +-spec erlang:md5(Data) -> Digest when + Data :: iolist() | binary(), + Digest :: binary(). +md5(_Data) -> + erlang:nif_error(undefined). + +% md5_final/1 +-spec erlang:md5_final(Context) -> Digest when + Context :: binary(), + Digest :: binary(). +md5_final(_Context) -> + erlang:nif_error(undefined). + +% md5_init/0 +-spec erlang:md5_init() -> Context when + Context :: binary(). +md5_init() -> + erlang:nif_error(undefined). + +% md5_update/2 +-spec erlang:md5_update(Context, Data) -> NewContext when + Context :: binary(), + Data :: iolist() | binary(), + NewContext :: binary(). +md5_update(_Context, _Data) -> + erlang:nif_error(undefined). + +% module_loaded/1 +-spec module_loaded(Module) -> boolean() when + Module :: atom(). +module_loaded(_Module) -> + erlang:nif_error(undefined). + +% monitor/2 +-spec monitor(Type, Item) -> MonitorRef when + Type :: process, + Item :: pid() | atom() | {atom(), node()}, + MonitorRef :: reference(). +monitor(_Type, _Item) -> + erlang:nif_error(undefined). + +% monitor_node/2 +-spec monitor_node(Node, Flag) -> true when + Node :: node(), + Flag :: boolean(). +monitor_node(_Node, _Flag) -> + erlang:nif_error(undefined). + +% monitor_node/3 +-spec erlang:monitor_node(Node, Flag, Options) -> true when + Node :: node(), + Flag :: boolean(), + Options :: [allow_passive_connect]. +monitor_node(_Node, _Flag, _Options) -> + erlang:nif_error(undefined). + +% nif_error/1 +-spec erlang:nif_error(Reason) -> none() when + Reason :: term(). +nif_error(_Reason) -> + erlang:nif_error(undefined). + +% nif_error/2 +-spec erlang:nif_error(Reason, Args) -> none() when + Reason :: term(), + Args :: list(). +nif_error(_Reason, _Args) -> + erlang:nif_error(undefined). + +% node/0 +-spec node() -> Node when + Node :: node(). +node() -> + erlang:nif_error(undefined). + +% node/1 +-spec node(Arg) -> Node when + Arg :: pid() | port() | reference(), + Node :: node(). +node(_Arg) -> + erlang:nif_error(undefined). + +% now/0 +-spec now() -> Timestamp when + Timestamp :: {non_neg_integer(),non_neg_integer(),non_neg_integer()}. +now() -> + erlang:nif_error(undefined). + +% phash/2 +-spec erlang:phash(Term, Range) -> Hash when + Term :: term(), + Range :: pos_integer(), + Hash :: pos_integer(). +phash(_Term, _Range) -> + erlang:nif_error(undefined). + +% phash2/1 +-spec erlang:phash2(Term) -> Hash when + Term :: term(), + Hash :: non_neg_integer(). +phash2(_Term) -> + erlang:nif_error(undefined). + +% phash2/2 +-spec erlang:phash2(Term, Range) -> Hash when + Term :: term(), + Range :: pos_integer(), + Hash :: non_neg_integer(). +phash2(_Term, _Range) -> + erlang:nif_error(undefined). + +% pid_to_list/1 +-spec pid_to_list(Pid) -> string() when + Pid :: pid(). +pid_to_list(_Pid) -> + erlang:nif_error(undefined). + +% port_close/1 +-spec port_close(Port) -> true when + Port :: port() | atom(). +port_close(_Port) -> + erlang:nif_error(undefined). + +% port_command/2 +-spec port_command(Port, Data) -> true when + Port :: port() | atom(), + Data :: iodata(). +port_command(_Port, _Data) -> + erlang:nif_error(undefined). + +% port_command/3 +-spec port_command(Port, Data, OptionList) -> boolean() when + Port :: port() | atom(), + Data :: iodata(), + OptionList :: [force | nosuspend]. +port_command(_Port, _Data, _OptionList) -> + erlang:nif_error(undefined). + +% port_connect/2 +-spec port_connect(Port, Pid) -> true when + Port :: port() | atom(), + Pid :: pid(). +port_connect(_Port, _Pid) -> + erlang:nif_error(undefined). + +% port_control/3 +-spec port_control(Port, Operation, Data) -> Res when + Port :: port() | atom(), + Operation :: integer(), + Data :: iodata(), + Res :: string() | binary(). +port_control(_Port, _Operation, _Data) -> + erlang:nif_error(undefined). + +% port_get_data/1 +-spec erlang:port_get_data(P1) -> term() when + P1 :: port() | atom(). +port_get_data(_P1) -> + erlang:nif_error(undefined). + +% port_set_data/2 +-spec erlang:port_set_data(P1, P2) -> true when + P1 :: port() | atom(), + P2 :: term(). +port_set_data(_P1, _P2) -> + erlang:nif_error(undefined). + +% port_to_list/1 +-spec erlang:port_to_list(Port) -> string() when + Port :: port(). +port_to_list(_Port) -> + erlang:nif_error(undefined). + +% ports/0 +-spec erlang:ports() -> [port()]. +ports() -> + erlang:nif_error(undefined). + +% posixtime_to_universaltime/1 +-spec erlang:posixtime_to_universaltime(P1) -> {calendar:date(), calendar:time()} when + P1 :: integer(). +posixtime_to_universaltime(_P1) -> + erlang:nif_error(undefined). + +% pre_loaded/0 +-spec pre_loaded() -> [atom()]. +pre_loaded() -> + erlang:nif_error(undefined). + +% process_display/2 +-spec erlang:process_display(Pid, Type) -> true when + Pid :: pid(), + Type :: backtrace. +process_display(_Pid, _Type) -> + erlang:nif_error(undefined). + +% process_flag/3 +-spec process_flag(Pid, Flag, Value) -> OldValue when + Pid :: pid(), + Flag :: save_calls, + Value :: non_neg_integer(), + OldValue :: non_neg_integer(). +process_flag(_Pid, _Flag, _Value) -> + erlang:nif_error(undefined). + +% process_info/1 +-spec process_info(Pid) -> Info when + Pid :: pid(), + Info :: [process_info_result_item()]. +process_info(_Pid) -> + erlang:nif_error(undefined). + +% processes/0 +-spec processes() -> [pid()]. +processes() -> + erlang:nif_error(undefined). + +% purge_module/1 +-spec purge_module(Module) -> true when + Module :: atom(). +purge_module(_Module) -> + erlang:nif_error(undefined). + +% put/2 +-spec put(Key, Val) -> term() when + Key :: term(), + Val :: term(). +put(_Key, _Val) -> + erlang:nif_error(undefined). + +% raise/3 +-spec erlang:raise(Class, Reason, Stacktrace) -> none() when + Class :: error | exit | throw, + Reason :: term(), + Stacktrace :: raise_stacktrace(). +raise(_Class, _Reason, _Stacktrace) -> + erlang:nif_error(undefined). + +% read_timer/1 +-spec erlang:read_timer(TimerRef) -> non_neg_integer() | false when + TimerRef :: reference(). +read_timer(_TimerRef) -> + erlang:nif_error(undefined). + +% ref_to_list/1 +-spec erlang:ref_to_list(Ref) -> string() when + Ref :: reference(). +ref_to_list(_Ref) -> + erlang:nif_error(undefined). + +% register/2 +-spec register(RegName, PidOrPort) -> true when + RegName :: atom(), + PidOrPort :: port() | pid(). +register(_RegName, _PidOrPort) -> + erlang:nif_error(undefined). + +% registered/0 +-spec registered() -> [atom()]. +registered() -> + erlang:nif_error(undefined). + +% resume_process/1 +-spec erlang:resume_process(Suspendee) -> true when + Suspendee :: pid(). +resume_process(_Suspendee) -> + erlang:nif_error(undefined). + +% round/1 +-spec round(Number) -> integer() when + Number :: number(). +round(_Number) -> + erlang:nif_error(undefined). + +% self/0 +-spec self() -> pid(). +self() -> + erlang:nif_error(undefined). + +% send_after/3 +-spec erlang:send_after(Time, Dest, Msg) -> TimerRef when + Time :: non_neg_integer(), + Dest :: pid() | atom(), + Msg :: term(), + TimerRef :: reference(). +send_after(_Time, _Dest, _Msg) -> + erlang:nif_error(undefined). + +% seq_trace/2 +-spec erlang:seq_trace(P1, P2) -> seq_trace_info_returns() | {term(), term(), term(), term(), term()} when + P1 :: atom(), + P2 :: boolean() | {integer(), integer()} | integer() | []. +seq_trace(_P1, _P2) -> + erlang:nif_error(undefined). + +% seq_trace_print/1 +-spec erlang:seq_trace_print(P1) -> boolean() when + P1 :: term(). +seq_trace_print(_P1) -> + erlang:nif_error(undefined). + +% seq_trace_print/2 +-spec erlang:seq_trace_print(P1, P2) -> boolean() when + P1 :: atom() | integer(), + P2 :: term(). +seq_trace_print(_P1, _P2) -> + erlang:nif_error(undefined). + +% setnode/2 +-spec erlang:setnode(P1, P2) -> true when + P1 :: atom(), + P2 :: integer(). +setnode(_P1, _P2) -> + erlang:nif_error(undefined). + +% setnode/3 +-spec erlang:setnode(P1, P2, P3) -> true when + P1 :: atom(), + P2 :: port(), + P3 :: {term(), term(), term(), term()}. +setnode(_P1, _P2, _P3) -> + erlang:nif_error(undefined). + +% size/1 +-spec size(Item) -> non_neg_integer() when + Item :: tuple() | binary(). +size(_Item) -> + erlang:nif_error(undefined). + +% spawn/3 +-spec spawn(Module, Function, Args) -> pid() when + Module :: atom(), + Function :: atom(), + Args :: [term()]. +spawn(_Module, _Function, _Args) -> + erlang:nif_error(undefined). + +% spawn_link/3 +-spec spawn_link(Module, Function, Args) -> pid() when + Module :: atom(), + Function :: atom(), + Args :: [term()]. +spawn_link(_Module, _Function, _Args) -> + erlang:nif_error(undefined). + +% split_binary/2 +-spec split_binary(Bin, Pos) -> {binary(), binary()} when + Bin :: binary(), + Pos :: non_neg_integer(). +split_binary(_Bin, _Pos) -> + erlang:nif_error(undefined). + +% start_timer/3 +-spec erlang:start_timer(Time, Dest, Msg) -> TimerRef when + Time :: non_neg_integer(), + Dest :: pid() | atom(), + Msg :: term(), + TimerRef :: reference(). +start_timer(_Time, _Dest, _Msg) -> + erlang:nif_error(undefined). + +% suspend_process/2 +-spec erlang:suspend_process(Suspendee, OptList) -> boolean() when + Suspendee :: pid(), + OptList :: [unless_suspending | asynchronous]. +suspend_process(_Suspendee, _OptList) -> + erlang:nif_error(undefined). + +% system_monitor/0 +-spec erlang:system_monitor() -> MonSettings when + MonSettings :: undefined | { pid(), [ system_monitor_option() ] }. +system_monitor() -> + erlang:nif_error(undefined). + +% system_monitor/1 +-spec erlang:system_monitor(Arg) -> MonSettings when + Arg :: undefined | { pid(), [ system_monitor_option() ] }, + MonSettings :: undefined | { pid(), [ system_monitor_option() ] }. +system_monitor(_Arg) -> + erlang:nif_error(undefined). + +% system_monitor/2 +-spec erlang:system_monitor(MonitorPid, Options) -> MonSettings when + MonitorPid :: pid(), + Options :: [ system_monitor_option() ], + MonSettings :: undefined | { pid(), [ system_monitor_option() ] }. +system_monitor(_MonitorPid, _Options) -> + erlang:nif_error(undefined). + +% system_profile/0 +-spec erlang:system_profile() -> ProfilerSettings when + ProfilerSettings :: undefined | { pid() | port(), [ system_profile_option() ]}. +system_profile() -> + erlang:nif_error(undefined). + +% system_profile/2 +-spec erlang:system_profile(ProfilerPid, Options) -> ProfilerSettings when + ProfilerPid :: pid() | port() | undefined, + Options :: [ system_profile_option() ], + ProfilerSettings :: undefined | { pid() | port(), [ system_profile_option() ]}. +system_profile(_ProfilerPid, _Options) -> + erlang:nif_error(undefined). + +% throw/1 +-spec throw(Any) -> none() when + Any :: term(). +throw(_Any) -> + erlang:nif_error(undefined). + +% time/0 +-spec time() -> Time when + Time :: calendar:time(). +time() -> + erlang:nif_error(undefined). + +% trace/3 +-spec erlang:trace(PidSpec, How, FlagList) -> integer() when + PidSpec :: pid() | existing | new | all, + How :: boolean(), + FlagList :: [trace_flag()]. +trace(_PidSpec, _How, _FlagList) -> + erlang:nif_error(undefined). + +% trace_delivered/1 +-spec erlang:trace_delivered(Tracee) -> Ref when + Tracee :: pid() | all, + Ref :: reference(). +trace_delivered(_Tracee) -> + erlang:nif_error(undefined). + +% trace_info/2 +-spec erlang:trace_info(PidOrFunc, Item) -> Res when + PidOrFunc :: pid() | new | mfa() | on_load, + Item :: flags | tracer | traced | match_spec | meta | meta_match_spec | call_count | call_time | all, + Res :: trace_info_return(). +trace_info(_PidOrFunc, _Item) -> + erlang:nif_error(undefined). + +% trunc/1 +-spec trunc(Number) -> integer() when + Number :: number(). +trunc(_Number) -> + erlang:nif_error(undefined). + +% tuple_size/1 +-spec tuple_size(Tuple) -> non_neg_integer() when + Tuple :: tuple(). +tuple_size(_Tuple) -> + erlang:nif_error(undefined). + +% universaltime/0 +-spec erlang:universaltime() -> DateTime when + DateTime :: calendar:datetime(). +universaltime() -> + erlang:nif_error(undefined). + +% universaltime_to_posixtime/1 +-spec erlang:universaltime_to_posixtime(P1) -> integer() when + P1 :: {calendar:date(), calendar:time()}. +universaltime_to_posixtime(_P1) -> + erlang:nif_error(undefined). + +% unlink/1 +-spec unlink(Id) -> true when + Id :: pid() | port(). +unlink(_Id) -> + erlang:nif_error(undefined). + +% unregister/1 +-spec unregister(RegName) -> true when + RegName :: atom(). +unregister(_RegName) -> + erlang:nif_error(undefined). + +% whereis/1 +-spec whereis(RegName) -> pid() | port() | undefined when + RegName :: atom(). +whereis(_RegName) -> + erlang:nif_error(undefined). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% More complicated native code BIFs +%%% These are here for the types/specs, the real implementation is in the C code. +%%% This chunk is handwritten, i.e. contains more complicated specs. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% types and specs + +-spec abs(Float) -> float() when + Float :: float(); + (Int) -> non_neg_integer() when + Int :: integer(). +abs(_Number) -> + erlang:nif_error(undefined). + +%% Not documented +-spec erlang:append(List,Tail) -> maybe_improper_list() when + List :: list(), + Tail :: term(). +append(_List,_Tail) -> + erlang:nif_error(undefined). + +-spec element(N, Tuple) -> term() when + N :: pos_integer(), + Tuple :: tuple(). +element(_N, _Tuple) -> + erlang:nif_error(undefined). + +%% Not documented +-spec erlang:get_module_info(Module, Item) -> ModuleInfo when + Module :: atom(), + Item :: module | imports | exports | functions | attributes | compile | native_addresses, + ModuleInfo :: atom() | [] | [{atom(), arity()}] | [{atom(), term()}] | [{atom(), arity(), integer()}]. +get_module_info(_Module, _Item) -> + erlang:nif_error(undefined). + +-spec hd(List) -> term() when + List :: [term(), ...]. +hd(_List) -> + erlang:nif_error(undefined). + +%% erlang:info/1 no longer exists! + +-spec is_atom(Term) -> boolean() when + Term :: term(). +is_atom(_Term) -> + erlang:nif_error(undefined). + +-spec is_binary(Term) -> boolean() when + Term :: term(). +is_binary(_Term) -> + erlang:nif_error(undefined). + +-spec is_bitstring(Term) -> boolean() when + Term :: term(). +is_bitstring(_Term) -> + erlang:nif_error(undefined). + +-spec is_boolean(Term) -> boolean() when + Term :: term(). +is_boolean(_Term) -> + erlang:nif_error(undefined). + +-spec is_float(Term) -> boolean() when + Term :: term(). +is_float(_Term) -> + erlang:nif_error(undefined). + +-spec is_function(Term) -> boolean() when + Term :: term(). +is_function(_Term) -> + erlang:nif_error(undefined). + +-spec is_function(Term, Arity) -> boolean() when + Term :: term(), + Arity :: arity(). +is_function(_Term, _Arity) -> + erlang:nif_error(undefined). + +-spec is_integer(Term) -> boolean() when + Term :: term(). +is_integer(_Term) -> + erlang:nif_error(undefined). + +-spec is_list(Term) -> boolean() when + Term :: term(). +is_list(_Term) -> + erlang:nif_error(undefined). + +-spec is_number(Term) -> boolean() when + Term :: term(). +is_number(_Term) -> + erlang:nif_error(undefined). + +-spec is_pid(Term) -> boolean() when + Term :: term(). +is_pid(_Term) -> + erlang:nif_error(undefined). + +-spec is_port(Term) -> boolean() when + Term :: term(). +is_port(_Term) -> + erlang:nif_error(undefined). + +-spec is_record(Term,RecordTag) -> boolean() when + Term :: term(), + RecordTag :: atom(). +is_record(_Term,_RecordTag) -> + erlang:nif_error(undefined). + +-spec is_record(Term,RecordTag,Size) -> boolean() when + Term :: term(), + RecordTag :: atom(), + Size :: non_neg_integer(). +is_record(_Term,_RecordTag,_Size) -> + erlang:nif_error(undefined). + +-spec is_reference(Term) -> boolean() when + Term :: term(). +is_reference(_Term) -> + erlang:nif_error(undefined). + +-spec is_tuple(Term) -> boolean() when + Term :: term(). +is_tuple(_Term) -> + erlang:nif_error(undefined). + +-spec load_module(Module, Binary) -> {module, Module} | {error, Reason} when + Module :: module(), + Binary :: binary(), + Reason :: badfile | not_purged. +load_module(_Module,_Binary) -> + erlang:nif_error(undefined). + +-spec erlang:load_nif(Path, LoadInfo) -> ok | Error when + Path :: string(), + LoadInfo :: term(), + Error :: {error, {Reason, Text :: string()}}, + Reason :: load_failed | bad_lib | load | reload | upgrade | old_code. +load_nif(_Path, _LoadInfo) -> + erlang:nif_error(undefined). + +-spec erlang:localtime_to_universaltime(Localtime, IsDst) -> Universaltime when + Localtime :: calendar:datetime(), + Universaltime :: calendar:datetime(), + IsDst :: true | false | undefined. +localtime_to_universaltime(_Localtime, _IsDst) -> + erlang:nif_error(undefined). + +%% CHECK! Why the strange very thorough specification of the error +%% condition with disallowed arity in erl_bif_types? +%% Not documented +-spec erlang:make_fun(Module, Function, Arity) -> function() when + Module :: atom(), + Function :: atom(), + Arity :: arity(). +make_fun(_Module,_Function, _Arity) -> + erlang:nif_error(undefined). + +-spec erlang:make_tuple(Arity, InitialValue) -> tuple() when + Arity :: arity(), + InitialValue :: term(). +make_tuple(_Arity,_InitialValue) -> + erlang:nif_error(undefined). + +-spec erlang:make_tuple(Arity, DefaultValue, InitList) -> tuple() when + Arity :: arity(), + DefaultValue :: term(), + InitList :: [{Position :: pos_integer(), term()}]. +make_tuple(_Arity,_DefaultValue,_InitList) -> + erlang:nif_error(undefined). + +-spec nodes(Arg) -> Nodes when + Arg :: NodeType | [NodeType], + NodeType :: visible | hidden | connected | this | known, + Nodes :: [node()]. +nodes(_Arg) -> + erlang:nif_error(undefined). + +-spec open_port(PortName, PortSettings) -> port() when + PortName :: {spawn, Command :: string()} | + {spawn_driver, Command :: [byte()]} | + {spawn_executable, FileName :: file:name() } | + {fd, In :: non_neg_integer(), Out :: non_neg_integer()}, + PortSettings :: [Opt], + Opt :: {packet, N :: 1 | 2 | 4} + | stream + | {line, L :: non_neg_integer()} + | {cd, Dir :: string()} + | {env, Env :: [{Name :: string(), Val :: string() | false}]} + | {args, [string() | binary()]} + | {arg0, string() | binary()} + | exit_status + | use_stdio + | nouse_stdio + | stderr_to_stdout + | in + | out + | binary + | eof. +open_port(_PortName,_PortSettings) -> + erlang:nif_error(undefined). + +-spec erlang:port_call(Port, Operation, Data) -> term() when + Port :: port() | atom(), + Operation :: integer(), + Data :: term(). +port_call(_Port, _Operation, _Data) -> + erlang:nif_error(undefined). + +-type port_info_item() :: + registered_name | + id | + connected | + links | + name | + input | + output. + +-type port_info_result_item() :: + {registered_name, RegName :: atom()} | + {id, Index :: non_neg_integer()} | + {connected, Pid :: pid()} | + {links, Pids :: [pid()]} | + {name, String :: string()} | + {input, Bytes :: non_neg_integer()} | + {output, Bytes :: non_neg_integer()}. + +-spec erlang:port_info(Port) -> Result when + Port :: port() | atom(), + Result :: [port_info_result_item()] | undefined. +port_info(_Result) -> + erlang:nif_error(undefined). + +-spec erlang:port_info(Port, Item) -> Result when + Port :: port() | atom(), + Item :: port_info_item(), + Result :: port_info_result_item() | undefined | []. +port_info(_Result, _Item) -> + erlang:nif_error(undefined). + +-type priority_level() :: + low | normal | high | max. + +-spec process_flag(trap_exit, Boolean) -> OldBoolean when + Boolean :: boolean(), + OldBoolean :: boolean(); + (error_handler, Module) -> OldModule when + Module :: atom(), + OldModule :: atom(); + (min_heap_size, MinHeapSize) -> OldMinHeapSize when + MinHeapSize :: non_neg_integer(), + OldMinHeapSize :: non_neg_integer(); + (min_bin_vheap_size, MinBinVHeapSize) -> OldMinBinVHeapSize when + MinBinVHeapSize :: non_neg_integer(), + OldMinBinVHeapSize :: non_neg_integer(); + (priority, Level) -> OldLevel when + Level :: priority_level(), + OldLevel :: priority_level(); + (save_calls, N) -> OldN when + N :: 0..10000, + OldN :: 0..10000; + (sensitive, Boolean) -> OldBoolean when + Boolean :: boolean(), + OldBoolean :: boolean(). +process_flag(_Flag, _Value) -> + erlang:nif_error(undefined). + +-type process_info_item() :: + backtrace | + binary | + catchlevel | + current_function | + current_location | + current_stacktrace | + dictionary | + error_handler | + garbage_collection | + group_leader | + heap_size | + initial_call | + links | + last_calls | + memory | + message_binary | + message_que_len | + messages | + min_heap_size | + min_bin_vheap_size | + monitored_by | + monitors | + priority | + reductions | + registered_name | + sequential_trace_token | + stack_size | + status | + suspending | + total_heap_size | + trace | + trap_exit. + +-type process_info_result_item() :: + {backtrace, Bin :: binary()} | + {binary, BinInfo :: [{non_neg_integer(), + non_neg_integer(), + non_neg_integer()}]} | + {catchlevel, CatchLevel :: non_neg_integer()} | + {current_function, + {Module :: module(), Function :: atom(), Arity :: arity()}} | + {current_location, + {Module :: module(), Function :: atom(), Arity :: arity(), + Location :: [{file, Filename :: string()} | % not a stack_item()! + {line, Line :: integer()}]}} | + {current_stacktrace, Stack :: [stack_item()]} | + {dictionary, Dictionary :: [{Key :: term(), Value :: term()}]} | + {error_handler, Module :: module()} | + {garbage_collection, GCInfo :: [{atom(),non_neg_integer()}]} | + {group_leader, GroupLeader :: pid()} | + {heap_size, Size :: non_neg_integer()} | + {initial_call, mfa()} | + {links, Pids :: [pid()]} | + {last_calls, false | (Calls :: [mfa()])} | + {memory, Size :: non_neg_integer()} | + {message_binary, BinInfo :: term()} | + {message_que_len, MessageQueueLen :: non_neg_integer()} | + {messages, MessageQueue :: [term()]} | + {min_heap_size, MinHeapSize :: non_neg_integer()} | + {min_bin_vheap_size, MinBinVHeapSize :: non_neg_integer()} | + {monitored_by, Pids :: [pid()]} | + {monitors, + Monitors :: [{process, Pid :: pid() | + {RegName :: atom(), Node :: node()}}]} | + {priority, Level :: priority_level()} | + {reductions, Number :: non_neg_integer()} | + {registered_name, Atom :: atom()} | + {sequential_trace_token, [] | (SequentialTraceToken :: term())} | + {stack_size, Size :: non_neg_integer()} | + {status, Status :: exiting | garbage_collecting | waiting | running | runnable | suspended} | + {suspending, + SuspendeeList :: [{Suspendee :: pid(), + ActiveSuspendCount :: non_neg_integer(), + OutstandingSuspendCount ::non_neg_integer()}]} | + {total_heap_size, Size :: non_neg_integer()} | + {trace, InternalTraceFlags :: non_neg_integer()} | + {trap_exit, Boolean :: boolean()}. + +-type stack_item() :: + {atom(), atom(), arity() | [term()], [{file, string()} | {line, integer()}]}. + +-spec process_info(Pid, Item) -> + InfoTuple | [] | undefined when + Pid :: pid(), + Item :: process_info_item(), + InfoTuple :: process_info_result_item(); + (Pid, ItemList) -> InfoTupleList | [] | undefined when + Pid :: pid(), + ItemList :: [Item], + Item :: process_info_item(), + InfoTupleList :: [InfoTuple], + InfoTuple :: process_info_result_item(). +process_info(_Pid,_ItemSpec) -> + erlang:nif_error(undefined). + +-spec send(Dest, Msg) -> Msg when + Dest :: dst(), + Msg :: term(). +send(_Dest,_Msg) -> + erlang:nif_error(undefined). + +-spec erlang:send(Dest, Msg, Options) -> Res when + Dest :: dst(), + Msg :: term(), + Options :: [nosuspend | noconnect], + Res :: ok | nosuspend | noconnect. +send(_Dest,_Msg,_Options) -> + erlang:nif_error(undefined). + +%% Not documented +-spec erlang:seq_trace_info(send) -> {send, boolean()}; + ('receive') -> {'receive', boolean()}; + (print) -> {print, boolean()}; + (timestamp) -> {timestamp, boolean()}; + (label) -> [] | {label, non_neg_integer()}; + (serial) -> [] | {serial, {non_neg_integer(), non_neg_integer()}}. +seq_trace_info(_What) -> + erlang:nif_error(undefined). + +%% -spec setelement(Index, Tuple1, Value) -> Tuple2 when +%% Index :: pos_integer(), +%% Tuple1 :: tuple(), +%% Tuple2 :: tuple(), +%% Value :: term(). +%% setelement(_Index, _Tuple1, _Value) -> +%% erlang:nif_error(undefined). + +-spec statistics(context_switches) -> {ContextSwitches,0} when + ContextSwitches :: non_neg_integer(); + (exact_reductions) -> {Total_Exact_Reductions, + Exact_Reductions_Since_Last_Call} when + Total_Exact_Reductions :: non_neg_integer(), + Exact_Reductions_Since_Last_Call :: non_neg_integer(); + (garbage_collection) -> {Number_of_GCs, Words_Reclaimed, 0} when + Number_of_GCs :: non_neg_integer(), + Words_Reclaimed :: non_neg_integer(); + (io) -> {{input, Input}, {output, Output}} when + Input :: non_neg_integer(), + Output :: non_neg_integer(); + (reductions) -> {Total_Reductions, + Reductions_Since_Last_Call} when + Total_Reductions :: non_neg_integer(), + Reductions_Since_Last_Call :: non_neg_integer(); + (run_queue) -> non_neg_integer(); + (runtime) -> {Total_Run_Time, Time_Since_Last_Call} when + Total_Run_Time :: non_neg_integer(), + Time_Since_Last_Call :: non_neg_integer(); + (wall_clock) -> {Total_Wallclock_Time, + Wallclock_Time_Since_Last_Call} when + Total_Wallclock_Time :: non_neg_integer(), + Wallclock_Time_Since_Last_Call :: non_neg_integer(). +statistics(_Item) -> + erlang:nif_error(undefined). + +%% Not documented +-spec erlang:subtract([term()], [term()]) -> [term()]. +subtract(_,_) -> + erlang:nif_error(undefined). + +-type scheduler_bind_type() :: + 'no_node_processor_spread' | + 'no_node_thread_spread' | + 'no_spread' | + 'processor_spread' | + 'spread' | + 'thread_spread' | + 'thread_no_node_processor_spread' | + 'unbound'. + +-spec erlang:system_flag(backtrace_depth, Depth) -> OldDepth when + Depth :: non_neg_integer(), + OldDepth :: non_neg_integer(); + (cpu_topology, CpuTopology) -> OldCpuTopology when + CpuTopology :: cpu_topology(), + OldCpuTopology :: cpu_topology(); + (fullsweep_after, Number) -> OldNumber when + Number :: non_neg_integer(), + OldNumber :: non_neg_integer(); + (min_heap_size, MinHeapSize) -> OldMinHeapSize when + MinHeapSize :: non_neg_integer(), + OldMinHeapSize :: non_neg_integer(); + (min_bin_vheap_size, MinBinVHeapSize) -> + OldMinBinVHeapSize when + MinBinVHeapSize :: non_neg_integer(), + OldMinBinVHeapSize :: non_neg_integer(); + (multi_scheduling, BlockState) -> OldBlockState when + BlockState :: block | unblock, + OldBlockState :: block | unblock | enabled; + (scheduler_bind_type, How) -> OldBindType when + How :: scheduler_bind_type() | default_bind, + OldBindType :: scheduler_bind_type(); + (schedulers_online, SchedulersOnline) -> + OldSchedulersOnline when + SchedulersOnline :: pos_integer(), + OldSchedulersOnline :: pos_integer(); + (trace_control_word, TCW) -> OldTCW when + TCW :: non_neg_integer(), + OldTCW :: non_neg_integer(). +system_flag(_Flag, _Value) -> + erlang:nif_error(undefined). + +-spec term_to_binary(Term) -> ext_binary() when + Term :: term(). +term_to_binary(_Term) -> + erlang:nif_error(undefined). + +-spec term_to_binary(Term, Options) -> ext_binary() when + Term :: term(), + Options :: [compressed | + {compressed, Level :: 0..9} | + {minor_version, Version :: 0..1} ]. +term_to_binary(_Term, _Options) -> + erlang:nif_error(undefined). + +-spec tl(List) -> term() when + List :: [term(), ...]. +tl(_List) -> + erlang:nif_error(undefined). + +-type trace_pattern_mfa() :: + {atom(),atom(),arity() | '_'} | on_load. +-type trace_match_spec() :: + [{[term()],[term()],[term()]}]. + +-spec erlang:trace_pattern(MFA, MatchSpec) -> non_neg_integer() when + MFA :: trace_pattern_mfa(), + MatchSpec :: (MatchSpecList :: trace_match_spec()) + | boolean() + | restart + | pause. +trace_pattern(_MFA, _MatchSpec) -> + erlang:nif_error(undefined). + +-type trace_pattern_flag() :: + global | local | + meta | {meta, Pid :: pid()} | + call_count | + call_time. + +-spec erlang:trace_pattern(MFA, MatchSpec, FlagList) -> non_neg_integer() when + MFA :: trace_pattern_mfa(), + MatchSpec :: (MatchSpecList :: trace_match_spec()) + | boolean() + | restart + | pause, + FlagList :: [ trace_pattern_flag() ]. +trace_pattern(_MFA, _MatchSpec, _FlagList) -> + erlang:nif_error(undefined). + +-spec tuple_to_list(Tuple) -> [term()] when + Tuple :: tuple(). +tuple_to_list(_Tuple) -> + erlang:nif_error(undefined). + +-type cpu_topology() :: + [LevelEntry :: level_entry()] | undefined. +-type level_entry() :: + {LevelTag :: level_tag(), SubLevel :: sub_level()} + | {LevelTag :: level_tag(), + InfoList :: info_list(), + SubLevel :: sub_level()}. +-type level_tag() :: core | node | processor | thread. +-type sub_level() :: [LevelEntry :: level_entry()] + | (LogicalCpuId :: {logical, non_neg_integer()}). +-type info_list() :: []. + +%% Note: changing the ordering number of a clause will change the docs! +-spec erlang:system_info + (allocated_areas) -> [ tuple() ]; + (allocator) -> + {Allocator, Version, Features, Settings} when + Allocator :: undefined | glibc, + Version :: [non_neg_integer()], + Features :: [atom()], + Settings :: [{Subsystem :: atom(), + [{Parameter :: atom(), + Value :: term()}]}]; + (alloc_util_allocators) -> [Alloc] when + Alloc :: atom(); + ({allocator, Alloc}) -> [_] when %% More or less anything + Alloc :: atom(); + ({allocator_sizes, Alloc}) -> [_] when %% More or less anything + Alloc :: atom(); + (build_type) -> opt | debug | purify | quantify | purecov | + gcov | valgrind | gprof | lcnt; + (c_compiler_used) -> {atom(), term()}; + (check_io) -> [_]; + (compat_rel) -> integer(); + (cpu_topology) -> CpuTopology when + CpuTopology :: cpu_topology(); + ({cpu_topoology, defined | detected | used}) -> CpuTopology when + CpuTopology :: cpu_topology(); + (creation) -> integer(); + (debug_compiled) -> boolean(); + (dist) -> binary(); + (dist_ctrl) -> {Node :: node(), + ControllingEntity :: port() | pid()}; + (driver_version) -> string(); + (elib_malloc) -> false; + (dist_buf_busy_limit) -> non_neg_integer(); + (fullsweep_after) -> {fullsweep_after, non_neg_integer()}; + (garbage_collection) -> [{atom(), integer()}]; + (global_heaps_size) -> non_neg_integer(); + (heap_sizes) -> [non_neg_integer()]; + (heap_type) -> private | shared | hybrid; + (info) -> binary(); + (kernel_poll) -> boolean(); + (loaded) -> binary(); + (logical_processors | + logical_processors_available | + logical_processors_online) -> unknown | pos_integer(); + (machine) -> string(); + (min_heap_size) -> {min_heap_size, MinHeapSize :: pos_integer()}; + (min_bin_vheap_size) -> {min_bin_vheap_size, + MinBinVHeapSize :: pos_integer()}; + (modified_timing_level) -> integer() | undefined; + (multi_scheduling) -> disabled | blocked | enabled; + (multi_scheduling_blockers) -> [PID :: pid()]; + (otp_release) -> string(); + (process_count) -> pos_integer(); + (process_limit) -> pos_integer(); + (procs) -> binary(); + (scheduler_bind_type) -> spread | + processor_spread | + thread_spread | + thread_no_node_processor_spread | + no_node_processor_spread | + no_node_thread_spread | + no_spread | + unbound; + (scheduler_bindings) -> tuple(); + (scheduler_id) -> SchedulerId :: pos_integer(); + (schedulers | schedulers_online) -> pos_integer(); + (smp_support) -> boolean(); + (system_version) -> string(); + (system_architecture) -> string(); + (threads) -> boolean(); + (thread_pool_size) -> non_neg_integer(); + (trace_control_word) -> non_neg_integer(); + (update_cpu_info) -> changed | unchanged; + (version) -> string(); + (wordsize | {wordsize, internal} | {wordsize, external}) -> 4 | 8. +system_info(_Item) -> + erlang:nif_error(undefined). + +-spec erlang:universaltime_to_localtime(Universaltime) -> Localtime when + Localtime :: calendar:datetime(), + Universaltime :: calendar:datetime(). +universaltime_to_localtime(_Universaltime) -> + erlang:nif_error(undefined). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% End of native code BIFs +%%% Actual Erlang implementation of some BIF's follow +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%-------------------------------------------------------------------------- -spec apply(Fun, Args) -> term() when @@ -79,42 +1978,42 @@ apply(Mod, Name, Args) -> -spec spawn(Fun) -> pid() when Fun :: function(). -spawn(F) when is_function(F) -> - spawn(erlang, apply, [F, []]); -spawn({M,F}=MF) when is_atom(M), is_atom(F) -> - spawn(erlang, apply, [MF, []]); +spawn(F) when erlang:is_function(F) -> + erlang:spawn(erlang, apply, [F, []]); +spawn({M,F}=MF) when erlang:is_atom(M), erlang:is_atom(F) -> + erlang:spawn(erlang, apply, [MF, []]); spawn(F) -> erlang:error(badarg, [F]). -spec spawn(Node, Fun) -> pid() when Node :: node(), Fun :: function(). -spawn(N, F) when N =:= node() -> - spawn(F); -spawn(N, F) when is_function(F) -> - spawn(N, erlang, apply, [F, []]); -spawn(N, {M,F}=MF) when is_atom(M), is_atom(F) -> - spawn(N, erlang, apply, [MF, []]); +spawn(N, F) when N =:= erlang:node() -> + erlang:spawn(F); +spawn(N, F) when erlang:is_function(F) -> + erlang:spawn(N, erlang, apply, [F, []]); +spawn(N, {M,F}=MF) when erlang:is_atom(M), erlang:is_atom(F) -> + erlang:spawn(N, erlang, apply, [MF, []]); spawn(N, F) -> erlang:error(badarg, [N, F]). -spec spawn_link(Fun) -> pid() when Fun :: function(). -spawn_link(F) when is_function(F) -> - spawn_link(erlang, apply, [F, []]); -spawn_link({M,F}=MF) when is_atom(M), is_atom(F) -> - spawn_link(erlang, apply, [MF, []]); +spawn_link(F) when erlang:is_function(F) -> + erlang:spawn_link(erlang, apply, [F, []]); +spawn_link({M,F}=MF) when erlang:is_atom(M), erlang:is_atom(F) -> + erlang:spawn_link(erlang, apply, [MF, []]); spawn_link(F) -> erlang:error(badarg, [F]). -spec spawn_link(Node, Fun) -> pid() when Node :: node(), Fun :: function(). -spawn_link(N, F) when N =:= node() -> +spawn_link(N, F) when N =:= erlang:node() -> spawn_link(F); -spawn_link(N, F) when is_function(F) -> +spawn_link(N, F) when erlang:is_function(F) -> spawn_link(N, erlang, apply, [F, []]); -spawn_link(N, {M,F}=MF) when is_atom(M), is_atom(F) -> +spawn_link(N, {M,F}=MF) when erlang:is_atom(M), erlang:is_atom(F) -> spawn_link(N, erlang, apply, [MF, []]); spawn_link(N, F) -> erlang:error(badarg, [N, F]). @@ -123,7 +2022,7 @@ spawn_link(N, F) -> -spec spawn_monitor(Fun) -> {pid(), reference()} when Fun :: function(). -spawn_monitor(F) when is_function(F, 0) -> +spawn_monitor(F) when erlang:is_function(F, 0) -> erlang:spawn_opt({erlang,apply,[F,[]],[monitor]}); spawn_monitor(F) -> erlang:error(badarg, [F]). @@ -132,7 +2031,9 @@ spawn_monitor(F) -> Module :: module(), Function :: atom(), Args :: [term()]. -spawn_monitor(M, F, A) when is_atom(M), is_atom(F), is_list(A) -> +spawn_monitor(M, F, A) when erlang:is_atom(M), + erlang:is_atom(F), + erlang:is_list(A) -> erlang:spawn_opt({M,F,A,[monitor]}); spawn_monitor(M, F, A) -> erlang:error(badarg, [M,F,A]). @@ -145,9 +2046,9 @@ spawn_monitor(M, F, A) -> | {min_heap_size, Size :: non_neg_integer()} | {min_bin_vheap_size, VSize :: non_neg_integer()}, Level :: low | normal | high. -spawn_opt(F, O) when is_function(F) -> +spawn_opt(F, O) when erlang:is_function(F) -> spawn_opt(erlang, apply, [F, []], O); -spawn_opt({M,F}=MF, O) when is_atom(M), is_atom(F) -> +spawn_opt({M,F}=MF, O) when erlang:is_atom(M), erlang:is_atom(F) -> spawn_opt(erlang, apply, [MF, []], O); spawn_opt({M,F,A}, O) -> % For (undocumented) backward compatibility spawn_opt(M, F, A, O); @@ -163,11 +2064,11 @@ spawn_opt(F, O) -> | {min_heap_size, Size :: non_neg_integer()} | {min_bin_vheap_size, VSize :: non_neg_integer()}, Level :: low | normal | high. -spawn_opt(N, F, O) when N =:= node() -> +spawn_opt(N, F, O) when N =:= erlang:node() -> spawn_opt(F, O); -spawn_opt(N, F, O) when is_function(F) -> +spawn_opt(N, F, O) when erlang:is_function(F) -> spawn_opt(N, erlang, apply, [F, []], O); -spawn_opt(N, {M,F}=MF, O) when is_atom(M), is_atom(F) -> +spawn_opt(N, {M,F}=MF, O) when erlang:is_atom(M), erlang:is_atom(F) -> spawn_opt(N, erlang, apply, [MF, []], O); spawn_opt(N, F, O) -> erlang:error(badarg, [N, F, O]). @@ -179,9 +2080,14 @@ spawn_opt(N, F, O) -> Module :: module(), Function :: atom(), Args :: [term()]. -spawn(N,M,F,A) when N =:= node(), is_atom(M), is_atom(F), is_list(A) -> - spawn(M,F,A); -spawn(N,M,F,A) when is_atom(N), is_atom(M), is_atom(F) -> +spawn(N,M,F,A) when N =:= erlang:node(), + erlang:is_atom(M), + erlang:is_atom(F), + erlang:is_list(A) -> + erlang:spawn(M,F,A); +spawn(N,M,F,A) when erlang:is_atom(N), + erlang:is_atom(M), + erlang:is_atom(F) -> case is_well_formed_list(A) of true -> ok; @@ -189,9 +2095,9 @@ spawn(N,M,F,A) when is_atom(N), is_atom(M), is_atom(F) -> erlang:error(badarg, [N, M, F, A]) end, case catch gen_server:call({net_kernel,N}, - {spawn,M,F,A,group_leader()}, + {spawn,M,F,A,erlang:group_leader()}, infinity) of - Pid when is_pid(Pid) -> + Pid when erlang:is_pid(Pid) -> Pid; Error -> case remote_spawn_error(Error, {no_link, N, M, F, A, []}) of @@ -209,9 +2115,14 @@ spawn(N,M,F,A) -> Module :: module(), Function :: atom(), Args :: [term()]. -spawn_link(N,M,F,A) when N =:= node(), is_atom(M), is_atom(F), is_list(A) -> - spawn_link(M,F,A); -spawn_link(N,M,F,A) when is_atom(N), is_atom(M), is_atom(F) -> +spawn_link(N,M,F,A) when N =:= erlang:node(), + erlang:is_atom(M), + erlang:is_atom(F), + erlang:is_list(A) -> + erlang:spawn_link(M,F,A); +spawn_link(N,M,F,A) when erlang:is_atom(N), + erlang:is_atom(M), + erlang:is_atom(F) -> case is_well_formed_list(A) of true -> ok; @@ -219,9 +2130,9 @@ spawn_link(N,M,F,A) when is_atom(N), is_atom(M), is_atom(F) -> erlang:error(badarg, [N, M, F, A]) end, case catch gen_server:call({net_kernel,N}, - {spawn_link,M,F,A,group_leader()}, + {spawn_link,M,F,A,erlang:group_leader()}, infinity) of - Pid when is_pid(Pid) -> + Pid when erlang:is_pid(Pid) -> Pid; Error -> case remote_spawn_error(Error, {link, N, M, F, A, []}) of @@ -265,11 +2176,13 @@ spawn_opt(M, F, A, Opts) -> | {min_heap_size, Size :: non_neg_integer()} | {min_bin_vheap_size, VSize :: non_neg_integer()}, Level :: low | normal | high. -spawn_opt(N, M, F, A, O) when N =:= node(), - is_atom(M), is_atom(F), is_list(A), - is_list(O) -> +spawn_opt(N, M, F, A, O) when N =:= erlang:node(), + erlang:is_atom(M), erlang:is_atom(F), + erlang:is_list(A), erlang:is_list(O) -> spawn_opt(M, F, A, O); -spawn_opt(N, M, F, A, O) when is_atom(N), is_atom(M), is_atom(F) -> +spawn_opt(N, M, F, A, O) when erlang:is_atom(N), + erlang:is_atom(M), + erlang:is_atom(F) -> case {is_well_formed_list(A), is_well_formed_list(O)} of {true, true} -> ok; @@ -288,9 +2201,9 @@ spawn_opt(N, M, F, A, O) when is_atom(N), is_atom(M), is_atom(F) -> {no_link,[]}, O), case catch gen_server:call({net_kernel,N}, - {spawn_opt,M,F,A,NO,L,group_leader()}, + {spawn_opt,M,F,A,NO,L,erlang:group_leader()}, infinity) of - Pid when is_pid(Pid) -> + Pid when erlang:is_pid(Pid) -> Pid; Error -> case remote_spawn_error(Error, {L, N, M, F, A, NO}) of @@ -328,11 +2241,11 @@ is_well_formed_list(_) -> crasher(Node,Mod,Fun,Args,[],Reason) -> error_logger:warning_msg("** Can not start ~w:~w,~w on ~w **~n", [Mod,Fun,Args,Node]), - exit(Reason); + erlang:exit(Reason); crasher(Node,Mod,Fun,Args,Opts,Reason) -> error_logger:warning_msg("** Can not start ~w:~w,~w (~w) on ~w **~n", [Mod,Fun,Args,Opts,Node]), - exit(Reason). + erlang:exit(Reason). -spec erlang:yield() -> 'true'. yield() -> @@ -353,7 +2266,7 @@ disconnect_node(Node) -> Item :: arity | env | index | name | module | new_index | new_uniq | pid | type | uniq, Info :: term(). -fun_info(Fun) when is_function(Fun) -> +fun_info(Fun) when erlang:is_function(Fun) -> Keys = [type,env,arity,name,uniq,index,new_uniq,new_index,module,pid], fun_info_1(Keys, Fun, []). @@ -385,11 +2298,9 @@ send_nosuspend(Pid, Msg, Opts) -> _ -> false end. --spec erlang:localtime_to_universaltime({Date1, Time1}) -> {Date2, Time2} when - Date1 :: calendar:date(), - Date2 :: calendar:date(), - Time1 :: calendar:time(), - Time2 :: calendar:time(). +-spec erlang:localtime_to_universaltime(Localtime) -> Universaltime when + Localtime :: calendar:datetime(), + Universaltime :: calendar:datetime(). localtime_to_universaltime(Localtime) -> erlang:localtime_to_universaltime(Localtime, undefined). @@ -411,23 +2322,23 @@ suspend_process(P) -> -spec dlink(pid() | port()) -> 'true'. dlink(Pid) -> - case net_kernel:connect(node(Pid)) of - true -> link(Pid); - false -> erlang:dist_exit(self(), noconnection, Pid), true + case net_kernel:connect(erlang:node(Pid)) of + true -> erlang:link(Pid); + false -> erlang:dist_exit(erlang:self(), noconnection, Pid), true end. %% Can this ever happen? -spec dunlink(identifier()) -> 'true'. dunlink(Pid) -> - case net_kernel:connect(node(Pid)) of - true -> unlink(Pid); + case net_kernel:connect(erlang:node(Pid)) of + true -> erlang:unlink(Pid); false -> true end. dmonitor_node(Node, Flag, []) -> case net_kernel:connect(Node) of true -> erlang:monitor_node(Node, Flag, []); - false -> self() ! {nodedown, Node}, true + false -> erlang:self() ! {nodedown, Node}, true end; dmonitor_node(Node, Flag, Opts) -> @@ -435,31 +2346,31 @@ dmonitor_node(Node, Flag, Opts) -> true -> case net_kernel:passive_cnct(Node) of true -> erlang:monitor_node(Node, Flag, Opts); - false -> self() ! {nodedown, Node}, true + false -> erlang:self() ! {nodedown, Node}, true end; _ -> dmonitor_node(Node,Flag,[]) end. dgroup_leader(Leader, Pid) -> - case net_kernel:connect(node(Pid)) of - true -> group_leader(Leader, Pid); + case net_kernel:connect(erlang:node(Pid)) of + true -> erlang:group_leader(Leader, Pid); false -> true %% bad arg ? end. dexit(Pid, Reason) -> - case net_kernel:connect(node(Pid)) of - true -> exit(Pid, Reason); + case net_kernel:connect(erlang:node(Pid)) of + true -> erlang:exit(Pid, Reason); false -> true end. -dsend(Pid, Msg) when is_pid(Pid) -> - case net_kernel:connect(node(Pid)) of +dsend(Pid, Msg) when erlang:is_pid(Pid) -> + case net_kernel:connect(erlang:node(Pid)) of true -> erlang:send(Pid, Msg); false -> Msg end; -dsend(Port, Msg) when is_port(Port) -> - case net_kernel:connect(node(Port)) of +dsend(Port, Msg) when erlang:is_port(Port) -> + case net_kernel:connect(erlang:node(Port)) of true -> erlang:send(Port, Msg); false -> Msg end; @@ -470,13 +2381,13 @@ dsend({Name, Node}, Msg) -> ignored -> Msg % Not distributed. end. -dsend(Pid, Msg, Opts) when is_pid(Pid) -> - case net_kernel:connect(node(Pid)) of +dsend(Pid, Msg, Opts) when erlang:is_pid(Pid) -> + case net_kernel:connect(erlang:node(Pid)) of true -> erlang:send(Pid, Msg, Opts); false -> ok end; -dsend(Port, Msg, Opts) when is_port(Port) -> - case net_kernel:connect(node(Port)) of +dsend(Port, Msg, Opts) when erlang:is_port(Port) -> + case net_kernel:connect(erlang:node(Port)) of true -> erlang:send(Port, Msg, Opts); false -> ok end; @@ -493,15 +2404,17 @@ dmonitor_p(process, ProcSpec) -> %% 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) + {S,N} when erlang:is_atom(S), + erlang:is_atom(N), + N =/= erlang:node() -> N; + _ when erlang:is_pid(ProcSpec) -> erlang:node(ProcSpec) end, case net_kernel:connect(Node) of true -> erlang:monitor(process, ProcSpec); false -> - Ref = make_ref(), - self() ! {'DOWN', Ref, process, ProcSpec, noconnection}, + Ref = erlang:make_ref(), + erlang:self() ! {'DOWN', Ref, process, ProcSpec, noconnection}, Ref end. @@ -523,12 +2436,12 @@ delay_trap(Result, Timeout) -> receive after Timeout -> Result end. -spec erlang:set_cookie(Node, Cookie) -> true when Node :: node(), Cookie :: atom(). -set_cookie(Node, C) when Node =/= nonode@nohost, is_atom(Node) -> - case is_atom(C) of +set_cookie(Node, C) when Node =/= nonode@nohost, erlang:is_atom(Node) -> + case erlang:is_atom(C) of true -> auth:set_cookie(Node, C); false -> - error(badarg) + erlang:error(badarg) end. -spec erlang:get_cookie() -> Cookie | nocookie when @@ -542,7 +2455,8 @@ get_cookie() -> integer_to_list(I, 10) -> erlang:integer_to_list(I); integer_to_list(I, Base) - when is_integer(I), is_integer(Base), Base >= 2, Base =< 1+$Z-$A+10 -> + when erlang:is_integer(I), erlang:is_integer(Base), + Base >= 2, Base =< 1+$Z-$A+10 -> if I < 0 -> [$-|integer_to_list(-I, Base, [])]; true -> @@ -572,9 +2486,10 @@ integer_to_list(I0, Base, R0) -> list_to_integer(L, 10) -> erlang:list_to_integer(L); list_to_integer(L, Base) - when is_list(L), is_integer(Base), Base >= 2, Base =< 1+$Z-$A+10 -> + when erlang:is_list(L), erlang:is_integer(Base), + Base >= 2, Base =< 1+$Z-$A+10 -> case list_to_integer_sign(L, Base) of - I when is_integer(I) -> + I when erlang:is_integer(I) -> I; Fault -> erlang:error(Fault, [L,Base]) @@ -584,7 +2499,7 @@ list_to_integer(L, Base) -> list_to_integer_sign([$-|[_|_]=L], Base) -> case list_to_integer(L, Base, 0) of - I when is_integer(I) -> + I when erlang:is_integer(I) -> -I; I -> I @@ -597,13 +2512,13 @@ list_to_integer_sign(_, _) -> badarg. list_to_integer([D|L], Base, I) - when is_integer(D), D >= $0, D =< $9, D < Base+$0 -> + when erlang:is_integer(D), D >= $0, D =< $9, D < Base+$0 -> list_to_integer(L, Base, I*Base + D-$0); list_to_integer([D|L], Base, I) - when is_integer(D), D >= $A, D < Base+$A-10 -> + when erlang:is_integer(D), D >= $A, D < Base+$A-10 -> list_to_integer(L, Base, I*Base + D-$A+10); list_to_integer([D|L], Base, I) - when is_integer(D), D >= $a, D < Base+$a-10 -> + when erlang:is_integer(D), D >= $a, D < Base+$a-10 -> list_to_integer(L, Base, I*Base + D-$a+10); list_to_integer([], _, I) -> I; @@ -615,7 +2530,8 @@ list_to_integer(_, _, _) -> %% erlang:demonitor(Ref, [flush]) traps to %% erlang:flush_monitor_message(Ref, Res) when %% it needs to flush a monitor message. -flush_monitor_message(Ref, Res) when is_reference(Ref), is_atom(Res) -> +flush_monitor_message(Ref, Res) when erlang:is_reference(Ref), + erlang:is_atom(Res) -> receive {_, Ref, _, _, _} -> ok after 0 -> ok end, Res. @@ -641,7 +2557,7 @@ set_cpu_topology(CpuTopology) -> cput_e2i_clvl({logical, _}, _PLvl) -> #cpu.logical; cput_e2i_clvl([E | _], PLvl) -> - case element(1, E) of + case erlang:element(1, E) of node -> case PLvl of 0 -> #cpu.node; #cpu.processor -> #cpu.processor_node @@ -710,7 +2626,7 @@ cput_e2i({thread, TL}, Nid, PId, #cpu{thread = T0} = CPU, PLvl, #cpu.thread, cput_e2i(TL, Nid, PId, CPU#cpu{thread = T0+1}, #cpu.thread, Lvl, Res); cput_e2i({logical, ID}, _Nid, PId, #cpu{processor=P, core=C, thread=T} = CPU, PLvl, #cpu.logical, Res) - when PLvl < #cpu.logical, is_integer(ID), 0 =< ID, ID < 65536 -> + when PLvl < #cpu.logical, erlang:is_integer(ID), 0 =< ID, ID < 65536 -> [CPU#cpu{processor = case P of -1 -> PId+1; _ -> P end, core = case C of -1 -> 0; _ -> C end, thread = case T of -1 -> 0; _ -> T end, @@ -735,9 +2651,9 @@ cput_i2e([], _Frst, _Lvl, _TM) -> cput_i2e([#cpu{logical = LID}| _], _Frst, Lvl, _TM) when Lvl == #cpu.logical -> {logical, LID}; cput_i2e([#cpu{} = I | Is], Frst, Lvl, TM) -> - cput_i2e(element(Lvl, I), Frst, Is, [I], Lvl, TM). + cput_i2e(erlang:element(Lvl, I), Frst, Is, [I], Lvl, TM). -cput_i2e(V, Frst, [I | Is], SameV, Lvl, TM) when V =:= element(Lvl, I) -> +cput_i2e(V, Frst, [I | Is], SameV, Lvl, TM) when V =:= erlang:element(Lvl, I) -> cput_i2e(V, Frst, Is, [I | SameV], Lvl, TM); cput_i2e(-1, true, [], SameV, Lvl, TM) -> cput_i2e(rvrs(SameV), true, Lvl+1, TM); @@ -751,10 +2667,10 @@ cput_i2e(_V, _Frst, Is, SameV, Lvl, TM) -> [{cput_i2e_tag(Lvl, TM), cput_i2e(rvrs(SameV), true, Lvl+1, TM)} | cput_i2e(Is, false, Lvl, TM)]. -cput_i2e_tag_map() -> list_to_tuple([cpu | record_info(fields, cpu)]). +cput_i2e_tag_map() -> erlang:list_to_tuple([cpu | record_info(fields, cpu)]). cput_i2e_tag(Lvl, TM) -> - case element(Lvl, TM) of processor_node -> node; Other -> Other end. + case erlang:element(Lvl, TM) of processor_node -> node; Other -> Other end. rvrs([_] = L) -> L; rvrs(Xs) -> rvrs(Xs, []). @@ -811,7 +2727,9 @@ max(A, _) -> A. %% erts_memory() in $ERL_TOP/erts/emulator/beam/erl_alloc.c %% --type memory_type() :: 'total' | 'processes' | 'processes_used' | 'system' | 'atom' | 'atom_used' | 'binary' | 'code' | 'ets' | 'low' | 'maximum'. +-type memory_type() :: 'total' | 'processes' | 'processes_used' | 'system' + | 'atom' | 'atom_used' | 'binary' | 'code' | 'ets' + | 'low' | 'maximum'. -define(CARRIER_ALLOCS, [mseg_alloc, sbmbc_alloc, sbmbc_low_alloc]). -define(LOW_ALLOCS, [sbmbc_low_alloc, ll_low_alloc, std_low_alloc]). @@ -855,8 +2773,9 @@ memory() -> {ets, Mem#memory.ets} | Tail] end. --spec memory(memory_type()|[memory_type()]) -> non_neg_integer() | [{memory_type(), non_neg_integer()}]. -memory(Type) when is_atom(Type) -> +-spec erlang:memory(memory_type()) -> non_neg_integer(); + ([memory_type()]) -> [{memory_type(), non_neg_integer()}]. +memory(Type) when erlang:is_atom(Type) -> {AA, ALCU, ChkSup, BadArgZero} = need_mem_info(Type), case get_mem_data(ChkSup, ALCU, AA) of notsup -> @@ -868,7 +2787,7 @@ memory(Type) when is_atom(Type) -> _ -> Value end end; -memory(Types) when is_list(Types) -> +memory(Types) when erlang:is_list(Types) -> {AA, ALCU, ChkSup, BadArgZeroList} = need_mem_info_list(Types), case get_mem_data(ChkSup, ALCU, AA) of notsup -> @@ -1076,7 +2995,7 @@ au_mem_data(EMD, []) -> EMD. au_mem_data(Allocs) -> - Ref = make_ref(), + Ref = erlang:make_ref(), erlang:system_info({allocator_sizes, Ref, Allocs}), receive_emd(Ref). @@ -1162,11 +3081,11 @@ alloc_info(Allocs) -> alloc_sizes(Allocs) -> get_alloc_info(allocator_sizes, Allocs). -get_alloc_info(Type, AAtom) when is_atom(AAtom) -> +get_alloc_info(Type, AAtom) when erlang:is_atom(AAtom) -> [{AAtom, Result}] = get_alloc_info(Type, [AAtom]), Result; -get_alloc_info(Type, AList) when is_list(AList) -> - Ref = make_ref(), +get_alloc_info(Type, AList) when erlang:is_list(AList) -> + Ref = erlang:make_ref(), erlang:system_info({Type, Ref, AList}), receive_allocator(Ref, erlang:system_info(schedulers), -- cgit v1.2.3 From 2fc37e356b8c17064ad39d0418b62edd28675e19 Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Wed, 25 Jan 2012 17:05:15 +0100 Subject: Make erlang doc use specs from erlang.erl Reintroduced setelement in erlang.erl and erlang.xml Preloaded erlang.beam updated. --- erts/preloaded/src/erlang.erl | 369 +++++++++++++++++++++++------------------- 1 file changed, 206 insertions(+), 163 deletions(-) (limited to 'erts/preloaded/src/erlang.erl') diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index 7191713cf4..c64c2dbb4f 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -118,7 +118,7 @@ make_tuple/2, make_tuple/3, nodes/1, open_port/2, port_call/3, port_info/1, port_info/2, process_flag/2, process_info/2, send/2, send/3, seq_trace_info/1, - %setelement/3, %% Does not work (yet) + setelement/3, statistics/1, subtract/2, system_flag/2, term_to_binary/1, term_to_binary/2, tl/1, trace_pattern/2, trace_pattern/3, tuple_to_list/1, system_info/1, @@ -157,7 +157,7 @@ -type seq_trace_info_returns() :: { seq_trace_info(), non_neg_integer() | - boolean() | + boolean() | { non_neg_integer(), non_neg_integer() } } | []. @@ -175,91 +175,11 @@ -type raise_stacktrace() :: - [{atom(), atom(), arity() | [term()]} | + [{module(), atom(), arity() | [term()]} | {function(), [term()]}] | - [{atom(), atom(), arity() | [term()], [{atom(),term()}]} | + [{module(), atom(), arity() | [term()], [{atom(),term()}]} | {function(), [term()], [{atom(),term()}]}]. --type decode_packet_type() :: - 'raw' | 0..4 | 'asn1' | 'cdr' | 'sunrm' | 'fcgi' | 'tpkt' | - 'line' | 'http' | 'http_bin' | 'httph' | 'httph_bin'. --type http_packet() :: - http_request() | http_response() | http_header() | 'http_eoh' | http_error(). --type http_request() :: - {'http_request', http_method(), http_uri(), http_version()}. --type http_response() :: - {'http_response', http_version(), integer(), binary() | string()}. --type http_header() :: - {'http_header', integer(), http_field(), any(), binary() | string()}. --type http_error() :: - {'http_error', binary() | string()}. --type http_method() :: - 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | binary() | string(). --type http_uri() :: - '*' | - { 'http' | 'https', binary() | string(), non_neg_integer() | 'undefined', binary() | string()} | - {'scheme', binary() | string(), binary() | string()} | - {'abs_path', binary() | string()} | - binary() | - string(). --type http_version() :: - {non_neg_integer(), non_neg_integer()}. --type http_field() :: - 'Cache-Control' | - 'Connection' | - 'Date' | - 'Pragma' | - 'Transfer-Encoding' | - 'Upgrade' | - 'Via' | - 'Accept' | - 'Accept-Charset' | - 'Accept-Encoding' | - 'Accept-Language' | - 'Authorization' | - 'From' | - 'Host' | - 'If-Modified-Since' | - 'If-Match' | - 'If-None-Match' | - 'If-Range' | - 'If-Unmodified-Since' | - 'Max-Forwards' | - 'Proxy-Authorization' | - 'Range' | - 'Referer' | - 'User-Agent' | - 'Age' | - 'Location' | - 'Proxy-Authenticate' | - 'Public' | - 'Retry-After' | - 'Server' | - 'Vary' | - 'Warning' | - 'Www-Authenticate' | - 'Allow' | - 'Content-Base' | - 'Content-Encoding' | - 'Content-Language' | - 'Content-Length' | - 'Content-Location' | - 'Content-Md5' | - 'Content-Range' | - 'Content-Type' | - 'Etag' | - 'Expires' | - 'Last-Modified' | - 'Accept-Ranges' | - 'Set-Cookie' | - 'Set-Cookie2' | - 'X-Forwarded-For' | - 'Cookie' | - 'Keep-Alive' | - 'Proxy-Connection' | - binary() | - string(). - -type bitstring_list() :: maybe_improper_list(byte() | bitstring() | bitstring_list(), bitstring() | []). @@ -336,11 +256,11 @@ adler32_combine(_FirstAdler, _SecondAdler, _SecondSize) -> erlang:nif_error(undefined). % append_element/2 --spec erlang:append_element(Tuple, Term) -> ResTuple when - Tuple :: tuple(), - Term :: term(), - ResTuple :: tuple(). -append_element(_Tuple, _Term) -> +-spec erlang:append_element(Tuple1, Term) -> Tuple2 when + Tuple1 :: tuple(), + Tuple2 :: tuple(), + Term :: term(). +append_element(_Tuple1, _Term) -> erlang:nif_error(undefined). % atom_to_binary/2 @@ -359,7 +279,7 @@ atom_to_list(_Atom) -> % binary_part/2 -spec binary_part(Subject, PosLen) -> binary() when Subject :: binary(), - PosLen :: {non_neg_integer(), integer()}. + PosLen :: {Start :: non_neg_integer(), Length :: integer()}. binary_part(_Subject, _PosLen) -> erlang:nif_error(undefined). @@ -455,22 +375,22 @@ call_on_load_function(_P1) -> erlang:nif_error(undefined). % cancel_timer/1 --spec erlang:cancel_timer(TimerRef) -> Remains when +-spec erlang:cancel_timer(TimerRef) -> Time | false when TimerRef :: reference(), - Remains :: integer() | false. + Time :: non_neg_integer(). cancel_timer(_TimerRef) -> erlang:nif_error(undefined). % check_old_code/1 --spec erlang:check_old_code(Module) -> boolean() when - Module :: atom(). +-spec check_old_code(Module) -> boolean() when + Module :: module(). check_old_code(_Module) -> erlang:nif_error(undefined). % check_process_code/2 -spec check_process_code(Pid, Module) -> boolean() when Pid :: pid(), - Module :: atom(). + Module :: module(). check_process_code(_Pid, _Module) -> erlang:nif_error(undefined). @@ -502,16 +422,105 @@ date() -> erlang:nif_error(undefined). % decode_packet/3 --spec erlang:decode_packet(Type, Bin, Options) -> {ok, binary() | http_packet(), binary()} | {more, non_neg_integer() | undefined} | {error, term()} when - Type :: decode_packet_type(), +-spec erlang:decode_packet(Type, Bin, Options) -> + {ok, Packet, Rest} | + {more, Length} | + {error, Reason} when + Type :: 'raw' | 0 | 1 | 2 | 4 | 'asn1' | 'cdr' | 'sunrm' | 'fcgi' + | 'tpkt' | 'line' | 'http' | 'http_bin' | 'httph' | 'httph_bin', Bin :: binary(), - Options :: [{packet_size, non_neg_integer()} | {line_length, non_neg_integer()}]. + Options :: [Opt], + Opt :: {packet_size, non_neg_integer()} + | {line_length, non_neg_integer()}, + Packet :: binary() | HttpPacket, + Rest :: binary(), + Length :: non_neg_integer() | undefined, + Reason :: term(), + HttpPacket :: HttpRequest + | HttpResponse + | HttpHeader + | 'http_eoh' + | HttpError, + HttpRequest :: {'http_request', HttpMethod, HttpUri, HttpVersion}, + HttpResponse :: {'http_response', HttpVersion, integer(), HttpString}, + HttpHeader :: {'http_header', + integer(), + HttpField, + Reserved :: term(), + Value :: HttpString}, + HttpError :: {'http_error', HttpString}, + HttpMethod :: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' + | 'TRACE' | HttpString, + HttpUri :: '*' + | { 'absoluteURI', + 'http' | 'https', + Host :: HttpString, + Port :: inet:port_number() | 'undefined', + Path :: HttpString} + | {'scheme', Scheme :: HttpString, HttpString} + | {'abs_path', HttpString} + | HttpString, + HttpVersion :: {Major :: non_neg_integer(), Minor :: non_neg_integer()}, + HttpField :: 'Cache-Control' + | 'Connection' + | 'Date' + | 'Pragma' + | 'Transfer-Encoding' + | 'Upgrade' + | 'Via' + | 'Accept' + | 'Accept-Charset' + | 'Accept-Encoding' + | 'Accept-Language' + | 'Authorization' + | 'From' + | 'Host' + | 'If-Modified-Since' + | 'If-Match' + | 'If-None-Match' + | 'If-Range' + | 'If-Unmodified-Since' + | 'Max-Forwards' + | 'Proxy-Authorization' + | 'Range' + | 'Referer' + | 'User-Agent' + | 'Age' + | 'Location' + | 'Proxy-Authenticate' + | 'Public' + | 'Retry-After' + | 'Server' + | 'Vary' + | 'Warning' + |'Www-Authenticate' + | 'Allow' + | 'Content-Base' + | 'Content-Encoding' + | 'Content-Language' + | 'Content-Length' + | 'Content-Location' + | 'Content-Md5' + | 'Content-Range' + | 'Content-Type' + | 'Etag' + | 'Expires' + | 'Last-Modified' + | 'Accept-Ranges' + | 'Set-Cookie' + | 'Set-Cookie2' + | 'X-Forwarded-For' + | 'Cookie' + | 'Keep-Alive' + | 'Proxy-Connection' + | HttpString, + HttpString :: string() | binary(). decode_packet(_Type, _Bin, _Options) -> erlang:nif_error(undefined). % delete_module/1 -spec delete_module(Module) -> true | undefined when - Module :: atom(). + Module :: module(). delete_module(_Module) -> erlang:nif_error(undefined). @@ -524,7 +533,8 @@ demonitor(_MonitorRef) -> % demonitor/2 -spec demonitor(MonitorRef, OptionList) -> boolean() when MonitorRef :: reference(), - OptionList :: manual. + OptionList :: [Option], + Option :: flush | info. demonitor(_MonitorRef, _OptionList) -> erlang:nif_error(undefined). @@ -554,31 +564,34 @@ dist_exit(_P1, _P2, _P3) -> erlang:nif_error(undefined). % erase/0 --spec erase() -> [{term(), term()}]. +-spec erase() -> [{Key, Val}] when + Key :: term(), + Val :: term(). erase() -> erlang:nif_error(undefined). % erase/1 --spec erase(Key) -> undefined | term() when - Key :: term(). +-spec erase(Key) -> Val | undefined when + Key :: term(), + Val :: term(). erase(_Key) -> erlang:nif_error(undefined). % error/1 --spec error(Reason) -> none() when +-spec error(Reason) -> no_return() when Reason :: term(). error(_Reason) -> erlang:nif_error(undefined). % error/2 --spec error(Reason, Args) -> none() when +-spec error(Reason, Args) -> no_return() when Reason :: term(), Args :: [term()]. error(_Reason, _Args) -> erlang:nif_error(undefined). % exit/1 --spec exit(Reason) -> none() when +-spec exit(Reason) -> no_return() when Reason :: term(). exit(_Reason) -> erlang:nif_error(undefined). @@ -599,7 +612,7 @@ external_size(_Term) -> % external_size/2 -spec erlang:external_size(Term, Options) -> non_neg_integer() when Term :: term(), - Options :: [{minor_version, non_neg_integer()}]. + Options :: [{minor_version, Version :: non_neg_integer()}]. external_size(_Term, _Options) -> erlang:nif_error(undefined). @@ -623,9 +636,10 @@ float_to_list(_Float) -> erlang:nif_error(undefined). % fun_info/2 --spec erlang:fun_info(Fun, Item) -> {fun_info_item(), term()} when +-spec erlang:fun_info(Fun, Item) -> {Item, Info} when Fun :: function(), - Item :: fun_info_item(). + Item :: fun_info_item(), + Info :: term(). fun_info(_Fun, _Item) -> erlang:nif_error(undefined). @@ -637,7 +651,7 @@ fun_to_list(_Fun) -> % function_exported/3 -spec erlang:function_exported(Module, Function, Arity) -> boolean() when - Module :: atom(), + Module :: module(), Function :: atom(), Arity :: arity(). function_exported(_Module, _Function, _Arity) -> @@ -660,19 +674,23 @@ garbage_collect_message_area() -> erlang:nif_error(undefined). % get/0 --spec get() -> [{term(), term()}]. +-spec get() -> [{Key, Val}] when + Key :: term(), + Val :: term(). get() -> erlang:nif_error(undefined). % get/1 --spec get(Key) -> term() when - Key :: term(). +-spec get(Key) -> Val | undefined when + Key :: term(), + Val :: term(). get(_Key) -> erlang:nif_error(undefined). % get_keys/1 --spec get_keys(Val) -> [term()] when - Val :: term(). +-spec get_keys(Val) -> [Key] when + Val :: term(), + Key :: term(). get_keys(_Val) -> erlang:nif_error(undefined). @@ -700,26 +718,26 @@ group_leader(_GroupLeader, _Pid) -> erlang:nif_error(undefined). % halt/0 --spec halt() -> none(). +-spec halt() -> no_return(). halt() -> erlang:nif_error(undefined). % halt/1 --spec halt(Status) -> none() when - Status :: term(). +-spec halt(Status) -> no_return() when + Status :: non_neg_integer() | string(). halt(_Status) -> erlang:nif_error(undefined). % hash/2 --spec erlang:hash(Term, Range) -> integer() when +-spec erlang:hash(Term, Range) -> pos_integer() when Term :: term(), - Range :: integer(). + Range :: pos_integer(). hash(_Term, _Range) -> erlang:nif_error(undefined). % hibernate/3 -spec erlang:hibernate(Module, Function, Args) -> none() when - Module :: atom(), + Module :: module(), Function :: atom(), Args :: [term()]. hibernate(_Module, _Function, _Args) -> @@ -750,7 +768,7 @@ is_alive() -> % is_builtin/3 -spec erlang:is_builtin(Module, Function, Arity) -> boolean() when - Module :: atom(), + Module :: module(), Function :: atom(), Arity :: arity(). is_builtin(_Module, _Function, _Arity) -> @@ -764,7 +782,7 @@ is_process_alive(_Pid) -> % length/1 -spec length(List) -> non_neg_integer() when - List :: list(). + List :: [term()]. length(_List) -> erlang:nif_error(undefined). @@ -824,12 +842,13 @@ list_to_pid(_String) -> % list_to_tuple/1 -spec list_to_tuple(List) -> tuple() when - List :: list(). + List :: [term()]. list_to_tuple(_List) -> erlang:nif_error(undefined). % loaded/0 --spec erlang:loaded() -> [atom()]. +-spec erlang:loaded() -> [Module] when + Module :: module(). loaded() -> erlang:nif_error(undefined). @@ -846,7 +865,7 @@ make_ref() -> % match_spec_test/3 -spec erlang:match_spec_test(P1, P2, P3) -> TestResult when - P1 :: list() | tuple(), + P1 :: [term()] | tuple(), P2 :: term(), P3 :: table | trace, TestResult :: {ok, term(), [return_trace], [ {error | warning, string()} ]} | {error, [ {error | warning, string()} ]}. @@ -855,7 +874,7 @@ match_spec_test(_P1, _P2, _P3) -> % md5/1 -spec erlang:md5(Data) -> Digest when - Data :: iolist() | binary(), + Data :: iodata(), Digest :: binary(). md5(_Data) -> erlang:nif_error(undefined). @@ -876,21 +895,23 @@ md5_init() -> % md5_update/2 -spec erlang:md5_update(Context, Data) -> NewContext when Context :: binary(), - Data :: iolist() | binary(), + Data :: iodata(), NewContext :: binary(). md5_update(_Context, _Data) -> erlang:nif_error(undefined). % module_loaded/1 -spec module_loaded(Module) -> boolean() when - Module :: atom(). + Module :: module(). module_loaded(_Module) -> erlang:nif_error(undefined). % monitor/2 -spec monitor(Type, Item) -> MonitorRef when Type :: process, - Item :: pid() | atom() | {atom(), node()}, + Item :: pid() | Module | {Module, Node}, + Module :: module(), + Node :: node(), MonitorRef :: reference(). monitor(_Type, _Item) -> erlang:nif_error(undefined). @@ -906,20 +927,21 @@ monitor_node(_Node, _Flag) -> -spec erlang:monitor_node(Node, Flag, Options) -> true when Node :: node(), Flag :: boolean(), - Options :: [allow_passive_connect]. + Options :: [Option], + Option :: allow_passive_connect. monitor_node(_Node, _Flag, _Options) -> erlang:nif_error(undefined). % nif_error/1 --spec erlang:nif_error(Reason) -> none() when +-spec erlang:nif_error(Reason) -> no_return() when Reason :: term(). nif_error(_Reason) -> erlang:nif_error(undefined). % nif_error/2 --spec erlang:nif_error(Reason, Args) -> none() when +-spec erlang:nif_error(Reason, Args) -> no_return() when Reason :: term(), - Args :: list(). + Args :: [term()]. nif_error(_Reason, _Args) -> erlang:nif_error(undefined). @@ -938,7 +960,7 @@ node(_Arg) -> % now/0 -spec now() -> Timestamp when - Timestamp :: {non_neg_integer(),non_neg_integer(),non_neg_integer()}. + Timestamp :: timestamp(). now() -> erlang:nif_error(undefined). @@ -988,7 +1010,8 @@ port_command(_Port, _Data) -> -spec port_command(Port, Data, OptionList) -> boolean() when Port :: port() | atom(), Data :: iodata(), - OptionList :: [force | nosuspend]. + OptionList :: [Option], + Option :: force | nosuspend. port_command(_Port, _Data, _OptionList) -> erlang:nif_error(undefined). @@ -1039,7 +1062,7 @@ posixtime_to_universaltime(_P1) -> erlang:nif_error(undefined). % pre_loaded/0 --spec pre_loaded() -> [atom()]. +-spec pre_loaded() -> [module()]. pre_loaded() -> erlang:nif_error(undefined). @@ -1062,7 +1085,8 @@ process_flag(_Pid, _Flag, _Value) -> % process_info/1 -spec process_info(Pid) -> Info when Pid :: pid(), - Info :: [process_info_result_item()]. + Info :: [InfoTuple], + InfoTuple :: process_info_result_item(). process_info(_Pid) -> erlang:nif_error(undefined). @@ -1085,7 +1109,7 @@ put(_Key, _Val) -> erlang:nif_error(undefined). % raise/3 --spec erlang:raise(Class, Reason, Stacktrace) -> none() when +-spec erlang:raise(Class, Reason, Stacktrace) -> no_return() when Class :: error | exit | throw, Reason :: term(), Stacktrace :: raise_stacktrace(). @@ -1112,7 +1136,8 @@ register(_RegName, _PidOrPort) -> erlang:nif_error(undefined). % registered/0 --spec registered() -> [atom()]. +-spec registered() -> [RegName] when + RegName :: atom(). registered() -> erlang:nif_error(undefined). @@ -1185,7 +1210,7 @@ size(_Item) -> % spawn/3 -spec spawn(Module, Function, Args) -> pid() when - Module :: atom(), + Module :: module(), Function :: atom(), Args :: [term()]. spawn(_Module, _Function, _Args) -> @@ -1193,7 +1218,7 @@ spawn(_Module, _Function, _Args) -> % spawn_link/3 -spec spawn_link(Module, Function, Args) -> pid() when - Module :: atom(), + Module :: module(), Function :: atom(), Args :: [term()]. spawn_link(_Module, _Function, _Args) -> @@ -1218,20 +1243,25 @@ start_timer(_Time, _Dest, _Msg) -> % suspend_process/2 -spec erlang:suspend_process(Suspendee, OptList) -> boolean() when Suspendee :: pid(), - OptList :: [unless_suspending | asynchronous]. + OptList :: [Opt], + Opt :: unless_suspending | asynchronous. suspend_process(_Suspendee, _OptList) -> erlang:nif_error(undefined). % system_monitor/0 -spec erlang:system_monitor() -> MonSettings when - MonSettings :: undefined | { pid(), [ system_monitor_option() ] }. + MonSettings :: undefined | { MonitorPid, Options }, + MonitorPid :: pid(), + Options :: [ system_monitor_option() ]. system_monitor() -> erlang:nif_error(undefined). % system_monitor/1 -spec erlang:system_monitor(Arg) -> MonSettings when - Arg :: undefined | { pid(), [ system_monitor_option() ] }, - MonSettings :: undefined | { pid(), [ system_monitor_option() ] }. + Arg :: undefined | { MonitorPid, Options }, + MonSettings :: undefined | { MonitorPid, Options }, + MonitorPid :: pid(), + Options :: [ system_monitor_option() ]. system_monitor(_Arg) -> erlang:nif_error(undefined). @@ -1239,26 +1269,30 @@ system_monitor(_Arg) -> -spec erlang:system_monitor(MonitorPid, Options) -> MonSettings when MonitorPid :: pid(), Options :: [ system_monitor_option() ], - MonSettings :: undefined | { pid(), [ system_monitor_option() ] }. + MonSettings :: undefined | { OldMonitorPid, OldOptions }, + OldMonitorPid :: pid(), + OldOptions :: [ system_monitor_option() ]. system_monitor(_MonitorPid, _Options) -> erlang:nif_error(undefined). % system_profile/0 -spec erlang:system_profile() -> ProfilerSettings when - ProfilerSettings :: undefined | { pid() | port(), [ system_profile_option() ]}. + ProfilerSettings :: undefined | { ProfilerPid, Options}, + ProfilerPid :: pid() | port(), + Options :: [ system_profile_option() ]. system_profile() -> erlang:nif_error(undefined). % system_profile/2 -spec erlang:system_profile(ProfilerPid, Options) -> ProfilerSettings when - ProfilerPid :: pid() | port() | undefined, + ProfilerPid :: pid() | port(), Options :: [ system_profile_option() ], ProfilerSettings :: undefined | { pid() | port(), [ system_profile_option() ]}. system_profile(_ProfilerPid, _Options) -> erlang:nif_error(undefined). % throw/1 --spec throw(Any) -> none() when +-spec throw(Any) -> no_return() when Any :: term(). throw(_Any) -> erlang:nif_error(undefined). @@ -1286,7 +1320,10 @@ trace_delivered(_Tracee) -> % trace_info/2 -spec erlang:trace_info(PidOrFunc, Item) -> Res when - PidOrFunc :: pid() | new | mfa() | on_load, + PidOrFunc :: pid() | new | {Module, Function, Arity} | on_load, + Module :: module(), + Function :: atom(), + Arity :: arity(), Item :: flags | tracer | traced | match_spec | meta | meta_match_spec | call_count | call_time | all, Res :: trace_info_return(). trace_info(_PidOrFunc, _Item) -> @@ -1351,7 +1388,7 @@ abs(_Number) -> %% Not documented -spec erlang:append(List,Tail) -> maybe_improper_list() when - List :: list(), + List :: [term()], Tail :: term(). append(_List,_Tail) -> erlang:nif_error(undefined). @@ -1682,7 +1719,11 @@ process_flag(_Flag, _Value) -> {trap_exit, Boolean :: boolean()}. -type stack_item() :: - {atom(), atom(), arity() | [term()], [{file, string()} | {line, integer()}]}. + {Module :: module(), + Function :: atom(), + Arity :: arity() | (Args :: [term()]), + Location :: [{file, Filename :: string()} | + {line, Line :: integer()}]}. -spec process_info(Pid, Item) -> InfoTuple | [] | undefined when @@ -1722,13 +1763,13 @@ send(_Dest,_Msg,_Options) -> seq_trace_info(_What) -> erlang:nif_error(undefined). -%% -spec setelement(Index, Tuple1, Value) -> Tuple2 when -%% Index :: pos_integer(), -%% Tuple1 :: tuple(), -%% Tuple2 :: tuple(), -%% Value :: term(). -%% setelement(_Index, _Tuple1, _Value) -> -%% erlang:nif_error(undefined). +-spec setelement(Index, Tuple1, Value) -> Tuple2 when + Index :: pos_integer(), + Tuple1 :: tuple(), + Tuple2 :: tuple(), + Value :: term(). +setelement(_Index, _Tuple1, _Value) -> + erlang:nif_error(undefined). -spec statistics(context_switches) -> {ContextSwitches,0} when ContextSwitches :: non_neg_integer(); @@ -2748,7 +2789,9 @@ max(A, _) -> A. low = 0, maximum = 0}). --spec memory() -> [{memory_type(), non_neg_integer()}]. +-spec memory() -> [{Type, Size}] when + Type :: memory_type(), + Size :: non_neg_integer(). memory() -> case aa_mem_data(au_mem_data(?ALL_NEEDED_ALLOCS)) of notsup -> @@ -2773,8 +2816,8 @@ memory() -> {ets, Mem#memory.ets} | Tail] end. --spec erlang:memory(memory_type()) -> non_neg_integer(); - ([memory_type()]) -> [{memory_type(), non_neg_integer()}]. +-spec erlang:memory(Type :: memory_type()) -> non_neg_integer(); + (TypeList :: [memory_type()]) -> [{memory_type(), non_neg_integer()}]. memory(Type) when erlang:is_atom(Type) -> {AA, ALCU, ChkSup, BadArgZero} = need_mem_info(Type), case get_mem_data(ChkSup, ALCU, AA) of -- cgit v1.2.3 From bd941f5020cd50b7532b55454795c2985c372e64 Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Fri, 27 Jan 2012 12:06:14 +0100 Subject: Correct dializer errors in erlang.erl and others New errors found when adding specs to erlang.erl and removing them from erl_bif_types are examined and corrected. Some errors was due to faulty specs, while others were actual errors in the code using BIF's. --- erts/preloaded/src/erlang.erl | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) (limited to 'erts/preloaded/src/erlang.erl') diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index c64c2dbb4f..b1b2156ad5 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -92,7 +92,8 @@ -export([list_to_integer/1, list_to_pid/1, list_to_tuple/1, loaded/0]). -export([localtime/0, make_ref/0, match_spec_test/3, md5/1, md5_final/1]). -export([md5_init/0, md5_update/2, module_loaded/1, monitor/2]). --export([monitor_node/2, monitor_node/3, nif_error/1, nif_error/2]). +-export([monitor_node/2, monitor_node/3, nif_error/1, nif_error/2 +]). -export([node/0, node/1, now/0, phash/2, phash2/1, phash2/2]). -export([pid_to_list/1, port_close/1, port_command/2, port_command/3]). -export([port_connect/2, port_control/3, port_get_data/1]). @@ -118,7 +119,7 @@ make_tuple/2, make_tuple/3, nodes/1, open_port/2, port_call/3, port_info/1, port_info/2, process_flag/2, process_info/2, send/2, send/3, seq_trace_info/1, - setelement/3, + setelement/3, spawn_opt/1, statistics/1, subtract/2, system_flag/2, term_to_binary/1, term_to_binary/2, tl/1, trace_pattern/2, trace_pattern/3, tuple_to_list/1, system_info/1, @@ -598,7 +599,7 @@ exit(_Reason) -> % exit/2 -spec exit(Pid, Reason) -> true when - Pid :: pid(), + Pid :: pid() | port(), Reason :: term(). exit(_Pid, _Reason) -> erlang:nif_error(undefined). @@ -736,7 +737,7 @@ hash(_Term, _Range) -> erlang:nif_error(undefined). % hibernate/3 --spec erlang:hibernate(Module, Function, Args) -> none() when +-spec erlang:hibernate(Module, Function, Args) -> no_return() when Module :: module(), Function :: atom(), Args :: [term()]. @@ -1085,7 +1086,7 @@ process_flag(_Pid, _Flag, _Value) -> % process_info/1 -spec process_info(Pid) -> Info when Pid :: pid(), - Info :: [InfoTuple], + Info :: [InfoTuple] | undefined, InfoTuple :: process_info_result_item(). process_info(_Pid) -> erlang:nif_error(undefined). @@ -1285,7 +1286,7 @@ system_profile() -> % system_profile/2 -spec erlang:system_profile(ProfilerPid, Options) -> ProfilerSettings when - ProfilerPid :: pid() | port(), + ProfilerPid :: pid() | port() | undefined, Options :: [ system_profile_option() ], ProfilerSettings :: undefined | { pid() | port(), [ system_profile_option() ]}. system_profile(_ProfilerPid, _Options) -> @@ -1501,7 +1502,7 @@ is_tuple(_Term) -> -spec load_module(Module, Binary) -> {module, Module} | {error, Reason} when Module :: module(), Binary :: binary(), - Reason :: badfile | not_purged. + Reason :: badfile | not_purged | on_load. load_module(_Module,_Binary) -> erlang:nif_error(undefined). @@ -1635,7 +1636,11 @@ port_info(_Result, _Item) -> OldN :: 0..10000; (sensitive, Boolean) -> OldBoolean when Boolean :: boolean(), - OldBoolean :: boolean(). + OldBoolean :: boolean(); + %% Deliberately not documented. + ({monitor_nodes, term()}, term()) -> term(); + (monitor_nodes, term()) -> term(). + process_flag(_Flag, _Value) -> erlang:nif_error(undefined). @@ -1771,6 +1776,19 @@ seq_trace_info(_What) -> setelement(_Index, _Tuple1, _Value) -> erlang:nif_error(undefined). +-spec spawn_opt({Module, Function, Args, Options}) -> pid() | {pid(), reference()} when + Module :: module(), + Function :: atom(), + Args :: [term()], + Options :: [Option], + Option :: link | monitor | {priority, Level} + | {fullsweep_after, Number :: non_neg_integer()} + | {min_heap_size, Size :: non_neg_integer()} + | {min_bin_vheap_size, VSize :: non_neg_integer()}, + Level :: low | normal | high. +spawn_opt(_Tuple) -> + erlang:nif_error(undefined). + -spec statistics(context_switches) -> {ContextSwitches,0} when ContextSwitches :: non_neg_integer(); (exact_reductions) -> {Total_Exact_Reductions, @@ -1841,7 +1859,12 @@ subtract(_,_) -> OldSchedulersOnline :: pos_integer(); (trace_control_word, TCW) -> OldTCW when TCW :: non_neg_integer(), - OldTCW :: non_neg_integer(). + OldTCW :: non_neg_integer(); + %% These are deliberately not documented + (internal_cpu_topology, term()) -> term(); + (sequential_tracer, pid() | port() | false) -> pid() | port() | false; + (1,0) -> true. + system_flag(_Flag, _Value) -> erlang:nif_error(undefined). @@ -1866,7 +1889,7 @@ tl(_List) -> -type trace_pattern_mfa() :: {atom(),atom(),arity() | '_'} | on_load. -type trace_match_spec() :: - [{[term()],[term()],[term()]}]. + [{[term()] | '_' ,[term()],[term()]}]. -spec erlang:trace_pattern(MFA, MatchSpec) -> non_neg_integer() when MFA :: trace_pattern_mfa(), -- cgit v1.2.3 From 9d870a01dd2fc331b987905b981c52f57a44669f Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Wed, 1 Feb 2012 16:34:08 +0100 Subject: Reintroduce sensitive BIFs in erl_bif_types This involves exception BIF's, guar BIF's and some other complicated BIF's Also some minor corrections to documentation and specs in erlang.erl Added comment for each spec in erlang.erl shadowed by erl_bif_types. Dialyzer test should now run well except for one or two cases. --- erts/preloaded/src/erlang.erl | 56 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 5 deletions(-) (limited to 'erts/preloaded/src/erlang.erl') diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index b1b2156ad5..65ebe83c3a 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -117,7 +117,7 @@ is_record/3, is_reference/1, is_tuple/1, load_module/2, load_nif/2, localtime_to_universaltime/2, make_fun/3, make_tuple/2, make_tuple/3, nodes/1, open_port/2, - port_call/3, port_info/1, port_info/2, process_flag/2, + port_call/2, port_call/3, port_info/1, port_info/2, process_flag/2, process_info/2, send/2, send/3, seq_trace_info/1, setelement/3, spawn_opt/1, statistics/1, subtract/2, system_flag/2, @@ -579,12 +579,14 @@ erase(_Key) -> erlang:nif_error(undefined). % error/1 +%% Shadowed by erl_bif_types: erlang:error/1 -spec error(Reason) -> no_return() when Reason :: term(). error(_Reason) -> erlang:nif_error(undefined). % error/2 +%% Shadowed by erl_bif_types: erlang:error/2 -spec error(Reason, Args) -> no_return() when Reason :: term(), Args :: [term()]. @@ -592,6 +594,7 @@ error(_Reason, _Args) -> erlang:nif_error(undefined). % exit/1 +%% Shadowed by erl_bif_types: erlang:exit/1 -spec exit(Reason) -> no_return() when Reason :: term(). exit(_Reason) -> @@ -719,11 +722,13 @@ group_leader(_GroupLeader, _Pid) -> erlang:nif_error(undefined). % halt/0 +%% Shadowed by erl_bif_types: erlang:halt/0 -spec halt() -> no_return(). halt() -> erlang:nif_error(undefined). % halt/1 +%% Shadowed by erl_bif_types: erlang:halt/1 -spec halt(Status) -> no_return() when Status :: non_neg_integer() | string(). halt(_Status) -> @@ -934,12 +939,14 @@ monitor_node(_Node, _Flag, _Options) -> erlang:nif_error(undefined). % nif_error/1 +%% Shadowed by erl_bif_types: erlang:nif_error/1 -spec erlang:nif_error(Reason) -> no_return() when Reason :: term(). nif_error(_Reason) -> erlang:nif_error(undefined). % nif_error/2 +%% Shadowed by erl_bif_types: erlang:nif_error/2 -spec erlang:nif_error(Reason, Args) -> no_return() when Reason :: term(), Args :: [term()]. @@ -1293,6 +1300,7 @@ system_profile(_ProfilerPid, _Options) -> erlang:nif_error(undefined). % throw/1 +%% Shadowed by erl_bif_types: erlang:throw/1 -spec throw(Any) -> no_return() when Any :: term(). throw(_Any) -> @@ -1380,6 +1388,7 @@ whereis(_RegName) -> %% types and specs +%% Shadowed by erl_bif_types: erlang:abs/1 -spec abs(Float) -> float() when Float :: float(); (Int) -> non_neg_integer() when @@ -1388,12 +1397,14 @@ abs(_Number) -> erlang:nif_error(undefined). %% Not documented +%% Shadowed by erl_bif_types: erlang:append/2 -spec erlang:append(List,Tail) -> maybe_improper_list() when List :: [term()], Tail :: term(). append(_List,_Tail) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:element/2 -spec element(N, Tuple) -> term() when N :: pos_integer(), Tuple :: tuple(). @@ -1408,6 +1419,7 @@ element(_N, _Tuple) -> get_module_info(_Module, _Item) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:hd/1 -spec hd(List) -> term() when List :: [term(), ...]. hd(_List) -> @@ -1415,73 +1427,87 @@ hd(_List) -> %% erlang:info/1 no longer exists! +%% Shadowed by erl_bif_types: erlang:is_atom/1 -spec is_atom(Term) -> boolean() when Term :: term(). is_atom(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_binary/1 -spec is_binary(Term) -> boolean() when Term :: term(). is_binary(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_bitstring/1 -spec is_bitstring(Term) -> boolean() when Term :: term(). is_bitstring(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_boolean/1 -spec is_boolean(Term) -> boolean() when Term :: term(). is_boolean(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_float/1 -spec is_float(Term) -> boolean() when Term :: term(). is_float(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_function/1 -spec is_function(Term) -> boolean() when Term :: term(). is_function(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_function/2 -spec is_function(Term, Arity) -> boolean() when Term :: term(), Arity :: arity(). is_function(_Term, _Arity) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_integer/1 -spec is_integer(Term) -> boolean() when Term :: term(). is_integer(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_list/1 -spec is_list(Term) -> boolean() when Term :: term(). is_list(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_number/1 -spec is_number(Term) -> boolean() when Term :: term(). is_number(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_pid/1 -spec is_pid(Term) -> boolean() when Term :: term(). is_pid(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_port/1 -spec is_port(Term) -> boolean() when Term :: term(). is_port(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_record/2 -spec is_record(Term,RecordTag) -> boolean() when Term :: term(), RecordTag :: atom(). is_record(_Term,_RecordTag) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_record/3 -spec is_record(Term,RecordTag,Size) -> boolean() when Term :: term(), RecordTag :: atom(), @@ -1489,11 +1515,13 @@ is_record(_Term,_RecordTag) -> is_record(_Term,_RecordTag,_Size) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_reference/1 -spec is_reference(Term) -> boolean() when Term :: term(). is_reference(_Term) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:is_tuple/1 -spec is_tuple(Term) -> boolean() when Term :: term(). is_tuple(_Term) -> @@ -1531,12 +1559,14 @@ localtime_to_universaltime(_Localtime, _IsDst) -> make_fun(_Module,_Function, _Arity) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:make_tuple/2 -spec erlang:make_tuple(Arity, InitialValue) -> tuple() when Arity :: arity(), InitialValue :: term(). make_tuple(_Arity,_InitialValue) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:make_tuple/3 -spec erlang:make_tuple(Arity, DefaultValue, InitList) -> tuple() when Arity :: arity(), DefaultValue :: term(), @@ -1575,6 +1605,14 @@ nodes(_Arg) -> open_port(_PortName,_PortSettings) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:port_call/2 +-spec erlang:port_call(Port, Data) -> term() when + Port :: port() | atom(), + Data :: term(). +port_call(_Port, _Data) -> + erlang:nif_error(undefined). + +%% Shadowed by erl_bif_types: erlang:port_call/3 -spec erlang:port_call(Port, Operation, Data) -> term() when Port :: port() | atom(), Operation :: integer(), @@ -1600,16 +1638,18 @@ port_call(_Port, _Operation, _Data) -> {input, Bytes :: non_neg_integer()} | {output, Bytes :: non_neg_integer()}. +%% Shadowed by erl_bif_types: erlang:port_info/1 -spec erlang:port_info(Port) -> Result when Port :: port() | atom(), Result :: [port_info_result_item()] | undefined. port_info(_Result) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:port_info/2 -spec erlang:port_info(Port, Item) -> Result when Port :: port() | atom(), Item :: port_info_item(), - Result :: port_info_result_item() | undefined | []. + Result :: port_info_result_item() | undefined. port_info(_Result, _Item) -> erlang:nif_error(undefined). @@ -1689,7 +1729,7 @@ process_flag(_Flag, _Value) -> {current_location, {Module :: module(), Function :: atom(), Arity :: arity(), Location :: [{file, Filename :: string()} | % not a stack_item()! - {line, Line :: integer()}]}} | + {line, Line :: pos_integer()}]}} | {current_stacktrace, Stack :: [stack_item()]} | {dictionary, Dictionary :: [{Key :: term(), Value :: term()}]} | {error_handler, Module :: module()} | @@ -1728,7 +1768,7 @@ process_flag(_Flag, _Value) -> Function :: atom(), Arity :: arity() | (Args :: [term()]), Location :: [{file, Filename :: string()} | - {line, Line :: integer()}]}. + {line, Line :: pos_integer()}]}. -spec process_info(Pid, Item) -> InfoTuple | [] | undefined when @@ -1744,7 +1784,7 @@ process_flag(_Flag, _Value) -> process_info(_Pid,_ItemSpec) -> erlang:nif_error(undefined). --spec send(Dest, Msg) -> Msg when +-spec erlang:send(Dest, Msg) -> Msg when Dest :: dst(), Msg :: term(). send(_Dest,_Msg) -> @@ -1768,6 +1808,7 @@ send(_Dest,_Msg,_Options) -> seq_trace_info(_What) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:setelement/3 -spec setelement(Index, Tuple1, Value) -> Tuple2 when Index :: pos_integer(), Tuple1 :: tuple(), @@ -1817,6 +1858,7 @@ statistics(_Item) -> erlang:nif_error(undefined). %% Not documented +%% Shadowed by erl_bif_types: erlang:subtract/2 -spec erlang:subtract([term()], [term()]) -> [term()]. subtract(_,_) -> erlang:nif_error(undefined). @@ -1881,6 +1923,7 @@ term_to_binary(_Term) -> term_to_binary(_Term, _Options) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:tl/1 -spec tl(List) -> term() when List :: [term(), ...]. tl(_List) -> @@ -1916,6 +1959,7 @@ trace_pattern(_MFA, _MatchSpec) -> trace_pattern(_MFA, _MatchSpec, _FlagList) -> erlang:nif_error(undefined). +%% Shadowed by erl_bif_types: erlang:tuple_to_list/1 -spec tuple_to_list(Tuple) -> [term()] when Tuple :: tuple(). tuple_to_list(_Tuple) -> @@ -1934,6 +1978,7 @@ tuple_to_list(_Tuple) -> -type info_list() :: []. %% Note: changing the ordering number of a clause will change the docs! +%% Shadowed by erl_bif_types: erlang:system_info/1 -spec erlang:system_info (allocated_areas) -> [ tuple() ]; (allocator) -> @@ -2031,6 +2076,7 @@ universaltime_to_localtime(_Universaltime) -> apply(Fun, Args) -> erlang:apply(Fun, Args). +%% Shadowed by erl_bif_types: erlang:apply/3 -spec apply(Module, Function, Args) -> term() when Module :: module(), Function :: atom(), -- cgit v1.2.3 From a02909a11a33880b486135b396aabfd3060b8d8d Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Fri, 3 Feb 2012 17:02:07 +0100 Subject: Correct docs, comments and dialyzer tests Update preloaded erlang.beam Removed stray error in dialyzer test suite - different error message with the new specs. --- erts/preloaded/src/erlang.erl | 343 ++++++++++++++++++++++-------------------- 1 file changed, 178 insertions(+), 165 deletions(-) (limited to 'erts/preloaded/src/erlang.erl') diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index 65ebe83c3a..e042c0a072 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -45,7 +45,7 @@ -deprecated([hash/2]). -% Get rid of autoimports of spawn to avoid clashes with ourselves. +%% Get rid of autoimports of spawn to avoid clashes with ourselves. -compile({no_auto_import,[spawn_link/1]}). -compile({no_auto_import,[spawn_link/4]}). -compile({no_auto_import,[spawn_opt/2]}). @@ -235,20 +235,20 @@ {all, [ trace_info_item_result() ] | false | undefined}. %% Specs and stubs -% adler32/1 +%% adler32/1 -spec erlang:adler32(Data) -> non_neg_integer() when Data :: iodata(). adler32(_Data) -> erlang:nif_error(undefined). -% adler32/2 +%% adler32/2 -spec erlang:adler32(OldAdler, Data) -> non_neg_integer() when OldAdler :: non_neg_integer(), Data :: iodata(). adler32(_OldAdler, _Data) -> erlang:nif_error(undefined). -% adler32_combine/3 +%% adler32_combine/3 -spec erlang:adler32_combine(FirstAdler, SecondAdler, SecondSize) -> non_neg_integer() when FirstAdler :: non_neg_integer(), SecondAdler :: non_neg_integer(), @@ -256,7 +256,7 @@ adler32(_OldAdler, _Data) -> adler32_combine(_FirstAdler, _SecondAdler, _SecondSize) -> erlang:nif_error(undefined). -% append_element/2 +%% append_element/2 -spec erlang:append_element(Tuple1, Term) -> Tuple2 when Tuple1 :: tuple(), Tuple2 :: tuple(), @@ -264,27 +264,29 @@ adler32_combine(_FirstAdler, _SecondAdler, _SecondSize) -> append_element(_Tuple1, _Term) -> erlang:nif_error(undefined). -% atom_to_binary/2 +%% atom_to_binary/2 -spec atom_to_binary(Atom, Encoding) -> binary() when Atom :: atom(), Encoding :: latin1 | unicode | utf8. atom_to_binary(_Atom, _Encoding) -> erlang:nif_error(undefined). -% atom_to_list/1 +%% atom_to_list/1 -spec atom_to_list(Atom) -> string() when Atom :: atom(). atom_to_list(_Atom) -> erlang:nif_error(undefined). -% binary_part/2 +%% binary_part/2 +%% Shadowed by erl_bif_types: erlang:binary_part/2 -spec binary_part(Subject, PosLen) -> binary() when Subject :: binary(), PosLen :: {Start :: non_neg_integer(), Length :: integer()}. binary_part(_Subject, _PosLen) -> erlang:nif_error(undefined). -% binary_part/3 +%% binary_part/3 +%% Shadowed by erl_bif_types: erlang:binary_part/3 -spec binary_part(Subject, Start, Length) -> binary() when Subject :: binary(), Start :: non_neg_integer(), @@ -292,27 +294,27 @@ binary_part(_Subject, _PosLen) -> binary_part(_Subject, _Start, _Length) -> erlang:nif_error(undefined). -% binary_to_atom/2 +%% binary_to_atom/2 -spec binary_to_atom(Binary, Encoding) -> atom() when Binary :: binary(), Encoding :: latin1 | unicode | utf8. binary_to_atom(_Binary, _Encoding) -> erlang:nif_error(undefined). -% binary_to_existing_atom/2 +%% binary_to_existing_atom/2 -spec binary_to_existing_atom(Binary, Encoding) -> atom() when Binary :: binary(), Encoding :: latin1 | unicode | utf8. binary_to_existing_atom(_Binary, _Encoding) -> erlang:nif_error(undefined). -% binary_to_list/1 +%% binary_to_list/1 -spec binary_to_list(Binary) -> [byte()] when Binary :: binary(). binary_to_list(_Binary) -> erlang:nif_error(undefined). -% binary_to_list/3 +%% binary_to_list/3 -spec binary_to_list(Binary, Start, Stop) -> [byte()] when Binary :: binary(), Start :: pos_integer(), @@ -320,95 +322,97 @@ binary_to_list(_Binary) -> binary_to_list(_Binary, _Start, _Stop) -> erlang:nif_error(undefined). -% binary_to_term/1 +%% binary_to_term/1 -spec binary_to_term(Binary) -> term() when Binary :: ext_binary(). binary_to_term(_Binary) -> erlang:nif_error(undefined). -% binary_to_term/2 +%% binary_to_term/2 -spec binary_to_term(Binary, Opts) -> term() when Binary :: ext_binary(), Opts :: [safe]. binary_to_term(_Binary, _Opts) -> erlang:nif_error(undefined). -% bit_size/1 +%% bit_size/1 +%% Shadowed by erl_bif_types: erlang:bit_size/1 -spec bit_size(Bitstring) -> non_neg_integer() when Bitstring :: bitstring(). bit_size(_Bitstring) -> erlang:nif_error(undefined). -% bitsize/1 +%% bitsize/1 -spec bitsize(P1) -> non_neg_integer() when P1 :: bitstring(). bitsize(_P1) -> erlang:nif_error(undefined). -% bitstr_to_list/1 +%% bitstr_to_list/1 -spec erlang:bitstr_to_list(P1) -> [byte() | bitstring()] when P1 :: bitstring(). bitstr_to_list(_P1) -> erlang:nif_error(undefined). -% bitstring_to_list/1 +%% bitstring_to_list/1 -spec bitstring_to_list(Bitstring) -> [byte() | bitstring()] when Bitstring :: bitstring(). bitstring_to_list(_Bitstring) -> erlang:nif_error(undefined). -% bump_reductions/1 +%% bump_reductions/1 -spec erlang:bump_reductions(Reductions) -> true when Reductions :: pos_integer(). bump_reductions(_Reductions) -> erlang:nif_error(undefined). -% byte_size/1 +%% byte_size/1 +%% Shadowed by erl_bif_types: erlang:byte_size/1 -spec byte_size(Bitstring) -> non_neg_integer() when Bitstring :: bitstring(). byte_size(_Bitstring) -> erlang:nif_error(undefined). -% call_on_load_function/1 +%% call_on_load_function/1 -spec erlang:call_on_load_function(P1) -> term() when P1 :: atom(). call_on_load_function(_P1) -> erlang:nif_error(undefined). -% cancel_timer/1 +%% cancel_timer/1 -spec erlang:cancel_timer(TimerRef) -> Time | false when TimerRef :: reference(), Time :: non_neg_integer(). cancel_timer(_TimerRef) -> erlang:nif_error(undefined). -% check_old_code/1 +%% check_old_code/1 -spec check_old_code(Module) -> boolean() when Module :: module(). check_old_code(_Module) -> erlang:nif_error(undefined). -% check_process_code/2 +%% check_process_code/2 -spec check_process_code(Pid, Module) -> boolean() when Pid :: pid(), Module :: module(). check_process_code(_Pid, _Module) -> erlang:nif_error(undefined). -% crc32/1 +%% crc32/1 -spec erlang:crc32(Data) -> non_neg_integer() when Data :: iodata(). crc32(_Data) -> erlang:nif_error(undefined). -% crc32/2 +%% crc32/2 -spec erlang:crc32(OldCrc, Data) -> non_neg_integer() when OldCrc :: non_neg_integer(), Data :: iodata(). crc32(_OldCrc, _Data) -> erlang:nif_error(undefined). -% crc32_combine/3 +%% crc32_combine/3 -spec erlang:crc32_combine(FirstCrc, SecondCrc, SecondSize) -> non_neg_integer() when FirstCrc :: non_neg_integer(), SecondCrc :: non_neg_integer(), @@ -416,13 +420,13 @@ crc32(_OldCrc, _Data) -> crc32_combine(_FirstCrc, _SecondCrc, _SecondSize) -> erlang:nif_error(undefined). -% date/0 +%% date/0 -spec date() -> Date when Date :: calendar:date(). date() -> erlang:nif_error(undefined). -% decode_packet/3 +%% decode_packet/3 -spec erlang:decode_packet(Type, Bin, Options) -> {ok, Packet, Rest} | {more, Length} | @@ -519,19 +523,19 @@ date() -> decode_packet(_Type, _Bin, _Options) -> erlang:nif_error(undefined). -% delete_module/1 +%% delete_module/1 -spec delete_module(Module) -> true | undefined when Module :: module(). delete_module(_Module) -> erlang:nif_error(undefined). -% demonitor/1 +%% demonitor/1 -spec demonitor(MonitorRef) -> true when MonitorRef :: reference(). demonitor(_MonitorRef) -> erlang:nif_error(undefined). -% demonitor/2 +%% demonitor/2 -spec demonitor(MonitorRef, OptionList) -> boolean() when MonitorRef :: reference(), OptionList :: [Option], @@ -539,24 +543,24 @@ demonitor(_MonitorRef) -> demonitor(_MonitorRef, _OptionList) -> erlang:nif_error(undefined). -% display/1 +%% display/1 -spec erlang:display(Term) -> true when Term :: term(). display(_Term) -> erlang:nif_error(undefined). -% display_nl/0 +%% display_nl/0 -spec erlang:display_nl() -> true. display_nl() -> erlang:nif_error(undefined). -% display_string/1 +%% display_string/1 -spec erlang:display_string(P1) -> true when P1 :: string(). display_string(_P1) -> erlang:nif_error(undefined). -% dist_exit/3 +%% dist_exit/3 -spec erlang:dist_exit(P1, P2, P3) -> true when P1 :: pid(), P2 :: kill | noconnection | normal, @@ -564,28 +568,28 @@ display_string(_P1) -> dist_exit(_P1, _P2, _P3) -> erlang:nif_error(undefined). -% erase/0 +%% erase/0 -spec erase() -> [{Key, Val}] when Key :: term(), Val :: term(). erase() -> erlang:nif_error(undefined). -% erase/1 +%% erase/1 -spec erase(Key) -> Val | undefined when Key :: term(), Val :: term(). erase(_Key) -> erlang:nif_error(undefined). -% error/1 +%% error/1 %% Shadowed by erl_bif_types: erlang:error/1 -spec error(Reason) -> no_return() when Reason :: term(). error(_Reason) -> erlang:nif_error(undefined). -% error/2 +%% error/2 %% Shadowed by erl_bif_types: erlang:error/2 -spec error(Reason, Args) -> no_return() when Reason :: term(), @@ -593,53 +597,54 @@ error(_Reason) -> error(_Reason, _Args) -> erlang:nif_error(undefined). -% exit/1 +%% exit/1 %% Shadowed by erl_bif_types: erlang:exit/1 -spec exit(Reason) -> no_return() when Reason :: term(). exit(_Reason) -> erlang:nif_error(undefined). -% exit/2 +%% exit/2 -spec exit(Pid, Reason) -> true when Pid :: pid() | port(), Reason :: term(). exit(_Pid, _Reason) -> erlang:nif_error(undefined). -% external_size/1 +%% external_size/1 -spec erlang:external_size(Term) -> non_neg_integer() when Term :: term(). external_size(_Term) -> erlang:nif_error(undefined). -% external_size/2 +%% external_size/2 -spec erlang:external_size(Term, Options) -> non_neg_integer() when Term :: term(), Options :: [{minor_version, Version :: non_neg_integer()}]. external_size(_Term, _Options) -> erlang:nif_error(undefined). -% finish_after_on_load/2 +%% finish_after_on_load/2 -spec erlang:finish_after_on_load(P1, P2) -> true when P1 :: atom(), P2 :: boolean(). finish_after_on_load(_P1, _P2) -> erlang:nif_error(undefined). -% float/1 +%% float/1 +%% Shadowed by erl_bif_types: erlang:float/1 -spec float(Number) -> float() when Number :: number(). float(_Number) -> erlang:nif_error(undefined). -% float_to_list/1 +%% float_to_list/1 -spec float_to_list(Float) -> string() when Float :: float(). float_to_list(_Float) -> erlang:nif_error(undefined). -% fun_info/2 +%% fun_info/2 -spec erlang:fun_info(Fun, Item) -> {Item, Info} when Fun :: function(), Item :: fun_info_item(), @@ -647,13 +652,13 @@ float_to_list(_Float) -> fun_info(_Fun, _Item) -> erlang:nif_error(undefined). -% fun_to_list/1 +%% fun_to_list/1 -spec erlang:fun_to_list(Fun) -> string() when Fun :: function(). fun_to_list(_Fun) -> erlang:nif_error(undefined). -% function_exported/3 +%% function_exported/3 -spec erlang:function_exported(Module, Function, Arity) -> boolean() when Module :: module(), Function :: atom(), @@ -661,87 +666,87 @@ fun_to_list(_Fun) -> function_exported(_Module, _Function, _Arity) -> erlang:nif_error(undefined). -% garbage_collect/0 +%% garbage_collect/0 -spec garbage_collect() -> true. garbage_collect() -> erlang:nif_error(undefined). -% garbage_collect/1 +%% garbage_collect/1 -spec garbage_collect(Pid) -> boolean() when Pid :: pid(). garbage_collect(_Pid) -> erlang:nif_error(undefined). -% garbage_collect_message_area/0 +%% garbage_collect_message_area/0 -spec erlang:garbage_collect_message_area() -> boolean(). garbage_collect_message_area() -> erlang:nif_error(undefined). -% get/0 +%% get/0 -spec get() -> [{Key, Val}] when Key :: term(), Val :: term(). get() -> erlang:nif_error(undefined). -% get/1 +%% get/1 -spec get(Key) -> Val | undefined when Key :: term(), Val :: term(). get(_Key) -> erlang:nif_error(undefined). -% get_keys/1 +%% get_keys/1 -spec get_keys(Val) -> [Key] when Val :: term(), Key :: term(). get_keys(_Val) -> erlang:nif_error(undefined). -% get_module_info/1 +%% get_module_info/1 -spec erlang:get_module_info(P1) -> [{atom(), [{atom(), term()}]}] when P1 :: atom(). get_module_info(_P1) -> erlang:nif_error(undefined). -% get_stacktrace/0 +%% get_stacktrace/0 -spec erlang:get_stacktrace() -> [stack_item()]. get_stacktrace() -> erlang:nif_error(undefined). -% group_leader/0 +%% group_leader/0 -spec group_leader() -> pid(). group_leader() -> erlang:nif_error(undefined). -% group_leader/2 +%% group_leader/2 -spec group_leader(GroupLeader, Pid) -> true when GroupLeader :: pid(), Pid :: pid(). group_leader(_GroupLeader, _Pid) -> erlang:nif_error(undefined). -% halt/0 +%% halt/0 %% Shadowed by erl_bif_types: erlang:halt/0 -spec halt() -> no_return(). halt() -> erlang:nif_error(undefined). -% halt/1 +%% halt/1 %% Shadowed by erl_bif_types: erlang:halt/1 -spec halt(Status) -> no_return() when Status :: non_neg_integer() | string(). halt(_Status) -> erlang:nif_error(undefined). -% hash/2 +%% hash/2 -spec erlang:hash(Term, Range) -> pos_integer() when Term :: term(), Range :: pos_integer(). hash(_Term, _Range) -> erlang:nif_error(undefined). -% hibernate/3 +%% hibernate/3 -spec erlang:hibernate(Module, Function, Args) -> no_return() when Module :: module(), Function :: atom(), @@ -749,30 +754,30 @@ hash(_Term, _Range) -> hibernate(_Module, _Function, _Args) -> erlang:nif_error(undefined). -% integer_to_list/1 +%% integer_to_list/1 -spec integer_to_list(Integer) -> string() when Integer :: integer(). integer_to_list(_Integer) -> erlang:nif_error(undefined). -% iolist_size/1 +%% iolist_size/1 -spec iolist_size(Item) -> non_neg_integer() when Item :: iolist() | binary(). iolist_size(_Item) -> erlang:nif_error(undefined). -% iolist_to_binary/1 +%% iolist_to_binary/1 -spec iolist_to_binary(IoListOrBinary) -> binary() when IoListOrBinary :: iolist() | binary(). iolist_to_binary(_IoListOrBinary) -> erlang:nif_error(undefined). -% is_alive/0 +%% is_alive/0 -spec is_alive() -> boolean(). is_alive() -> erlang:nif_error(undefined). -% is_builtin/3 +%% is_builtin/3 -spec erlang:is_builtin(Module, Function, Arity) -> boolean() when Module :: module(), Function :: atom(), @@ -780,96 +785,97 @@ is_alive() -> is_builtin(_Module, _Function, _Arity) -> erlang:nif_error(undefined). -% is_process_alive/1 +%% is_process_alive/1 -spec is_process_alive(Pid) -> boolean() when Pid :: pid(). is_process_alive(_Pid) -> erlang:nif_error(undefined). -% length/1 +%% length/1 +%% Shadowed by erl_bif_types: erlang:length/1 -spec length(List) -> non_neg_integer() when List :: [term()]. length(_List) -> erlang:nif_error(undefined). -% link/1 +%% link/1 -spec link(PidOrPort) -> true when PidOrPort :: pid() | port(). link(_PidOrPort) -> erlang:nif_error(undefined). -% list_to_atom/1 +%% list_to_atom/1 -spec list_to_atom(String) -> atom() when String :: string(). list_to_atom(_String) -> erlang:nif_error(undefined). -% list_to_binary/1 +%% list_to_binary/1 -spec list_to_binary(IoList) -> binary() when IoList :: iolist(). list_to_binary(_IoList) -> erlang:nif_error(undefined). -% list_to_bitstr/1 +%% list_to_bitstr/1 -spec erlang:list_to_bitstr(P1) -> bitstring() when P1 :: bitstring_list(). list_to_bitstr(_P1) -> erlang:nif_error(undefined). -% list_to_bitstring/1 +%% list_to_bitstring/1 -spec list_to_bitstring(BitstringList) -> bitstring() when BitstringList :: bitstring_list(). list_to_bitstring(_BitstringList) -> erlang:nif_error(undefined). -% list_to_existing_atom/1 +%% list_to_existing_atom/1 -spec list_to_existing_atom(String) -> atom() when String :: string(). list_to_existing_atom(_String) -> erlang:nif_error(undefined). -% list_to_float/1 +%% list_to_float/1 -spec list_to_float(String) -> float() when String :: string(). list_to_float(_String) -> erlang:nif_error(undefined). -% list_to_integer/1 +%% list_to_integer/1 -spec list_to_integer(String) -> integer() when String :: string(). list_to_integer(_String) -> erlang:nif_error(undefined). -% list_to_pid/1 +%% list_to_pid/1 -spec list_to_pid(String) -> pid() when String :: string(). list_to_pid(_String) -> erlang:nif_error(undefined). -% list_to_tuple/1 +%% list_to_tuple/1 -spec list_to_tuple(List) -> tuple() when List :: [term()]. list_to_tuple(_List) -> erlang:nif_error(undefined). -% loaded/0 +%% loaded/0 -spec erlang:loaded() -> [Module] when Module :: module(). loaded() -> erlang:nif_error(undefined). -% localtime/0 +%% localtime/0 -spec erlang:localtime() -> DateTime when DateTime :: calendar:datetime(). localtime() -> erlang:nif_error(undefined). -% make_ref/0 +%% make_ref/0 -spec make_ref() -> reference(). make_ref() -> erlang:nif_error(undefined). -% match_spec_test/3 +%% match_spec_test/3 -spec erlang:match_spec_test(P1, P2, P3) -> TestResult when P1 :: [term()] | tuple(), P2 :: term(), @@ -878,27 +884,27 @@ make_ref() -> match_spec_test(_P1, _P2, _P3) -> erlang:nif_error(undefined). -% md5/1 +%% md5/1 -spec erlang:md5(Data) -> Digest when Data :: iodata(), Digest :: binary(). md5(_Data) -> erlang:nif_error(undefined). -% md5_final/1 +%% md5_final/1 -spec erlang:md5_final(Context) -> Digest when Context :: binary(), Digest :: binary(). md5_final(_Context) -> erlang:nif_error(undefined). -% md5_init/0 +%% md5_init/0 -spec erlang:md5_init() -> Context when Context :: binary(). md5_init() -> erlang:nif_error(undefined). -% md5_update/2 +%% md5_update/2 -spec erlang:md5_update(Context, Data) -> NewContext when Context :: binary(), Data :: iodata(), @@ -906,13 +912,13 @@ md5_init() -> md5_update(_Context, _Data) -> erlang:nif_error(undefined). -% module_loaded/1 +%% module_loaded/1 -spec module_loaded(Module) -> boolean() when Module :: module(). module_loaded(_Module) -> erlang:nif_error(undefined). -% monitor/2 +%% monitor/2 -spec monitor(Type, Item) -> MonitorRef when Type :: process, Item :: pid() | Module | {Module, Node}, @@ -922,14 +928,14 @@ module_loaded(_Module) -> monitor(_Type, _Item) -> erlang:nif_error(undefined). -% monitor_node/2 +%% monitor_node/2 -spec monitor_node(Node, Flag) -> true when Node :: node(), Flag :: boolean(). monitor_node(_Node, _Flag) -> erlang:nif_error(undefined). -% monitor_node/3 +%% monitor_node/3 -spec erlang:monitor_node(Node, Flag, Options) -> true when Node :: node(), Flag :: boolean(), @@ -938,14 +944,14 @@ monitor_node(_Node, _Flag) -> monitor_node(_Node, _Flag, _Options) -> erlang:nif_error(undefined). -% nif_error/1 +%% nif_error/1 %% Shadowed by erl_bif_types: erlang:nif_error/1 -spec erlang:nif_error(Reason) -> no_return() when Reason :: term(). nif_error(_Reason) -> erlang:nif_error(undefined). -% nif_error/2 +%% nif_error/2 %% Shadowed by erl_bif_types: erlang:nif_error/2 -spec erlang:nif_error(Reason, Args) -> no_return() when Reason :: term(), @@ -953,26 +959,28 @@ nif_error(_Reason) -> nif_error(_Reason, _Args) -> erlang:nif_error(undefined). -% node/0 +%% node/0 +%% Shadowed by erl_bif_types: erlang:node/0 -spec node() -> Node when Node :: node(). node() -> erlang:nif_error(undefined). -% node/1 +%% node/1 +%% Shadowed by erl_bif_types: erlang:node/1 -spec node(Arg) -> Node when Arg :: pid() | port() | reference(), Node :: node(). node(_Arg) -> erlang:nif_error(undefined). -% now/0 +%% now/0 -spec now() -> Timestamp when Timestamp :: timestamp(). now() -> erlang:nif_error(undefined). -% phash/2 +%% phash/2 -spec erlang:phash(Term, Range) -> Hash when Term :: term(), Range :: pos_integer(), @@ -980,14 +988,14 @@ now() -> phash(_Term, _Range) -> erlang:nif_error(undefined). -% phash2/1 +%% phash2/1 -spec erlang:phash2(Term) -> Hash when Term :: term(), Hash :: non_neg_integer(). phash2(_Term) -> erlang:nif_error(undefined). -% phash2/2 +%% phash2/2 -spec erlang:phash2(Term, Range) -> Hash when Term :: term(), Range :: pos_integer(), @@ -995,26 +1003,26 @@ phash2(_Term) -> phash2(_Term, _Range) -> erlang:nif_error(undefined). -% pid_to_list/1 +%% pid_to_list/1 -spec pid_to_list(Pid) -> string() when Pid :: pid(). pid_to_list(_Pid) -> erlang:nif_error(undefined). -% port_close/1 +%% port_close/1 -spec port_close(Port) -> true when Port :: port() | atom(). port_close(_Port) -> erlang:nif_error(undefined). -% port_command/2 +%% port_command/2 -spec port_command(Port, Data) -> true when Port :: port() | atom(), Data :: iodata(). port_command(_Port, _Data) -> erlang:nif_error(undefined). -% port_command/3 +%% port_command/3 -spec port_command(Port, Data, OptionList) -> boolean() when Port :: port() | atom(), Data :: iodata(), @@ -1023,14 +1031,14 @@ port_command(_Port, _Data) -> port_command(_Port, _Data, _OptionList) -> erlang:nif_error(undefined). -% port_connect/2 +%% port_connect/2 -spec port_connect(Port, Pid) -> true when Port :: port() | atom(), Pid :: pid(). port_connect(_Port, _Pid) -> erlang:nif_error(undefined). -% port_control/3 +%% port_control/3 -spec port_control(Port, Operation, Data) -> Res when Port :: port() | atom(), Operation :: integer(), @@ -1039,49 +1047,49 @@ port_connect(_Port, _Pid) -> port_control(_Port, _Operation, _Data) -> erlang:nif_error(undefined). -% port_get_data/1 +%% port_get_data/1 -spec erlang:port_get_data(P1) -> term() when P1 :: port() | atom(). port_get_data(_P1) -> erlang:nif_error(undefined). -% port_set_data/2 +%% port_set_data/2 -spec erlang:port_set_data(P1, P2) -> true when P1 :: port() | atom(), P2 :: term(). port_set_data(_P1, _P2) -> erlang:nif_error(undefined). -% port_to_list/1 +%% port_to_list/1 -spec erlang:port_to_list(Port) -> string() when Port :: port(). port_to_list(_Port) -> erlang:nif_error(undefined). -% ports/0 +%% ports/0 -spec erlang:ports() -> [port()]. ports() -> erlang:nif_error(undefined). -% posixtime_to_universaltime/1 +%% posixtime_to_universaltime/1 -spec erlang:posixtime_to_universaltime(P1) -> {calendar:date(), calendar:time()} when P1 :: integer(). posixtime_to_universaltime(_P1) -> erlang:nif_error(undefined). -% pre_loaded/0 +%% pre_loaded/0 -spec pre_loaded() -> [module()]. pre_loaded() -> erlang:nif_error(undefined). -% process_display/2 +%% process_display/2 -spec erlang:process_display(Pid, Type) -> true when Pid :: pid(), Type :: backtrace. process_display(_Pid, _Type) -> erlang:nif_error(undefined). -% process_flag/3 +%% process_flag/3 -spec process_flag(Pid, Flag, Value) -> OldValue when Pid :: pid(), Flag :: save_calls, @@ -1090,7 +1098,7 @@ process_display(_Pid, _Type) -> process_flag(_Pid, _Flag, _Value) -> erlang:nif_error(undefined). -% process_info/1 +%% process_info/1 -spec process_info(Pid) -> Info when Pid :: pid(), Info :: [InfoTuple] | undefined, @@ -1098,25 +1106,25 @@ process_flag(_Pid, _Flag, _Value) -> process_info(_Pid) -> erlang:nif_error(undefined). -% processes/0 +%% processes/0 -spec processes() -> [pid()]. processes() -> erlang:nif_error(undefined). -% purge_module/1 +%% purge_module/1 -spec purge_module(Module) -> true when Module :: atom(). purge_module(_Module) -> erlang:nif_error(undefined). -% put/2 +%% put/2 -spec put(Key, Val) -> term() when Key :: term(), Val :: term(). put(_Key, _Val) -> erlang:nif_error(undefined). -% raise/3 +%% raise/3 -spec erlang:raise(Class, Reason, Stacktrace) -> no_return() when Class :: error | exit | throw, Reason :: term(), @@ -1124,49 +1132,51 @@ put(_Key, _Val) -> raise(_Class, _Reason, _Stacktrace) -> erlang:nif_error(undefined). -% read_timer/1 +%% read_timer/1 -spec erlang:read_timer(TimerRef) -> non_neg_integer() | false when TimerRef :: reference(). read_timer(_TimerRef) -> erlang:nif_error(undefined). -% ref_to_list/1 +%% ref_to_list/1 -spec erlang:ref_to_list(Ref) -> string() when Ref :: reference(). ref_to_list(_Ref) -> erlang:nif_error(undefined). -% register/2 +%% register/2 -spec register(RegName, PidOrPort) -> true when RegName :: atom(), PidOrPort :: port() | pid(). register(_RegName, _PidOrPort) -> erlang:nif_error(undefined). -% registered/0 +%% registered/0 -spec registered() -> [RegName] when RegName :: atom(). registered() -> erlang:nif_error(undefined). -% resume_process/1 +%% resume_process/1 -spec erlang:resume_process(Suspendee) -> true when Suspendee :: pid(). resume_process(_Suspendee) -> erlang:nif_error(undefined). -% round/1 +%% round/1 +%% Shadowed by erl_bif_types: erlang:round/1 -spec round(Number) -> integer() when Number :: number(). round(_Number) -> erlang:nif_error(undefined). -% self/0 +%% self/0 +%% Shadowed by erl_bif_types: erlang:self/0 -spec self() -> pid(). self() -> erlang:nif_error(undefined). -% send_after/3 +%% send_after/3 -spec erlang:send_after(Time, Dest, Msg) -> TimerRef when Time :: non_neg_integer(), Dest :: pid() | atom(), @@ -1175,34 +1185,34 @@ self() -> send_after(_Time, _Dest, _Msg) -> erlang:nif_error(undefined). -% seq_trace/2 +%% seq_trace/2 -spec erlang:seq_trace(P1, P2) -> seq_trace_info_returns() | {term(), term(), term(), term(), term()} when P1 :: atom(), P2 :: boolean() | {integer(), integer()} | integer() | []. seq_trace(_P1, _P2) -> erlang:nif_error(undefined). -% seq_trace_print/1 +%% seq_trace_print/1 -spec erlang:seq_trace_print(P1) -> boolean() when P1 :: term(). seq_trace_print(_P1) -> erlang:nif_error(undefined). -% seq_trace_print/2 +%% seq_trace_print/2 -spec erlang:seq_trace_print(P1, P2) -> boolean() when P1 :: atom() | integer(), P2 :: term(). seq_trace_print(_P1, _P2) -> erlang:nif_error(undefined). -% setnode/2 +%% setnode/2 -spec erlang:setnode(P1, P2) -> true when P1 :: atom(), P2 :: integer(). setnode(_P1, _P2) -> erlang:nif_error(undefined). -% setnode/3 +%% setnode/3 -spec erlang:setnode(P1, P2, P3) -> true when P1 :: atom(), P2 :: port(), @@ -1210,13 +1220,14 @@ setnode(_P1, _P2) -> setnode(_P1, _P2, _P3) -> erlang:nif_error(undefined). -% size/1 +%% size/1 +%% Shadowed by erl_bif_types: erlang:size/1 -spec size(Item) -> non_neg_integer() when Item :: tuple() | binary(). size(_Item) -> erlang:nif_error(undefined). -% spawn/3 +%% spawn/3 -spec spawn(Module, Function, Args) -> pid() when Module :: module(), Function :: atom(), @@ -1224,7 +1235,7 @@ size(_Item) -> spawn(_Module, _Function, _Args) -> erlang:nif_error(undefined). -% spawn_link/3 +%% spawn_link/3 -spec spawn_link(Module, Function, Args) -> pid() when Module :: module(), Function :: atom(), @@ -1232,14 +1243,14 @@ spawn(_Module, _Function, _Args) -> spawn_link(_Module, _Function, _Args) -> erlang:nif_error(undefined). -% split_binary/2 +%% split_binary/2 -spec split_binary(Bin, Pos) -> {binary(), binary()} when Bin :: binary(), Pos :: non_neg_integer(). split_binary(_Bin, _Pos) -> erlang:nif_error(undefined). -% start_timer/3 +%% start_timer/3 -spec erlang:start_timer(Time, Dest, Msg) -> TimerRef when Time :: non_neg_integer(), Dest :: pid() | atom(), @@ -1248,7 +1259,7 @@ split_binary(_Bin, _Pos) -> start_timer(_Time, _Dest, _Msg) -> erlang:nif_error(undefined). -% suspend_process/2 +%% suspend_process/2 -spec erlang:suspend_process(Suspendee, OptList) -> boolean() when Suspendee :: pid(), OptList :: [Opt], @@ -1256,7 +1267,7 @@ start_timer(_Time, _Dest, _Msg) -> suspend_process(_Suspendee, _OptList) -> erlang:nif_error(undefined). -% system_monitor/0 +%% system_monitor/0 -spec erlang:system_monitor() -> MonSettings when MonSettings :: undefined | { MonitorPid, Options }, MonitorPid :: pid(), @@ -1264,7 +1275,7 @@ suspend_process(_Suspendee, _OptList) -> system_monitor() -> erlang:nif_error(undefined). -% system_monitor/1 +%% system_monitor/1 -spec erlang:system_monitor(Arg) -> MonSettings when Arg :: undefined | { MonitorPid, Options }, MonSettings :: undefined | { MonitorPid, Options }, @@ -1273,7 +1284,7 @@ system_monitor() -> system_monitor(_Arg) -> erlang:nif_error(undefined). -% system_monitor/2 +%% system_monitor/2 -spec erlang:system_monitor(MonitorPid, Options) -> MonSettings when MonitorPid :: pid(), Options :: [ system_monitor_option() ], @@ -1283,7 +1294,7 @@ system_monitor(_Arg) -> system_monitor(_MonitorPid, _Options) -> erlang:nif_error(undefined). -% system_profile/0 +%% system_profile/0 -spec erlang:system_profile() -> ProfilerSettings when ProfilerSettings :: undefined | { ProfilerPid, Options}, ProfilerPid :: pid() | port(), @@ -1291,7 +1302,7 @@ system_monitor(_MonitorPid, _Options) -> system_profile() -> erlang:nif_error(undefined). -% system_profile/2 +%% system_profile/2 -spec erlang:system_profile(ProfilerPid, Options) -> ProfilerSettings when ProfilerPid :: pid() | port() | undefined, Options :: [ system_profile_option() ], @@ -1299,20 +1310,20 @@ system_profile() -> system_profile(_ProfilerPid, _Options) -> erlang:nif_error(undefined). -% throw/1 +%% throw/1 %% Shadowed by erl_bif_types: erlang:throw/1 -spec throw(Any) -> no_return() when Any :: term(). throw(_Any) -> erlang:nif_error(undefined). -% time/0 +%% time/0 -spec time() -> Time when Time :: calendar:time(). time() -> erlang:nif_error(undefined). -% trace/3 +%% trace/3 -spec erlang:trace(PidSpec, How, FlagList) -> integer() when PidSpec :: pid() | existing | new | all, How :: boolean(), @@ -1320,14 +1331,14 @@ time() -> trace(_PidSpec, _How, _FlagList) -> erlang:nif_error(undefined). -% trace_delivered/1 +%% trace_delivered/1 -spec erlang:trace_delivered(Tracee) -> Ref when Tracee :: pid() | all, Ref :: reference(). trace_delivered(_Tracee) -> erlang:nif_error(undefined). -% trace_info/2 +%% trace_info/2 -spec erlang:trace_info(PidOrFunc, Item) -> Res when PidOrFunc :: pid() | new | {Module, Function, Arity} | on_load, Module :: module(), @@ -1338,43 +1349,45 @@ trace_delivered(_Tracee) -> trace_info(_PidOrFunc, _Item) -> erlang:nif_error(undefined). -% trunc/1 +%% trunc/1 +%% Shadowed by erl_bif_types: erlang:trunc/1 -spec trunc(Number) -> integer() when Number :: number(). trunc(_Number) -> erlang:nif_error(undefined). -% tuple_size/1 +%% tuple_size/1 +%% Shadowed by erl_bif_types: erlang:tuple_size/1 -spec tuple_size(Tuple) -> non_neg_integer() when Tuple :: tuple(). tuple_size(_Tuple) -> erlang:nif_error(undefined). -% universaltime/0 +%% universaltime/0 -spec erlang:universaltime() -> DateTime when DateTime :: calendar:datetime(). universaltime() -> erlang:nif_error(undefined). -% universaltime_to_posixtime/1 +%% universaltime_to_posixtime/1 -spec erlang:universaltime_to_posixtime(P1) -> integer() when P1 :: {calendar:date(), calendar:time()}. universaltime_to_posixtime(_P1) -> erlang:nif_error(undefined). -% unlink/1 +%% unlink/1 -spec unlink(Id) -> true when Id :: pid() | port(). unlink(_Id) -> erlang:nif_error(undefined). -% unregister/1 +%% unregister/1 -spec unregister(RegName) -> true when RegName :: atom(). unregister(_RegName) -> erlang:nif_error(undefined). -% whereis/1 +%% whereis/1 -spec whereis(RegName) -> pid() | port() | undefined when RegName :: atom(). whereis(_RegName) -> @@ -1817,7 +1830,7 @@ seq_trace_info(_What) -> setelement(_Index, _Tuple1, _Value) -> erlang:nif_error(undefined). --spec spawn_opt({Module, Function, Args, Options}) -> pid() | {pid(), reference()} when +-spec erlang:spawn_opt({Module, Function, Args, Options}) -> pid() | {pid(), reference()} when Module :: module(), Function :: atom(), Args :: [term()], @@ -2002,7 +2015,7 @@ tuple_to_list(_Tuple) -> (compat_rel) -> integer(); (cpu_topology) -> CpuTopology when CpuTopology :: cpu_topology(); - ({cpu_topoology, defined | detected | used}) -> CpuTopology when + ({cpu_topology, defined | detected | used}) -> CpuTopology when CpuTopology :: cpu_topology(); (creation) -> integer(); (debug_compiled) -> boolean(); @@ -2430,7 +2443,7 @@ suspend_process(P) -> %% reactivate the command. %% --spec dlink(pid() | port()) -> 'true'. +-spec erlang:dlink(pid() | port()) -> 'true'. dlink(Pid) -> case net_kernel:connect(erlang:node(Pid)) of true -> erlang:link(Pid); @@ -2438,7 +2451,7 @@ dlink(Pid) -> end. %% Can this ever happen? --spec dunlink(identifier()) -> 'true'. +-spec erlang:dunlink(identifier()) -> 'true'. dunlink(Pid) -> case net_kernel:connect(erlang:node(Pid)) of true -> erlang:unlink(Pid); @@ -2508,7 +2521,7 @@ dsend({Name, Node}, Msg, Opts) -> ignored -> ok % Not distributed. end. --spec dmonitor_p('process', pid() | {atom(),atom()}) -> reference(). +-spec erlang: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 @@ -2532,7 +2545,7 @@ dmonitor_p(process, ProcSpec) -> %% Trap function used when modified timing has been enabled. %% --spec delay_trap(Result, timeout()) -> Result. +-spec erlang:delay_trap(Result, timeout()) -> Result. delay_trap(Result, 0) -> erlang:yield(), Result; delay_trap(Result, Timeout) -> receive after Timeout -> Result end. @@ -2799,7 +2812,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(). +-spec erlang:await_proc_exit(dst(), 'apply' | 'data' | 'reason', term()) -> term(). await_proc_exit(Proc, Op, Data) -> Mon = erlang:monitor(process, Proc), receive @@ -2858,7 +2871,7 @@ max(A, _) -> A. low = 0, maximum = 0}). --spec memory() -> [{Type, Size}] when +-spec erlang:memory() -> [{Type, Size}] when Type :: memory_type(), Size :: non_neg_integer(). memory() -> -- cgit v1.2.3