summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@dashbit.co>2023-05-07 12:56:57 +0200
committerJosé Valim <jose.valim@dashbit.co>2023-05-07 12:56:57 +0200
commit90dd12a5ba480feae1531e7f0cab85b2c998caf6 (patch)
treef3df6bbcc393d75362215dd26c486a8d9dcaca24
parent38306173ffca78f833f507e702fdeecdbe6ea322 (diff)
downloadelixir-90dd12a5ba480feae1531e7f0cab85b2c998caf6.tar.gz
Do not import _info functions from Erlang
-rw-r--r--lib/elixir/src/elixir_import.erl16
-rw-r--r--lib/elixir/test/elixir/kernel/import_test.exs12
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)