Skip to content

Commit 8d524ef

Browse files
author
José Valim
committed
Fix bootstrap issues
Signed-off-by: José Valim <[email protected]>
1 parent 83cb515 commit 8d524ef

File tree

9 files changed

+37
-42
lines changed

9 files changed

+37
-42
lines changed

lib/elixir/lib/macro.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -833,7 +833,7 @@ defmodule Macro do
833833
:elixir_lexical.record_remote(receiver, env.lexical_tracker)
834834
{receiver, true}
835835
aliases ->
836-
aliases = for alias <- aliases, do: elem(do_expand_once(alias, env), 0)
836+
aliases = :lists.map(&elem(do_expand_once(&1, env), 0), aliases)
837837

838838
case :lists.all(&is_atom/1, aliases) do
839839
true ->

lib/elixir/lib/module.ex

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -684,18 +684,18 @@ defmodule Module do
684684
def make_overridable(module, tuples) do
685685
assert_not_compiled!(:make_overridable, module)
686686

687-
for tuple <- tuples do
687+
:lists.foreach(fn tuple ->
688688
case :elixir_def.lookup_definition(module, tuple) do
689689
false ->
690690
{name, arity} = tuple
691691
raise "Cannot make function #{name}/#{arity} overridable because it was not defined"
692692
clause ->
693693
:elixir_def.delete_definition(module, tuple)
694694

695-
neighbours = if loaded?(Module.LocalsTracker) do
696-
Module.LocalsTracker.yank(module, tuple)
697-
else
695+
neighbours = if :elixir_compiler.get_opt(:internal) do
698696
[]
697+
else
698+
Module.LocalsTracker.yank(module, tuple)
699699
end
700700

701701
old = :elixir_def_overridable.overridable(module)
@@ -704,7 +704,7 @@ defmodule Module do
704704
end, {1, clause, neighbours, false}, old)
705705
:elixir_def_overridable.overridable(module, merged)
706706
end
707-
end
707+
end, tuples)
708708
end
709709

