1-module(read). 2 3-export([lc/0, funfuns/0, bi/0]). 4 5-xref({xx,ff,22}). 6-xref({{all,0},{no,0}}). 7-xref([{{all,0},{i,0}},{{all,0},{x2,5}}]). 8-xref([apa]). 9-xref({all,0}). 10-xref([{{{all},0},{no,0}},{{all,0},{m,x2,5}}]). 11-xref([{{a,14},{q,f,17}}]). 12-xref({{i,f,17},{g,18}}). 13-xref({{j,f,17},{i,g,18}}). 14 15-xref({{funfuns,0},{'$F_EXPR',177}}). 16-xref({{funfuns,0},{?MODULE,'$F_EXPR',178}}). 17-xref({{funfuns,0},{modul,'$F_EXPR',179}}). 18 19lc() -> 20 Tab = ets:new(), 21 [Mt||{_M,Mt} <- ets:tab2list(Tab)]. 22 23funfuns() -> 24 A = variable, 25 26 %% Spawn... 27 28 %% Recognized. POS1=28. 29 spawn(fun() -> mod17:fun17() end), 30 spawn(fun local/0), 31 spawn(fun binary_to_term/1), % builtin, not collected 32 spawn({dist,func}), 33 spawn({dist,A}), % {dist,'$F_EXPR',0} 34 spawn_link(fun() -> mod17:fun17() end), 35 spawn_link({dist,func}), 36 spawn_link({dist,A}), % {dist,'$F_EXPR',0} 37 38 %% POS2=POS1+10 39 spawn({dist,func}(arg1,arg2), {d,f}), 40 spawn({dist,func}(arg1,arg2), fun() -> mod42:func() end), 41 spawn_link({dist,func}(arg1,arg2), {d,f}), 42 spawn_link({dist,func}(arg1,arg2), fun() -> mod42:func() end), 43 44 %% POS3=POS2+6 45 spawn(dist, func, [arg1,arg2]), % spawn/3 is builtin 46 spawn(expr, A, [arg1]), % {expr,'$F_EXPR',1} 47 spawn_link(dist, func, [arg1,arg2]), % spawn_link/3 is builtin 48 spawn_link(expr, A, [arg1,arg2]), % {expr,'$F_EXPR',2} 49 50 %% POS4=POS3+6 51 spawn(node, modul, function, []), 52 spawn(node, modul, A, [a]), % {modul,'$F_EXPR',1} 53 spawn({dist,func}(arg1,arg2), spm, spf, [a,b]), 54 spawn({dist,func}(arg1,arg2), spm, A, [a]), % {spm,'$F_EXPR',1} 55 spawn_link({dist,func}(arg1,arg2), spm, spf, [a,b]), 56 spawn_link({dist,func}(arg1,arg2), spm, A, [a]), % {spm,'$F_EXPR',1} 57 spawn_opt(spm, spf, [arg3, arg4], [opt1, bi()]), 58 spawn_opt(spm, A, [a], [opt1, bi()]), % {spm,'$F_EXPR',1} 59 60 %% Not recognized or invalid. POS5=POS4+10 61 spawn(A), % {'$M_EXPR','$F_EXPR',0} 62 spawn(17), % {'$M_EXPR','$F_EXPR',0} 63 spawn_link(A), % {'$M_EXPR','$F_EXPR',0} 64 65 %% POS6=POS5+5 66 spawn({a,b},[1008]), % {'$M_EXPR','$F_EXPR',0} 67 spawn_link({a,b},[1008]), % {'$M_EXPR','$F_EXPR',0} 68 69 spawn(n, A, A), % {n,'$F_EXPR',-1} 70 71 %% POS7=POS6+6 72 spawn(n, A,f,[1007]), % {'$M_EXPR',f,1}, spawn/3 is builtin 73 spawn_opt(A,f,[1007],[]), % {'$M_EXPR',f,1} 74 75 %% Apply... 76 77 %% Recognized. POS8=POS7+6 78 {hej,san}(1002), 79 {hej,A}(1002), % {hej,'$F_EXPR',1} 80 t:A(1003), % {t,'$F_EXPR',1} 81 apply({a,b},[1005]), 82 apply({a,A},[1005]), % {a,'$F_EXPR',1} 83 apply(m,f,[100011]), 84 apply(m,A,[100011]), % {m,'$F_EXPR',1} 85 %% POS9=POS8+8 86 apply(A, f, [bi()]), % {'$M_EXPR',f,1} 87 {erlang,apply}({a,b},[8888]), 88 {erlang,apply}({a,A},[8888]), % {a,'$F_EXPR',1} 89 {erlang,apply}({erlang,apply},[{erlang,not_a_function},[7777]]), 90 apply(erlang, apply, [erlang, apply, [mod, func, [atom77,tjohej]]]), 91 erlang:apply(foo), % not an apply, but an unknown function 92 apply(fun(X) -> math:add3(X) end, [7]), 93 (fun(X) -> q:f(X) end)(3008), 94 95 %% Not recognized or invalid. POS10=POS9+10 96 A:foo(1000), % {'$M_EXPR',foo,1} 97 A(17), % {'$M_EXPR','$F_EXPR',1} 98 A(17,[one,two]), % {'$M_EXPR','$F_EXPR',2} 99 apply(apa,[1001]), % {'$M_EXPR','$F_EXPR',1} 100 {mod1:fun1(hej),san}(1017), % {'$M_EXPR',san,1} 101 A:A(1004), % {'$M_EXPR','$F_EXPR',1} 102 %% POS11=POS10+7 103 apply(A,A,[1006]), % {'$M_EXPR','$F_EXPR',1} 104 apply(A,A,[1009 | 10010]), % {'$M_EXPR','$F_EXPR',-1} 105 apply(m,f,[10000 | 9999]), % {m,f,-1} 106 apply(m,f,a), % {m,f,-1} 107 3(a), % {'$M_EXPR','$F_EXPR',1} 108 apply(3,[a]), % {'$M_EXPR','$F_EXPR',1} 109 110 %% POS12=POS11+8 111 apply(A, A), % number of arguments is not known, {'$M_EXPR','$F_EXPR',-1} 112 Args0 = [list], 113 Args = [a | Args0], % number of arguments is known 114 apply(A, Args), % {'$M_EXPR','$F_EXPR',2} 115 apply(m3, f3, Args), % 116 NotArgs = [is_not, a | list], % number of arguments is not known 117 apply(A, NotArgs), % {'$M_EXPR','$F_EXPR',-1} 118 apply(m4, f4, NotArgs), % {m4,f4,-1} 119 120 %% OTP Internal. POS13=POS12+10 121 erts_debug:apply(dm, df, [17], foobar), 122 erts_debug:apply(debug, A, [], A), % {debug,'$F_EXPR',0} 123 erts_debug:apply(A, A, A, A). % {'$M_EXPR','$F_EXPR',-1} 124 125bi() when length([]) > 17 -> 126 foo:module_info(), 127 module_info(), 128 A = true andalso tjo , 129 t:foo(A), 130 case true of 131 true when integer(1) -> 132 X = foo; 133 false -> 134 X = flopp 135 end, 136 self() ! X == -A orelse false; 137bi() -> 138 %% POS14=POS13+18 139 Z = fun(Y) -> Y end, 140 case true of 141 true when length([a,b]) > 4 -> 142 F = fun(X) -> X end, 143 F(3); 144 false -> 145 F = 17, 146 F(3) % {'$M_EXPR','$F_EXPR',1} 147 end, 148 Z(apa), 149 erlang:module_info(); 150bi() -> 151 Bin11 = <<1, 17, 42>>, 152 Bin12 = <<"abc">>, 153 false = (Bin11 == Bin12), 154 A = 1, B = 17, 155 Bin3 = <<A, B, (bi()):16>>, 156 <<D:16, E, F/binary>> = Bin3, 157 X = 9, <<(X+1):8>>, 158 _Fyy = <<X:4/little-signed-integer-unit:8>>, 159 D + E + F; 160bi() -> 161 %% EEP37. POS15=POS14+23 162 F = fun Fact(N) when N > 0 -> 163 N * Fact(N - 1); 164 Fact(0) -> 165 1 166 end, 167 F(6), 168 G = fun _(foo) -> bar; 169 _(X) -> X / 3 170 end, 171 G(foo). 172 173local() -> 174 true. 175