diff options
author | n <@> | 2023-12-16 03:45:25 +0200 |
---|---|---|
committer | n <@> | 2023-12-16 03:45:25 +0200 |
commit | e0d764625589ea5424b853476df2091bb2454712 (patch) | |
tree | 3a798b557a42a804b61396feeb145eed897dbb60 | |
parent | 745bf7ad4ccd14d0f2a38507686c9c637b0d4f62 (diff) |
Q -> S
-rw-r--r-- | 0.c | 34 | ||||
-rw-r--r-- | a.c | 14 | ||||
-rw-r--r-- | a.h | 26 | ||||
-rw-r--r-- | b.c | 2 | ||||
-rw-r--r-- | c.c | 4 | ||||
-rw-r--r-- | e.c | 12 | ||||
-rw-r--r-- | h.c | 2 | ||||
-rw-r--r-- | i.c | 14 | ||||
-rw-r--r-- | j.c | 6 | ||||
-rw-r--r-- | k.c | 8 | ||||
-rw-r--r-- | k.h | 6 | ||||
-rw-r--r-- | m.c | 52 | ||||
-rw-r--r-- | notes.txt | 6 | ||||
-rw-r--r-- | p.c | 46 | ||||
-rw-r--r-- | s.c | 8 | ||||
-rw-r--r-- | vim-c/syntax/n.vim | 2 | ||||
-rw-r--r-- | w.c | 2 |
17 files changed, 126 insertions, 118 deletions
@@ -18,7 +18,7 @@ I pg=4096;//pagesize //__builtin_ia32_ldmxcsr(__builtin_ia32_stmxcsr()|1<<6|1<<15); //daz,ftz #ifndef shared #ifndef ldstatic - I main(I n,Q*a)_(kinit();kargs(n,a);I r=0;I(n<2,repl())J(!bsl(a[1]),r=1;epr(0))Q(bsm(""));r) + I main(I n,S*a)_(kinit();kargs(n,a);I r=0;I(n<2,repl())J(!bsl(a[1]),r=1;epr(0))Q(bsm(""));r) #endif #endif @@ -30,7 +30,7 @@ I pg=4096;//pagesize #include"o/w/fs.h" };Z ST{C i;N o;}d[8]={{.i=1},{.i=1},{.i=1}};Z CO I ns=L(s),nd=L(d);//d:fd table #define FI P((U)f>=nd||!d[f].i,EBADF)I i=d[f].i;//validate fd "f" and get inode "i" - I open(Q p,I v,...)_(I m=SL(p);P(m>=SZ s[0].p,ENAMETOOLONG)I i=0;W(i<ns&&strcmp(s[i].p,p),i++) + I open(S p,I v,...)_(I m=SL(p);P(m>=SZ s[0].p,ENAMETOOLONG)I i=0;W(i<ns&&strcmp(s[i].p,p),i++) I(i>=ns,P(O_CREAT&~v,ENOENT)i=0;W(i<ns&&s[i].a,i++)P(i>=ns,ENOSPC)s[i].a="";s[i].n=0;MC(s[i].p,p,m)) I f=0;W(f<nd&&d[f].i,f++)P(f>=nd,EMFILE)d[f].i=i;d[f].o=0;f) I close(I f)_(FI d[f].i=0;0) @@ -44,33 +44,41 @@ I pg=4096;//pagesize I munmap(I f,I n)_(0) I gettimeofday(ST timeval*a,V*b)_(js_time((V*)&a->tv_sec,(V*)&a->tv_usec);0) V exit(I v){js_exit(v);} - I dup2(I f,I v)_(-1)I execve(Q p,C*CO*a,C*CO*e)_(-1)I fork()_(-1)I socket(I i,I j,I k)_(-1) - I setsockopt(I f,I l,I s,CO V*v,socklen_t n)_(-1)I connect(I f,CO ST sockaddr*s,socklen_t n)_(-1)I chdir(Q p)_(-1) + I dup2(I f,I v)_(-1) + I execve(S p,C*CO*a,C*CO*e)_(-1) + I fork()_(-1) + I socket(I i,I j,I k)_(-1) + I setsockopt(I f,I l,I s,CO V*v,socklen_t n)_(-1) + I connect(I f,CO ST sockaddr*s,socklen_t n)_(-1) + I chdir(S p)_(-1) I ftruncate(I f,off_t o)_(-1) I wait4(I i,I*l,I o,ST rusage*u)_(-1) long sysconf(I i)_(i==_SC_PAGESIZE?4096:-1) - V*dlopen(Q s,I i)_((V*)0)V*dlsym(V*p,Q s)_((V*)0)I dlclose(V*p)_(0)C*dlerror()_("wasm") + V*dlopen(S s,I i)_((V*)0) + V*dlsym(V*p,S s)_((V*)0) + I dlclose(V*p)_(0) + C*dlerror()_("wasm") #include<dirent.h> DIR*fdopendir(I f)_((V*)0) ST dirent*readdir(DIR*x)_((V*)0) I closedir(DIR*x)_(0) - V*memcpy (V*x,CO V*y,N n)_(C*p=x ;Q q=y ;i(n,*p++=*q++)x) - V*memrcpy(V*x,CO V*y,N n)_(C*p=x+n;Q q=y+n;i(n,*--p=*--q)x) + V*memcpy (V*x,CO V*y,N n)_(C*p=x ;S q=y ;i(n,*p++=*q++)x) + V*memrcpy(V*x,CO V*y,N n)_(C*p=x+n;S q=y+n;i(n,*--p=*--q)x) V*memmove(V*x,CO V*y,N n)_((y<x&&x<y+n?memrcpy:memcpy)(x,y,n)) V*memset(V*x,I v,N n)_(C*p=x;i(n,*p++=v);x) - V*memchr(CO V*x,I v,N n)_(Q s=x;i(n,P(s[i]==v,(V*)(s+i)))(V*)0) - V*memmem(CO V*x,N m,CO V*y,N n)_(Q p=x,q=y;i((L)m-(L)n+1,P(!memcmp(p+i,q,n),(V*)(p+i)))(V*)0) - I memcmp(CO V*x,CO V*y,N n)_(Q s=x,t=y;i(n,I v=*s++-*t++;P(v,v))0) - N strlen(Q s)_(Q p=s;W(1,W v=~*(W*)(V*)p;v&=v>>1;v&=v>>2;v&=v>>4;v&=0x0101010101010101ll;B(v)p+=8)W(*p,p++)p-s) + V*memchr(CO V*x,I v,N n)_(S s=x;i(n,P(s[i]==v,(V*)(s+i)))(V*)0) + V*memmem(CO V*x,N m,CO V*y,N n)_(S p=x,q=y;i((L)m-(L)n+1,P(!memcmp(p+i,q,n),(V*)(p+i)))(V*)0) + I memcmp(CO V*x,CO V*y,N n)_(S s=x,t=y;i(n,I v=*s++-*t++;P(v,v))0) + N strlen(S s)_(S p=s;W(1,W v=~*(W*)(V*)p;v&=v>>1;v&=v>>2;v&=v>>4;v&=0x0101010101010101ll;B(v)p+=8)W(*p,p++)p-s) C*strchr(CO C*s,I v)_(W(1,P(*s==v,(V*)s)P(!*s++,(V*)0))(V*)0) C*strstr(CO C*p,CO C*q)_(memmem(p,SL(p),q,SL(q))) - I strcmp(Q p,Q q)_(W(*p&&*p==*q,p++;q++)*p-*q) + I strcmp(S p,S q)_(W(*p&&*p==*q,p++;q++)*p-*q) #else U js_eval(C*s,U m,C*r,U n)_(0) #endif #if !defined(__GNU_SOURCE) - C*strchrnul(Q s,I v)_(C*p=strchr(s,v);p?p:(V*)s+SL(s)) + C*strchrnul(S s,I v)_(C*p=strchr(s,v);p?p:(V*)s+SL(s)) #endif @@ -41,11 +41,11 @@ A2(i1,/*01*/P(y==GAP||y==au,xR) Z A3(i2,/*001*/C b=ytT||y==GAP||y==au;x=Nz(i1(x,yR));P(!b,x(x1(z)))x(l2f(dot,x,aA1(z)))) Z AX(i8,A y=*a;P(n==1,i1(x,y))P(n==2,y(_2(x,y,a[1])))a++;n--;C b=ytT||y==GAP||y==au;x=i1(x,y);P(!x,mrn(n,a);x)P(!b,x(i8(x,a,n)))x(l2f(dot,x,aV(tA,n,a)))) L iw(A x/*0*/,U w,L i)_(S4(w,_(xg),_(xh),_(xi),_(xl))0) -Z A1(qa,A y=emp(tA);Q*p=argv;W(*p,PSH(y,aCz(*p++)))y(y1(x))) -Z A1(qe,A y=emp(tS),z=emp(tA);Q*e=env;W(*e,Q p=*e++,q=strchrnul(p,'=');PSH(y,cS(aCm(p,q)));PSH(z,aCz(q+!!*q)))y=am(y,z);x-au?x(x1(y)):y) +Z A1(qa,A y=emp(tA);S*p=argv;W(*p,PSH(y,aCz(*p++)))y(y1(x))) +Z A1(qe,A y=emp(tS),z=emp(tA);S*e=env;W(*e,S p=*e++,q=strchrnul(p,'=');PSH(y,cS(aCm(p,q)));PSH(z,aCz(q+!!*q)))y=am(y,z);x-au?x(x1(y)):y) Z A1(qx,exit(xtz?gl(x):1);0) Z X1(qjs,RC(C b[4096];U n=js_eval(xC,xn,b,SZ b);x(0);aCn(b,n))RA(e1f(qjs,x))R_(et(x))) -Z X1(qp,RC(x=str0(x);Q s=xC;x(pk(&s,0)))R_(et(x))) +Z X1(qp,RC(x=str0(x);S s=xC;x(pk(&s,0)))R_(et(x))) Z A1(qt,x(al(now()))) Z A1(qfb,P(!xtC,et(x))P(xn-8,el(x))x=rev(x);x(aV(tf,1,xV)))//float from bits SN AX(ext,P(n-xK,er8(a,n))V*f=(V*)(x&-1ull>>16);SW(n,R(1,((A1*)f)(a[0]))R(2,((A2*)f)(a[0],a[1]))R(3,((A3*)f)(a[0],a[1],a[2]))R(4,((A4*)f)(a[0],a[1],a[2],a[3]))R_(en8(a,n)))0) @@ -90,8 +90,8 @@ AA(d8,/*10..0*/A x=*a; X(RsS(A*p=gp(x);I(!*p,*p=au)Ab8;*b=*p;MC(b+1,a+1,n-1<<3);*p=au;*p=_R(N(d8_(b,n)))) RU(n==3?try(x,a[1],a[2]):er(x)) R_(d8_(a,n)))0) -SN A ki(A*p,Q s)_(*p=evs(s,0);I(!*p,die(s))PSH(cns,*p)) -A k1(A*p,Q s,A x)_(I(!*p,ki(p,s))_1(*p,x)) -A k2(A*p,Q s,A x,A y)_(I(!*p,ki(p,s))_2(*p,x,y)) -A k8(A*p,Q s,CO A*a,U n)_(I(!*p,ki(p,s))n?_8(*p,a,n):*p) +SN A ki(A*p,S s)_(*p=evs(s,0);I(!*p,die(s))PSH(cns,*p)) +A k1(A*p,S s,A x)_(I(!*p,ki(p,s))_1(*p,x)) +A k2(A*p,S s,A x,A y)_(I(!*p,ki(p,s))_2(*p,x,y)) +A k8(A*p,S s,CO A*a,U n)_(I(!*p,ki(p,s))n?_8(*p,a,n):*p) AA(no8,/*10..0*/en(*a)) @@ -62,7 +62,7 @@ #define SL __builtin_strlen #define SQ __builtin_sqrt -TD void V;TD bool B;TD char G,C;TD char unsigned UC;TD CO C*Q;TD short H;TD unsigned short UH;TD int I;TD unsigned int U;TD long long L;TD double F;TD size_t N; +TD void V;TD bool B;TD char G,C;TD char unsigned UC;TD CO C*S;TD short H;TD unsigned short UH;TD int I;TD unsigned int U;TD long long L;TD double F;TD size_t N; TD unsigned long long W,A,A0(),A1(A),A2(A,A),A3(A,A,A),A4(A,A,A,A),AA(CO A*,U),AX(A,CO A*,U); #define A0(f,b...) A f( )_(b) @@ -82,21 +82,21 @@ AA a8,d8,ins,no8; TD A TAU(U);TAU aA0,aA,aB,aG,aC,aF,aI,aL,aS,gns,emp; TD A TAL(L);TAL al,az,cls,rndF; TD A TALA(L,A);TALA drp,rnd,rsz; -TD A TAQ(Q);TAQ aCz,bsl,bsm,die,sym; -A aa(U,A),ii(A,U),io(A,L),a2t(A,A,C),aE(L,L),af(F),aCm(Q,Q),aCn(Q,U),apc(A,C),apv(A,CO V*),an(U,C),aV(C,U,CO V*),cts(A,Q,U),e1f(A1,A),e2f(A2,A,A),err0(Q),evs(Q,B), - k1(A*,Q,A),k2(A*,Q,A,A),k8(A*,Q,CO A*,U),jc(C,A),jC(Q,U,A),kv(A*),r2f(A2,A,A),l2f(A2,A,A),mf(U,U,U),pk(Q*,C),pen(A,A1*),slc(A,U,U),unhC(Q,U),wdn(A,U,U,U), +TD A TAQ(S);TAQ aCz,bsl,bsm,die,sym; +A aa(U,A),ii(A,U),io(A,L),a2t(A,A,C),aE(L,L),af(F),aCm(S,S),aCn(S,U),apc(A,C),apv(A,CO V*),an(U,C),aV(C,U,CO V*),cts(A,S,U),e1f(A1,A),e2f(A2,A,A),err0(S),evs(S,B), + k1(A*,S,A),k2(A*,S,A,A),k8(A*,S,CO A*,U),jc(C,A),jC(S,U,A),kv(A*),r2f(A2,A,A),l2f(A2,A,A),mf(U,U,U),pk(S*,C),pen(A,A1*),slc(A,U,U),unhC(S,U),wdn(A,U,U,U), AT(W,A),AW(C,A),AK(C,A),AO(UC,A),AN(U,A),w1(U,A,A),w2(U,A,A,A),w8(U,A,CO A*,U),*gp(A); -V cyc(V*,U,U),eS(A,U),eQ(Q,U,U),exit(I),hexC(Q,U,C*),kargs(I,Q*),kinit(),*memmem(CO V*,N,CO V*,N),mrn(U,CO A*),mRn(U,CO A*),repl(),tilV(V*,L,L,U); +V cyc(V*,U,U),eS(A,U),eQ(S,U,U),exit(I),hexC(S,U,C*),kargs(I,S*),kinit(),*memmem(CO V*,N,CO V*,N),mrn(U,CO A*),mRn(U,CO A*),repl(),tilV(V*,L,L,U); B id0(UC),mtc_(A,A),tru(A); -C*sf(C*,L),*sl(C*,L),sup(A*,A*),tZ(L),*strchrnul(Q,I); +C*sf(C*,L),*sl(C*,L),sup(A*,A*),tZ(L),*strchrnul(S,I); UC gi(A); -I qA(A,A),qf(F,F),rnk(A),sq(Q); -U _K(A),si(Q,C),_N(A),js_eval(C*,U,C*,U),fG(CO G*,U,G),fI(CO I*,U,I),fL(CO L*,U,L); -L cfm(CO A*,I),gl_(A),gl(A),iw(A,U,L),now(),pl(Q*),minfZ(L,A),addfB(CO V*,U),addfZ(L,A),pf(Q*); -Q qs(CO L*),pID(Q); -W pu(Q*); +I qA(A,A),qf(F,F),rnk(A),sq(S); +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); +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 qs(CO L*),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 Q*argv,*env; +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; // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 // () !i ,1 ,i ,i ,i ,i ,f "" ,` +m X! 5 6 .6 "c" ` {} 1+ ++ +/ +: + / 2: @@ -173,4 +173,4 @@ enum {au=Lt(tu),FLP,NEG,FIR,SQR,TIL,WHR,REV,ASC,DSC,GRP,NOT,ENL,NUL,LEN, #define ov(x) ov_(#x":",(L)(x)) #define oo os("["__FILE__":"M2(__LINE__)"]"); #define nop {asm volatile("fnop");} -U os(Q);W ov_(Q,W); +U os(S);W ov_(S,W); @@ -41,7 +41,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 SN 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;Q s=qs(&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)L v=*xI;S s=qs(&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 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) @@ -18,8 +18,8 @@ NI A2(ct,UC t=xv,u=yt;Q(xti||x==t)Q(tB<=t&&t<=tS)P(t==TT[u],y) Y(RmMA(r2f(ct,x,y))RE(cT(x,gZ(y)))Rf(ct(x,N(cL(y))))Rilc(L v=gl(y);SW(t,R4(tB,tG,tH,tI,ai(v))RC(ac(v))RL(al(v))RF(af(v))RS(u==tc?as(yv):et0()))0)R_(cT(x,y)))et(y)) A1(cB,ct(tB,x))A1(cG,ct(tG,x))A1(cH,ct(tH,x))A1(cI,ct(tI,x))A1(cL,ct(tL,x))A1(cF,ct(tF,x))A1(cC,ct(tC,x))A1(cS,ct(tS,x)) Z X1(csti,RmMA(e1f(csti,x))RF(sqzZ(cL(x)))Rf(az(gf(x)))RC(cG(x))Rc(ai(xv))Ruvw(ai(xv))RilEGHIL(x)R_(et(x))) -Z X1(prsI,RmMA(e1f(prsI,x))Rc(prsI(enl(x)))RC(x=str0(x);Q s=xV;P(!*s,x(_R(cn[tl])))L v=pl(&s);x(*s?_R(cn[tl]):az(v) ))R_(et(x))) -Z X1(prsF,RmMA(e1f(prsF,x))Rc(prsF(enl(x)))RC(x=str0(x);Q s=xV;P(!*s,x(_R(cn[tf])))L v=pf(&s);x(*s?_R(cn[tf]):aV(tf,1,&v)))R_(et(x))) +Z X1(prsI,RmMA(e1f(prsI,x))Rc(prsI(enl(x)))RC(x=str0(x);S s=xV;P(!*s,x(_R(cn[tl])))L v=pl(&s);x(*s?_R(cn[tl]):az(v) ))R_(et(x))) +Z X1(prsF,RmMA(e1f(prsF,x))Rc(prsF(enl(x)))RC(x=str0(x);S s=xV;P(!*s,x(_R(cn[tf])))L v=pf(&s);x(*s?_R(cn[tf]):aV(tf,1,&v)))R_(et(x))) Z Y2(pad,RmMA(e2f(pad,x,y))RC(K2("{y@(!x)+(x<0)*#y}",x,y))Rc(dlr(x,enl(y)))R_(et(y))) X2(dlr,Rs(I v=xv;P(v-(C)v,ed(y))G(&csti,cF,cC,cS,prsI,prsF,ed)[si("ifcsIF",v|'s'*!v)](y))Ril(pad(x,y))R_(et(y))) X1(sqzZ,R_(x)/*RG(i(xn,P(xg&-2,x))cB(x))*/ @@ -1,17 +1,17 @@ #include"a.h" // ngn/k, (c) 2019-2023 ngn, GNU AGPLv3 - https://codeberg.org/ngn/k/raw/branch/master/LICENSE Z C b[4096],*r=b;Z I d; -NI A err0(Q s)_(r=b;d=0;N n=MIN(SL(s),32);r=b;*r++='\'';MC(r,s,n);r+=n;*r++=10;0) -SN A err1(A x,Q s)_(x(0);err0(s)) -SN A err8(CO A*a,U n,Q s)_(mrn(n,a);err0(s)) -NI V eQ(Q s,U n,U i){I(++d>=5,I(d==5,MC(r," ..\n",4);r+=4)return) - Q p=s+i,q=p,t=p;U h=64;W(p>s&&p>t-h&&p[-1]&&p[-1]-10,p--)W(q<s+n&&q<=t+h&&*q&&*q-10,q++) +NI A err0(S s)_(r=b;d=0;N n=MIN(SL(s),32);r=b;*r++='\'';MC(r,s,n);r+=n;*r++=10;0) +SN A err1(A x,S s)_(x(0);err0(s)) +SN A err8(CO A*a,U n,S s)_(mrn(n,a);err0(s)) +NI V eQ(S s,U n,U i){I(++d>=5,I(d==5,MC(r," ..\n",4);r+=4)return) + S p=s+i,q=p,t=p;U h=64;W(p>s&&p>t-h&&p[-1]&&p[-1]-10,p--)W(q<s+n&&q<=t+h&&*q&&*q-10,q++) *r++=32;MC(r,p,q-p);I(p<=t-h,*r=r[1]='.')I(q>t+h,r[q-p-2]=r[q-p-1]='.')r+=q-p;*r++=10; MS(r,32,t-p+1);r+=t-p+1;*r++='^';*r++=10;} NI V eS(A x/*0*/,U i)_(eQ(xV,xn,i)) A3(try,/*100*/x=x(dot(x,yR));P(x,x)I(ztU,z=z1(aCn(b,r-b)))E(zR)r=b;d=0;z) A1(epr,write(2,b,r-b);r=b;x) A1(err,XC(x=str0(x);err1(x,xV))P(x==au,aCn(b,r-b))err1(x,"err")) -NI A die(Q s)_(I n=SL(s);C v[n+1];MC(v,s,n);v[n]=10;write(1,"'",1);write(2,v,n+1);exit(1);0) +NI A die(S s)_(I n=SL(s);C v[n+1];MC(v,s,n);v[n]=10;write(1,"'",1);write(2,v,n+1);exit(1);0) #define M(t,m)\ NI A0(e##t##0,err0( #m))\ @@ -62,7 +62,7 @@ A2(psh,/*11*/Q(xtMT);U n=xN;P(!n,enl(x(y))) L v=xtA?(L)y:gl(y);apv(x,&v)) A apv(A x/*1*/,CO V*v )_(Q(xtT); U n=xn;x=aa(n+1,x);U w=xw-3;MC(xV+((W)n<<w),v,1<<w);x) A apc(A x/*1*/,C c )_(Q(xtC||xtG);U n=xn;x=aa(n+1,x);xC[n]=c;x) -A cts(A x/*1*/,Q s,U m)_(Q(xtC); U n=xn;x=aa(n+m,x);MC(xV+n,s,m);x) +A cts(A x/*1*/,S s,U m)_(Q(xtC); U n=xn;x=aa(n+m,x);MC(xV+n,s,m);x) Z A insL(A x,L i,L j,A y/*1ij0*/)_( P(i>=(W)(j+1)||j>=(W)(xN+1),ei(x)) A z=an(xn-j+i+yn,xt);U w=xw-3;MC(zV,xV,(W)i<<w);MC(zV+(i<<w),yV,(W)yn<<w);MC(zV+(i+yn<<w),xV+((W)j<<w),(W)(xn-j)<<w); @@ -12,19 +12,19 @@ #include<sys/mman.h> #include<dirent.h> #include"a.h" -Z U addr(Q*p)_(Q s=*p;P(!*s,0x0100007f)UC v[4];i(4,I(i,P(*s-'.',ed0())s++)v[i]=pu(&s);P(v[i]>255,ed0()))*p=s;*(U*)v) +Z U addr(S*p)_(S s=*p;P(!*s,0x0100007f)UC v[4];i(4,I(i,P(*s-'.',ed0())s++)v[i]=pu(&s);P(v[i]>255,ed0()))*p=s;*(U*)v) 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(Q 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)Q s=qs(&v);osf(s,fl))XC(x=str0(x);I v;Mx(v=osf(xV,fl));v)et(x)) +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=qs(&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 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)),Q s=e->d_name;x=apc(cts(x,s,SL(s)),10))closedir(a);x) // read dir +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 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,Q 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,Q 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 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 SN 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 @@ -39,6 +39,6 @@ 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 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(i(xn,P(_t(xa)-tC,0))1)0)//list of strings? -A1(frk,P(!xtA||xn-2,et(x))A y=kv(&x);P(!lC(x)||!ytC,y(ed(x)))x=Ny(e1f(str0,x));Q a[xn+1];i(xn,a[i]=_V(xa))a[xn]=0;I p[4];pipe(p);pipe(p+2);I pid=fork(); +A1(frk,P(!xtA||xn-2,et(x))A y=kv(&x);P(!lC(x)||!ytC,y(ed(x)))x=Ny(e1f(str0,x));S a[xn+1];i(xn,a[i]=_V(xa))a[xn]=0;I p[4];pipe(p);pipe(p+2);I pid=fork(); P(!pid,dup2(*p,0);dup2(p[3],1);i(4,close(p[i]))exit(execve(*a,(C**)a,(C*CO*)env));0)close(*p);close(p[3]);N(v1c(ai(p[1]),x(y)));close(p[1]);A x=rda(p[2]);wait4(pid,0,0,0);x) L now()_(ST timeval t;gettimeofday(&t,0);1000000ll*t.tv_sec+t.tv_usec) @@ -4,7 +4,7 @@ Z CO C je[]="\"\\/\b\f\n\r\t",ej[]="\"\\/bfnrt";Z C*s; Z A0 jx;Z C jw()_(W(*s&&*s<=32u,s++)*s) Z A0(jd,I m=*s=='-';s+=m;C c=*s++;P(!C09(c),0)F v=c-'0';W(C09(*s),v*=10;v+=*s++-'0')I(*s=='.',s++;F t=1;W(C09(*s),t/=10;v+=t*(*s++-'0'))) I((*s|32)=='e',s++;s+=*s=='+';L e=pl((V*)&s);F t=10;I(e<0,e=-e;t=.1)P(e>308,0)i(e,v*=t))af(m?-v:v)) -Z I ju(Q s)_(I v=0;i(4,UC c=*s++,d=c-'0';v<<=4;v|=d<10?d:(d=(c|32)-'a')<6?d+10:-1)v) +Z I ju(S s)_(I v=0;i(4,UC c=*s++,d=c-'0';v<<=4;v|=d<10?d:(d=(c|32)-'a')<6?d+10:-1)v) Z A0(js,UC c;C*p=++s;U n=0;W((c=*p)-'"',P(c<32,s=p;0)p++;I(c=='\\',c=*p++;P(c<32,s=p;0)n++;I(c=='u',L v=ju(p);P(v<0,s=p;0)p+=4;n+=4-(v>127)-(v>2047))))A x=aC(p-s-n);p=s;C*r=xC; W((c=*p++)-'"',I(c=='\\',c=*p++;I(c-'u',U j=si(ej,c);P(j>=L(ej),s=p-1;x(0))c=je[j])E(I v=ju(p);p+=4;I(v<128,c=v)J(v<2048,*r++=192|v>>6;c=128|63&v)E(*r++=224|v>>12;*r++=128|63&v>>6;c=128|63&v)))*r++=c)s=p;x) Z A0(ja,s++;A x=emp(tA);P(jw()==']',s++;x)W(1,PSH(x,Nx(jx()));C c=jw();P(c==']',s++;x)Nx(c==',');s++)0) @@ -14,8 +14,8 @@ Z A jx(){C c=jw();SW(c,R3('f','n','t',c=c>>3&3;I v=*(I*)(V*)A("alse","null","tru X1(js0,RC(U n=xn;x=aa(n+4,x);MS(xC+n,0,4);s=xV;A y=jx();C c=jw();I(y&&c,y=y(0))I(!y,ep0();eS(x,s-xC))x(y))Rc(js0(enl(x)))R_(et(x))) Z V JX(A);Z U nX(A);Z UC t[256];SN V it(){MS(t,5,32);t[127]=5;i(L(je),t[je[i]]=1)} -Z U nC(Q p,U n)_(U m=2+n;i(n,m+=t[(UC)p[i]])m) -Z V JC(Q p,U n){*s++='"';UC c;i(n,SW(t[c=*p++],C(0,*s++=c)C(1,*s++='\\';*s++=ej[si(je,c)])D(MC(s,"\\u00",4);s+=4;hexC(p-1,2,s);s+=2)))*s++='"';} +Z U nC(S p,U n)_(U m=2+n;i(n,m+=t[(UC)p[i]])m) +Z V JC(S p,U n){*s++='"';UC c;i(n,SW(t[c=*p++],C(0,*s++=c)C(1,*s++='\\';*s++=ej[si(je,c)])D(MC(s,"\\u00",4);s+=4;hexC(p-1,2,s);s+=2)))*s++='"';} Z U nl(L v)_(P(v==NL,4)U n=v<0?(v=-v),2:1;W m=10;W(m<=v&&n<19,n++;m*=10)n) Z V Jl(L v){s=v-NL?sl(s,v):MC(s,"null",4)+4;} Z U nx(A x/*0*/){X(Ri(nl(xv))Rl(nl(*xL))Rc(C c=xv;nC(&c,1))Rf(F v=*xF;P(v==(L)v,nl(v))P(v!=v,4)C b[32];sf(b,*(L*)&v)-b)Rm(nx(xx)+nx(xy)-1-!_N(xx))Ru(4+!!xv)RC(nC(xC,xn)) @@ -14,11 +14,11 @@ K Kf(F v)_(af(v)) K KF(F*a ,N n)_(aV(tF,n,a)) F fK(K x)_(*x K KL(K*a ,N n)_(a?aV(tA,n,a):aA(n)) V LK(K*a,K x){VK(tA,a,x);} K Kp(V*p)_(al((L)p)) -V KA(Q s,K x){x=x(d8(A(as(sym(s)),emp(tA),av,x),4));if(x)mr(x);} -V KR(Q s,V*f,I n)_(KA(s,ax(f,n))) -K KE(Q s)_(err0(s)) +V KA(S s,K x){x=x(d8(A(as(sym(s)),emp(tA),av,x),4));if(x)mr(x);} +V KR(S s,V*f,I n)_(KA(s,ax(f,n))) +K KE(S s)_(err0(s)) K ref(K x)_(xR) V unref(K x){mr(x);} -K K0(K*p,Q s,K*a,I n)_(k8(p,s,a,n)) +K K0(K*p,S s,K*a,I n)_(k8(p,s,a,n)) @@ -1,5 +1,5 @@ // https://github.com/ktye/i/blob/master/%2B/k.h -typedef long long K;typedef void V;typedef char C;typedef int I;typedef double F;typedef size_t N;typedef const C*Q; -V kinit(),unref(K),CK(C*,K),IK(I*,K),FK(F*,K),LK(K*,K),*dK(K),KA(Q/*todo*/,K),KR(Q,V*,I);C TK(K),cK(K);N NK(K);I iK(K);F fK(K); -K Kc(C),Ks(C*),Ki(I),Kf(F),KC(C*,N),KS(C**,N),KI(I*,N),KF(F*,N),ref(K),Kp(V*),KE(Q),KL(K*,N),K0(K*,Q,K*,I); +typedef long long K;typedef void V;typedef char C;typedef int I;typedef double F;typedef size_t N;typedef const C*S; +V kinit(),unref(K),CK(C*,K),IK(I*,K),FK(F*,K),LK(K*,K),*dK(K),KA(S/*todo*/,K),KR(S,V*,I);C TK(K),cK(K);N NK(K);I iK(K);F fK(K); +K Kc(C),Ks(C*),Ki(I),Kf(F),KC(C*,N),KS(C**,N),KI(I*,N),KF(F*,N),ref(K),Kp(V*),KE(S),KL(K*,N),K0(K*,S,K*,I); #define Kx(s,a...) ({static K f;K0(&f,s,(K[]){a},sizeof((K[]){a})/sizeof(K));}) @@ -36,9 +36,9 @@ A aL(U n)_(an(n,tL)) A aF(U n)_(an(n,tF)) A aC(U n)_(an(n,tC)) A aS(U n)_(an(n,tS)) -A aCn(Q s,U n)_(aV(tC,n,s)) -A aCm(Q p,Q q)_(aCn(p,q-p)) -A aCz(Q s)_(aCn(s,SL(s))) +A aCn(S s,U n)_(aV(tC,n,s)) +A aCm(S p,S q)_(aCn(p,q-p)) +A aCz(S s)_(aCn(s,SL(s))) A az(L n)_(n-(I)n?al(n):ai(n)) A al(L v)_(aV(tl,1,&v)) A af(F v)_(aV(tf,1,&v)) @@ -57,9 +57,9 @@ A AN(U n,A x)_(xn=n;x) A1(AZ,AT(tG,x)) Z C s0[1<<16],*s1=s0+1; -Q qs(CO L*p)_(*p<0?s0-*p:(V*)p) -I sq(Q s)_(U n=SL(s);P(n<4||(n==4&&!(s[3]&128)),I v=0;MC(&v,s,n);v)Q 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(Q s)_(as(sq(s))) +S qs(CO L*p)_(*p<0?s0-*p:(V*)p) +I sq(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) +A sym(S s)_(as(sq(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) @@ -70,47 +70,47 @@ A gg(A x/*1*/)_(//get value of global A*gp(A x/*1*/)_(UC i=gi(x);x(0);gv+i)//get pointer to global A gns(U k)_(I a[L(gk)];U n=0;i(gn,I(gk[i]>>32==k,a[n++]=gk[i]))aV(tS,n,a))//list namespace -Z A bs0(Q s)_(en0()) -Z A bsbs(Q s)_(exit(0);0) -Z A bscd(Q s)_(P(!*s,C b[256];getcwd(b,SZ b)?eo0():aCz(b))chdir(s)?eo0():au) -Z A bsd(Q s)_(P(!*s,as(gd))s+=*s=='.';gd=sq(s);au) - A bsl(Q s)_(I f=open(s,0,0);A x=u1c(ai(f));close(f);N(x);P(!xn,x(au))C*p=xC,*e=p+xn-1;P(*e-10,x(err0("eoleof")))*e=0;I(*p=='#'&&p[1]=='!',p=strchrnul(p,10);p+=!!*p)x(evs(p,1))) -Z A bsf(Q s)_(K1("{`0:($!h),'\":\",'`k'. h:(&x=^`o`p`q`r`u`v`w`x?@'h)#h:``repl_.:0#`}",ai(!s))) -Z A bst(Q s)_(L n=s[-1]=='t'&&*s==':'?++s,pl(&s):1;Q p=s;A x=N(pk(&p,10));x=N(cpl(aCm(s,p),x,0));L t=now();i(n,mr(Nx(run(x,0,0))))x(az((now()-t+500)/1000))) -Z A bsv(Q s)_(bsf(0)) -Z A bs_(Q*p)_(C b[256];Q s=*p,e=strchrnul(s,10);P(e-s+1>=L(b),ez0())MC(b,s,e-s);b[e-s]=0;*p=e+!!*e;C c=*b,d=b[1];P(c=='c'&&d=='d'&&(!b[2]||b[2]==32),bscd(b+2+(b[2]==32))) +Z A bs0(S s)_(en0()) +Z A bsbs(S s)_(exit(0);0) +Z A bscd(S s)_(P(!*s,C b[256];getcwd(b,SZ b)?eo0():aCz(b))chdir(s)?eo0():au) +Z A bsd(S s)_(P(!*s,as(gd))s+=*s=='.';gd=sq(s);au) + A bsl(S s)_(I f=open(s,0,0);A x=u1c(ai(f));close(f);N(x);P(!xn,x(au))C*p=xC,*e=p+xn-1;P(*e-10,x(err0("eoleof")))*e=0;I(*p=='#'&&p[1]=='!',p=strchrnul(p,10);p+=!!*p)x(evs(p,1))) +Z A bsf(S s)_(K1("{`0:($!h),'\":\",'`k'. h:(&x=^`o`p`q`r`u`v`w`x?@'h)#h:``repl_.:0#`}",ai(!s))) +Z A bst(S s)_(L n=s[-1]=='t'&&*s==':'?++s,pl(&s):1;S p=s;A x=N(pk(&p,10));x=N(cpl(aCm(s,p),x,0));L t=now();i(n,mr(Nx(run(x,0,0))))x(az((now()-t+500)/1000))) +Z A bsv(S s)_(bsf(0)) +Z A bs_(S*p)_(C b[256];S s=*p,e=strchrnul(s,10);P(e-s+1>=L(b),ez0())MC(b,s,e-s);b[e-s]=0;*p=e+!!*e;C c=*b,d=b[1];P(c=='c'&&d=='d'&&(!b[2]||b[2]==32),bscd(b+2+(b[2]==32))) P(!d||d==10||d==32||d==':',G(&bsl,bst,bsd,bsbs,bsf,bsv,bsm,bs0)[si("ltd\\fvm",c)](b+1+(d==32)))K1("0x0a\\`x(,,\"/bin/sh\"),,:",aCz(b))) -Z A evs1(Q*p)_(Q s=*p;P(*s=='\\',++*p;bs_(p))A x=pk((V*)p,10);N(x);x=N(cpl(aCm(s,*p),x,0));x(run(x,0,0))) -A evs(Q s,B r)_(W(*s,A x=evs1(&s);P(!x,I(r,s=strchrnul(s,10);s+=!!*s;epr(0))0)I(r,x(out(x)))E(P(!*s,x)x(0))mc())au) +Z A evs1(S*p)_(S s=*p;P(*s=='\\',++*p;bs_(p))A x=pk((V*)p,10);N(x);x=N(cpl(aCm(s,*p),x,0));x(run(x,0,0))) +A evs(S s,B r)_(W(*s,A x=evs1(&s);P(!x,I(r,s=strchrnul(s,10);s+=!!*s;epr(0))0)I(r,x(out(x)))E(P(!*s,x)x(0))mc())au) B rep()_(Z C b[256];C*s=b,*q; W(1,L n=read(0,s,b-s+SZ b);P(n<=0,0)s+=n;q=memchr(s-n,10,n); P(q,C*p=b;W(q,*q=0;evs(p,1);p=q+1;q=memchr(p,10,s-p))MC(b,p,s-p);s+=b-p;1) P(b+SZ b<=s,die("LONGLINE")))1) V repl(){W(rep())} -//L k(Q s)_(A x=N(evs(s,0));mc();Xz(gl(x))x(0)) -//V kf(Q s,A2 f){d8(A(sym(s),au,av,AT(tx,(A)f)),4);} +//L k(S s)_(A x=N(evs(s,0));mc();Xz(gl(x))x(0)) +//V kf(S s,A2 f){d8(A(sym(s),au,av,AT(tx,(A)f)),4);} -A cns,cn[tn];Z A ce[tn];Q*argv,*env; +A cns,cn[tn];Z A ce[tn];S*argv,*env; V kinit(){Z B l;P(l)l=1;pg=sysconf(_SC_PAGESIZE);A b[32],*c=b; i(tS-tA+1,*c++=ce[tA+i]=an(0,tA+i))*c++=ce[tm]=am(emp(tS),emp(tA));_x(ce[tA])=_R(ce[tC]);ce[tM]=ce[tA];i(tn-ti,Q(!ce[i+ti]);ce[i+ti]=ce[tA])//empties cn[tA]=ce[tC];*c++=cn[ti]=cn[tl]=al(NL);i(tL-tE+1,cn[tE+i]=cn[ti])*c++=cn[tF]=cn[tf]=af(NF);cn[tC]=cn[tc]=ac(32);cn[tS]=cn[ts]=as(0);i(tn-to,cn[to+i]=au)//nulls Q(c-b<=32);cns=aV(tA,c-b,b);} -V kargs(I n,Q*a){argv=(Q*)a;env=(Q*)a+n+1;n=MAX(0,n-2);A x=n?aA(n):emp(tA);i(n,xa=aCz(a[2+i]))gk[gn]='x';gv[gn++]=x;} +V kargs(I n,S*a){argv=(S*)a;env=(S*)a+n+1;n=MAX(0,n-2);A x=n?aA(n):emp(tA);i(n,xa=aCz(a[2+i]))gk[gn]='x';gv[gn++]=x;} A emp(U t)_(_R(ce[t])) -SN U ow(Q s,U n)_(write(1,s,n)) +SN U ow(S s,U n)_(write(1,s,n)) SN V o8(W v){C b[16],*s=b;i(16,C c=v>>4*(15-i)&15;*s++="0W"[9<c]+c)ow(b,16);} -U os(Q s)_(ow(s,SL(s))) -W ov_(Q s,W v)_(os(s);o8(v);ow("\n",1);v) +U os(S s)_(ow(s,SL(s))) +W ov_(S s,W v)_(os(s);o8(v);ow("\n",1);v) #define mms(a...) i(nreg,I f=reg[i].f;V*p=reg[i].p,*q=f?p:p+reg[i].n;a) #define obs(a...) mms(A x=(A)(p+HD*!f+pg*f),y=(A)q;W(x<y,a;x+=cap(x)+HD)) #define xys(a...) obs(I(xtR&&xr,i(xn|!xn,A y=xa;a))) #define rts(a...) {i(gn,A x=gv[i];I(x,a))A x=cns;a;} SN V od(L v){C b[32];ow(b,sl(b,v)-b);} -SN V osd(Q s,L v){os(s);od(v);} +SN V osd(S s,L v){os(s);od(v);} SN A1(ox,o8(x);osd(" U",xU);C t=_T(x);os(" t");I(LH(1,t,tn),ow(&TS[t],1))E(od(t))osd(" r",xr);osd("=",xm);osd(" n",xn);i(MIN(5,cap(x)/8),os(" ");o8(xl))os("\n");x) -A bsm(Q s)_(obs(xm=0)xys(I(!ytP,ym++))rts(I(!xtP,xm++)) +A bsm(S s)_(obs(xm=0)xys(I(!ytP,ym++))rts(I(!xtP,xm++)) // I n=0;obs(ox(x);n++);osd("nObjs:",n) // os("mapped regions:\n");mms(os(f?"[f] ":"[x] ");o8((L)p);os("-");o8((L)q);osd(" N",q-p);os("\n"));os("\n"); obs(I(xr&&xt-1>(U)tn,os("!type:");ox(x))) @@ -14,13 +14,13 @@ M local macro M() local macro N size_t N() error pass-through O O() [cant be used] P P() if .. return .. -Q string (const char*) Q() assert +Q Q() assert R R() case .. return .. -S static S() [cant be used] +S string (const char*) S() [cant be used] T T() U unsigned int U() unless V void V() W unsigned long long W() while X X() switch(xt){..} Y Y() switch(yt){..} -Z Z() +Z static Z() @@ -1,35 +1,35 @@ #include"a.h" // ngn/k, (c) 2019-2023 ngn, GNU AGPLv3 - https://codeberg.org/ngn/k/raw/branch/master/LICENSE -Z Q s0,s;Z U k;Z A pb(A,C); //parser state (s:current pointer, s0:start of source, k:implicit arg counter) -U si(Q s,C v)_(strchrnul(s,v)-(C*)s) //find char (string index) +Z S s0,s;Z U k;Z A pb(A,C); //parser state (s:current pointer, s0:start of source, k:implicit arg counter) +U si(S s,C v)_(strchrnul(s,v)-(C*)s) //find char (string index) B id0(UC c)_(CAz(c)|(c|1)==0xd1) //is identifier start char? Z B id1(C c)_(id0(c)|C09(c)) //is identifier char? -Z B num(Q s)_(C09(s[*s=='-'])) //is number start? -Z Q pw(Q s)_(W(*s==32,s++)s) //skip whitespace +Z B num(S s)_(C09(s[*s=='-'])) //is number start? +Z S pw(S s)_(W(*s==32,s++)s) //skip whitespace Z A1(p1,x&&xn==1?fir(x):x) //singleton list to atom -Q pID(Q s)_(W(id1(*s),s+=0xe555>>((UC)*s>>4&-2)&3)s) //parse identifier -W pu(Q*p)_(Q s=*p;W v=0;C c=*s;W(C09(c),v=10*v+c-'0';c=*++s)*p=s;v) //parse unsigned long -L pl(Q*p)_(B m=**p=='-';*p+=m;(1-2*m)*pu(p)) //parse long -Z L plN(Q*p)_(L v=pl(p);!v&&**p=='N'?(*p)++,NL:v) //parse long (with support for nulls) -Z L pfu(Q*p)_(L v=pu(p);Q s=*p;C c=*s;P(c=='w',(*p)++;WFL)P(c=='n',(*p)++;v^NFL)I e=0; //parse float unsigned +S pID(S s)_(W(id1(*s),s+=0xe555>>((UC)*s>>4&-2)&3)s) //parse identifier +W pu(S*p)_(S s=*p;W v=0;C c=*s;W(C09(c),v=10*v+c-'0';c=*++s)*p=s;v) //parse unsigned long +L pl(S*p)_(B m=**p=='-';*p+=m;(1-2*m)*pu(p)) //parse long +Z L plN(S*p)_(L v=pl(p);!v&&**p=='N'?(*p)++,NL:v) //parse long (with support for nulls) +Z L pfu(S*p)_(L v=pu(p);S s=*p;C c=*s;P(c=='w',(*p)++;WFL)P(c=='n',(*p)++;v^NFL)I e=0; //parse float unsigned I(c=='.',c=*++s;W(C09(c),I(v<(1ull<<63)/10,v=10*v+c-'0';e--)c=*++s)) I(c=='e',s++;e+=pl(&s);P(e<-308,0)P(e>308,WFL)) Z F t[309];I(!*t,*t=1;i(308,t[i+1]=10*t[i])) *p=s;*(L*)A(e<0?v/t[-e]:v*t[e])) -L pf(Q*p)_(B m=**p=='-';(*p)+=m;L v=(L)m<<63|pfu(p);(*p)+=**p=='f';v) //parse float +L pf(S*p)_(B m=**p=='-';(*p)+=m;L v=(L)m<<63|pfu(p);(*p)+=**p=='f';v) //parse float Z A pV(C t,TY(pl)*f)_(L a[1<<9];U n=0; //parse ints or floats - W(1,L v=f(&s);P(n>=L(a),ez0())a[n++]=v;Q p=pw(s);B(p==s||!num(p))s=p)aV(t,n,a)) -Z A0(pZ,Q p=s;W(*p-'0'<2u,p++) //parse ints - P(*p=='B',Q t=s;s=p+1;cB(aV(tG,p-t,t)))//todo - P(*p=='b',Q t=s;s=p+1;cG(cB(aV(tG,p-t,t)))) + W(1,L v=f(&s);P(n>=L(a),ez0())a[n++]=v;S p=pw(s);B(p==s||!num(p))s=p)aV(t,n,a)) +Z A0(pZ,S p=s;W(*p-'0'<2u,p++) //parse ints + P(*p=='B',S t=s;s=p+1;cB(aV(tG,p-t,t)))//todo + P(*p=='b',S t=s;s=p+1;cG(cB(aV(tG,p-t,t)))) sqzZ(N(pV(tL,plN)))) Z A0(pF,pV(tF,pf)) //parse floats Z A0(pC,C a[1<<9];U n=0;C c=*++s; //parse "string" W(c&&c-'"'&&n<L(a),I(c=='\\',c=*++s;U i=fG("tnr0",4,c);I(i<4,c="\t\n\r"[i]))a[n++]=c;c=*++s) P(!c,ep0())P(n>=L(a),ez0())s++;aV(tC,n,a)) -Z A0(p0x,Q p=s;W(CA9(*p),p++)A x=N(unhC(s,p-s));s=p;x) //parse 0x string -Z A0(ps,Q p=s;C c=*s;I(id0(c),s=pID(s))J(c>>7,W(*++s<-64)s+=*s==':')aCm(p,s)) //parse symbol +Z A0(p0x,S p=s;W(CA9(*p),p++)A x=N(unhC(s,p-s));s=p;x) //parse 0x string +Z A0(ps,S p=s;C c=*s;I(id0(c),s=pID(s))J(c>>7,W(*++s<-64)s+=*s==':')aCm(p,s)) //parse symbol Z A pS(C c)_(I a[256];U n=0; //parse symbols - W(1,P(n>=L(a),ez0())A y=*++s-'"'?ps():N(pC());y=str0(y);a[n++]=sq(yC);y(0);Q p=pw(s);B(*p-c)s=p) + W(1,P(n>=L(a),ez0())A y=*++s-'"'?ps():N(pC());y=str0(y);a[n++]=sq(yC);y(0);S p=pw(s);B(*p-c)s=p) aV(tS,n,a)) Z A0(pP,I a[8];U n=0; //parse dot-separated path of identifiers W(1,P(n>=L(a),ez0())A y=str0(ps());a[n++]=sq(yV);y(0);B(*s-'.'||!id0(s[1]))++s) @@ -40,19 +40,19 @@ Z A pt(C*v)_(C c=*s; P(c=='"',p1(pC())) P(c=='[',s++;pb(GAP,']')) P(c=='(',s++;P(*s==')',s++;emp(tA))A x=N(pb(MKL,')'));xn-2?x:las(x)) - P(c=='{',C k0=k;k=1;Q s1=s0,t=s0=s++;A y=N(pp()),z=pb(GAP,'}');P(!z,s0=s1;y(0))I(y==au,y=aS(k);i(3,yi='x'+i))A x=N(cpl(aCn(t,s-t),z,y));s0=s1;k=k0;x) - P(id0(c),Q p=s;A x=pP();I(s-p==1&&c-'y'<2u,k=MAX(k,c-'w'))AO(p-s0,x)) + P(c=='{',C k0=k;k=1;S s1=s0,t=s0=s++;A y=N(pp()),z=pb(GAP,'}');P(!z,s0=s1;y(0))I(y==au,y=aS(k);i(3,yi='x'+i))A x=N(cpl(aCn(t,s-t),z,y));s0=s1;k=k0;x) + P(id0(c),S p=s;A x=pP();I(s-p==1&&c-'y'<2u,k=MAX(k,c-'w'))AO(p-s0,x)) P(C09(c)&&s[1]==':',B u=s[2]==':';s+=2+u;U i=20+c-'0';P(i>25,ep0())*v=1;Lt(tv-u)|i) P(c=='0'&&s[1]=='x',s+=2;p1(p0x())) P(num(s)&&(c-'-'||s==s0||(!id1(s[-1])&&!strchr(")]}\"",s[-1]))), - B d=0;Q p=s;c=*p;W(1,p=pw(p);B(!num(p))p+=*p=='-';c=*p;B(!CA9(c))W(CA9(c)||c=='.'||c==':',d|=!!strchr(".nwef",c);c=*++p))p1(d?pF():pZ())) - P(c>>7,Q p=s;A x=pP();*v=1;AO(p-s0,x)) + B d=0;S p=s;c=*p;W(1,p=pw(p);B(!num(p))p+=*p=='-';c=*p;B(!CA9(c))W(CA9(c)||c=='.'||c==':',d|=!!strchr(".nwef",c);c=*++p))p1(d?pF():pZ())) + P(c>>7,S p=s;A x=pP();*v=1;AO(p-s0,x)) U i=si("'/\\",c);P(i<3,c=*++s;B h=c==':';s+=h;*v=1;aw+i+3*h)i=si(vc,c);P(i>19,GAP) B u=*++s==':';s+=u;*v=1;Lt(tv-u)|i) 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;Q s=qs(&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(L v=xv;S s=qs(&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(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?) @@ -71,4 +71,4 @@ Z A pe(A x,C*v)_(s=pw(s);C c=*s; Z A pb(A x,C c)_(x=x?aA1(x):emp(tA); //parse body (sequence of ;-separated expressions) W(1,C v=0;A y=Nx(pe(0,&v));PSH(x,c-']'&&y==GAP?au:y);P(y==GAP&&c==')',ep(x))B(*s-';'&&*s-10)B(c==10&&*s==10)s++) P(c==10&&!*s,x)P(*s-c,ep(x))s++;x) -A pk(Q*p,C c)_(s0=s=*p;A x=pb(GAP,c);*p=s;P(x,xn==2?las(x):x)eQ(s0,SL(s0),s-s0);0) //parse either a group of lines (c='\n') or till '\0' (c='\0') +A pk(S*p,C c)_(s0=s=*p;A x=pb(GAP,c);*p=s;P(x,xn==2?las(x):x)eQ(s0,SL(s0),s-s0);0) //parse either a group of lines (c='\n') or till '\0' (c='\0') @@ -1,5 +1,5 @@ #include"a.h" // ngn/k, (c) 2019-2023 ngn, GNU AGPLv3 - https://codeberg.org/ngn/k/raw/branch/master/LICENSE -Z Q q="0001020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849" +Z S q="0001020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849" "5051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899"; Z C*S_8(C*s,U v)_(i(4,MC(s+6-2*i,q+v%100*2,2);v/=100)s+8) Z C*s_8(C*s,U v)_(C b[8],*p=b+6;W(1,MC(p,q+v%100*2,2);v/=100;B(!v)p-=2)p+=*p=='0';I n=b+8-p;MC(s,p,n)+n) Z C*S16(C*s,W v)_(S_8(S_8(s,v/(U)1e8),v%(U)1e8)) Z C*s16(C*s,W v)_(v<(U)1e8?s_8(s,v):S_8(s_8(s,v/(U)1e8),v%(U)1e8)) @@ -30,10 +30,10 @@ 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 P(-4<t&&t<0,i(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++='-')su(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(qs(&v)))Rc(enl(x))RU(kst(x))R_(e1f(str,x))) -V hexC(Q s,U n,C*r){Z Q q="0123456789abcdef";i(n,C c=*s++;*r++=q[(UC)c>>4];*r++=q[c&15])} +V hexC(S s,U n,C*r){Z S q="0123456789abcdef";i(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))) SN V unh0(C*q){MS(q,-1,256);i(10,q['0'+i]=i)i(6,q['A'+i]=q['a'+i]=10+i)} -A unhC(Q s,U n)_(P(n&1,el0())Z C q[256];I(!*q,unh0(q))C v=0;i(n,v|=q[s[i]])P(v<0,ed0())A x=aC(n>>1);i(xn,xc=q[*s]<<4|q[s[1]];s+=2)x) +A unhC(S s,U n)_(P(n&1,el0())Z C q[256];I(!*q,unh0(q))C v=0;i(n,v|=q[s[i]])P(v<0,ed0())A x=aC(n>>1);i(xn,xc=q[*s]<<4|q[s[1]];s+=2)x) X1(unh,RmMA(e1f(unh,x))RC(x(unhC(xV,xn)))R_(et(x))) Z A pre(C c,A x)_(cat(ac(c),x)) @@ -41,7 +41,7 @@ Z A1(par,apc(pre('(',x),')')) Z A1(ek,e1f(kst,x)) Z A1(kss,Z C e[128]={'0',[9]='t','n',[13]='r',[34]='"',[92]='\\'};U n=xn+2;i(xn,C c=xc;P(c>126u||(c<32&&!e[c]),cat11(aCz("0x"),hex(x)))n+=!!e[c]) A y=aC(n);C*s=yC;*s++='"';i(xn,C c=xc;I(e[c],*s++='\\';c=e[c])*s++=c)*s='"';x(y)) -Z A kp(A x,Q p,Q q,Q s)_(C t=TS[xt];(strchr(p,t)?xn==1:strchr(q,t)?xn<2:!!strchr(s,t))?par(kst(x)):kst(x)) +Z A kp(A x,S p,S q,S s)_(C t=TS[xt];(strchr(p,t)?xn==1:strchr(q,t)?xn<2:!!strchr(s,t))?par(kst(x)):kst(x)) A1(kl,kp(x,"AC","IFS","Mmqruvw")) A1(kr,kp(x,"","","qruvw")) A1(kw,kp(x,"AC","IFS","Mmpqw")) diff --git a/vim-c/syntax/n.vim b/vim-c/syntax/n.vim index 35f6ce41..180117e1 100644 --- a/vim-c/syntax/n.vim +++ b/vim-c/syntax/n.vim @@ -13,7 +13,7 @@ M n_comment "//[^\r\n]*\|/\*\_.\{-}\*/" R n_h s="#" sk="\\\n" e="\r\|\n" c=n_comment |H n_h preproc M n_string /'\\\=.'\|"\([^\\"]\|\\.\)*"/ contains=n_e |H n_string string M n_e "\\\(x\x\x\|.\)" contained |H n_e special -K n_k TD S Z SN NI CO ST EX __attribute__ asm enum do struct union for +K n_k TD Z SN NI CO ST EX __attribute__ asm enum do struct union for \ if else extern switch case default break continue return goto |H n_k statement K n_t A0 A1 A2 A3 A4 AA AX X1 X2 Y2 nextgroup=n_vv |H n_t normal K n_r return continue |H n_r n_d_rr @@ -7,7 +7,7 @@ Z A sc(C c ,A x)_(XC(x(scC(c, xV,xn)))et(x))A1(spl,sc(10,x)) Z A sC(C*s,L m,A x)_(XC(x(sCC(s,m,xV,xn)))et(x)) Z L jN(U m,A x/*0*/)_(P(!xtA,-1)L n=(xn-!!xn)*m;i(xn,A y=xa;P(!ytcC,-1)n+=yN)n)//total length or -1 A jc(C c, A x)_(XC(jc(c, flp(flp(x))))L n=jN(1,x);P(n<0,et(x))A y=aC(n);C*p=yV;i(xn,I(i,*p++=c )A z=xa;I(ztc,*p++=zv)E(MC(p,zV,zn);p+=zn))x(y)) -A jC(Q s,U m,A x)_(XC(jC(s,m,flp(flp(x))))L n=jN(m,x);P(n<0,et(x))A y=aC(n);C*p=yV;i(xn,I(i,MC(p,s,m);p+=m)A z=xa;I(ztc,*p++=zv)E(MC(p,zV,zn);p+=zn))x(y)) +A jC(S s,U m,A x)_(XC(jC(s,m,flp(flp(x))))L n=jN(m,x);P(n<0,et(x))A y=aC(n);C*p=yV;i(xn,I(i,MC(p,s,m);p+=m)A z=xa;I(ztc,*p++=zv)E(MC(p,zV,zn);p+=zn))x(y)) Z A1(re0,x?rs0(enl(x)):0) Z A o1f(A1 f,A x/*f1*/)_(re0(f==whr?x(aI(0)):f(fir(x)))) Z A2(o1,/*01*/ xtu?o1f(v1[xv],y):y(emp(tA))) Z A o2f(A2 f,A x,A y/*f01*/)_(re0(f(x,y))) Z A3(o2,/*001*/xtv?o2f(v2[xv],y,z):z(emp(tA))) Z AX(em,/*01..1*/A z=0;U k=0;i(n,A y=a[i];I(ytm,k++;y=yx;I(z,P(TS[yt]-TS[zt],ed8(a,n));z=cat10(z,y))E(z=yR)))z=unq(z); |