710710
@doc """
@@ -967,6 +967,4 @@ defmodule Module do
967967
raise ArgumentError,
968968
"could not call #{fun} on module #{inspect module} because it was already compiled"
969969
end
970-
971-
defp loaded?(module), do: is_tuple :code.is_loaded(module)
972970
end

lib/elixir/lib/protocol.ex

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ defmodule Protocol do
1919
defmacro def({name, _, args}) when is_atom(name) and is_list(args) do
2020
arity = length(args)
2121

22-
type_args = for _ <- :lists.seq(2, arity), do: quote(do: term)
22+
type_args = :lists.map(fn _ -> quote(do: term) end,
23+
:lists.seq(2, arity))
2324
type_args = [quote(do: t) | type_args]
2425

25-
call_args = for i <- :lists.seq(2, arity),
26-
do: {String.to_atom(<<?x, i + 64>>), [], __MODULE__}
26+
call_args = :lists.map(fn i -> {String.to_atom(<<?x, i + 64>>), [], __MODULE__} end,
27+
:lists.seq(2, arity))
2728
call_args = [quote(do: t) | call_args]
2829

2930
quote do
@@ -440,7 +441,7 @@ defmodule Protocol do
440441
end
441442

442443
# Define the implementation for builtins.
443-
for {guard, mod} <- builtin do
444+
:lists.foreach(fn {guard, mod} ->
444445
target = Module.concat(__MODULE__, mod)
445446

446447
Kernel.def impl_for(data) when :erlang.unquote(guard)(data) do
@@ -449,7 +450,7 @@ defmodule Protocol do
449450
false -> any_impl_for
450451
end
451452
end
452-
end
453+
end, builtin)
453454

454455
@spec impl_for!(term) :: atom() | no_return()
455456
Kernel.def impl_for!(data) do
@@ -609,16 +610,17 @@ defmodule Protocol do
609610
@doc false
610611
def __spec__?(module, name, arity) do
611612
signature = {name, arity}
612-
specs = Module.get_attribute(module, :spec)
613613

614+
specs = Module.get_attribute(module, :spec)
614615
found =
615-
for {:spec, expr, caller} <- specs,
616-
Kernel.Typespec.spec_to_signature(expr) == signature do
617-
Kernel.Typespec.define_spec(:callback, expr, caller)
618-
true
619-
end
616+
:lists.map(fn {:spec, expr, caller} ->
617+
if Kernel.Typespec.spec_to_signature(expr) == signature do
618+
Kernel.Typespec.define_spec(:callback, expr, caller)
619+
true
620+
end
621+
end, specs)
620622

621-
found != []
623+
:lists.any(& &1 == true, found)
622624
end
623625

624626
## Helpers

lib/elixir/src/elixir_bootstrap.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ define({Line,E}, Kind, Call, Expr) ->
4444
unless_loaded(Fun, Args, Callback) ->
4545
case code:is_loaded(?kernel) of
4646
{_, _} -> apply(?kernel, Fun, Args);
47-
false -> Callback()
47+
false -> Callback()
4848
end.
4949

5050
env() ->

lib/elixir/src/elixir_code_server.erl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,8 @@ start_link() ->
3030

3131
init(ok) ->
3232
%% We attempt to load those modules here so throughout
33-
%% the codebase we can use a code:is_loaded/1 check on
34-
%% bootstrap instead of using the more expensive
35-
%% code:ensure_loaded/1 multiple times.
33+
%% the codebase we can avoid code:is_loaded/1 checks.
3634
_ = code:ensure_loaded('Elixir.Macro.Env'),
37-
_ = code:ensure_loaded('Elixir.Module.LocalsTracker'),
38-
_ = code:ensure_loaded('Elixir.Kernel.LexicalTracker'),
3935

4036
%% The table where we store module definitions
4137
_ = ets:new(elixir_modules, [set, protected, named_table, {read_concurrency, true}]),

lib/elixir/src/elixir_def_overridable.erl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ store(Module, Function, GenerateName) ->
4747
false -> {Kind, Name}
4848
end,
4949

50-
case code:is_loaded('Elixir.Module.LocalsTracker') of
51-
{_, _} ->
50+
case elixir_compiler:get_opt(internal) of
51+
false ->
5252
'Elixir.Module.LocalsTracker':reattach(Module, Kind, {Name, Arity}, Neighbours);
53-
_ ->
53+
true ->
5454
ok
5555
end,
5656

lib/elixir/src/elixir_lexical.erl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
-define(tracker, 'Elixir.Kernel.LexicalTracker').
1111

1212
run(File, Dest, Callback) ->
13-
case code:is_loaded(?tracker) of
14-
{file, _} ->
13+
case elixir_compiler:get_opt(internal) of
14+
false ->
1515
{ok, Pid} = ?tracker:start_link(Dest),
1616
try
1717
Callback(Pid)
@@ -20,7 +20,7 @@ run(File, Dest, Callback) ->
2020
warn_unused_imports(File, Pid),
2121
unlink(Pid), ?tracker:stop(Pid)
2222
end;
23-
false ->
23+
true ->
2424
Callback(nil)
2525
end.
2626

lib/elixir/src/elixir_locals.erl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ rewrite_clause(Else, _) -> Else.
7272
%% TRACKING
7373

7474
setup(Module) ->
75-
case code:is_loaded(?tracker) of
76-
{file, _} ->
75+
case elixir_compiler:get_opt(internal) of
76+
false ->
7777
{ok, Pid} = ?tracker:start_link(),
7878
ets:insert(elixir_module:data_table(Module), {?attr, Pid}),
7979
ok;
80-
false ->
80+
true ->
8181
ok
8282
end.
8383

lib/elixir/src/elixir_module.erl

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ process_external_resource(Line, File, Value) ->
202202
%% Types
203203

204204
types_form(Line, File, Data, Forms0) ->
205-
case code:ensure_loaded('Elixir.Kernel.Typespec') of
206-
{module, 'Elixir.Kernel.Typespec'} ->
205+
case elixir_compiler:get_opt(internal) of
206+
false ->
207207
Types0 = get_typespec(Data, type) ++ get_typespec(Data, typep)
208208
++ get_typespec(Data, opaque),
209209

@@ -215,7 +215,7 @@ types_form(Line, File, Data, Forms0) ->
215215
Forms2 = export_types_attributes(Types1, Forms1),
216216
typedocs_attributes(Types1, Forms2);
217217

218-
{error, _} ->
218+
true ->
219219
Forms0
220220
end.
221221

@@ -246,17 +246,16 @@ typedocs_attributes(Types, Forms) ->
246246
%% Specs
247247

248248
specs_form(Data, Defmacro, Defmacrop, Forms) ->
249-
case code:ensure_loaded('Elixir.Kernel.Typespec') of
250-
{module, 'Elixir.Kernel.Typespec'} ->
249+
case elixir_compiler:get_opt(internal) of
250+
false ->
251251
Specs0 = get_typespec(Data, spec) ++ get_typespec(Data, callback),
252252
Specs1 = ['Elixir.Kernel.Typespec':translate_spec(Kind, Expr, Caller) ||
253253
{Kind, Expr, Caller} <- Specs0],
254254
Specs2 = lists:flatmap(fun(Spec) ->
255255
translate_macro_spec(Spec, Defmacro, Defmacrop)
256256
end, Specs1),
257257
specs_attributes(Forms, Specs2);
258-
259-
{error, _} ->
258+
true ->
260259
Forms
261260
end.
262261

0 commit comments

Comments
 (0)