A:"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_." N:"0123456789" V:(A,"`";N;":";"[") state:{{.[x;(;y);:;z]}/[((#x),256)#-1;y;+x]} fsm:{{(&1=y i)_ x@:i:&y>0}[x]1_0 M\_ic x} / a 0 : [ X M:state[(1 0 0 0 0 2 2 3 0 0 2 2 3 0 0 1 0 4 0 0 1 0 0 5 0 1 0 0 0 0)]_ic V,,_ci(!256)_dvl _ic,/V / call tree call:{[f]calls[.+(`p`c`r;3#,());`]f} / initialize call tree calls:{[t;p;c]t:rec[r:c _in t.p;t;p]c;:[r;t;children[t;p]c]} / cyclic or descend rec:{[r;t;p;c]@[t;_n;,;(p;c;r)]} / recursive leaf? children:{[t;p;c]calls/[t;c;ic refs c]} / children / called by called:{[f]o@&{f _in refs x}'o:objects`} / who calls f? objects:{ic`$(,/".",')'$paths[x]()} / path to possible callers paths:{[d;p]:[~5=4:e:d . p;,p;e~.();,p;,/_f[d]'p,/:!e]} / all paths / entry points notcalled:{o _dvl?,/refs'o:objects`} / objects not known to be called / references refs:{px[**|t]'?,/gr[x]'*t:cd x} / globals of x / global references <- name directory expression gr:{ a:*q:ae di 1_-1_ y / arguments e:q 1 / expression s:f_[$x]'np e / name parts t:nt's / name types r:?dg's@&t=1 / a::[ or a:.. (locals) v:dk dd@?dg's@&t=2 / a::.. or not a:.. a@:&a _lin v / actual arguments r:r _dvl a / minus arguments v:v _dvl a / minus arguments g:`$v _di&(vn'v)_lin a,r / global references g:?g,(?,/_f[x]'gl e)_dvl`$r,v / semi-closure globals g@/+\'x=/:"{}"} / mask lambdas mq:{~b|~=\~b:x="\""} / mask quotations bd:{($`$7_'b i;d i:&~`=d:`$4_'b:(&ml[a]&"\n"=a)_ a:_bd x)} / (dirs;lambda) f_:{:["_f"~y;$*|so["."]x;y]} / _f -> name np:{?(db ds@)'fsm dc dl dq x} / name parts ae:{:["["~*x;(so[";"]1_-1_ k#x;(k:1+x?"]")_ x);(+,"xyz";x)]} / arguments so:{1_'(&y=x)_ y:x,y} / split on y on x jo:{1_,/x,'y} / join y's on x cd:{:[7=4:d:. x;bd d;`d _in!a:~x;(,1!"}{",a`d;,ad x)]} / (code;dir) <- lambda|dependency ic:{x@&{:[7=4:d:. x;1;|/`d _in!~x]}'x} / lambda|dependency? ad:{`$jo["."]@-1_ so[".";$x]} / attribute directory px:{:["."=*s:$y;y;`$($x),".",s]} / .x.y + z.w -> .x.y.z.w nt:{:[~x[0]_in A _dv"_";0;|/b:_sm[x;*T];T[1;b?1];2]} / 0 1 2 T:(("*::[[]*";"*::*";"*:*");1 2 1) / : / adjacency matrix adj:{[t]n:?,/m:t`p`c;i:n?/:/:m;(n;./[(2##n)#0;+i;:;1])} / (nodes;adjacency) / recur at index i recur:{[t;i] u:t[;&t[`p]=t[`c;i]];u[2]:u[1]_lin t`p / block of children @[.[t;(`r;i);:;0];_n;{(j#x),y,(j:i+1)_ x};u]} / amend at index i / bad references bad:{[f]r _dvl ic r:refs f} / bad references in f \ f:{g x} g:{h x} / h:{f x} call`f refs`f bad'`f`g \ p parse at n name v value a args l locals g globals