diff --git a/lib/elixir/src/elixir_code_server.erl b/lib/elixir/src/elixir_code_server.erl index 4141be1134..1709b33e16 100644 --- a/lib/elixir/src/elixir_code_server.erl +++ b/lib/elixir/src/elixir_code_server.erl @@ -37,6 +37,9 @@ handle_call({defmodule, Pid, Tuple}, _From, Config) -> {Ref, New} = defmodule(Pid, Tuple, Config), {reply, Ref, New}; +handle_call({lookup, Module}, _From, Config) -> + {reply, ets:lookup(elixir_modules, Module), Config}; + handle_call({undefmodule, Ref}, _From, Config) -> {reply, ok, undefmodule(Ref, Config)}; @@ -63,7 +66,7 @@ handle_call({compilation_status, CompilerPid}, _From, Config) -> {reply, CompilationStatus, Config#elixir_code_server{compilation_status=CompilationStatusListNew}}; -handle_call(retrieve_module_name, _From, Config) -> +handle_call(retrieve_compiler_module, _From, Config) -> case Config#elixir_code_server.mod_pool of {[H | T], Counter} -> {reply, module_tuple(H), Config#elixir_code_server{mod_pool={T, Counter}}}; @@ -107,7 +110,7 @@ handle_cast({unload_files, Files}, Config) -> Unloaded = maps:without(Files, Current), {noreply, Config#elixir_code_server{loaded=Unloaded}}; -handle_cast({return_module_name, H}, #elixir_code_server{mod_pool={T, Counter}} = Config) -> +handle_cast({return_compiler_module, H}, #elixir_code_server{mod_pool={T, Counter}} = Config) -> {noreply, Config#elixir_code_server{mod_pool={[H | T], Counter}}}; handle_cast(Request, Config) -> diff --git a/lib/elixir/src/elixir_compiler.erl b/lib/elixir/src/elixir_compiler.erl index baaf026c10..01d5e984f3 100644 --- a/lib/elixir/src/elixir_compiler.erl +++ b/lib/elixir/src/elixir_compiler.erl @@ -71,7 +71,7 @@ code_loading_compilation(Forms, Vars, #{line := Line} = E) -> S = elixir_env:env_to_scope_with_vars(E, Dict), {Expr, EE, _S} = elixir:quoted_to_erl(Forms, E, S), - {Module, I} = retrieve_module_name(), + {Module, I} = retrieve_compiler_module(), Fun = code_fun(?m(E, module)), Form = code_mod(Fun, Expr, Line, ?m(E, file), Module, Vars), Args = list_to_tuple([V || {_, _, _, V} <- Vars]), @@ -126,7 +126,7 @@ dispatch_loaded(Module, Fun, Args, Purgeable, I, E) -> code:delete(Module), if Purgeable -> code:purge(Module), - return_module_name(I); + return_compiler_module(I); true -> ok end, @@ -151,11 +151,11 @@ code_mod(Fun, Expr, Line, File, Module, Vars) when is_binary(File), is_integer(L ]} ]. -retrieve_module_name() -> - elixir_code_server:call(retrieve_module_name). +retrieve_compiler_module() -> + elixir_code_server:call(retrieve_compiler_module). -return_module_name(I) -> - elixir_code_server:cast({return_module_name, I}). +return_compiler_module(I) -> + elixir_code_server:cast({return_compiler_module, I}). allows_fast_compilation({'__block__', _, Exprs}) -> lists:all(fun allows_fast_compilation/1, Exprs); diff --git a/lib/elixir/src/elixir_module.erl b/lib/elixir/src/elixir_module.erl index 9defa40ac7..de6abe30e0 100644 --- a/lib/elixir/src/elixir_module.erl +++ b/lib/elixir/src/elixir_module.erl @@ -148,7 +148,7 @@ compile_undef(Module, Fun, Arity, Stack) -> %% Hook that builds both attribute and functions and set up common hooks. build(Line, File, Module, Docs, Lexical) -> - case ets:lookup(elixir_modules, Module) of + case elixir_code_server:call({lookup, Module}) of [{Module, _, _, OldLine, OldFile}] -> Error = {module_in_definition, Module, OldFile, OldLine}, elixir_errors:form_error([{line, Line}], File, ?MODULE, Error);