summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorn <@>2024-01-08 03:24:55 +0200
committern <@>2024-01-08 03:24:55 +0200
commitbacc992326cf22b328947ba6551d58b71f7e162d (patch)
treefd5baae66d1771a5c5d74baa06cab4437d84510e
parent16a63e7841ecad7bd8f8eeb5255da4becc2cfc31 (diff)
.
-rw-r--r--a.h2
-rw-r--r--b.c2
-rw-r--r--i.c18
-rw-r--r--m.c6
-rw-r--r--o.c2
-rw-r--r--p.c2
-rw-r--r--s.c2
7 files changed, 17 insertions, 17 deletions
diff --git a/a.h b/a.h
index 6faf0c8c..2f141cb2 100644
--- a/a.h
+++ b/a.h
@@ -95,7 +95,7 @@ UC gi(A);
I qA(A,A),qf(F,F),rnk(A);
U _K(A),si(S,C),_N(A),js_eval(C*,U,C*,U),fG(CO G*,U,G),fI(CO I*,U,I),fL(CO L*,U,L),us(S);
L cfm(CO A*,I),gl_(A),gl(A),iw(A,U,L),now(),pl(S*),minfZ(L,A),addfB(CO V*,U),addfZ(L,A),pf(S*);
-S su(CO L*),pID(S);
+S su(U),pID(S);
W pu(S*);
F gf(A);
EX A1*v1[];EX A2*v2[];EX AA*v8[];EX A gv[256],cns,cn[],ci[2][5];EX I pg;EX TY(CO C[])vc,TS,Tw,TR,TT,TX,Tk;EX S*argv,*env;
diff --git a/b.c b/b.c
index 825d02fa..c0c304ec 100644
--- a/b.c
+++ b/b.c
@@ -42,7 +42,7 @@ AX(run,Q(xto)Z I d;P(++d>2048,es8(a,n))P(n-xk,er8(a,n))UC*b=_V(xy),c,nl=_n(xA[3]
#define M(a) {b[nb]=a;m[nb]=o;nb+=nb<MB-1;} //append byte
Z A u;Z UC b[MB],m[MB],lu[16];Z I nb,nl,l[16],cr(A,B); //u:lambda(src;b:bytes;m:map;l:locals;consts..) lu:last usages
ZN I li(I v)_(U i=fI(l,nl,v);P(i==nl,-1)lu[i]=nb;i) //index of a local variable (returns -1 if not found)
-Z B cm(A x/*0*/){X(Rv(!xv)Ru(1)RS(P(xn-1,0)L v=*xI;S s=su(&v);U n=SL(s);n&&s[n-1]==':')R_(0))} //is x a valid modifier? i.e. :: or primitive monad or symbol ending with ":"
+Z B cm(A x/*0*/){X(Rv(!xv)Ru(1)RS(P(xn-1,0)S s=su(*xI);U n=SL(s);n&&s[n-1]==':')R_(0))} //is x a valid modifier? i.e. :: or primitive monad or symbol ending with ":"
Z V cc(A x/*0*/,I o){U n=un,i=OFF;W(i<n&&!mtc_(x,ua),i++)I(i>=n,PSH(u,xR))M(i+bc-OFF)} //append a "load constant" instruction
Z I cl(A x,A y/*00*/,B r){Q(cm(xx))I v=_v(xx),o=xo; //compile lvalue (x:assignmentNode,y:tree,r:wantResult)
Y(R_(o)
diff --git a/i.c b/i.c
index bed5ef95..f3f70511 100644
--- a/i.c
+++ b/i.c
@@ -16,16 +16,16 @@ Z U addr(S*p)_(S s=*p;P(!*s,0x0100007f)UC v[4];F(4,I(i,P(*s-'.',ed0())s++)v[i]=p
Z I skt(U h,UH p)_(I f=socket(AF_INET,SOCK_STREAM,0);P(f<0,eo0())I v=setsockopt(f,IPPROTO_TCP,TCP_NODELAY,(I[]){1},4);P(v<0,eo0())
ST sockaddr_in a;a.sin_family=AF_INET;a.sin_addr.s_addr=h;a.sin_port=(UH)(p<<8|p>>8);P(connect(f,(ST sockaddr*)&a,SZ a)<0,eo0())f)
Z I osf(S s,L fl)_(P(!strchr(s,':'),I f=open(s,fl,0666);P(f<3/*fbsd*/,eo0())f)U h=addr(&s);P(*s-':',ed0())s++;W p=pu(&s);P(*s,ed0())skt(h,p))
-Z I o(A x/*1*/,I fl)_(Xz(gl(x))Xs(L v=xv;P(!v,1)S s=su(&v);osf(s,fl))XC(x=str0(x);I v;Mx(v=osf(xV,fl));v)et(x))
-Z I fm(I f)_(ST stat s;fstat(f,&s)<0?0:s.st_mode) // get file mode
+Z I o(A x/*1*/,I fl)_(Xz(gl(x))Xs(xv?osf(su(xv),fl):1)XC(x=str0(x);I v;Mx(v=osf(xV,fl));v)et(x))
+Z I fm(I f)_(ST stat s;fstat(f,&s)<0?0:s.st_mode) // get file mode
Z A frd(I f,N i,N n)_(P(i||n+1,en0())DIR*a=fdopendir(f);P(!a,ei0())A x=emp(tC);ST dirent*e;W((e=readdir(a)),S s=e->d_name;x=apc(cts(x,s,SL(s)),10))closedir(a);x) // read dir
Z A frS(I f,N n)_(C b[1024];A x=emp(tC);W(n,I k=read(f,b,MIN(SZ b,n));P(k<0,eo(x))n-=k;x=cts(x,b,k);P(k-SZ b,x))x) // read stream (only length)
-Z A frs(I f,N i,N n)_(I(i&&lseek(f,i,SEEK_CUR)<0,mr(N(frS(f,i))))frS(f,n)) // read stream (offset too)
+Z A frs(I f,N i,N n)_(I(i&&lseek(f,i,SEEK_CUR)<0,mr(N(frS(f,i))))frS(f,n)) // read stream (offset too)
Z A frm(I f,N i,N n)_(L m=lseek(f,0,SEEK_END);P(m<0,eo0())n=MIN(n,MAX(0,m-i));n?mf(f,i,n):emp(tC)) // read through mmap
-Z A fr(A x/*1*/,N i,N n)_(Xz(frs(gl(x),i,n))I f=N(o(x,O_RDONLY));P(f<3,frs(f,i,n))I m=fm(f);x=(S_ISDIR(m)?frd:S_ISREG(m)?frm:frs)(f,i,n);close(f);x) // read
-Z A fws(I f,S s,N n)_(W(n>0,L k=write(f,s,n);P(k<0,eo0())P(!k,au)s+=k;n-=k)au) // write stream
-Z A fwm(I f,S s,N n)_(ftruncate(f,n);V*p=mmap(0,n,PROT_READ|PROT_WRITE,MAP_SHARED,f,0);MC(p,s,n);munmap(p,n);au) // write through mmap
-Z X2(fw,Ril(I f=gl_(x);My(x=(f<3||!S_ISREG(fm(f))?fws:fwm)(f,yV,yn))x)R_(I f=N(o(xR,O_RDWR|O_CREAT|O_TRUNC));A z=v1c(ai(f),y);f>2&&close(f);z)) // write
+Z A fr(A x/*1*/,N i,N n)_(Xz(frs(gl(x),i,n))I f=N(o(x,O_RDONLY));P(f<3,frs(f,i,n))I m=fm(f);x=(S_ISDIR(m)?frd:S_ISREG(m)?frm:frs)(f,i,n);close(f);x) // read
+Z A fws(I f,S s,N n)_(W(n>0,L k=write(f,s,n);P(k<0,eo0())P(!k,au)s+=k;n-=k)au) // write stream
+Z A fwm(I f,S s,N n)_(ftruncate(f,n);V*p=mmap(0,n,PROT_READ|PROT_WRITE,MAP_SHARED,f,0);MC(p,s,n);munmap(p,n);au) // write through mmap
+Z X2(fw,Ril(I f=gl_(x);My(x=(f<3||!S_ISREG(fm(f))?fws:fwm)(f,yV,yn))x)R_(I f=N(o(xR,O_RDWR|O_CREAT|O_TRUNC));A z=v1c(ai(f),y);f>2&&close(f);z)) // write
ZN A dle()_(C*e=dlerror();I(e,os(e);os("\n"))eo0())
A1(opn,Xz(x)ai(N(o(x,O_RDWR|O_CREAT)))) // <s
A cls(L n)_(close(n);au) // >i
@@ -34,8 +34,8 @@ X1(u1c,RA(P(xn-2,el(x))P(!_tZ(xy),et(x))P(_n(xy)-2,el(x))A y=kv(&x);N i=gl(ii(y,
A1(u2c,en(x)) // 2:x
Y2(v0c,RA(v0c(x,N(jc(10,y))))RC(v1c(x,apc(y,10)))R_(et(y))) // x 0:y
Y2(v1c,RC(fw(x,y))R_(et(y))) // x 1:y
-A2(v2c,P(!xts||!ytA,et(y))P(yn-2,el(y))P(!_ts(yx)||!_ti(yy),et(y))L v=xv,w=_v(yx);I k=_v(yy);y(0);P(!k||k>8u,ed0()) // x 2:y
- V*l=dlopen(su(&v),RTLD_LAZY);P(!l,dle())V*f=dlsym(l,su(&w));P(!f,dle())ax(f,k))
+A2(v2c,P(!xts||!ytA,et(y))P(yn-2,el(y))P(!_ts(yx)||!_ti(yy),et(y))I k=_v(yy);y(0);P(!k||k>8u,ed0()) // x 2:y
+ V*l=dlopen(su(xv),RTLD_LAZY);P(!l,dle())V*f=dlsym(l,su(_v(yx)));P(!f,dle())ax(f,k))
Z A rda(I f)_(A x=aC(256-HD);L m=0,k;W((k=read(f,xV+m,xn-m))>0,m+=k;I(m+1000000>xn&&2*m>xn,A y=aC(2*xn+HD);MC(yV,xV,m);x=x(y)))close(f);AN(m,x))
Z I lC(A x)_(XA(F(xn,P(_t(xa)-tC,0))1)0)//list of strings?
diff --git a/m.c b/m.c
index 8a9dbba4..c3bffb56 100644
--- a/m.c
+++ b/m.c
@@ -60,13 +60,13 @@ A AN(U n,A x)_(xn=n;x)
A1(AZ,xT=tG;x)
Z C s0[1<<16],*s1=s0+1;
-S su(CO L*p)_(*p<0?s0-*p:(V*)p)
-U us(S s)_(U n=SL(s);P(n<4||(n==4&&!(s[3]&128)),I v=0;MC(&v,s,n);v)S p=s0+1;W(p<s1,P(!strcmp(p,s),s0-p)p+=SL(p)+1)n++;P(s1+n>s0+SZ s0,die("SYMS"))MC(s1,s,n);s1+=n;s0-s1+n)
+S su(U u)_(P(u&1<<31,s0-(I)u)Z W r;r=u;(V*)&r)
+U us(S s)_(U n=SL(s);P(n<4||(n==4&&!(s[3]&128)),U v=0;MC(&v,s,n);v)S p=s0+1;W(p<s1,P(!strcmp(p,s),s0-p)p+=SL(p)+1)n++;P(s1+n>s0+SZ s0,die("SYMS"))MC(s1,s,n);s1+=n;s0-s1+n)
A sym(S s)_(as(us(s)))
Z U gd,gn;Z W gk[256];A gv[256];
Z W gkk(A x/*0*/)_(Xs((U)xv)Q(xtS)xn?(W)_v(jS(drp(-1,xR)))<<32|(U)_v(ii(x,xn-1)):0)
-UC gi(A x/*0*/)_(W k=gkk(x);L l=(I)k;I(!(k>>32)&&id0(*su(&l)),k|=(W)gd<<32)U i=fL(gk,gn,k);P(i<gn,i)P(gn>=L(gv),die("GLOBALS"))gk[gn]=k;gv[gn]=0;gn++)
+UC gi(A x/*0*/)_(W k=gkk(x);I(!(k>>32)&&id0(*su(k)),k|=(W)gd<<32)U i=fL(gk,gn,k);P(i<gn,i)P(gn>=L(gv),die("GLOBALS"))gk[gn]=k;gv[gn]=0;gn++)
A gg(A x/*1*/)_(//get value of global
P(xtS&&!xn,x(0);A x=emp(tS),y=emp(tA);F(gn,I(gv[i],L k=gk[i];PSH(x,k-(U)k?jS(aV(tS,2,A((I)(k>>32),k))):as(k));PSH(y,_R(gv[i]))))am(x,y))//special case for 0#`
W k=gkk(x);x(0);U i=fL(gk,gn,k);i<gn&&gv[i]?_R(gv[i]):ev0())
diff --git a/o.c b/o.c
index 93c6b389..f7bf7f12 100644
--- a/o.c
+++ b/o.c
@@ -21,7 +21,7 @@ I qf(F u,F v)_(ql(o1(*(L*)&u),o1(*(L*)&v)))
I qA(A x,A y/*00*/)_(I v=TS[xt]-TS[yt];P(v,v)
X(Ril(ql(gl_(x),gl_(y)))
Rf(qf(*xF,*yF))
- Rs(L v=xv,w=yv;strcmp(su(&v),su(&w)))
+ Rs(S s=su(xv);C t[8];U n=SL(s);I(n<5,s=MC(t,s,n+1))strcmp(s,su(yv)))
RT(F(MIN(xn,yn),A z=ii(x,i),u=ii(y,i);I d=qA(z,u);mr(z(u));P(d,d))ql(xn,yn))
Ropqr(x=str(xR);y=str(yR);I r=qA(x,y);x(y(0));r)
R_(ql(x,y)))0)
diff --git a/p.c b/p.c
index 29c3b5f4..09ff7955 100644
--- a/p.c
+++ b/p.c
@@ -52,7 +52,7 @@ Z A pt(C*v)_(C c=*s;
Z X1(pm, //monadify
Rv(x^au^av)
RA(I(xx==aw,x=mut(x);xA[xn-1]=pm(xA[xn-1]))x)
- Rs(L v=xv;S s=su(&v);U n;P(*s>>7&&s[(n=SL(s))-1]-':',C b[8];MC(b,s,n);b[n]=':';b[n+1]=0;sym(b))x)
+ Rs(S s=su(xv);U n;P(*s>>7&&s[(n=SL(s))-1]-':',C b[8];MC(b,s,n);b[n]=':';b[n+1]=0;sym(b))x)
RS(xn==1?enl(pm(fir(x))):x)
R_(x))
Z A pT(C*v)_(A x=N(pt(v)); //parse term and the adverbs or square brackets after it (v:verb?)
diff --git a/s.c b/s.c
index 61f77a44..88a61fd6 100644
--- a/s.c
+++ b/s.c
@@ -29,7 +29,7 @@ C*sf(C*s,L d)_(W x=d,m=x<<12>>12;I e=x<<1>>53;I(x>>63,*s++='-')P(e==2047,P(!m,MC
s++;I l=sW(s,u)-s-1;s[-1]=*s;t+=l;P(t<16u,I k=l<t?l:t;memmove(s,s+1,k);MS(s+l,'0',MAX(0,t-l));s+=t;*s++='.';s+=l-k;I(t>=l,*s++='0')s)
P(-4<t&&t<0,F(l+1,s[l-t-i]=s[l-i])s[-1]='0';*s++='.';MS(s,'0',-t-1)+l-t)I(l>0,*s++='.';s+=l)*s++='e';I(t<0,t=-t;*s++='-')sW(s,t))
A1(str0,Q(xtC);N n=xn;x=AN(n,aa(n+1,x));xC[n]=0;x)
-X1(str,Rilf(A y=aC(24);TY(sf)*f=xtf?sf:sl;AN(f(yC,gl(x))-yC,y))Rs(L v=xv;aCz(su(&v)))Rc(enl(x))RU(kst(x))R_(e1f(str,x)))
+X1(str,Rilf(A y=aC(24);TY(sf)*f=xtf?sf:sl;AN(f(yC,gl(x))-yC,y))Rs(aCz(su(xv)))Rc(enl(x))RU(kst(x))R_(e1f(str,x)))
V hexC(S s,U n,C*r){Z S q="0123456789abcdef";F(n,C c=*s++;*r++=q[(UC)c>>4];*r++=q[c&15])}
X1(hex,RmMA(e1f(hex,x))RC(A y=aC(2*xn);Mx(hexC(xV,xn,yV))y)R_(et(x)))
ZN V unh0(C*q){MS(q,-1,256);F(10,q['0'+i]=i)F(6,q['A'+i]=q['a'+i]=10+i)}