Packages
geas
2.7.6
2.11.1
2.11.0
retired
2.10.1
2.10.0
retired
2.9.9
2.9.8
2.9.7
2.9.6
2.9.5
2.9.4
2.9.2
2.9.1
2.9.0
2.8.1
2.8.0
2.7.14
2.7.13
2.7.12
2.7.11
2.7.10
2.7.9
2.7.8
2.7.7
2.7.6
2.7.5
2.7.4
2.7.3
2.7.2
2.7.1
2.7.0
2.6.2
2.6.1
2.6.0
retired
2.5.1
2.5.0
retired
2.4.6
2.4.5
retired
2.4.4
retired
2.4.3
retired
2.4.2
retired
2.4.1
retired
2.4.0
2.3.0
2.2.0
Guess Erlang Application Scattering
Current section
Files
Jump to
Current section
Files
src/geas_calls.hrl
%%-------------------------------------------------------------------------
%% @doc Extract remote call of external functions in abstract code
%% @end
%%-------------------------------------------------------------------------
-spec get_remote_call(tuple(), list()) -> list().
get_remote_call({call,_,{atom,_, F}, Args}, Exp)
when is_list(Args)->
Arity = length(Args),
Z = lists:any(fun({_, A, B}) -> ((A == F) andalso (B == Arity)) end, Exp),
X = case Z of
false -> {erlang, F, Arity};
true -> []
end,
[X, lists:flatmap(fun(X_) -> get_remote_call(X_, Exp) end, Args)] ;
get_remote_call({call,_, {remote,_,{atom, _,M},{atom, _, F}}, Args}, Exp)
when is_list(Args)-> [{M, F, length(Args)}, lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, Args)] ;
get_remote_call({call,_, {remote,_,{var,_,M},{atom,_,F}}, Args}, Exp)
when is_list(Args)-> [{M, F, length(Args)}, lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, Args)] ;
get_remote_call({_, _, _, L1, L2, L3}, Exp)
when is_list(L1),
is_list(L2),
is_list(L3) -> [lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, L1),
lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, L2),
lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, L3)];
get_remote_call({_, _, _, _, L}, Exp) when is_list(L) -> lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, L) ;
get_remote_call({'case', _, {call, A, B, C}, L}, Exp) -> [get_remote_call({call, A, B, C}, Exp), lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, L)] ;
get_remote_call({_, _, _, _, _}, _Exp) -> [] ;
get_remote_call({_, _, _, L}, Exp) when is_list(L) -> lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, L) ;
get_remote_call({_, _, _, T}, Exp) when is_tuple(T) -> get_remote_call(T, Exp) ;
get_remote_call({_, _, _, _}, _Exp) -> [] ;
get_remote_call({_, _, L}, Exp) when is_list(L) -> lists:flatmap(fun(X) -> get_remote_call(X, Exp) end, L) ;
get_remote_call({_, _, _}, _Exp) -> [] ;
get_remote_call({_, _}, _Exp) -> [] ;
get_remote_call(_I, _Exp) when is_integer(_I) -> [];
get_remote_call(_A, _Exp) when is_atom(_A) -> [];
get_remote_call(_Z, _Exp) -> io:format("Missed : ~p~n", [_Z]),
?LOG(geas_logs,{debug, unhandled, _Z}),
[].