@@ -71,7 +71,7 @@ defmodule Module.ParallelChecker do
71
71
{ ^ ref , :cache } ->
72
72
Process . link ( pid )
73
73
74
- module_tuple =
74
+ { mode , module_tuple } =
75
75
cond do
76
76
is_binary ( info ) ->
77
77
location =
@@ -86,13 +86,15 @@ defmodule Module.ParallelChecker do
86
86
{ :ok , module_map } <- backend . debug_info ( :elixir_v1 , module , data , [ ] ) do
87
87
cache_from_module_map ( table , module_map )
88
88
else
89
- _ -> nil
89
+ _ -> { :not_found , nil }
90
90
end
91
91
92
92
is_tuple ( info ) ->
93
93
info
94
94
end
95
95
96
+ # We only make the module available now, so they are not visible during inference
97
+ :ets . insert ( table , { module , mode } )
96
98
send ( checker , { ref , :cached } )
97
99
98
100
receive do
@@ -416,21 +418,22 @@ defmodule Module.ParallelChecker do
416
418
true ->
417
419
{ mode , exports } = info_exports ( module )
418
420
deprecated = info_deprecated ( module )
419
- cache_info ( table , module , exports , deprecated , % { } , mode )
421
+ cache_info ( table , module , exports , deprecated , % { } )
422
+ mode
420
423
421
424
false ->
422
425
# Or load exports from chunk
423
426
with { ^ module , binary , _filename } <- object_code ,
424
427
{ :ok , { ^ module , [ exports: exports ] } } <- :beam_lib . chunks ( binary , [ :exports ] ) do
425
- cache_info ( table , module , exports , % { } , % { } , :erlang )
428
+ cache_info ( table , module , exports , % { } , % { } )
429
+ :erlang
426
430
else
427
- _ ->
428
- :ets . insert ( table , { module , :not_found } )
429
- nil
431
+ _ -> :not_found
430
432
end
431
433
end
432
434
end
433
435
436
+ :ets . insert ( table , { module , mode } )
434
437
unlock ( checker , module , mode )
435
438
end
436
439
end
@@ -461,26 +464,15 @@ defmodule Module.ParallelChecker do
461
464
behaviour_exports ( map ) ++
462
465
for ( { function , :def , _meta , _clauses } <- map . definitions , do: function )
463
466
464
- cache_info (
465
- table ,
466
- map . module ,
467
- exports ,
468
- Map . new ( map . deprecated ) ,
469
- map . signatures ,
470
- elixir_mode ( map . attributes )
471
- )
472
-
473
- module_map_to_module_tuple ( map )
467
+ cache_info ( table , map . module , exports , Map . new ( map . deprecated ) , map . signatures )
468
+ { elixir_mode ( map . attributes ) , module_map_to_module_tuple ( map ) }
474
469
end
475
470
476
- defp cache_info ( table , module , exports , deprecated , sigs , mode ) do
471
+ defp cache_info ( table , module , exports , deprecated , sigs ) do
477
472
Enum . each ( exports , fn fa ->
478
473
reason = Map . get ( deprecated , fa )
479
474
:ets . insert ( table , { { module , fa } , reason , Map . get ( sigs , fa , :none ) } )
480
475
end )
481
-
482
- :ets . insert ( table , { module , mode } )
483
- mode
484
476
end
485
477
486
478
defp cache_chunk ( table , module , contents ) do
@@ -497,9 +489,7 @@ defmodule Module.ParallelChecker do
497
489
)
498
490
end )
499
491
500
- mode = Map . get ( contents , :mode , :elixir )
501
- :ets . insert ( table , { module , mode } )
502
- mode
492
+ Map . get ( contents , :mode , :elixir )
503
493
end
504
494
505
495
defp behaviour_exports ( % { defines_behaviour: true } ) , do: [ { :behaviour_info , 1 } ]
0 commit comments