@@ -37,9 +37,11 @@ fun_for(Meta, Module, Name, Arity, Kinds, External) ->
3737 {[{_ , Kind , LocalMeta , _ , _ , _ }], ClausesPairs } ->
3838 case (Kinds == all ) orelse (lists :member (Kind , Kinds )) of
3939 true ->
40- Local = {value , fun (Fun , Args ) -> invoke_local (Meta , Module , Fun , Args , External ) end },
40+ TrackLocal = (Kind == defmacrop ),
41+ TrackLocal andalso track_local (Module , Tuple ),
42+ Local = {value , fun (Fun , Args ) -> invoke_local (Meta , Module , Fun , Args , TrackLocal , External ) end },
4143 Clauses = [Clause || {_ , Clause } <- ClausesPairs ],
42- elixir_erl :definition_to_anonymous (Kind , LocalMeta , Clauses , Local , External );
44+ { Kind , elixir_erl :definition_to_anonymous (Kind , LocalMeta , Clauses , Local , External )} ;
4345 false ->
4446 false
4547 end ;
@@ -49,17 +51,22 @@ fun_for(Meta, Module, Name, Arity, Kinds, External) ->
4951 _ :_ -> false
5052 end .
5153
52- invoke_local (Meta , Module , ErlName , Args , External ) ->
54+ invoke_local (Meta , Module , ErlName , Args , TrackLocal , External ) ->
5355 {Name , Arity } = elixir_utils :erl_fa_to_elixir_fa (ErlName , length (Args )),
5456
5557 case fun_for (Meta , Module , Name , Arity , all , External ) of
5658 false ->
5759 {current_stacktrace , [_ | T ]} = erlang :process_info (self (), current_stacktrace ),
5860 erlang :raise (error , undef , [{Module , Name , Arity , []} | T ]);
59- Fun ->
61+ {Kind , Fun } ->
62+ (TrackLocal and (Kind == defp )) andalso track_local (Module , {Name , Arity }),
6063 apply (Fun , Args )
6164 end .
6265
66+ track_local (Module , FunArity ) ->
67+ {_ , Bag } = elixir_module :data_tables (Module ),
68+ ets :insert (Bag , {macro_private_calls , FunArity }).
69+
6370invoke_external (Meta , Mod , Name , Args , E ) ->
6471 is_map (E ) andalso elixir_env :trace ({require , Meta , Mod , []}, E ),
6572 apply (Mod , Name , Args ).
0 commit comments