diff options
author | José Valim <jose.valim@dashbit.co> | 2023-05-07 12:56:57 +0200 |
---|---|---|
committer | José Valim <jose.valim@dashbit.co> | 2023-05-07 12:56:57 +0200 |
commit | 90dd12a5ba480feae1531e7f0cab85b2c998caf6 (patch) | |
tree | f3df6bbcc393d75362215dd26c486a8d9dcaca24 | |
parent | 38306173ffca78f833f507e702fdeecdbe6ea322 (diff) | |
download | elixir-90dd12a5ba480feae1531e7f0cab85b2c998caf6.tar.gz |
Do not import _info functions from Erlang
-rw-r--r-- | lib/elixir/src/elixir_import.erl | 16 | ||||
-rw-r--r-- | lib/elixir/test/elixir/kernel/import_test.exs | 12 |
2 files changed, 18 insertions, 10 deletions
diff --git a/lib/elixir/src/elixir_import.erl b/lib/elixir/src/elixir_import.erl index b13b75b80..171a7cb87 100644 --- a/lib/elixir/src/elixir_import.erl +++ b/lib/elixir/src/elixir_import.erl @@ -114,15 +114,12 @@ calculate(Meta, Key, Opts, Old, File, Existing) -> end, %% Normalize the data before storing it - Set = ordsets:from_list(New), - Final = remove_internals(Set), - - case Final of + case ordsets:from_list(New) of [] -> {false, keydelete(Key, Old)}; - _ -> - ensure_no_special_form_conflict(Meta, File, Key, Final), - {true, [{Key, Final} | keydelete(Key, Old)]} + Set -> + ensure_no_special_form_conflict(Meta, File, Key, Set), + {true, [{Key, Set} | keydelete(Key, Old)]} end. %% Retrieve functions and macros from modules @@ -134,7 +131,7 @@ get_functions(Module) -> try Module:'__info__'(functions) catch - error:undef -> Module:module_info(exports) + error:undef -> remove_internals(Module:module_info(exports)) end. get_macros(Module) -> @@ -243,8 +240,7 @@ remove_underscored(List) -> end, List). remove_internals(Set) -> - ordsets:del_element({module_info, 1}, - ordsets:del_element({module_info, 0}, Set)). + Set -- [{behaviour_info, 1}, {module_info, 1}, {module_info, 0}]. %% Special forms diff --git a/lib/elixir/test/elixir/kernel/import_test.exs b/lib/elixir/test/elixir/kernel/import_test.exs index d5145a92d..8b39698a9 100644 --- a/lib/elixir/test/elixir/kernel/import_test.exs +++ b/lib/elixir/test/elixir/kernel/import_test.exs @@ -143,6 +143,18 @@ defmodule Kernel.ImportTest do assert flatten([1, [2], 3]) == [1, 2, 3] end + test "does not import *_info in Erlang" do + import :gen_server, warn: false + assert Macro.Env.lookup_import(__ENV__, {:module_info, 1}) == [] + assert Macro.Env.lookup_import(__ENV__, {:behaviour_info, 1}) == [] + end + + test "does not import *_info in Elixir" do + import GenServer, warn: false + assert Macro.Env.lookup_import(__ENV__, {:module_info, 1}) == [] + assert Macro.Env.lookup_import(__ENV__, {:behaviour_info, 1}) == [] + end + defmodule ModuleWithSigils do def sigil_i(string, []), do: String.to_integer(string) |