Fixed old, longstanding, and surprisingly bad bug in cleanMemory() for all machine implementations
This commit is contained in:
parent
2027929148
commit
ec438be5c9
24 changed files with 145 additions and 128 deletions
|
|
@ -541,11 +541,11 @@ a.cc=a.W;a.dc=a.fa;b=a.W-a.F*a.ka;c=a.fa-a.H*a.ma;0<b&&(a.tc=b>>1,a.cc-=b);0<c&&
|
|||
function Xq(a,b,c,d,e){var f=d&255,g=d>>8;d=g&15;var h=a.qa[a.G];h.Fe&&(d=h.Fe[d]);var k=g>>4&15;h.Fe&&(k=h.Fe[k]);e?(b*=h.pc,c*=h.qc,e.fillStyle=h.be[k],e.fillRect(b,c,h.pc,h.qc)):(b=b*a.ka+a.tc,c=c*a.ma+a.Dc,a.J.fillStyle=h.be[k],a.J.fillRect(b,c,a.ka,a.ma));g&pr&&(k=(f&15)*h.pc,f=(f>>4)*h.qc,e?e.drawImage(h.jg[d],k,f,h.pc,h.qc,b,c,h.pc,h.qc):a.J.drawImage(h.jg[d],k,f,h.pc,h.qc,b,c,a.ka,a.ma));g&Wq&&(f=a.od,g=a.Oc,e?(a.ua&&a.ua!==h.qc&&(f=f*h.qc/a.ua|0,g=g*h.qc/a.ua|0),e.fillStyle=h.be[d],e.fillRect(b,
|
||||
c+f,h.pc,g)):(a.ua&&a.ua!==a.ma&&(f=f*a.ma/a.ua|0,g=g*a.ma/a.ua|0),a.J.fillStyle=h.be[d],a.J.fillRect(b,c+f,a.ka,g)))}
|
||||
function qq(a,b){if(a.Z.Zb){var c=!1,d=a.B;d&&(d!==a.A?d.Ec&8&&(c=!0):d.Td&32&&(c=!0));if(c||b){if(b)or(a);else if(void 0===a.L)return;var e=!1;!(b||++a.pd&15)&&0<=a.ya&&(a.ya++,e=!0);var f=0,g=a.Uc,h=a.$a,c=h,k=c+a.Eb;a.pa>=dr&&(h=c=655360,k=c+65536);if(qr(a,d)&8||d.ve&&d.ve<d.nh){var m=(d.Oa[jp]<<8)+d.Oa[kp]|0;d.Nc!==m&&(d.Nc=m,nr(a));d.ve=0}m=d.Nc;a.G&&(m<<=1);c+=m;m=a.bb;a.Ma>=Wn&&d.Oa[19]&&d.Oa[19]<<1!=d.Oa[1]+1&&(a.Sa=d.Oa[19]<<(a.G?1:d.Oa[20]&64?3:4),m=(a.Sa*(a.H-1)+a.F)/a.Db|0,a.pa<=wq&&(m<<=
|
||||
1));c+m>k&&(m=k-c,0>m&&(m=0));k=c+m;if(b=!b&&a.ia){b=a.na;for(var p=!0,y=c>>>b.B;0<m&&y<b.X.length;)b.X[y].Da&&(b.X[y].Da=p=!1,b.X[y].pi=!0),m-=b.A,y++;b=p}if(b){if(!e)return;if(!a.ta){f=a.X-d.Nc;if(0>f)return;g=f+1}}if(a.G){if(a.qa[a.G]){d=f;f=0;e=a.ta=0;h=pr<<8;b=1048575;p=a.B.Ec&32;a.Ma>=Wn&&(p=a.B.uc[16]&8);m=a.X-a.B.Nc;p&&(e=Aq<<8,b&=~e,a.ya&2||(b&=~h));for(c+=d<<1;c<k&&d<g;)p=nc(a.na,c),p|=h,p&e&&(a.ta++,p&=b),d==m&&(p|=a.ya&1?Wq<<8:0),a.ia&&p===a.L[d]||(Xq(a,d%a.F,d/a.F|0,p,a.Ca),a.L[d]=p,
|
||||
f++),c+=2,d++;a.ia=!0;f&&a.Ca&&a.J.drawImage(a.Aa,0,0,a.cb,a.eb,a.tc,a.Dc,a.cc,a.dc);Uq(a)}}else if(a.Vb){var g=k,w,k=c,d=a.ta=0,f=a.Db,e=16==f?65536:196608,h=16==f?1:2;b=Iq(a,h);for(var p=m=0,y=a.F,z=0,E=a.H,ba=0;k<g;){w=nc(a.na,k);if(a.ia&&w===a.L[d])m+=f;else{a.L[d]=w;w=w>>8|(w&255)<<8;var ca=e,X=16;m<y&&(y=m);for(var Ia=0;Ia<f;Ia++){var oc=(w&(ca>>=h))>>(X-=h);Tq(a.Ka,m++,p,b[oc])}m>z&&(z=m);p<E&&(E=p);p>=ba&&(ba=p+1)}k+=2;d++;if(m>=a.F){m=0;p+=2;if(p>a.H)break;p==a.H&&(p=1,k=c+a.Vb)}}a.ia=!0;
|
||||
y<a.F&&(a.Ca.putImageData(a.Ka,0,0,y,E,z-y,ba-E),a.J.drawImage(a.Aa,0,0,a.F,a.H,0,0,a.W,a.fa))}else if(a.Pc){g=h;f=a.ta=0;e=Iq(a,8);h=a.B.ud;m=b=0;p=a.F;y=0;z=a.H;E=0;ba=a.B.Vd[4]&8?4:1;w=a.B.uc[19]&15;for(ca=a.Sa>a.F?a.Sa-a.F-w>>3:0;c<k;){d=h[c-g];Ia=4;w||(a.ia&&d===a.L[f]?(b+=Ia,Ia=0):a.L[f]=d,f++);if(Ia){b<p&&(p=b);for(X=0;X<Ia;X++)Tq(a.Ka,b++,m,e[d&255]),d>>=8;b>y&&(y=b);m<z&&(z=m);m>=E&&(E=m+1)}c+=ba;if(b>=a.F){b=0;if(++m>a.H)break;c+=ca}}w||(a.ia=!0);p<a.F&&(a.Ca.putImageData(a.Ka,0,0,p,z,y-
|
||||
p,E-z),a.J.drawImage(a.Aa,0,0,a.F,a.H,0,0,a.W,a.fa))}else{g=h;d=a.ta=0;f=Iq(a);e=a.B.ud;b=h=0;m=a.F;p=0;y=a.H;z=0;E=a.B.uc[19]&15;for(ba=a.Sa>a.F?a.Sa-a.F-E>>3:0;c<k;){w=c++-g;w=e[w];X=8;E?h?(ca=a.F-h,X>ca&&(X=ca)):(w<<=E,X-=E,a.ia=!1):(a.ia&&w===a.L[d]?(h+=X,X=0):a.L[d]=w,d++);if(X){h<m&&(m=h);for(ca=0;ca<X;ca++)Ia=rr[w&2155905152]||0,Tq(a.Ka,h++,b,f[Ia]),w<<=1;h>p&&(p=h);b<y&&(y=b);b>=z&&(z=b+1)}if(h>=a.F){h=0;if(++b>a.H)break;c+=ba}}E||(a.ia=!0);m<a.F&&(a.Ca.putImageData(a.Ka,0,0,m,y,p-m,z-y),
|
||||
a.J.drawImage(a.Aa,0,0,a.F,a.H,0,0,a.W,a.fa))}}}}function qr(a,b){var c=0;a=ed(a.S)-b.Dg;0>a&&(b.Dg=a,a=-a|0);a%b.zg>b.Xl&&(c|=1);a%b.Cg>b.Zl&&(c|=9);b.nh=a/b.Cg|0;return c}l.ql=function(){var a=this.O,b;a.Ub&&(b=a.fc);return b};l.Nm=function(a,b){a=this.O;a.Xf=a.fc;a.fc=b&31};l.pl=function(){return sr(this.O)};l.Mm=function(a,b){tr(this,this.O,b)};l.rl=function(){return this.O.Ec};l.Om=function(a,b){this.O.Ec=b;Gq(this,!1)};l.sl=function(){return ur(this,this.O)};
|
||||
1));c+m>k&&(m=k-c,0>m&&(m=0));k=c+m;if(b=!b&&a.ia){b=a.na;for(var p=!0,y=c>>>b.B,w=b.A-(c&b.C);0<m&&y<b.X.length;)b.X[y].Da&&(b.X[y].Da=p=!1,b.X[y].pi=!0),m-=w,w=b.A,y++;b=p}if(b){if(!e)return;if(!a.ta){f=a.X-d.Nc;if(0>f)return;g=f+1}}if(a.G){if(a.qa[a.G]){d=f;f=0;e=a.ta=0;h=pr<<8;b=1048575;p=a.B.Ec&32;a.Ma>=Wn&&(p=a.B.uc[16]&8);m=a.X-a.B.Nc;p&&(e=Aq<<8,b&=~e,a.ya&2||(b&=~h));for(c+=d<<1;c<k&&d<g;)p=nc(a.na,c),p|=h,p&e&&(a.ta++,p&=b),d==m&&(p|=a.ya&1?Wq<<8:0),a.ia&&p===a.L[d]||(Xq(a,d%a.F,d/a.F|0,
|
||||
p,a.Ca),a.L[d]=p,f++),c+=2,d++;a.ia=!0;f&&a.Ca&&a.J.drawImage(a.Aa,0,0,a.cb,a.eb,a.tc,a.Dc,a.cc,a.dc);Uq(a)}}else if(a.Vb){var g=k,z,k=c,d=a.ta=0,f=a.Db,e=16==f?65536:196608,h=16==f?1:2;b=Iq(a,h);for(var p=m=0,y=a.F,w=0,E=a.H,ba=0;k<g;){z=nc(a.na,k);if(a.ia&&z===a.L[d])m+=f;else{a.L[d]=z;z=z>>8|(z&255)<<8;var ca=e,X=16;m<y&&(y=m);for(var Ia=0;Ia<f;Ia++){var oc=(z&(ca>>=h))>>(X-=h);Tq(a.Ka,m++,p,b[oc])}m>w&&(w=m);p<E&&(E=p);p>=ba&&(ba=p+1)}k+=2;d++;if(m>=a.F){m=0;p+=2;if(p>a.H)break;p==a.H&&(p=1,k=
|
||||
c+a.Vb)}}a.ia=!0;y<a.F&&(a.Ca.putImageData(a.Ka,0,0,y,E,w-y,ba-E),a.J.drawImage(a.Aa,0,0,a.F,a.H,0,0,a.W,a.fa))}else if(a.Pc){g=h;f=a.ta=0;e=Iq(a,8);h=a.B.ud;m=b=0;p=a.F;y=0;w=a.H;E=0;ba=a.B.Vd[4]&8?4:1;z=a.B.uc[19]&15;for(ca=a.Sa>a.F?a.Sa-a.F-z>>3:0;c<k;){d=h[c-g];Ia=4;z||(a.ia&&d===a.L[f]?(b+=Ia,Ia=0):a.L[f]=d,f++);if(Ia){b<p&&(p=b);for(X=0;X<Ia;X++)Tq(a.Ka,b++,m,e[d&255]),d>>=8;b>y&&(y=b);m<w&&(w=m);m>=E&&(E=m+1)}c+=ba;if(b>=a.F){b=0;if(++m>a.H)break;c+=ca}}z||(a.ia=!0);p<a.F&&(a.Ca.putImageData(a.Ka,
|
||||
0,0,p,w,y-p,E-w),a.J.drawImage(a.Aa,0,0,a.F,a.H,0,0,a.W,a.fa))}else{g=h;d=a.ta=0;f=Iq(a);e=a.B.ud;b=h=0;m=a.F;p=0;y=a.H;w=0;E=a.B.uc[19]&15;for(ba=a.Sa>a.F?a.Sa-a.F-E>>3:0;c<k;){z=c++-g;z=e[z];X=8;E?h?(ca=a.F-h,X>ca&&(X=ca)):(z<<=E,X-=E,a.ia=!1):(a.ia&&z===a.L[d]?(h+=X,X=0):a.L[d]=z,d++);if(X){h<m&&(m=h);for(ca=0;ca<X;ca++)Ia=rr[z&2155905152]||0,Tq(a.Ka,h++,b,f[Ia]),z<<=1;h>p&&(p=h);b<y&&(y=b);b>=w&&(w=b+1)}if(h>=a.F){h=0;if(++b>a.H)break;c+=ba}}E||(a.ia=!0);m<a.F&&(a.Ca.putImageData(a.Ka,0,0,m,y,
|
||||
p-m,w-y),a.J.drawImage(a.Aa,0,0,a.F,a.H,0,0,a.W,a.fa))}}}}function qr(a,b){var c=0;a=ed(a.S)-b.Dg;0>a&&(b.Dg=a,a=-a|0);a%b.zg>b.Xl&&(c|=1);a%b.Cg>b.Zl&&(c|=9);b.nh=a/b.Cg|0;return c}l.ql=function(){var a=this.O,b;a.Ub&&(b=a.fc);return b};l.Nm=function(a,b){a=this.O;a.Xf=a.fc;a.fc=b&31};l.pl=function(){return sr(this.O)};l.Mm=function(a,b){tr(this,this.O,b)};l.rl=function(){return this.O.Ec};l.Om=function(a,b){this.O.Ec=b;Gq(this,!1)};l.sl=function(){return ur(this,this.O)};
|
||||
l.Jj=function(a,b){this.A.$f=this.A.$f&-4|b&3};l.Pk=function(){return this.A.Td};l.kk=function(){return this.A.uc[this.A.Td&31]};l.Ij=function(a,b){a=this.A;var c=a.Td&32;if(a.Je){a.Je=!1;var d=a.Td&31;if(16<=d||!c)if(vr||a.uc[d]!==b)a.uc[d]=b,nr(this,!1)}else a.Td=b,a.Je=!0,b&32&&!c&&yq(this,!0)&&qq(this,!0),b=(a.Oa[jp]<<8)+a.Oa[kp]|0,a.Nc!=b&&(a.Nc=b,nr(this)),a.ve=0};
|
||||
l.Cl=function(){var a=0;if(this.Ma==Wn)a=3-((this.A.ff&12)>>2),a=(this.sb&1<<a)<<4-a;else{var b=this.A.xe[0];45!=(b&63)&&2880!=(b&4032)&&184320!=(b&258048)&&(a|=16)}a|=this.A.qh&-17;return this.A.qh=a};l.Pm=function(a,b){this.A.ff=b;xq(this)};l.Dl=function(){return this.A.rh};l.Xm=function(a,b){this.A.rh=b};l.Al=function(){return this.A.Wd};l.Vm=function(a,b){this.A.Wd=b};l.zl=function(){return this.A.Vd[this.A.Wd]};
|
||||
l.Um=function(a,b){if(vr||this.A.Vd[this.A.Wd]!==b)this.A.Vd[this.A.Wd]=b;switch(this.A.Wd){case 2:this.A.Wa=Yp[b&15];break;case 4:Zq(this,Yq(this))&&qq(this,!0)}};l.bl=function(){return this.A.Yf};l.wm=function(a,b){if(vr||this.A.Yf!==b)this.A.Yf=b};l.cl=function(){return this.A.Zf};l.xm=function(a,b){this.A.bd=b;this.A.Zf=3;this.A.vc=0};l.ym=function(a,b){this.A.bd=b;this.A.Zf=wp;this.A.vc=0};
|
||||
|
|
|
|||
Loading…
Reference in a new issue