I applied your patch to the latest git repos, and it ran without any crash. < $. 1 0 0 2 ┌─────┐ │0 │ 1│ │3 │ 2│ └─────┘
Пт, 02 июн 2017, Thomas Costigliola написал(а): > I have this patch that implements sparse boxing that worked in the J805 > engine. Sometime between 805 and 806 it stopped working and now crashes the > interpreter during or after the result gets freed. > > < $. 1 0 0 2 > > Can someone (Henry) explain what changed? > > Here is the patch: > > diff --git a/jsrc/cu.c b/jsrc/cu.c > index ea70060..db2166c 100644 > --- a/jsrc/cu.c > +++ b/jsrc/cu.c > @@ -9,7 +9,7 @@ > > static A jteverysp(J jt,A w,A fs,AF f1){A*wv,x,z,*zv;P*wp,*zp; > RZ(w); > - ASSERT(SBOX&AT(w),EVNONCE); > + //ASSERT(SBOX&AT(w),EVNONCE); > RZ(z=ca(w)); > wp=PAV(w); x=SPA(wp,x); wv=AAV(x); > zp=PAV(z); x=SPA(zp,x); zv=AAV(x); > @@ -17,7 +17,7 @@ static A jteverysp(J jt,A w,A fs,AF > f1){A*wv,x,z,*zv;P*wp,*zp; > R z; > } > > -#define EVERYI(exp) {RZ(*zv++=x=exp); ASSERT(!(SPARSE&AT(x)),EVNONCE);} > +#define EVERYI(exp) {RZ(*zv++=x=exp); > /*ASSERT(!(SPARSE&AT(x)),EVNONCE);*/} > /* note: x can be non-noun */ > > A jtevery(J jt,A w,A fs,AF f1){A*wv,x,z,*zv;I wd; > diff --git a/jsrc/vo.c b/jsrc/vo.c > index 29d118c..a8b20ac 100644 > --- a/jsrc/vo.c > +++ b/jsrc/vo.c > @@ -17,8 +17,22 @@ F1(jtlevel1){RZ(w); R sc(level(w));} > > F1(jtbox0){R irs1(w,0L,0L,jtbox);} > > +F1(jtboxsp){A z, *zv;I r, n; > + if(jt->rank){ > + r=jt->rank[1]; jt->rank=0; > + z=denseit(w); > + z=df1(z,qq(ds(CLT),sc(r))); > + z=every(z,0,jtsparse1); > + }else{ > + GATV(z,BOX,1,0,0); zv=AAV(z); > + rat1(w); *zv=w; > + } > + R z; > +} > + > F1(jtbox){A y,z,*zv;C*wv,*yv;I f,k,m,n,r,wr,*ws; > RZ(w); > + if(SPARSE&AT(w)) R jtboxsp(jt,w); > ASSERT(!(SPARSE&AT(w)),EVNONCE); > ws=AS(w); wr=AR(w); r=jt->rank?jt->rank[1]:wr; f=wr-r; > RE(n=prod(f,ws)); if(n)m=AN(w)/n; else RE(m=prod(r,f+ws)); > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm -- regards, ==================================================== GPG key 1024D/4434BAB3 2008-08-24 gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3 gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm