diff --git a/priv/funcs.txt b/priv/funcs.txt index 060235f..6acdf1d 100644 --- a/priv/funcs.txt +++ b/priv/funcs.txt @@ -33,16 +33,21 @@ alisp_stdlib:numberp/1 alisp_stdlib:pidp/1 alisp_stdlib:print/1 alisp_stdlib:refp/1 -alisp_stdlib:remove-if/1 alisp_stdlib:remove-if-not/1 +alisp_stdlib:remove-if/1 alisp_stdlib:tuple/1 alisp_stdlib:tuplep/1 +application:get_env/2 +application:get_env/3 +application:module_info/0 +application:module_info/1 arepl:module_info/0 arepl:module_info/1 arepl:start/0 atomvm:add_avm_pack_binary/2 atomvm:add_avm_pack_file/2 atomvm:close_avm_pack/2 +atomvm:get_creation/0 atomvm:get_start_beam/1 atomvm:module_info/0 atomvm:module_info/1 @@ -64,6 +69,7 @@ atomvm:posix_write/2 atomvm:rand_bytes/1 atomvm:random/0 atomvm:read_priv/2 +atomvm:subprocess/4 avm_pubsub:handle_call/3 avm_pubsub:handle_info/2 avm_pubsub:init/1 @@ -91,24 +97,32 @@ binary:encode_hex/1 binary:encode_hex/2 binary:first/1 binary:last/1 +binary:match/2 +binary:match/3 binary:module_info/0 binary:module_info/1 binary:part/3 +binary:replace/3 +binary:replace/4 binary:split/2 binary:split/3 -calendar:datetime_to_gregorian_seconds/1 calendar:date_to_gregorian_days/1 calendar:date_to_gregorian_days/3 +calendar:datetime_to_gregorian_seconds/1 calendar:day_of_the_week/1 calendar:day_of_the_week/3 calendar:module_info/0 calendar:module_info/1 calendar:system_time_to_universal_time/2 +code:all_available/0 +code:all_loaded/0 code:ensure_loaded/1 +code:is_loaded/1 code:load_abs/1 code:load_binary/3 code:module_info/0 code:module_info/1 +code:which/1 console:flush/0 console:flush/1 console:module_info/0 @@ -123,6 +137,18 @@ crypto:hash/2 crypto:module_info/0 crypto:module_info/1 crypto:strong_rand_bytes/1 +dist_util:cancel_timer/1 +dist_util:handshake_other_started/1 +dist_util:handshake_we_started/1 +dist_util:module_info/0 +dist_util:module_info/1 +dist_util:net_ticker_spawn_options/0 +dist_util:reset_timer/1 +dist_util:shutdown/3 +dist_util:shutdown/4 +dist_util:start_timer/1 +elixir_env:to_caller/1 +elixir_erl_pass:no_parens_remote/2 emscripten:module_info/0 emscripten:module_info/1 emscripten:promise_reject/1 @@ -223,11 +249,33 @@ emscripten:unregister_touchend_callback/1 emscripten:unregister_touchmove_callback/1 emscripten:unregister_touchstart_callback/1 emscripten:unregister_wheel_callback/1 -erlang:-/1 +epmd:handle_call/3 +epmd:handle_cast/2 +epmd:handle_info/2 +epmd:init/1 +epmd:module_info/0 +epmd:module_info/1 +epmd:start_link/1 +epmd:terminate/2 +erl_epmd:code_change/3 +erl_epmd:handle_call/3 +erl_epmd:handle_cast/2 +erl_epmd:handle_info/2 +erl_epmd:init/1 +erl_epmd:module_info/0 +erl_epmd:module_info/1 +erl_epmd:names/1 +erl_epmd:port_please/2 +erl_epmd:register_node/2 +erl_epmd:start_link/0 +erl_epmd:stop/0 +erl_epmd:terminate/2 erlang:!/2 erlang:*/2 erlang:++/2 erlang:+/2 +erlang:--/2 +erlang:-/1 erlang:-/2 erlang:/=/2 erlang:>>/2 +Elixir.Bitwise:MACRO-__using__/2 Elixir.Bitwise:^^^/2 -Elixir.Bitwise:|||/2 +Elixir.Bitwise:__info__/1 Elixir.Bitwise:band/2 Elixir.Bitwise:bnot/1 Elixir.Bitwise:bor/2 Elixir.Bitwise:bsl/2 Elixir.Bitwise:bsr/2 Elixir.Bitwise:bxor/2 -Elixir.Bitwise:__info__/1 -Elixir.Bitwise:MACRO-__using__/2 Elixir.Bitwise:module_info/0 Elixir.Bitwise:module_info/1 -Elixir.CaseClauseError:exception/1 +Elixir.Bitwise:|||/2 +Elixir.Bitwise:~~~/1 Elixir.CaseClauseError:__info__/1 +Elixir.CaseClauseError:__struct__/0 +Elixir.CaseClauseError:__struct__/1 +Elixir.CaseClauseError:exception/1 Elixir.CaseClauseError:message/1 Elixir.CaseClauseError:module_info/0 Elixir.CaseClauseError:module_info/1 -Elixir.CaseClauseError:__struct__/0 -Elixir.CaseClauseError:__struct__/1 +Elixir.Code:__info__/1 Elixir.Code:ensure_compiled/1 Elixir.Code:ensure_compiled?/1 -Elixir.Code:__info__/1 Elixir.Code:module_info/0 Elixir.Code:module_info/1 -Elixir.Collectable:behaviour_info/1 -Elixir.Collectable:impl_for!/1 -Elixir.Collectable:impl_for/1 -Elixir.Collectable:__info__/1 -Elixir.Collectable:into/1 Elixir.Collectable.List:__impl__/1 Elixir.Collectable.List:__info__/1 Elixir.Collectable.List:into/1 @@ -1175,24 +1385,30 @@ Elixir.Collectable.MapSet:__info__/1 Elixir.Collectable.MapSet:into/1 Elixir.Collectable.MapSet:module_info/0 Elixir.Collectable.MapSet:module_info/1 +Elixir.Collectable:__info__/1 +Elixir.Collectable:__protocol__/1 +Elixir.Collectable:behaviour_info/1 +Elixir.Collectable:impl_for!/1 +Elixir.Collectable:impl_for/1 +Elixir.Collectable:into/1 Elixir.Collectable:module_info/0 Elixir.Collectable:module_info/1 -Elixir.Collectable:__protocol__/1 -Elixir.CondClauseError:exception/1 Elixir.CondClauseError:__info__/1 +Elixir.CondClauseError:__struct__/0 +Elixir.CondClauseError:__struct__/1 +Elixir.CondClauseError:exception/1 Elixir.CondClauseError:message/1 Elixir.CondClauseError:module_info/0 Elixir.CondClauseError:module_info/1 -Elixir.CondClauseError:__struct__/0 -Elixir.CondClauseError:__struct__/1 +Elixir.Console:__info__/1 Elixir.Console:flush/0 Elixir.Console:flush/1 -Elixir.Console:__info__/1 Elixir.Console:module_info/0 Elixir.Console:module_info/1 Elixir.Console:print/1 Elixir.Console:puts/1 Elixir.Console:puts/2 +Elixir.Enum:__info__/1 Elixir.Enum:all?/1 Elixir.Enum:all?/2 Elixir.Enum:any?/1 @@ -1203,83 +1419,88 @@ Elixir.Enum:chunk_by/2 Elixir.Enum:chunk_while/4 Elixir.Enum:count/1 Elixir.Enum:each/2 -Elixir.Enumerable:behaviour_info/1 -Elixir.Enumerable:count/1 -Elixir.Enumerable:impl_for!/1 -Elixir.Enumerable:impl_for/1 -Elixir.Enumerable:__info__/1 -Elixir.Enumerable.List:count/1 +Elixir.Enum:filter/2 +Elixir.Enum:find/2 +Elixir.Enum:find/3 +Elixir.Enum:find_index/2 +Elixir.Enum:find_value/2 +Elixir.Enum:find_value/3 +Elixir.Enum:flat_map/2 +Elixir.Enum:into/2 +Elixir.Enum:into/3 +Elixir.Enum:join/1 +Elixir.Enum:join/2 +Elixir.Enum:map/2 +Elixir.Enum:map_join/2 +Elixir.Enum:map_join/3 +Elixir.Enum:member?/2 +Elixir.Enum:module_info/0 +Elixir.Enum:module_info/1 +Elixir.Enum:reduce/3 +Elixir.Enum:reject/2 +Elixir.Enum:reverse/1 +Elixir.Enum:slice/2 +Elixir.Enum:slice/3 +Elixir.Enum:split_with/2 +Elixir.Enum:to_list/1 Elixir.Enumerable.List:__impl__/1 Elixir.Enumerable.List:__info__/1 +Elixir.Enumerable.List:count/1 Elixir.Enumerable.List:member?/2 Elixir.Enumerable.List:module_info/0 Elixir.Enumerable.List:module_info/1 Elixir.Enumerable.List:reduce/3 Elixir.Enumerable.List:slice/1 Elixir.Enumerable.List:slice/4 -Elixir.Enumerable.Map:count/1 Elixir.Enumerable.Map:__impl__/1 Elixir.Enumerable.Map:__info__/1 +Elixir.Enumerable.Map:count/1 Elixir.Enumerable.Map:member?/2 Elixir.Enumerable.Map:module_info/0 Elixir.Enumerable.Map:module_info/1 Elixir.Enumerable.Map:reduce/3 -Elixir.Enumerable.MapSet:count/1 +Elixir.Enumerable.Map:slice/1 Elixir.Enumerable.MapSet:__impl__/1 Elixir.Enumerable.MapSet:__info__/1 +Elixir.Enumerable.MapSet:count/1 Elixir.Enumerable.MapSet:member?/2 Elixir.Enumerable.MapSet:module_info/0 Elixir.Enumerable.MapSet:module_info/1 Elixir.Enumerable.MapSet:reduce/3 Elixir.Enumerable.MapSet:slice/1 -Elixir.Enumerable.Map:slice/1 -Elixir.Enumerable:member?/2 -Elixir.Enumerable:module_info/0 -Elixir.Enumerable:module_info/1 -Elixir.Enumerable:__protocol__/1 -Elixir.Enumerable.Range:count/1 Elixir.Enumerable.Range:__impl__/1 Elixir.Enumerable.Range:__info__/1 +Elixir.Enumerable.Range:count/1 Elixir.Enumerable.Range:member?/2 Elixir.Enumerable.Range:module_info/0 Elixir.Enumerable.Range:module_info/1 Elixir.Enumerable.Range:reduce/3 Elixir.Enumerable.Range:slice/1 +Elixir.Enumerable:__info__/1 +Elixir.Enumerable:__protocol__/1 +Elixir.Enumerable:behaviour_info/1 +Elixir.Enumerable:count/1 +Elixir.Enumerable:impl_for!/1 +Elixir.Enumerable:impl_for/1 +Elixir.Enumerable:member?/2 +Elixir.Enumerable:module_info/0 +Elixir.Enumerable:module_info/1 Elixir.Enumerable:reduce/3 Elixir.Enumerable:slice/1 -Elixir.Enum:filter/2 -Elixir.Enum:find/2 -Elixir.Enum:find/3 -Elixir.Enum:find_index/2 -Elixir.Enum:find_value/2 -Elixir.Enum:find_value/3 -Elixir.Enum:flat_map/2 -Elixir.Enum:__info__/1 -Elixir.Enum:into/2 -Elixir.Enum:into/3 -Elixir.Enum:join/1 -Elixir.Enum:join/2 -Elixir.Enum:map/2 -Elixir.Enum:map_join/2 -Elixir.Enum:map_join/3 -Elixir.Enum:member?/2 -Elixir.Enum:module_info/0 -Elixir.Enum:module_info/1 -Elixir.Enum:reduce/3 -Elixir.Enum:reject/2 -Elixir.Enum:reverse/1 -Elixir.Enum:slice/2 -Elixir.Enum:slice/3 -Elixir.Enum:split_with/2 -Elixir.Enum:to_list/1 -Elixir.ErlangError:exception/1 Elixir.ErlangError:__info__/1 +Elixir.ErlangError:__struct__/0 +Elixir.ErlangError:__struct__/1 +Elixir.ErlangError:exception/1 Elixir.ErlangError:message/1 Elixir.ErlangError:module_info/0 Elixir.ErlangError:module_info/1 Elixir.ErlangError:normalize/2 -Elixir.ErlangError:__struct__/0 -Elixir.ErlangError:__struct__/1 +Elixir.Esp.ADC:acquire/4 +Elixir.Esp.ADC:deinit/1 +Elixir.Esp.ADC:init/0 +Elixir.Esp.ADC:release_channel/1 +Elixir.Esp.ADC:sample/3 +Elixir.Exception:__info__/1 Elixir.Exception:behaviour_info/1 Elixir.Exception:blame/3 Elixir.Exception:exception?/1 @@ -1295,24 +1516,26 @@ Elixir.Exception:format_mfa/3 Elixir.Exception:format_stacktrace/0 Elixir.Exception:format_stacktrace/1 Elixir.Exception:format_stacktrace_entry/1 -Elixir.Exception:__info__/1 Elixir.Exception:message/1 Elixir.Exception:module_info/0 Elixir.Exception:module_info/1 Elixir.Exception:normalize/2 Elixir.Exception:normalize/3 -Elixir.Esp.ADC:acquire/4 -Elixir.Esp.ADC:deinit/1 -Elixir.Esp.ADC:init/0 -Elixir.Esp.ADC:release_channel/1 -Elixir.Esp.ADC:sample/3 -Elixir.FunctionClauseError:exception/1 +Elixir.Function:__info__/1 +Elixir.Function:capture/3 +Elixir.Function:identity/1 +Elixir.Function:info/1 +Elixir.Function:info/2 +Elixir.Function:module_info/0 +Elixir.Function:module_info/1 Elixir.FunctionClauseError:__info__/1 +Elixir.FunctionClauseError:__struct__/0 +Elixir.FunctionClauseError:__struct__/1 +Elixir.FunctionClauseError:exception/1 Elixir.FunctionClauseError:message/1 Elixir.FunctionClauseError:module_info/0 Elixir.FunctionClauseError:module_info/1 -Elixir.FunctionClauseError:__struct__/0 -Elixir.FunctionClauseError:__struct__/1 +Elixir.GPIO:__info__/1 Elixir.GPIO:attach_interrupt/2 Elixir.GPIO:close/1 Elixir.GPIO:deep_sleep_hold_dis/0 @@ -1323,7 +1546,6 @@ Elixir.GPIO:digital_read/1 Elixir.GPIO:digital_write/2 Elixir.GPIO:hold_dis/1 Elixir.GPIO:hold_en/1 -Elixir.GPIO:__info__/1 Elixir.GPIO:init/1 Elixir.GPIO:module_info/0 Elixir.GPIO:module_info/1 @@ -1336,10 +1558,10 @@ Elixir.GPIO:set_level/3 Elixir.GPIO:set_pin_mode/2 Elixir.GPIO:set_pin_pull/2 Elixir.GPIO:stop/0 +Elixir.I2C:__info__/1 Elixir.I2C:begin_transmission/2 Elixir.I2C:close/1 Elixir.I2C:end_transmission/1 -Elixir.I2C:__info__/1 Elixir.I2C:module_info/0 Elixir.I2C:module_info/1 Elixir.I2C:open/1 @@ -1349,11 +1571,18 @@ Elixir.I2C:write_byte/2 Elixir.I2C:write_bytes/2 Elixir.I2C:write_bytes/3 Elixir.I2C:write_bytes/4 -Elixir.Integer:floor_div/2 -Elixir.Integer:gcd/2 -Elixir.Integer:__info__/1 +Elixir.IO:__info__/1 +Elixir.IO:chardata_to_string/1 +Elixir.IO:inspect/1 +Elixir.IO:iodata_to_binary/1 +Elixir.IO:module_info/0 +Elixir.IO:module_info/1 +Elixir.IO:puts/1 Elixir.Integer:MACRO-is_even/2 Elixir.Integer:MACRO-is_odd/2 +Elixir.Integer:__info__/1 +Elixir.Integer:floor_div/2 +Elixir.Integer:gcd/2 Elixir.Integer:mod/2 Elixir.Integer:module_info/0 Elixir.Integer:module_info/1 @@ -1361,16 +1590,9 @@ Elixir.Integer:to_charlist/1 Elixir.Integer:to_charlist/2 Elixir.Integer:to_string/1 Elixir.Integer:to_string/2 -Elixir.IO:chardata_to_string/1 -Elixir.IO:__info__/1 -Elixir.IO:inspect/1 -Elixir.IO:iodata_to_binary/1 -Elixir.IO:module_info/0 -Elixir.IO:module_info/1 -Elixir.IO:puts/1 +Elixir.Kernel:__info__/1 Elixir.Kernel:abs/1 Elixir.Kernel:div/2 -Elixir.Kernel:__info__/1 Elixir.Kernel:inspect/1 Elixir.Kernel:inspect/2 Elixir.Kernel:max/2 @@ -1379,18 +1601,19 @@ Elixir.Kernel:module_info/0 Elixir.Kernel:module_info/1 Elixir.Kernel:rem/2 Elixir.Kernel:struct!/1 -Elixir.Kernel:struct/1 Elixir.Kernel:struct!/2 +Elixir.Kernel:struct/1 Elixir.Kernel:struct/2 +Elixir.KeyError:__info__/1 +Elixir.KeyError:__struct__/0 +Elixir.KeyError:__struct__/1 Elixir.KeyError:blame/2 Elixir.KeyError:exception/1 -Elixir.KeyError:__info__/1 Elixir.KeyError:message/1 Elixir.KeyError:message/2 Elixir.KeyError:module_info/0 Elixir.KeyError:module_info/1 -Elixir.KeyError:__struct__/0 -Elixir.KeyError:__struct__/1 +Elixir.Keyword:__info__/1 Elixir.Keyword:delete/2 Elixir.Keyword:fetch!/2 Elixir.Keyword:fetch/2 @@ -1398,7 +1621,6 @@ Elixir.Keyword:get/2 Elixir.Keyword:get/3 Elixir.Keyword:get_lazy/3 Elixir.Keyword:has_key?/2 -Elixir.Keyword:__info__/1 Elixir.Keyword:keyword?/1 Elixir.Keyword:merge/2 Elixir.Keyword:module_info/0 @@ -1409,6 +1631,7 @@ Elixir.Keyword:pop/3 Elixir.Keyword:put/3 Elixir.Keyword:split/2 Elixir.Keyword:take/2 +Elixir.LEDC:__info__/1 Elixir.LEDC:channel_config/1 Elixir.LEDC:fade_func_install/1 Elixir.LEDC:fade_func_uninstall/0 @@ -1418,7 +1641,6 @@ Elixir.LEDC:fade_wait_done/0 Elixir.LEDC:get_duty/2 Elixir.LEDC:get_freq/2 Elixir.LEDC:high_speed_mode/0 -Elixir.LEDC:__info__/1 Elixir.LEDC:low_speed_mode/0 Elixir.LEDC:module_info/0 Elixir.LEDC:module_info/1 @@ -1429,14 +1651,11 @@ Elixir.LEDC:set_freq/3 Elixir.LEDC:stop/3 Elixir.LEDC:timer_config/1 Elixir.LEDC:update_duty/2 -Elixir.List:ascii_printable?/1 -Elixir.List:ascii_printable?/2 Elixir.List.Chars.Atom:__impl__/1 Elixir.List.Chars.Atom:__info__/1 Elixir.List.Chars.Atom:module_info/0 Elixir.List.Chars.Atom:module_info/1 Elixir.List.Chars.Atom:to_charlist/1 -Elixir.List.Chars:behaviour_info/1 Elixir.List.Chars.BitString:__impl__/1 Elixir.List.Chars.BitString:__info__/1 Elixir.List.Chars.BitString:module_info/0 @@ -1447,9 +1666,6 @@ Elixir.List.Chars.Float:__info__/1 Elixir.List.Chars.Float:module_info/0 Elixir.List.Chars.Float:module_info/1 Elixir.List.Chars.Float:to_charlist/1 -Elixir.List.Chars:impl_for!/1 -Elixir.List.Chars:impl_for/1 -Elixir.List.Chars:__info__/1 Elixir.List.Chars.Integer:__impl__/1 Elixir.List.Chars.Integer:__info__/1 Elixir.List.Chars.Integer:module_info/0 @@ -1460,10 +1676,17 @@ Elixir.List.Chars.List:__info__/1 Elixir.List.Chars.List:module_info/0 Elixir.List.Chars.List:module_info/1 Elixir.List.Chars.List:to_charlist/1 +Elixir.List.Chars:__info__/1 +Elixir.List.Chars:__protocol__/1 +Elixir.List.Chars:behaviour_info/1 +Elixir.List.Chars:impl_for!/1 +Elixir.List.Chars:impl_for/1 Elixir.List.Chars:module_info/0 Elixir.List.Chars:module_info/1 -Elixir.List.Chars:__protocol__/1 Elixir.List.Chars:to_charlist/1 +Elixir.List:__info__/1 +Elixir.List:ascii_printable?/1 +Elixir.List:ascii_printable?/2 Elixir.List:delete/2 Elixir.List:duplicate/2 Elixir.List:first/1 @@ -1471,7 +1694,6 @@ Elixir.List:flatten/1 Elixir.List:foldl/3 Elixir.List:foldr/3 Elixir.List:improper?/1 -Elixir.List:__info__/1 Elixir.List:insert_at/3 Elixir.List:keydelete/3 Elixir.List:keyfind/3 @@ -1491,6 +1713,7 @@ Elixir.List:to_string/1 Elixir.List:to_tuple/1 Elixir.List:update_at/3 Elixir.List:wrap/1 +Elixir.Map:__info__/1 Elixir.Map:delete/2 Elixir.Map:equal?/2 Elixir.Map:fetch!/2 @@ -1499,7 +1722,6 @@ Elixir.Map:from_struct/1 Elixir.Map:get/2 Elixir.Map:get/3 Elixir.Map:has_key?/2 -Elixir.Map:__info__/1 Elixir.Map:merge/2 Elixir.Map:module_info/0 Elixir.Map:module_info/1 @@ -1507,12 +1729,14 @@ Elixir.Map:new/1 Elixir.Map:put/3 Elixir.Map:replace!/3 Elixir.Map:replace/3 +Elixir.MapSet:__info__/1 +Elixir.MapSet:__struct__/0 +Elixir.MapSet:__struct__/1 Elixir.MapSet:delete/2 Elixir.MapSet:difference/2 Elixir.MapSet:disjoint?/2 Elixir.MapSet:equal?/2 Elixir.MapSet:filter/2 -Elixir.MapSet:__info__/1 Elixir.MapSet:intersection/2 Elixir.MapSet:member?/2 Elixir.MapSet:module_info/0 @@ -1524,30 +1748,29 @@ Elixir.MapSet:put/2 Elixir.MapSet:reject/2 Elixir.MapSet:size/1 Elixir.MapSet:split_with/2 -Elixir.MapSet:__struct__/0 -Elixir.MapSet:__struct__/1 Elixir.MapSet:subset?/2 Elixir.MapSet:symmetric_difference/2 Elixir.MapSet:to_list/1 Elixir.MapSet:union/2 -Elixir.MatchError:exception/1 Elixir.MatchError:__info__/1 +Elixir.MatchError:__struct__/0 +Elixir.MatchError:__struct__/1 +Elixir.MatchError:exception/1 Elixir.MatchError:message/1 Elixir.MatchError:module_info/0 Elixir.MatchError:module_info/1 -Elixir.MatchError:__struct__/0 -Elixir.MatchError:__struct__/1 -Elixir.Module:concat/2 Elixir.Module:__info__/1 +Elixir.Module:concat/2 Elixir.Module:module_info/0 Elixir.Module:module_info/1 +Elixir.Process:__info__/1 Elixir.Process:alive?/1 Elixir.Process:cancel_timer/1 Elixir.Process:flag/2 Elixir.Process:flag/3 -Elixir.Process:__info__/1 Elixir.Process:info/1 Elixir.Process:info/2 +Elixir.Process:link/1 Elixir.Process:list/0 Elixir.Process:module_info/0 Elixir.Process:module_info/1 @@ -1558,35 +1781,54 @@ Elixir.Process:send_after/4 Elixir.Process:sleep/1 Elixir.Process:spawn/2 Elixir.Process:spawn/4 +Elixir.Process:unlink/1 Elixir.Process:unregister/1 Elixir.Process:whereis/1 -Elixir.Protocol.UndefinedError:exception/1 Elixir.Protocol.UndefinedError:__info__/1 +Elixir.Protocol.UndefinedError:__struct__/0 +Elixir.Protocol.UndefinedError:__struct__/1 +Elixir.Protocol.UndefinedError:exception/1 Elixir.Protocol.UndefinedError:message/1 Elixir.Protocol.UndefinedError:module_info/0 Elixir.Protocol.UndefinedError:module_info/1 -Elixir.Protocol.UndefinedError:__struct__/0 -Elixir.Protocol.UndefinedError:__struct__/1 -Elixir.Range:disjoint?/2 +Elixir.Protocol:MACRO-def/2 +Elixir.Protocol:MACRO-derive/3 +Elixir.Protocol:MACRO-derive/4 +Elixir.Protocol:__before_compile__/1 +Elixir.Protocol:__concat__/2 +Elixir.Protocol:__derive__/3 +Elixir.Protocol:__impl__!/3 +Elixir.Protocol:__impl__/4 +Elixir.Protocol:__info__/1 +Elixir.Protocol:__protocol__/2 +Elixir.Protocol:assert_impl!/2 +Elixir.Protocol:assert_protocol!/1 +Elixir.Protocol:behaviour_info/1 +Elixir.Protocol:consolidate/2 +Elixir.Protocol:consolidated?/1 +Elixir.Protocol:extract_impls/2 +Elixir.Protocol:extract_protocols/1 +Elixir.Protocol:module_info/0 +Elixir.Protocol:module_info/1 Elixir.Range:__info__/1 +Elixir.Range:__struct__/0 +Elixir.Range:__struct__/1 +Elixir.Range:disjoint?/2 Elixir.Range:module_info/0 Elixir.Range:module_info/1 Elixir.Range:new/2 -Elixir.Range:__struct__/0 -Elixir.Range:__struct__/1 -Elixir.RuntimeError:exception/1 Elixir.RuntimeError:__info__/1 +Elixir.RuntimeError:__struct__/0 +Elixir.RuntimeError:__struct__/1 +Elixir.RuntimeError:exception/1 Elixir.RuntimeError:message/1 Elixir.RuntimeError:module_info/0 Elixir.RuntimeError:module_info/1 -Elixir.RuntimeError:__struct__/0 -Elixir.RuntimeError:__struct__/1 Elixir.String.Chars.Atom:__impl__/1 Elixir.String.Chars.Atom:__info__/1 Elixir.String.Chars.Atom:module_info/0 Elixir.String.Chars.Atom:module_info/1 Elixir.String.Chars.Atom:to_string/1 -Elixir.String.Chars:behaviour_info/1 Elixir.String.Chars.BitString:__impl__/1 Elixir.String.Chars.BitString:__info__/1 Elixir.String.Chars.BitString:module_info/0 @@ -1597,9 +1839,6 @@ Elixir.String.Chars.Float:__info__/1 Elixir.String.Chars.Float:module_info/0 Elixir.String.Chars.Float:module_info/1 Elixir.String.Chars.Float:to_string/1 -Elixir.String.Chars:impl_for!/1 -Elixir.String.Chars:impl_for/1 -Elixir.String.Chars:__info__/1 Elixir.String.Chars.Integer:__impl__/1 Elixir.String.Chars.Integer:__info__/1 Elixir.String.Chars.Integer:module_info/0 @@ -1610,50 +1849,52 @@ Elixir.String.Chars.List:__info__/1 Elixir.String.Chars.List:module_info/0 Elixir.String.Chars.List:module_info/1 Elixir.String.Chars.List:to_string/1 +Elixir.String.Chars:__info__/1 +Elixir.String.Chars:__protocol__/1 +Elixir.String.Chars:behaviour_info/1 +Elixir.String.Chars:impl_for!/1 +Elixir.String.Chars:impl_for/1 Elixir.String.Chars:module_info/0 Elixir.String.Chars:module_info/1 -Elixir.String.Chars:__protocol__/1 Elixir.String.Chars:to_string/1 Elixir.System:__info__/1 -Elixir.SystemLimitError:exception/1 -Elixir.SystemLimitError:__info__/1 -Elixir.SystemLimitError:message/1 -Elixir.SystemLimitError:module_info/0 -Elixir.SystemLimitError:module_info/1 -Elixir.SystemLimitError:__struct__/0 -Elixir.SystemLimitError:__struct__/1 Elixir.System:module_info/0 Elixir.System:module_info/1 Elixir.System:monotonic_time/1 Elixir.System:system_time/1 -Elixir.TryClauseError:exception/1 +Elixir.SystemLimitError:__info__/1 +Elixir.SystemLimitError:__struct__/0 +Elixir.SystemLimitError:__struct__/1 +Elixir.SystemLimitError:exception/1 +Elixir.SystemLimitError:message/1 +Elixir.SystemLimitError:module_info/0 +Elixir.SystemLimitError:module_info/1 Elixir.TryClauseError:__info__/1 +Elixir.TryClauseError:__struct__/0 +Elixir.TryClauseError:__struct__/1 +Elixir.TryClauseError:exception/1 Elixir.TryClauseError:message/1 Elixir.TryClauseError:module_info/0 Elixir.TryClauseError:module_info/1 -Elixir.TryClauseError:__struct__/0 -Elixir.TryClauseError:__struct__/1 +Elixir.Tuple:__info__/1 Elixir.Tuple:delete_at/2 Elixir.Tuple:duplicate/2 -Elixir.Tuple:__info__/1 Elixir.Tuple:insert_at/3 Elixir.Tuple:module_info/0 Elixir.Tuple:module_info/1 Elixir.Tuple:to_list/1 +Elixir.UndefinedFunctionError:__info__/1 +Elixir.UndefinedFunctionError:__struct__/0 +Elixir.UndefinedFunctionError:__struct__/1 Elixir.UndefinedFunctionError:blame/2 Elixir.UndefinedFunctionError:exception/1 -Elixir.UndefinedFunctionError:__info__/1 Elixir.UndefinedFunctionError:message/1 Elixir.UndefinedFunctionError:module_info/0 Elixir.UndefinedFunctionError:module_info/1 -Elixir.UndefinedFunctionError:__struct__/0 -Elixir.UndefinedFunctionError:__struct__/1 -Elixir.WithClauseError:exception/1 Elixir.WithClauseError:__info__/1 +Elixir.WithClauseError:__struct__/0 +Elixir.WithClauseError:__struct__/1 +Elixir.WithClauseError:exception/1 Elixir.WithClauseError:message/1 Elixir.WithClauseError:module_info/0 Elixir.WithClauseError:module_info/1 -Elixir.WithClauseError:__struct__/0 -Elixir.WithClauseError:__struct__/1 -elixir_env:to_caller/1 -elixir_erl_pass:no_parens_remote/2 diff --git a/scripts/analyze_funcs_diff.exs b/scripts/analyze_funcs_diff.exs new file mode 100644 index 0000000..6f52657 --- /dev/null +++ b/scripts/analyze_funcs_diff.exs @@ -0,0 +1,83 @@ +#!/usr/bin/env elixir + +defmodule FuncsDiffAnalyzer do + @moduledoc """ + Analyzes git diff output for priv/funcs.txt to identify actual content changes. + + This script distinguishes between functions that are genuinely added/removed + versus functions that are simply reordered due to sorting changes. + It provides a mathematical consistency check between git diff statistics + and actual content changes. + """ + + @funcs_txt_path "priv/funcs.txt" + def run do + case System.cmd("git", ["diff", @funcs_txt_path], stderr_to_stdout: true) do + {output, 0} when output != "" -> output |> parse_and_analyze() |> display_results() + {_, 0} -> IO.puts("\nNo changes detected") + {error, _} -> IO.puts("Error: #{error}") + end + end + + defp parse_and_analyze(diff_output) do + {added, removed} = + diff_output + |> String.split("\n") + |> Enum.reduce({[], []}, fn + "+" <> line, {adds, removes} -> + if String.starts_with?(line, "++"), do: {adds, removes}, else: {[line | adds], removes} + + "-" <> line, {adds, removes} -> + if String.starts_with?(line, "--"), do: {adds, removes}, else: {adds, [line | removes]} + + _, acc -> + acc + end) + + added_set = MapSet.new(added) + removed_set = MapSet.new(removed) + reordered = MapSet.intersection(added_set, removed_set) + + {MapSet.difference(added_set, reordered) |> Enum.sort(), + MapSet.difference(removed_set, reordered) |> Enum.sort(), length(added), length(removed)} + end + + defp display_results({actual_added, actual_removed, total_added, total_removed}) do + git_net = total_added - total_removed + content_net = length(actual_added) - length(actual_removed) + + IO.puts("\nGit diff: +#{total_added} -#{total_removed} = #{git_net} net lines") + + IO.puts( + "Content: +#{length(actual_added)} -#{length(actual_removed)} = #{content_net} net functions" + ) + + IO.puts( + "Math check: #{if git_net == content_net, do: "āœ… CONSISTENT", else: "āŒ INCONSISTENT"}" + ) + + case {actual_added, actual_removed} do + {[], []} -> + IO.puts("\nšŸ”„ All changes are due to reordering") + + {funcs, []} -> + show_functions("šŸ“ˆ NEW", funcs) + + {[], funcs} -> + show_functions("šŸ“‰ REMOVED", funcs) + + {new_funcs, old_funcs} -> + [show_functions("šŸ“ˆ NEW", new_funcs), show_functions("šŸ“‰ REMOVED", old_funcs)] + end + end + + defp show_functions(label, funcs) do + IO.puts("\n#{label} FUNCTIONS (#{length(funcs)}):") + + funcs + |> Enum.each(&IO.puts(" #{if String.contains?(label, "NEW"), do: "+", else: "-"} #{&1}")) + end +end + +# Run the analysis +#FuncsDiffAnalyzer.run() diff --git a/scripts/update_all_funcs.exs b/scripts/update_all_funcs.exs new file mode 100644 index 0000000..6743a75 --- /dev/null +++ b/scripts/update_all_funcs.exs @@ -0,0 +1,133 @@ +#!/usr/bin/env elixir + +Code.require_file("analyze_funcs_diff.exs", __DIR__) +defmodule AllFuncsUpdater do + @moduledoc """ + Script to update priv/funcs.txt with all available functions from AtomVM sources. + By default, assumes AtomVM is in the same parent directory as ExAtomVM and that + AtomVM has been built in the AtomVM/build directory. + + Usage: + elixir scripts/update_all_funcs.exs [atomvm_path] + + If atomvm_path is not provided, defaults to "../AtomVM". + + Updates priv/funcs.txt with all available functions from AtomVM sources. + + This script extracts functions from three sources: + 1. NIFs from nifs.gperf file + 2. Erlang beam files from eavmlib + 3. Elixir beam files from exavmlib + + Functions ending with '_nif' are filtered out as they are internal + implementation details. The final list is sorted with Erlang functions + first, followed by Elixir functions. + """ + @default_atomvm_path "../AtomVM" + @nifs_gperf_path "src/libAtomVM/nifs.gperf" + @estdlib_beam_path "build/libs/estdlib/src/beams" + @erlang_beam_path "build/libs/eavmlib/src/beams" + @elixir_beam_path "build/libs/exavmlib/lib/beams" + @funcs_txt_path "priv/funcs.txt" + + def default_atomvm_path, do: @default_atomvm_path + + def run(atomvm_path \\ @default_atomvm_path) do + IO.puts("Updating #{@funcs_txt_path}...") + IO.puts("Using AtomVM path: #{atomvm_path}") + + try do + nifs = extract_nifs(atomvm_path) + beams = extract_beams(atomvm_path) + + all_funcs = (read_current() ++ nifs ++ beams) + |> Enum.uniq() + |> sort_erlang_first() + + File.write!(@funcs_txt_path, Enum.join(all_funcs, "\n") <> "\n") + IO.puts("Total: #{length(all_funcs)} (nifs: #{length(nifs)}, beams: #{length(beams)})") + rescue + e in File.Error -> + IO.puts("File error: #{e.reason} - #{e.path}") + System.halt(1) + e -> + IO.puts("Unexpected error: #{inspect(e)}") + System.halt(1) + end + end + + defp read_current do + if File.exists?(@funcs_txt_path) do + @funcs_txt_path + |> File.read!() + |> String.split("\n", trim: true) + |> Enum.reject(&String.contains?(&1, "_nif/")) + else + [] + end + end + + defp extract_nifs(atomvm_path) do + path = Path.join(atomvm_path, @nifs_gperf_path) + + if File.exists?(path) do + path + |> File.stream!() + |> Stream.filter(&(String.contains?(&1, ":") and Regex.match?(~r/\/[0-9]/, &1))) + |> Stream.map(&(&1 |> String.split(",", parts: 2) |> hd() |> String.trim())) + |> Stream.reject(&(String.contains?(&1, "_nif/") or &1 == "")) + |> Enum.to_list() + else + [] + end + end + + defp extract_beams(atomvm_path) do + [@estdlib_beam_path, @erlang_beam_path, @elixir_beam_path] + |> Enum.map(&Path.join(atomvm_path, &1)) + |> Enum.flat_map(&extract_from_dir/1) + |> Enum.uniq() + end + + defp extract_from_dir(path) do + if File.exists?(path) do + path + |> File.ls!() + |> Enum.filter(&String.ends_with?(&1, ".beam")) + |> Enum.flat_map(&extract_from_beam(Path.join(path, &1))) + else + [] + end + end + + defp extract_from_beam(beam_path) do + case :beam_lib.chunks(String.to_charlist(beam_path), [:exports]) do + {:ok, {module, [{:exports, exports}]}} -> + module_name = Atom.to_string(module) + exports |> Enum.map(fn {f, a} -> "#{module_name}:#{f}/#{a}" end) |> Enum.reject(&String.contains?(&1, "_nif/")) + {:error, :beam_lib, {:file_error, _, reason}} -> + IO.puts("Warning: Could not read beam file #{beam_path}: #{reason}") + [] + _ -> + IO.puts("Warning: Unexpected format in beam file #{beam_path}") + [] + end + end + + defp sort_erlang_first(funcs) do + {elixir, erlang} = Enum.split_with(funcs, &String.starts_with?(&1, "Elixir.")) + Enum.sort(erlang) ++ Enum.sort(elixir) + end +end + +# Run the script +atomvm_path = case System.argv() do + [path] -> path + [] -> AllFuncsUpdater.default_atomvm_path() + _ -> + IO.puts("Usage: elixir scripts/update_all_funcs.exs [atomvm_path]") + System.halt(1) +end + +AllFuncsUpdater.run(atomvm_path) +FuncsDiffAnalyzer.run()