js-confuser 2.0.0-alpha.2 → 2.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierrc +4 -0
- package/CHANGELOG.md +42 -8
- package/Migration.md +23 -8
- package/README.md +2 -2
- package/dist/constants.js +11 -2
- package/dist/index.js +49 -6
- package/dist/obfuscator.js +121 -10
- package/dist/order.js +0 -1
- package/dist/probability.js +1 -96
- package/dist/templates/getGlobalTemplate.js +4 -1
- package/dist/templates/integrityTemplate.js +1 -1
- package/dist/templates/stringCompressionTemplate.js +3 -3
- package/dist/templates/tamperProtectionTemplates.js +1 -1
- package/dist/templates/template.js +17 -12
- package/dist/transforms/controlFlowFlattening.js +112 -83
- package/dist/transforms/deadCode.js +21 -22
- package/dist/transforms/dispatcher.js +62 -37
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +5 -0
- package/dist/transforms/extraction/objectExtraction.js +1 -2
- package/dist/transforms/finalizer.js +1 -1
- package/dist/transforms/flatten.js +2 -19
- package/dist/transforms/identifier/globalConcealing.js +3 -4
- package/dist/transforms/identifier/movedDeclarations.js +12 -5
- package/dist/transforms/identifier/renameVariables.js +40 -6
- package/dist/transforms/lock/integrity.js +9 -1
- package/dist/transforms/lock/lock.js +16 -9
- package/dist/transforms/minify.js +64 -27
- package/dist/transforms/opaquePredicates.js +6 -7
- package/dist/transforms/pack.js +32 -5
- package/dist/transforms/plugin.js +20 -39
- package/dist/transforms/preparation.js +25 -36
- package/dist/transforms/renameLabels.js +1 -2
- package/dist/transforms/rgf.js +36 -16
- package/dist/transforms/shuffle.js +10 -11
- package/dist/transforms/string/stringCompression.js +14 -10
- package/dist/transforms/string/stringConcealing.js +7 -5
- package/dist/transforms/string/stringEncoding.js +4 -2
- package/dist/transforms/string/stringSplitting.js +4 -2
- package/dist/transforms/variableMasking.js +3 -2
- package/dist/utils/NameGen.js +5 -2
- package/dist/utils/PredicateGen.js +62 -0
- package/dist/utils/ast-utils.js +24 -9
- package/dist/utils/random-utils.js +10 -0
- package/dist/validateOptions.js +2 -2
- package/index.d.ts +16 -2
- package/package.json +2 -2
- package/src/constants.ts +15 -5
- package/src/index.ts +15 -5
- package/src/obfuscationResult.ts +7 -1
- package/src/obfuscator.ts +152 -12
- package/src/options.ts +26 -8
- package/src/order.ts +0 -2
- package/src/templates/getGlobalTemplate.ts +5 -1
- package/src/templates/integrityTemplate.ts +14 -19
- package/src/templates/stringCompressionTemplate.ts +4 -28
- package/src/templates/tamperProtectionTemplates.ts +7 -3
- package/src/templates/template.ts +5 -3
- package/src/transforms/controlFlowFlattening.ts +139 -83
- package/src/transforms/deadCode.ts +27 -30
- package/src/transforms/dispatcher.ts +24 -5
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +10 -1
- package/src/transforms/extraction/objectExtraction.ts +1 -2
- package/src/transforms/finalizer.ts +1 -1
- package/src/transforms/flatten.ts +3 -22
- package/src/transforms/identifier/globalConcealing.ts +26 -17
- package/src/transforms/identifier/movedDeclarations.ts +18 -6
- package/src/transforms/identifier/renameVariables.ts +48 -6
- package/src/transforms/lock/integrity.ts +11 -1
- package/src/transforms/lock/lock.ts +26 -10
- package/src/transforms/minify.ts +85 -38
- package/src/transforms/opaquePredicates.ts +6 -9
- package/src/transforms/pack.ts +41 -5
- package/src/transforms/plugin.ts +47 -69
- package/src/transforms/preparation.ts +33 -46
- package/src/transforms/renameLabels.ts +1 -2
- package/src/transforms/rgf.ts +52 -23
- package/src/transforms/shuffle.ts +28 -26
- package/src/transforms/string/encoding.ts +1 -1
- package/src/transforms/string/stringCompression.ts +22 -13
- package/src/transforms/string/stringConcealing.ts +13 -7
- package/src/transforms/string/stringEncoding.ts +6 -2
- package/src/transforms/string/stringSplitting.ts +9 -4
- package/src/transforms/variableMasking.ts +2 -2
- package/src/utils/NameGen.ts +13 -3
- package/src/utils/PredicateGen.ts +61 -0
- package/src/utils/ast-utils.ts +16 -9
- package/src/utils/random-utils.ts +14 -0
- package/src/validateOptions.ts +7 -4
- package/src/probability.ts +0 -110
- package/src/transforms/functionOutlining.ts +0 -225
- package/src/utils/ControlObject.ts +0 -141
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.StringCompressionTemplate = exports.
|
|
6
|
+
exports.StringCompressionTemplate = exports.StringCompressionLibraryMinified = void 0;
|
|
7
7
|
var _template = _interopRequireDefault(require("./template"));
|
|
8
8
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
9
|
-
var StringCompressionTemplate = exports.StringCompressionTemplate = new _template["default"]("\nvar {stringFn};\n\n(function (){\n
|
|
10
|
-
var PakoInflateMin = exports.PakoInflateMin = " \nvar {pako} = {};\n\n/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n!function(e,t){ t({pako}) }(this,(function(e){\"use strict\";var t=function(e,t,i,n){for(var a=65535&e|0,r=e>>>16&65535|0,o=0;0!==i;){i-=o=i>2e3?2e3:i;do{r=r+(a=a+t[n++]|0)|0}while(--o);a%=65521,r%=65521}return a|r<<16|0},i=new Uint32Array(function(){for(var e,t=[],i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t}()),n=function(e,t,n,a){var r=i,o=a+n;e^=-1;for(var s=a;s<o;s++)e=e>>>8^r[255&(e^t[s])];return-1^e},a=16209,r=function(e,t){var i,n,r,o,s,l,f,d,h,c,u,w,b,m,k,_,v,g,p,y,x,E,R,A,Z=e.state;i=e.next_in,R=e.input,n=i+(e.avail_in-5),r=e.next_out,A=e.output,o=r-(t-e.avail_out),s=r+(e.avail_out-257),l=Z.dmax,f=Z.wsize,d=Z.whave,h=Z.wnext,c=Z.window,u=Z.hold,w=Z.bits,b=Z.lencode,m=Z.distcode,k=(1<<Z.lenbits)-1,_=(1<<Z.distbits)-1;e:do{w<15&&(u+=R[i++]<<w,w+=8,u+=R[i++]<<w,w+=8),v=b[u&k];t:for(;;){if(u>>>=g=v>>>24,w-=g,0===(g=v>>>16&255))A[r++]=65535&v;else{if(!(16&g)){if(0==(64&g)){v=b[(65535&v)+(u&(1<<g)-1)];continue t}if(32&g){Z.mode=16191;break e}e.msg=\"invalid literal/length code\",Z.mode=a;break e}p=65535&v,(g&=15)&&(w<g&&(u+=R[i++]<<w,w+=8),p+=u&(1<<g)-1,u>>>=g,w-=g),w<15&&(u+=R[i++]<<w,w+=8,u+=R[i++]<<w,w+=8),v=m[u&_];i:for(;;){if(u>>>=g=v>>>24,w-=g,!(16&(g=v>>>16&255))){if(0==(64&g)){v=m[(65535&v)+(u&(1<<g)-1)];continue i}e.msg=\"invalid distance code\",Z.mode=a;break e}if(y=65535&v,w<(g&=15)&&(u+=R[i++]<<w,(w+=8)<g&&(u+=R[i++]<<w,w+=8)),(y+=u&(1<<g)-1)>l){e.msg=\"invalid distance too far back\",Z.mode=a;break e}if(u>>>=g,w-=g,y>(g=r-o)){if((g=y-g)>d&&Z.sane){e.msg=\"invalid distance too far back\",Z.mode=a;break e}if(x=0,E=c,0===h){if(x+=f-g,g<p){p-=g;do{A[r++]=c[x++]}while(--g);x=r-y,E=A}}else if(h<g){if(x+=f+h-g,(g-=h)<p){p-=g;do{A[r++]=c[x++]}while(--g);if(x=0,h<p){p-=g=h;do{A[r++]=c[x++]}while(--g);x=r-y,E=A}}}else if(x+=h-g,g<p){p-=g;do{A[r++]=c[x++]}while(--g);x=r-y,E=A}for(;p>2;)A[r++]=E[x++],A[r++]=E[x++],A[r++]=E[x++],p-=3;p&&(A[r++]=E[x++],p>1&&(A[r++]=E[x++]))}else{x=r-y;do{A[r++]=A[x++],A[r++]=A[x++],A[r++]=A[x++],p-=3}while(p>2);p&&(A[r++]=A[x++],p>1&&(A[r++]=A[x++]))}break}}break}}while(i<n&&r<s);i-=p=w>>3,u&=(1<<(w-=p<<3))-1,e.next_in=i,e.next_out=r,e.avail_in=i<n?n-i+5:5-(i-n),e.avail_out=r<s?s-r+257:257-(r-s),Z.hold=u,Z.bits=w},o=15,s=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),l=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),f=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),d=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),h=function(e,t,i,n,a,r,h,c){var u,w,b,m,k,_,v,g,p,y=c.bits,x=0,E=0,R=0,A=0,Z=0,S=0,T=0,O=0,U=0,D=0,I=null,B=new Uint16Array(16),N=new Uint16Array(16),C=null;for(x=0;x<=o;x++)B[x]=0;for(E=0;E<n;E++)B[t[i+E]]++;for(Z=y,A=o;A>=1&&0===B[A];A--);if(Z>A&&(Z=A),0===A)return a[r++]=20971520,a[r++]=20971520,c.bits=1,0;for(R=1;R<A&&0===B[R];R++);for(Z<R&&(Z=R),O=1,x=1;x<=o;x++)if(O<<=1,(O-=B[x])<0)return-1;if(O>0&&(0===e||1!==A))return-1;for(N[1]=0,x=1;x<o;x++)N[x+1]=N[x]+B[x];for(E=0;E<n;E++)0!==t[i+E]&&(h[N[t[i+E]]++]=E);if(0===e?(I=C=h,_=20):1===e?(I=s,C=l,_=257):(I=f,C=d,_=0),D=0,E=0,x=R,k=r,S=Z,T=0,b=-1,m=(U=1<<Z)-1,1===e&&U>852||2===e&&U>592)return 1;for(;;){v=x-T,h[E]+1<_?(g=0,p=h[E]):h[E]>=_?(g=C[h[E]-_],p=I[h[E]-_]):(g=96,p=0),u=1<<x-T,R=w=1<<S;do{a[k+(D>>T)+(w-=u)]=v<<24|g<<16|p|0}while(0!==w);for(u=1<<x-1;D&u;)u>>=1;if(0!==u?(D&=u-1,D+=u):D=0,E++,0==--B[x]){if(x===A)break;x=t[i+h[E]]}if(x>Z&&(D&m)!==b){for(0===T&&(T=Z),k+=R,O=1<<(S=x-T);S+T<A&&!((O-=B[S+T])<=0);)S++,O<<=1;if(U+=1<<S,1===e&&U>852||2===e&&U>592)return 1;a[b=D&m]=Z<<24|S<<16|k-r|0}}return 0!==D&&(a[k+D]=x-T<<24|64<<16|0),c.bits=Z,0},c={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},u=c.Z_FINISH,w=c.Z_BLOCK,b=c.Z_TREES,m=c.Z_OK,k=c.Z_STREAM_END,_=c.Z_NEED_DICT,v=c.Z_STREAM_ERROR,g=c.Z_DATA_ERROR,p=c.Z_MEM_ERROR,y=c.Z_BUF_ERROR,x=c.Z_DEFLATED,E=16180,R=16190,A=16191,Z=16192,S=16194,T=16199,O=16200,U=16206,D=16209,I=function(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)};function B(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var N,C,z=function(e){if(!e)return 1;var t=e.state;return!t||t.strm!==e||t.mode<E||t.mode>16211?1:0},F=function(e){if(z(e))return v;var t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=E,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,m},L=function(e){if(z(e))return v;var t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,F(e)},M=function(e,t){var i;if(z(e))return v;var n=e.state;return t<0?(i=0,t=-t):(i=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?v:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,L(e))},H=function(e,t){if(!e)return v;var i=new B;e.state=i,i.strm=e,i.window=null,i.mode=E;var n=M(e,t);return n!==m&&(e.state=null),n},j=!0,K=function(e){if(j){N=new Int32Array(512),C=new Int32Array(32);for(var t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(h(1,e.lens,0,288,N,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;h(2,e.lens,0,32,C,0,e.work,{bits:5}),j=!1}e.lencode=N,e.lenbits=9,e.distcode=C,e.distbits=5},P=function(e,t,i,n){var a,r=e.state;return null===r.window&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new Uint8Array(r.wsize)),n>=r.wsize?(r.window.set(t.subarray(i-r.wsize,i),0),r.wnext=0,r.whave=r.wsize):((a=r.wsize-r.wnext)>n&&(a=n),r.window.set(t.subarray(i-n,i-n+a),r.wnext),(n-=a)?(r.window.set(t.subarray(i-n,i),0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=a))),0},Y={inflateReset:L,inflateReset2:M,inflateResetKeep:F,inflateInit:function(e){return H(e,15)},inflateInit2:H,inflate:function(e,i){var a,o,s,l,f,d,c,B,N,C,F,L,M,H,j,Y,G,X,W,q,J,Q,V,$,ee=0,te=new Uint8Array(4),ie=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(z(e)||!e.output||!e.input&&0!==e.avail_in)return v;(a=e.state).mode===A&&(a.mode=Z),f=e.next_out,s=e.output,c=e.avail_out,l=e.next_in,o=e.input,d=e.avail_in,B=a.hold,N=a.bits,C=d,F=c,Q=m;e:for(;;)switch(a.mode){case E:if(0===a.wrap){a.mode=Z;break}for(;N<16;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(2&a.wrap&&35615===B){0===a.wbits&&(a.wbits=15),a.check=0,te[0]=255&B,te[1]=B>>>8&255,a.check=n(a.check,te,2,0),B=0,N=0,a.mode=16181;break}if(a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&B)<<8)+(B>>8))%31){e.msg=\"incorrect header check\",a.mode=D;break}if((15&B)!==x){e.msg=\"unknown compression method\",a.mode=D;break}if(N-=4,J=8+(15&(B>>>=4)),0===a.wbits&&(a.wbits=J),J>15||J>a.wbits){e.msg=\"invalid window size\",a.mode=D;break}a.dmax=1<<a.wbits,a.flags=0,e.adler=a.check=1,a.mode=512&B?16189:A,B=0,N=0;break;case 16181:for(;N<16;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(a.flags=B,(255&a.flags)!==x){e.msg=\"unknown compression method\",a.mode=D;break}if(57344&a.flags){e.msg=\"unknown header flags set\",a.mode=D;break}a.head&&(a.head.text=B>>8&1),512&a.flags&&4&a.wrap&&(te[0]=255&B,te[1]=B>>>8&255,a.check=n(a.check,te,2,0)),B=0,N=0,a.mode=16182;case 16182:for(;N<32;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}a.head&&(a.head.time=B),512&a.flags&&4&a.wrap&&(te[0]=255&B,te[1]=B>>>8&255,te[2]=B>>>16&255,te[3]=B>>>24&255,a.check=n(a.check,te,4,0)),B=0,N=0,a.mode=16183;case 16183:for(;N<16;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}a.head&&(a.head.xflags=255&B,a.head.os=B>>8),512&a.flags&&4&a.wrap&&(te[0]=255&B,te[1]=B>>>8&255,a.check=n(a.check,te,2,0)),B=0,N=0,a.mode=16184;case 16184:if(1024&a.flags){for(;N<16;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}a.length=B,a.head&&(a.head.extra_len=B),512&a.flags&&4&a.wrap&&(te[0]=255&B,te[1]=B>>>8&255,a.check=n(a.check,te,2,0)),B=0,N=0}else a.head&&(a.head.extra=null);a.mode=16185;case 16185:if(1024&a.flags&&((L=a.length)>d&&(L=d),L&&(a.head&&(J=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Uint8Array(a.head.extra_len)),a.head.extra.set(o.subarray(l,l+L),J)),512&a.flags&&4&a.wrap&&(a.check=n(a.check,o,L,l)),d-=L,l+=L,a.length-=L),a.length))break e;a.length=0,a.mode=16186;case 16186:if(2048&a.flags){if(0===d)break e;L=0;do{J=o[l+L++],a.head&&J&&a.length<65536&&(a.head.name+=String.fromCharCode(J))}while(J&&L<d);if(512&a.flags&&4&a.wrap&&(a.check=n(a.check,o,L,l)),d-=L,l+=L,J)break e}else a.head&&(a.head.name=null);a.length=0,a.mode=16187;case 16187:if(4096&a.flags){if(0===d)break e;L=0;do{J=o[l+L++],a.head&&J&&a.length<65536&&(a.head.comment+=String.fromCharCode(J))}while(J&&L<d);if(512&a.flags&&4&a.wrap&&(a.check=n(a.check,o,L,l)),d-=L,l+=L,J)break e}else a.head&&(a.head.comment=null);a.mode=16188;case 16188:if(512&a.flags){for(;N<16;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(4&a.wrap&&B!==(65535&a.check)){e.msg=\"header crc mismatch\",a.mode=D;break}B=0,N=0}a.head&&(a.head.hcrc=a.flags>>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=A;break;case 16189:for(;N<32;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}e.adler=a.check=I(B),B=0,N=0,a.mode=R;case R:if(0===a.havedict)return e.next_out=f,e.avail_out=c,e.next_in=l,e.avail_in=d,a.hold=B,a.bits=N,_;e.adler=a.check=1,a.mode=A;case A:if(i===w||i===b)break e;case Z:if(a.last){B>>>=7&N,N-=7&N,a.mode=U;break}for(;N<3;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}switch(a.last=1&B,N-=1,3&(B>>>=1)){case 0:a.mode=16193;break;case 1:if(K(a),a.mode=T,i===b){B>>>=2,N-=2;break e}break;case 2:a.mode=16196;break;case 3:e.msg=\"invalid block type\",a.mode=D}B>>>=2,N-=2;break;case 16193:for(B>>>=7&N,N-=7&N;N<32;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if((65535&B)!=(B>>>16^65535)){e.msg=\"invalid stored block lengths\",a.mode=D;break}if(a.length=65535&B,B=0,N=0,a.mode=S,i===b)break e;case S:a.mode=16195;case 16195:if(L=a.length){if(L>d&&(L=d),L>c&&(L=c),0===L)break e;s.set(o.subarray(l,l+L),f),d-=L,l+=L,c-=L,f+=L,a.length-=L;break}a.mode=A;break;case 16196:for(;N<14;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(a.nlen=257+(31&B),B>>>=5,N-=5,a.ndist=1+(31&B),B>>>=5,N-=5,a.ncode=4+(15&B),B>>>=4,N-=4,a.nlen>286||a.ndist>30){e.msg=\"too many length or distance symbols\",a.mode=D;break}a.have=0,a.mode=16197;case 16197:for(;a.have<a.ncode;){for(;N<3;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}a.lens[ie[a.have++]]=7&B,B>>>=3,N-=3}for(;a.have<19;)a.lens[ie[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,V={bits:a.lenbits},Q=h(0,a.lens,0,19,a.lencode,0,a.work,V),a.lenbits=V.bits,Q){e.msg=\"invalid code lengths set\",a.mode=D;break}a.have=0,a.mode=16198;case 16198:for(;a.have<a.nlen+a.ndist;){for(;Y=(ee=a.lencode[B&(1<<a.lenbits)-1])>>>16&255,G=65535&ee,!((j=ee>>>24)<=N);){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(G<16)B>>>=j,N-=j,a.lens[a.have++]=G;else{if(16===G){for($=j+2;N<$;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(B>>>=j,N-=j,0===a.have){e.msg=\"invalid bit length repeat\",a.mode=D;break}J=a.lens[a.have-1],L=3+(3&B),B>>>=2,N-=2}else if(17===G){for($=j+3;N<$;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}N-=j,J=0,L=3+(7&(B>>>=j)),B>>>=3,N-=3}else{for($=j+7;N<$;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}N-=j,J=0,L=11+(127&(B>>>=j)),B>>>=7,N-=7}if(a.have+L>a.nlen+a.ndist){e.msg=\"invalid bit length repeat\",a.mode=D;break}for(;L--;)a.lens[a.have++]=J}}if(a.mode===D)break;if(0===a.lens[256]){e.msg=\"invalid code -- missing end-of-block\",a.mode=D;break}if(a.lenbits=9,V={bits:a.lenbits},Q=h(1,a.lens,0,a.nlen,a.lencode,0,a.work,V),a.lenbits=V.bits,Q){e.msg=\"invalid literal/lengths set\",a.mode=D;break}if(a.distbits=6,a.distcode=a.distdyn,V={bits:a.distbits},Q=h(2,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,V),a.distbits=V.bits,Q){e.msg=\"invalid distances set\",a.mode=D;break}if(a.mode=T,i===b)break e;case T:a.mode=O;case O:if(d>=6&&c>=258){e.next_out=f,e.avail_out=c,e.next_in=l,e.avail_in=d,a.hold=B,a.bits=N,r(e,F),f=e.next_out,s=e.output,c=e.avail_out,l=e.next_in,o=e.input,d=e.avail_in,B=a.hold,N=a.bits,a.mode===A&&(a.back=-1);break}for(a.back=0;Y=(ee=a.lencode[B&(1<<a.lenbits)-1])>>>16&255,G=65535&ee,!((j=ee>>>24)<=N);){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(Y&&0==(240&Y)){for(X=j,W=Y,q=G;Y=(ee=a.lencode[q+((B&(1<<X+W)-1)>>X)])>>>16&255,G=65535&ee,!(X+(j=ee>>>24)<=N);){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}B>>>=X,N-=X,a.back+=X}if(B>>>=j,N-=j,a.back+=j,a.length=G,0===Y){a.mode=16205;break}if(32&Y){a.back=-1,a.mode=A;break}if(64&Y){e.msg=\"invalid literal/length code\",a.mode=D;break}a.extra=15&Y,a.mode=16201;case 16201:if(a.extra){for($=a.extra;N<$;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}a.length+=B&(1<<a.extra)-1,B>>>=a.extra,N-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=16202;case 16202:for(;Y=(ee=a.distcode[B&(1<<a.distbits)-1])>>>16&255,G=65535&ee,!((j=ee>>>24)<=N);){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(0==(240&Y)){for(X=j,W=Y,q=G;Y=(ee=a.distcode[q+((B&(1<<X+W)-1)>>X)])>>>16&255,G=65535&ee,!(X+(j=ee>>>24)<=N);){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}B>>>=X,N-=X,a.back+=X}if(B>>>=j,N-=j,a.back+=j,64&Y){e.msg=\"invalid distance code\",a.mode=D;break}a.offset=G,a.extra=15&Y,a.mode=16203;case 16203:if(a.extra){for($=a.extra;N<$;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}a.offset+=B&(1<<a.extra)-1,B>>>=a.extra,N-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg=\"invalid distance too far back\",a.mode=D;break}a.mode=16204;case 16204:if(0===c)break e;if(L=F-c,a.offset>L){if((L=a.offset-L)>a.whave&&a.sane){e.msg=\"invalid distance too far back\",a.mode=D;break}L>a.wnext?(L-=a.wnext,M=a.wsize-L):M=a.wnext-L,L>a.length&&(L=a.length),H=a.window}else H=s,M=f-a.offset,L=a.length;L>c&&(L=c),c-=L,a.length-=L;do{s[f++]=H[M++]}while(--L);0===a.length&&(a.mode=O);break;case 16205:if(0===c)break e;s[f++]=a.length,c--,a.mode=O;break;case U:if(a.wrap){for(;N<32;){if(0===d)break e;d--,B|=o[l++]<<N,N+=8}if(F-=c,e.total_out+=F,a.total+=F,4&a.wrap&&F&&(e.adler=a.check=a.flags?n(a.check,s,F,f-F):t(a.check,s,F,f-F)),F=c,4&a.wrap&&(a.flags?B:I(B))!==a.check){e.msg=\"incorrect data check\",a.mode=D;break}B=0,N=0}a.mode=16207;case 16207:if(a.wrap&&a.flags){for(;N<32;){if(0===d)break e;d--,B+=o[l++]<<N,N+=8}if(4&a.wrap&&B!==(4294967295&a.total)){e.msg=\"incorrect length check\",a.mode=D;break}B=0,N=0}a.mode=16208;case 16208:Q=k;break e;case D:Q=g;break e;case 16210:return p;default:return v}return e.next_out=f,e.avail_out=c,e.next_in=l,e.avail_in=d,a.hold=B,a.bits=N,(a.wsize||F!==e.avail_out&&a.mode<D&&(a.mode<U||i!==u))&&P(e,e.output,e.next_out,F-e.avail_out),C-=e.avail_in,F-=e.avail_out,e.total_in+=C,e.total_out+=F,a.total+=F,4&a.wrap&&F&&(e.adler=a.check=a.flags?n(a.check,s,F,e.next_out-F):t(a.check,s,F,e.next_out-F)),e.data_type=a.bits+(a.last?64:0)+(a.mode===A?128:0)+(a.mode===T||a.mode===S?256:0),(0===C&&0===F||i===u)&&Q===m&&(Q=y),Q},inflateEnd:function(e){if(z(e))return v;var t=e.state;return t.window&&(t.window=null),e.state=null,m},inflateGetHeader:function(e,t){if(z(e))return v;var i=e.state;return 0==(2&i.wrap)?v:(i.head=t,t.done=!1,m)},inflateSetDictionary:function(e,i){var n,a=i.length;return z(e)||0!==(n=e.state).wrap&&n.mode!==R?v:n.mode===R&&t(1,i,a,0)!==n.check?g:P(e,i,a,a)?(n.mode=16210,p):(n.havedict=1,m)},inflateInfo:\"pako inflate (from Nodeca project)\"};function G(e){return G=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},G(e)}var X=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},W=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var i=t.shift();if(i){if(\"object\"!==G(i))throw new TypeError(i+\"must be non-object\");for(var n in i)X(i,n)&&(e[n]=i[n])}}return e},q=function(e){for(var t=0,i=0,n=e.length;i<n;i++)t+=e[i].length;for(var a=new Uint8Array(t),r=0,o=0,s=e.length;r<s;r++){var l=e[r];a.set(l,o),o+=l.length}return a},J=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){J=!1}for(var Q=new Uint8Array(256),V=0;V<256;V++)Q[V]=V>=252?6:V>=248?5:V>=240?4:V>=224?3:V>=192?2:1;Q[254]=Q[254]=1;var $=function(e){if(\"function\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);var t,i,n,a,r,o=e.length,s=0;for(a=0;a<o;a++)55296==(64512&(i=e.charCodeAt(a)))&&a+1<o&&56320==(64512&(n=e.charCodeAt(a+1)))&&(i=65536+(i-55296<<10)+(n-56320),a++),s+=i<128?1:i<2048?2:i<65536?3:4;for(t=new Uint8Array(s),r=0,a=0;r<s;a++)55296==(64512&(i=e.charCodeAt(a)))&&a+1<o&&56320==(64512&(n=e.charCodeAt(a+1)))&&(i=65536+(i-55296<<10)+(n-56320),a++),i<128?t[r++]=i:i<2048?(t[r++]=192|i>>>6,t[r++]=128|63&i):i<65536?(t[r++]=224|i>>>12,t[r++]=128|i>>>6&63,t[r++]=128|63&i):(t[r++]=240|i>>>18,t[r++]=128|i>>>12&63,t[r++]=128|i>>>6&63,t[r++]=128|63&i);return t},ee=function(e,t){var i,n,a=t||e.length;if(\"function\"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));var r=new Array(2*a);for(n=0,i=0;i<a;){var o=e[i++];if(o<128)r[n++]=o;else{var s=Q[o];if(s>4)r[n++]=65533,i+=s-1;else{for(o&=2===s?31:3===s?15:7;s>1&&i<a;)o=o<<6|63&e[i++],s--;s>1?r[n++]=65533:o<65536?r[n++]=o:(o-=65536,r[n++]=55296|o>>10&1023,r[n++]=56320|1023&o)}}}return function(e,t){if(t<65534&&e.subarray&&J)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));for(var i=\"\",n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i}(r,n)},te=function(e,t){(t=t||e.length)>e.length&&(t=e.length);for(var i=t-1;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+Q[e[i]]>t?i:t},ie={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"};var ne=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};var ae=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1},re=Object.prototype.toString,oe=c.Z_NO_FLUSH,se=c.Z_FINISH,le=c.Z_OK,fe=c.Z_STREAM_END,de=c.Z_NEED_DICT,he=c.Z_STREAM_ERROR,ce=c.Z_DATA_ERROR,ue=c.Z_MEM_ERROR;function we(e){this.options=W({chunkSize:65536,windowBits:15,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new ne,this.strm.avail_out=0;var i=Y.inflateInit2(this.strm,t.windowBits);if(i!==le)throw new Error(ie[i]);if(this.header=new ae,Y.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=$(t.dictionary):\"[object ArrayBuffer]\"===re.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=Y.inflateSetDictionary(this.strm,t.dictionary))!==le))throw new Error(ie[i])}function be(e,t){var i=new we(t);if(i.push(e),i.err)throw i.msg||ie[i.err];return i.result}we.prototype.push=function(e,t){var i,n,a,r=this.strm,o=this.options.chunkSize,s=this.options.dictionary;if(this.ended)return!1;for(n=t===~~t?t:!0===t?se:oe,\"[object ArrayBuffer]\"===re.call(e)?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){for(0===r.avail_out&&(r.output=new Uint8Array(o),r.next_out=0,r.avail_out=o),(i=Y.inflate(r,n))===de&&s&&((i=Y.inflateSetDictionary(r,s))===le?i=Y.inflate(r,n):i===ce&&(i=de));r.avail_in>0&&i===fe&&r.state.wrap>0&&0!==e[r.next_in];)Y.inflateReset(r),i=Y.inflate(r,n);switch(i){case he:case ce:case de:case ue:return this.onEnd(i),this.ended=!0,!1}if(a=r.avail_out,r.next_out&&(0===r.avail_out||i===fe))if(\"string\"===this.options.to){var l=te(r.output,r.next_out),f=r.next_out-l,d=ee(r.output,l);r.next_out=f,r.avail_out=o-f,f&&r.output.set(r.output.subarray(l,l+f),0),this.onData(d)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(i!==le||0!==a){if(i===fe)return i=Y.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,!0;if(0===r.avail_in)break}}return!0},we.prototype.onData=function(e){this.chunks.push(e)},we.prototype.onEnd=function(e){e===le&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=q(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var me=we,ke=be,_e=function(e,t){return(t=t||{}).raw=!0,be(e,t)},ve=be,ge=c,pe={Inflate:me,inflate:ke,inflateRaw:_e,ungzip:ve,constants:ge};e.Inflate=me,e.constants=ge,e.default=pe,e.inflate=ke,e.inflateRaw=_e,e.ungzip=ve,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n ";
|
|
9
|
+
var StringCompressionTemplate = exports.StringCompressionTemplate = new _template["default"]("\nvar {stringFn};\n\n(function (){\n var compressedString = {stringValue};\n var utf8String = {StringCompressionLibrary}[\"decompressFromUTF16\"](compressedString);\n var stringArray = utf8String[\"split\"]({stringDelimiter});\n\n {stringFn} = function(index){\n return stringArray[index];\n }\n})();\n");
|
|
10
|
+
var StringCompressionLibraryMinified = exports.StringCompressionLibraryMinified = " \nvar {StringCompressionLibrary}=function(){var r=String.fromCharCode,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return\"\";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+\"===\";case 2:return n+\"==\";case 3:return n+\"=\"}},decompressFromBase64:function(r){return null==r?\"\":\"\"==r?null:i._decompress(r.length,32,function(n){return t(o,r.charAt(n))})},compressToUTF16:function(o){return null==o?\"\":i._compress(o,15,function(o){return r(o+32)})+\" \"},decompressFromUTF16:function(r){return null==r?\"\":\"\"==r?null:i._decompress(r.length,16384,function(o){return r.charCodeAt(o)-32})},compressToUint8Array:function(r){for(var o=i.compress(r),n=new Uint8Array(2*o.length),e=0,t=o.length;e<t;e++){var s=o.charCodeAt(e);n[2*e]=s>>>8,n[2*e+1]=s%256}return n},decompressFromUint8Array:function(o){if(null==o)return i.decompress(o);for(var n=new Array(o.length/2),e=0,t=n.length;e<t;e++)n[e]=256*o[2*e]+o[2*e+1];var s=[];return n.forEach(function(o){s.push(r(o))}),i.decompress(s.join(\"\"))},compressToEncodedURIComponent:function(r){return null==r?\"\":i._compress(r,6,function(r){return n.charAt(r)})},decompressFromEncodedURIComponent:function(r){return null==r?\"\":\"\"==r?null:(r=r.replace(/ /g,\"+\"),i._decompress(r.length,32,function(o){return t(n,r.charAt(o))}))},compress:function(o){return i._compress(o,16,function(o){return r(o)})},_compress:function(r,o,n){if(null==r)return\"\";var e,t,i,s={},u={},a=\"\",p=\"\",c=\"\",l=2,f=3,h=2,d=[],m=0,v=0;for(i=0;i<r.length;i+=1)if(a=r.charAt(i),Object.prototype.hasOwnProperty.call(s,a)||(s[a]=f++,u[a]=!0),p=c+a,Object.prototype.hasOwnProperty.call(s,p))c=p;else{if(Object.prototype.hasOwnProperty.call(u,c)){if(c.charCodeAt(0)<256){for(e=0;e<h;e++)m<<=1,v==o-1?(v=0,d.push(n(m)),m=0):v++;for(t=c.charCodeAt(0),e=0;e<8;e++)m=m<<1|1&t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}else{for(t=1,e=0;e<h;e++)m=m<<1|t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t=0;for(t=c.charCodeAt(0),e=0;e<16;e++)m=m<<1|1&t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}0==--l&&(l=Math.pow(2,h),h++),delete u[c]}else for(t=s[c],e=0;e<h;e++)m=m<<1|1&t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;0==--l&&(l=Math.pow(2,h),h++),s[p]=f++,c=String(a)}if(\"\"!==c){if(Object.prototype.hasOwnProperty.call(u,c)){if(c.charCodeAt(0)<256){for(e=0;e<h;e++)m<<=1,v==o-1?(v=0,d.push(n(m)),m=0):v++;for(t=c.charCodeAt(0),e=0;e<8;e++)m=m<<1|1&t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}else{for(t=1,e=0;e<h;e++)m=m<<1|t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t=0;for(t=c.charCodeAt(0),e=0;e<16;e++)m=m<<1|1&t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}0==--l&&(l=Math.pow(2,h),h++),delete u[c]}else for(t=s[c],e=0;e<h;e++)m=m<<1|1&t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;0==--l&&(l=Math.pow(2,h),h++)}for(t=2,e=0;e<h;e++)m=m<<1|1&t,v==o-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;for(;;){if(m<<=1,v==o-1){d.push(n(m));break}v++}return d.join(\"\")},decompress:function(r){return null==r?\"\":\"\"==r?null:i._decompress(r.length,32768,function(o){return r.charCodeAt(o)})},_decompress:function(o,n,e){var t,i,s,u,a,p,c,l=[],f=4,h=4,d=3,m=\"\",v=[],g={val:e(0),position:n,index:1};for(t=0;t<3;t+=1)l[t]=t;for(s=0,a=Math.pow(2,2),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;switch(s){case 0:for(s=0,a=Math.pow(2,8),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;c=r(s);break;case 1:for(s=0,a=Math.pow(2,16),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;c=r(s);break;case 2:return\"\"}for(l[3]=c,i=c,v.push(c);;){if(g.index>o)return\"\";for(s=0,a=Math.pow(2,d),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;switch(c=s){case 0:for(s=0,a=Math.pow(2,8),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;l[h++]=r(s),c=h-1,f--;break;case 1:for(s=0,a=Math.pow(2,16),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;l[h++]=r(s),c=h-1,f--;break;case 2:return v.join(\"\")}if(0==f&&(f=Math.pow(2,d),d++),l[c])m=l[c];else{if(c!==h)return null;m=i+i.charAt(0)}v.push(m),l[h++]=i+m.charAt(0),i=m,0==--f&&(f=Math.pow(2,d),d++)}}};return i}();\"function\"==typeof define&&define.amd?define(function(){return {StringCompressionLibrary}}):\"undefined\"!=typeof module&&null!=module?module.exports={StringCompressionLibrary}:\"undefined\"!=typeof angular&&null!=angular&&angular.module(\"LZString\",[]).factory(\"LZString\",function(){return {StringCompressionLibrary}});";
|
|
@@ -17,5 +17,5 @@ var createEvalIntegrityTemplate = exports.createEvalIntegrityTemplate = function
|
|
|
17
17
|
countermeasures: pluginInstance.globalState.lock.createCountermeasuresCode()
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
return new _template["default"]("\n function {EvalIntegrityName}(
|
|
20
|
+
return new _template["default"]("\n function {EvalIntegrityName}(".concat(_constants.placeholderVariablePrefix, "_flag = true){\n return ").concat(_constants.placeholderVariablePrefix, "_flag;\n }\n "));
|
|
21
21
|
};
|
|
@@ -29,7 +29,7 @@ var Template = exports["default"] = /*#__PURE__*/function () {
|
|
|
29
29
|
function Template() {
|
|
30
30
|
_classCallCheck(this, Template);
|
|
31
31
|
_defineProperty(this, "astIdentifierPrefix", "__t_" + (0, _randomUtils.getRandomString)(6));
|
|
32
|
-
_defineProperty(this, "symbols",
|
|
32
|
+
_defineProperty(this, "symbols", new Set());
|
|
33
33
|
for (var _len = arguments.length, templates = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
34
34
|
templates[_key] = arguments[_key];
|
|
35
35
|
}
|
|
@@ -41,8 +41,13 @@ var Template = exports["default"] = /*#__PURE__*/function () {
|
|
|
41
41
|
return _createClass(Template, [{
|
|
42
42
|
key: "addSymbols",
|
|
43
43
|
value: function addSymbols() {
|
|
44
|
-
var _this
|
|
45
|
-
(
|
|
44
|
+
var _this = this;
|
|
45
|
+
for (var _len2 = arguments.length, symbols = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
46
|
+
symbols[_key2] = arguments[_key2];
|
|
47
|
+
}
|
|
48
|
+
symbols.forEach(function (symbol) {
|
|
49
|
+
_this.symbols.add(symbol);
|
|
50
|
+
});
|
|
46
51
|
return this;
|
|
47
52
|
}
|
|
48
53
|
}, {
|
|
@@ -54,19 +59,19 @@ var Template = exports["default"] = /*#__PURE__*/function () {
|
|
|
54
59
|
}, {
|
|
55
60
|
key: "findRequiredVariables",
|
|
56
61
|
value: function findRequiredVariables() {
|
|
57
|
-
var
|
|
62
|
+
var _this2 = this;
|
|
58
63
|
var matches = this.templates[0].match(/{[$A-Za-z0-9_]+}/g);
|
|
59
64
|
if (matches !== null) {
|
|
60
65
|
matches.forEach(function (variable) {
|
|
61
66
|
var name = variable.slice(1, -1);
|
|
62
|
-
|
|
67
|
+
_this2.requiredVariables.add(name);
|
|
63
68
|
});
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
}, {
|
|
67
72
|
key: "interpolateTemplate",
|
|
68
73
|
value: function interpolateTemplate(variables) {
|
|
69
|
-
var
|
|
74
|
+
var _this3 = this;
|
|
70
75
|
var allVariables = _objectSpread(_objectSpread({}, this.defaultVariables), variables);
|
|
71
76
|
var _iterator = _createForOfIteratorHelper(this.requiredVariables),
|
|
72
77
|
_step;
|
|
@@ -88,9 +93,9 @@ var Template = exports["default"] = /*#__PURE__*/function () {
|
|
|
88
93
|
Object.keys(allVariables).forEach(function (name) {
|
|
89
94
|
var bracketName = "{".concat(name.replace("$", "\\$"), "}");
|
|
90
95
|
var value = allVariables[name];
|
|
91
|
-
if (
|
|
92
|
-
var astIdentifierName =
|
|
93
|
-
|
|
96
|
+
if (_this3.isASTVariable(value)) {
|
|
97
|
+
var astIdentifierName = _this3.astIdentifierPrefix + name;
|
|
98
|
+
_this3.astVariableMappings.set(name, astIdentifierName);
|
|
94
99
|
value = astIdentifierName;
|
|
95
100
|
}
|
|
96
101
|
var reg = new RegExp(bracketName, "g");
|
|
@@ -159,7 +164,7 @@ var Template = exports["default"] = /*#__PURE__*/function () {
|
|
|
159
164
|
}, {
|
|
160
165
|
key: "file",
|
|
161
166
|
value: function file() {
|
|
162
|
-
var
|
|
167
|
+
var _this4 = this;
|
|
163
168
|
var variables = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
164
169
|
var _this$interpolateTemp = this.interpolateTemplate(variables),
|
|
165
170
|
output = _this$interpolateTemp.output;
|
|
@@ -173,9 +178,9 @@ var Template = exports["default"] = /*#__PURE__*/function () {
|
|
|
173
178
|
throw new Error(output + "\n" + "Template failed to parse: " + e.message);
|
|
174
179
|
}
|
|
175
180
|
this.interpolateAST(file, variables);
|
|
176
|
-
if (this.symbols.
|
|
181
|
+
if (this.symbols.size > 0) {
|
|
177
182
|
file.program.body.forEach(function (node) {
|
|
178
|
-
var _iterator2 = _createForOfIteratorHelper(
|
|
183
|
+
var _iterator2 = _createForOfIteratorHelper(_this4.symbols),
|
|
179
184
|
_step2;
|
|
180
185
|
try {
|
|
181
186
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports["default"] = void 0;
|
|
7
7
|
var _traverse = _interopRequireWildcard(require("@babel/traverse"));
|
|
8
8
|
var _order = require("../order");
|
|
9
|
-
var _probability = require("../probability");
|
|
10
9
|
var _astUtils = require("../utils/ast-utils");
|
|
11
10
|
var t = _interopRequireWildcard(require("@babel/types"));
|
|
12
11
|
var _node = require("../utils/node");
|
|
@@ -37,6 +36,9 @@ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r),
|
|
|
37
36
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
38
37
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
39
38
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
39
|
+
// Function deemed unsafe for CFF
|
|
40
|
+
var CFF_UNSAFE = Symbol("CFF_UNSAFE");
|
|
41
|
+
|
|
40
42
|
/**
|
|
41
43
|
* Breaks functions into DAGs (Directed Acyclic Graphs)
|
|
42
44
|
*
|
|
@@ -80,6 +82,10 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
80
82
|
// Amount of blocks changed by Control Flow Flattening
|
|
81
83
|
var cffCounter = 0;
|
|
82
84
|
var functionsModified = new Set();
|
|
85
|
+
function flagFunctionToAvoid(path, reason) {
|
|
86
|
+
var fnOrProgram = (0, _astUtils.getParentFunctionOrProgram)(path);
|
|
87
|
+
fnOrProgram.node[CFF_UNSAFE] = reason;
|
|
88
|
+
}
|
|
83
89
|
return {
|
|
84
90
|
post: function post() {
|
|
85
91
|
functionsModified.forEach(function (node) {
|
|
@@ -87,6 +93,26 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
87
93
|
});
|
|
88
94
|
},
|
|
89
95
|
visitor: {
|
|
96
|
+
// Unsafe detection
|
|
97
|
+
ThisExpression: function ThisExpression(path) {
|
|
98
|
+
flagFunctionToAvoid(path, "this");
|
|
99
|
+
},
|
|
100
|
+
VariableDeclaration: function VariableDeclaration(path) {
|
|
101
|
+
if (path.node.declarations.length !== 1) {
|
|
102
|
+
path.getAncestry().forEach(function (p) {
|
|
103
|
+
p.node[CFF_UNSAFE] = "multipleDeclarations";
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
Identifier: function Identifier(path) {
|
|
108
|
+
if (path.node.name === _constants.variableFunctionName || path.node.name === "arguments") {
|
|
109
|
+
flagFunctionToAvoid(path, "arguments");
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"Super|MetaProperty|AwaitExpression|YieldExpression": function SuperMetaPropertyAwaitExpressionYieldExpression(path) {
|
|
113
|
+
flagFunctionToAvoid(path, "functionSpecific");
|
|
114
|
+
},
|
|
115
|
+
// Main CFF transformation
|
|
90
116
|
"Program|Function": {
|
|
91
117
|
exit: function exit(_path) {
|
|
92
118
|
var programOrFunctionPath = _path;
|
|
@@ -95,6 +121,9 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
95
121
|
if (programOrFunctionPath.find(function (p) {
|
|
96
122
|
return p.isForStatement() || p.isWhile();
|
|
97
123
|
})) return;
|
|
124
|
+
|
|
125
|
+
// Exclude 'CFF_UNSAFE' functions
|
|
126
|
+
if (programOrFunctionPath.node[CFF_UNSAFE]) return;
|
|
98
127
|
var programPath = _path.isProgram() ? _path : null;
|
|
99
128
|
var functionPath = _path.isFunction() ? _path : null;
|
|
100
129
|
var blockPath;
|
|
@@ -116,35 +145,20 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
116
145
|
if (blockPath.node.body.length < 3) return;
|
|
117
146
|
|
|
118
147
|
// Check user's threshold setting
|
|
119
|
-
if (!
|
|
148
|
+
if (!me.computeProbabilityMap(me.options.controlFlowFlattening)) {
|
|
120
149
|
return;
|
|
121
150
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
151
|
+
if (functionPath) {
|
|
152
|
+
// Avoid unsafe functions
|
|
153
|
+
if (functionPath.node[_constants.UNSAFE]) return;
|
|
154
|
+
if (functionPath.node.async || functionPath.node.generator) return;
|
|
155
|
+
}
|
|
125
156
|
programOrFunctionPath.scope.crawl();
|
|
126
157
|
var blockFnParent = (0, _astUtils.getParentFunctionOrProgram)(blockPath);
|
|
127
158
|
var hasIllegalNode = false;
|
|
128
159
|
var bindingNames = new Set();
|
|
129
160
|
blockPath.traverse({
|
|
130
|
-
"Super|MetaProperty|AwaitExpression|YieldExpression": function SuperMetaPropertyAwaitExpressionYieldExpression(path) {
|
|
131
|
-
if ((0, _astUtils.getParentFunctionOrProgram)(path).node === blockFnParent.node) {
|
|
132
|
-
hasIllegalNode = true;
|
|
133
|
-
path.stop();
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
VariableDeclaration: function VariableDeclaration(path) {
|
|
137
|
-
if (path.node.declarations.length !== 1) {
|
|
138
|
-
hasIllegalNode = true;
|
|
139
|
-
path.stop();
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
161
|
Identifier: function Identifier(path) {
|
|
143
|
-
if (path.node.name === _constants.variableFunctionName || path.node.name === "arguments") {
|
|
144
|
-
hasIllegalNode = true;
|
|
145
|
-
path.stop();
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
162
|
if (!path.isBindingIdentifier()) return;
|
|
149
163
|
var binding = path.scope.getBinding(path.node.name);
|
|
150
164
|
if (!binding) return;
|
|
@@ -271,7 +285,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
271
285
|
}, {
|
|
272
286
|
key: "getInitializingObjectExpression",
|
|
273
287
|
value: function getInitializingObjectExpression() {
|
|
274
|
-
return isDebug ? new _template["default"]("\n ({\n identity: \"".concat(this.propertyName, "\"\n })\n ")).expression() : new _template["default"]("
|
|
288
|
+
return isDebug ? new _template["default"]("\n ({\n identity: \"".concat(this.propertyName, "\"\n })\n ")).expression() : new _template["default"]("({})").expression();
|
|
275
289
|
}
|
|
276
290
|
}, {
|
|
277
291
|
key: "getMemberExpression",
|
|
@@ -302,6 +316,13 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
302
316
|
for (var key in propertyMap) {
|
|
303
317
|
properties.push(t.objectProperty(t.stringLiteral(key), propertyMap[key], true));
|
|
304
318
|
}
|
|
319
|
+
if (this === mainScope) {
|
|
320
|
+
// Reset With logic
|
|
321
|
+
properties.push(t.objectProperty(t.stringLiteral(resetWithProperty), new _template["default"]("\n (function(newStateValues, alwaysUndefined){\n {withMemberExpression} = alwaysUndefined;\n {arrayPattern} = newStateValues\n })\n ").expression({
|
|
322
|
+
withMemberExpression: (0, _node.deepClone)(withMemberExpression),
|
|
323
|
+
arrayPattern: t.arrayPattern((0, _node.deepClone)(stateVars))
|
|
324
|
+
}), true));
|
|
325
|
+
}
|
|
305
326
|
return t.objectExpression(properties);
|
|
306
327
|
}
|
|
307
328
|
}, {
|
|
@@ -538,7 +559,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
538
559
|
if (statement.isFunctionDeclaration()) {
|
|
539
560
|
var fnName = statement.node.id.name;
|
|
540
561
|
var isIllegal = false;
|
|
541
|
-
if (!flattenFunctionDeclarations || statement.node.async || statement.node.generator || statement.node[_constants.UNSAFE]) {
|
|
562
|
+
if (!flattenFunctionDeclarations || statement.node.async || statement.node.generator || statement.node[_constants.UNSAFE] || statement.node[CFF_UNSAFE] || (0, _astUtils.isStrictMode)(statement)) {
|
|
542
563
|
isIllegal = true;
|
|
543
564
|
}
|
|
544
565
|
var oldBasicBlock = currentBasicBlock;
|
|
@@ -674,13 +695,6 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
674
695
|
nextBlockPath: defaultBlockPath
|
|
675
696
|
});
|
|
676
697
|
basicBlocks.get(endLabel).allowWithDiscriminant = false;
|
|
677
|
-
|
|
678
|
-
// Add with / reset with logic
|
|
679
|
-
basicBlocks.get(startLabel).body.unshift(new _template["default"]("\n {resetWithMemberExpression} = function(newStateValues){\n {withMemberExpression} = undefined;\n {arrayPattern} = newStateValues\n }\n ").single({
|
|
680
|
-
arrayPattern: t.arrayPattern((0, _node.deepClone)(stateVars)),
|
|
681
|
-
resetWithMemberExpression: (0, _node.deepClone)(resetWithMemberExpression),
|
|
682
|
-
withMemberExpression: (0, _node.deepClone)(withMemberExpression)
|
|
683
|
-
}));
|
|
684
698
|
if (!isDebug && addDeadCode) {
|
|
685
699
|
// DEAD CODE 1/3: Add fake chunks that are never reached
|
|
686
700
|
var fakeChunkCount = (0, _randomUtils.getRandomInteger)(1, 5);
|
|
@@ -768,7 +782,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
768
782
|
var _iterator2 = _createForOfIteratorHelper(basicBlocks.values()),
|
|
769
783
|
_step2;
|
|
770
784
|
try {
|
|
771
|
-
var
|
|
785
|
+
var _loop4 = function _loop4() {
|
|
772
786
|
var basicBlock = _step2.value;
|
|
773
787
|
var currentStateValues = basicBlock.stateValues;
|
|
774
788
|
// Wrap the statement in a Babel path to allow traversal
|
|
@@ -826,7 +840,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
826
840
|
if (path.node[_constants.NO_RENAME] === cffIndex) return;
|
|
827
841
|
var identifierName = path.node.name;
|
|
828
842
|
if (identifierName === gotoFunctionName) return;
|
|
829
|
-
var binding =
|
|
843
|
+
var binding = path.scope.getBinding(identifierName);
|
|
830
844
|
if (!binding) {
|
|
831
845
|
return;
|
|
832
846
|
}
|
|
@@ -855,6 +869,12 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
855
869
|
me.skip(memberExpression);
|
|
856
870
|
path.replaceWith(memberExpression);
|
|
857
871
|
path.skip();
|
|
872
|
+
|
|
873
|
+
// Preserve proper 'this' context when directly calling functions
|
|
874
|
+
// X.Y.Z() -> (1, X.Y.Z)()
|
|
875
|
+
if (path.parentPath.isCallExpression() && path.key === "callee") {
|
|
876
|
+
path.replaceWith(t.sequenceExpression([t.numericLiteral(1), path.node]));
|
|
877
|
+
}
|
|
858
878
|
}
|
|
859
879
|
},
|
|
860
880
|
// Top-level returns set additional flag to indicate that the function has returned
|
|
@@ -890,18 +910,17 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
890
910
|
needsIndividualAssignments = false;
|
|
891
911
|
}
|
|
892
912
|
if (needsIndividualAssignments) {
|
|
893
|
-
for (var
|
|
894
|
-
var oldValue = currentStateValues[
|
|
895
|
-
var newValue = newStateValues[
|
|
913
|
+
for (var _i8 = 0; _i8 < stateVars.length; _i8++) {
|
|
914
|
+
var oldValue = currentStateValues[_i8];
|
|
915
|
+
var newValue = newStateValues[_i8];
|
|
896
916
|
|
|
897
917
|
// console.log(oldValue, newValue);
|
|
898
918
|
if (oldValue === newValue) continue; // No diff needed if the value doesn't change
|
|
899
919
|
|
|
900
|
-
var
|
|
901
|
-
var assignment = t.assignmentExpression("=", leftValue, (0, _node.numericLiteral)(newValue));
|
|
920
|
+
var assignment = t.assignmentExpression("=", (0, _node.deepClone)(stateVars[_i8]), (0, _node.numericLiteral)(newValue));
|
|
902
921
|
if (!isDebug && addRelativeAssignments) {
|
|
903
922
|
// Use diffs to create confusing code
|
|
904
|
-
assignment = t.assignmentExpression("+=", (0, _node.deepClone)(stateVars[
|
|
923
|
+
assignment = t.assignmentExpression("+=", (0, _node.deepClone)(stateVars[_i8]), (0, _node.numericLiteral)(newValue - oldValue));
|
|
905
924
|
}
|
|
906
925
|
assignments.push(assignment);
|
|
907
926
|
}
|
|
@@ -922,7 +941,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
922
941
|
basicBlock.thisPath.traverse(visitor);
|
|
923
942
|
};
|
|
924
943
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
925
|
-
|
|
944
|
+
_loop4();
|
|
926
945
|
}
|
|
927
946
|
|
|
928
947
|
/**
|
|
@@ -940,32 +959,39 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
940
959
|
}
|
|
941
960
|
var mainScope = basicBlocks.get(startLabel).scopeManager;
|
|
942
961
|
var predicateNumbers = new Map();
|
|
943
|
-
var predicateNumberCount = isDebug || !addPredicateTests ? 0 : (0, _randomUtils.getRandomInteger)(
|
|
944
|
-
var _loop3 = function _loop3() {
|
|
945
|
-
var name = mainScope.getNewName(me.getPlaceholder("predicate_" + _i2));
|
|
946
|
-
var number = (0, _randomUtils.getRandomInteger)(-250, 250);
|
|
947
|
-
predicateNumbers.set(name, number);
|
|
948
|
-
var createAssignment = function createAssignment(value) {
|
|
949
|
-
return new _template["default"]("\n {memberExpression} = {number}\n ").single({
|
|
950
|
-
memberExpression: mainScope.getMemberExpression(name),
|
|
951
|
-
number: (0, _node.numericLiteral)(number)
|
|
952
|
-
});
|
|
953
|
-
};
|
|
954
|
-
basicBlocks.get(startLabel).body.unshift(createAssignment(number));
|
|
955
|
-
|
|
956
|
-
// Add random assignments to impossible blocks
|
|
957
|
-
fakeAssignmentCount = (0, _randomUtils.getRandomInteger)(0, 3);
|
|
958
|
-
for (var _i8 = 0; _i8 < fakeAssignmentCount; _i8++) {
|
|
959
|
-
impossibleBlock = (0, _randomUtils.choice)(getImpossibleBasicBlocks());
|
|
960
|
-
if (impossibleBlock) {
|
|
961
|
-
impossibleBlock.body.unshift(createAssignment((0, _randomUtils.getRandomInteger)(-250, 250)));
|
|
962
|
-
}
|
|
963
|
-
}
|
|
964
|
-
},
|
|
965
|
-
fakeAssignmentCount,
|
|
966
|
-
impossibleBlock;
|
|
962
|
+
var predicateNumberCount = isDebug || !addPredicateTests ? 0 : (0, _randomUtils.getRandomInteger)(1, 4);
|
|
967
963
|
for (var _i2 = 0; _i2 < predicateNumberCount; _i2++) {
|
|
968
|
-
|
|
964
|
+
var name = mainScope.getNewName(me.getPlaceholder("predicate_" + _i2));
|
|
965
|
+
var number = (0, _randomUtils.getRandomInteger)(-250, 250);
|
|
966
|
+
predicateNumbers.set(name, number);
|
|
967
|
+
}
|
|
968
|
+
var predicateSymbol = Symbol("predicate");
|
|
969
|
+
var createAssignment = function createAssignment(values) {
|
|
970
|
+
var exprStmt = new _template["default"]("\n ({predicateVariables} = {values})\n ").single({
|
|
971
|
+
predicateVariables: t.arrayPattern(Array.from(predicateNumbers.keys()).map(function (name) {
|
|
972
|
+
return mainScope.getMemberExpression(name);
|
|
973
|
+
})),
|
|
974
|
+
values: t.arrayExpression(values.map(function (value) {
|
|
975
|
+
return (0, _node.numericLiteral)(value);
|
|
976
|
+
}))
|
|
977
|
+
});
|
|
978
|
+
exprStmt[predicateSymbol] = true;
|
|
979
|
+
return exprStmt;
|
|
980
|
+
};
|
|
981
|
+
basicBlocks.get(startLabel).body.unshift(createAssignment(Array.from(predicateNumbers.values())));
|
|
982
|
+
|
|
983
|
+
// Add random assignments to impossible blocks
|
|
984
|
+
var fakeAssignmentCount = (0, _randomUtils.getRandomInteger)(1, 3);
|
|
985
|
+
for (var _i3 = 0; _i3 < fakeAssignmentCount; _i3++) {
|
|
986
|
+
var impossibleBlock = (0, _randomUtils.choice)(getImpossibleBasicBlocks());
|
|
987
|
+
if (impossibleBlock) {
|
|
988
|
+
var _impossibleBlock$body;
|
|
989
|
+
if ((_impossibleBlock$body = impossibleBlock.body[0]) !== null && _impossibleBlock$body !== void 0 && _impossibleBlock$body[predicateSymbol]) continue;
|
|
990
|
+
var fakeValues = new Array(predicateNumberCount).fill(0).map(function () {
|
|
991
|
+
return (0, _randomUtils.getRandomInteger)(-250, 250);
|
|
992
|
+
});
|
|
993
|
+
impossibleBlock.body.unshift(createAssignment(fakeValues));
|
|
994
|
+
}
|
|
969
995
|
}
|
|
970
996
|
|
|
971
997
|
// Add scope initializations: scope["_0"] = {identity: "_0"}
|
|
@@ -989,8 +1015,8 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
989
1015
|
if (!isDebug && addFakeTests) {
|
|
990
1016
|
(0, _randomUtils.shuffle)(blocks);
|
|
991
1017
|
}
|
|
992
|
-
var
|
|
993
|
-
var block = _blocks[
|
|
1018
|
+
var _loop3 = function _loop3() {
|
|
1019
|
+
var block = _blocks[_i4];
|
|
994
1020
|
if (block.label === endLabel) {
|
|
995
1021
|
// ok(block.body.length === 0);
|
|
996
1022
|
return 1; // continue
|
|
@@ -1002,8 +1028,8 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1002
1028
|
if (!isDebug && addPredicateTests && block.label !== startLabel && (0, _randomUtils.chance)(50)) {
|
|
1003
1029
|
var predicateName = (0, _randomUtils.choice)(Array.from(predicateNumbers.keys()));
|
|
1004
1030
|
if (predicateName) {
|
|
1005
|
-
var
|
|
1006
|
-
var diff = block.totalState -
|
|
1031
|
+
var _number = predicateNumbers.get(predicateName);
|
|
1032
|
+
var diff = block.totalState - _number;
|
|
1007
1033
|
test = t.binaryExpression("+", mainScope.getMemberExpression(predicateName), (0, _node.numericLiteral)(diff));
|
|
1008
1034
|
}
|
|
1009
1035
|
}
|
|
@@ -1055,20 +1081,20 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1055
1081
|
if (!isDebug && addFakeTests && (0, _randomUtils.chance)(50)) {
|
|
1056
1082
|
// Add fake tests
|
|
1057
1083
|
var fakeTestCount = (0, _randomUtils.getRandomInteger)(1, 3);
|
|
1058
|
-
for (var
|
|
1084
|
+
for (var _i5 = 0; _i5 < fakeTestCount; _i5++) {
|
|
1059
1085
|
tests.push((0, _node.numericLiteral)(stateIntGen.generate()));
|
|
1060
1086
|
}
|
|
1061
1087
|
(0, _randomUtils.shuffle)(tests);
|
|
1062
1088
|
}
|
|
1063
1089
|
var lastTest = tests.pop();
|
|
1064
|
-
for (var
|
|
1065
|
-
var _test = _tests[
|
|
1090
|
+
for (var _i6 = 0, _tests = tests; _i6 < _tests.length; _i6++) {
|
|
1091
|
+
var _test = _tests[_i6];
|
|
1066
1092
|
switchCases.push(t.switchCase(_test, []));
|
|
1067
1093
|
}
|
|
1068
1094
|
switchCases.push(t.switchCase(lastTest, block.thisPath.node.body));
|
|
1069
1095
|
};
|
|
1070
|
-
for (var
|
|
1071
|
-
if (
|
|
1096
|
+
for (var _i4 = 0, _blocks = blocks; _i4 < _blocks.length; _i4++) {
|
|
1097
|
+
if (_loop3()) continue;
|
|
1072
1098
|
}
|
|
1073
1099
|
if (!isDebug && addFakeTests) {
|
|
1074
1100
|
// A random test can be 'default'
|
|
@@ -1087,7 +1113,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1087
1113
|
var switchStatement = t.labeledStatement(t.identifier(switchLabel), t.switchStatement(discriminant, switchCases));
|
|
1088
1114
|
var startStateValues = basicBlocks.get(startLabel).stateValues;
|
|
1089
1115
|
var endTotalState = basicBlocks.get(endLabel).totalState;
|
|
1090
|
-
var whileStatement = t.whileStatement(t.binaryExpression("!==", (0, _node.deepClone)(discriminant), (0, _node.numericLiteral)(endTotalState)), t.blockStatement([t.withStatement(new _template["default"]("{withDiscriminant} ||
|
|
1116
|
+
var whileStatement = t.whileStatement(t.binaryExpression("!==", (0, _node.deepClone)(discriminant), (0, _node.numericLiteral)(endTotalState)), t.blockStatement([t.withStatement(new _template["default"]("{withDiscriminant} || {}").expression({
|
|
1091
1117
|
withDiscriminant: (0, _node.deepClone)(withMemberExpression)
|
|
1092
1118
|
}), t.blockStatement([switchStatement]))]));
|
|
1093
1119
|
var parameters = [].concat(_toConsumableArray(stateVars), [argVar, scopeVar]).map(function (id) {
|
|
@@ -1096,8 +1122,8 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1096
1122
|
var parametersNames = parameters.map(function (id) {
|
|
1097
1123
|
return id.name;
|
|
1098
1124
|
});
|
|
1099
|
-
for (var
|
|
1100
|
-
var _functionExpressions$ = _slicedToArray(_functionExpressions[
|
|
1125
|
+
for (var _i7 = 0, _functionExpressions = functionExpressions; _i7 < _functionExpressions.length; _i7++) {
|
|
1126
|
+
var _functionExpressions$ = _slicedToArray(_functionExpressions[_i7], 4),
|
|
1101
1127
|
originalFnName = _functionExpressions$[0],
|
|
1102
1128
|
fnLabel = _functionExpressions$[1],
|
|
1103
1129
|
basicBlock = _functionExpressions$[2],
|
|
@@ -1135,16 +1161,22 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1135
1161
|
callExpression: t.callExpression((0, _node.deepClone)(mainFnName), argumentsNodes)
|
|
1136
1162
|
}));
|
|
1137
1163
|
}
|
|
1164
|
+
var startProgramObjectExpression = basicBlocks.get(startLabel).scopeManager.getObjectExpression(startLabel);
|
|
1165
|
+
var mainParameters = parameters;
|
|
1166
|
+
var scopeParameter = mainParameters.pop();
|
|
1167
|
+
mainParameters.push(t.assignmentPattern(scopeParameter, startProgramObjectExpression));
|
|
1138
1168
|
var mainFnDeclaration = t.functionDeclaration((0, _node.deepClone)(mainFnName), parameters, t.blockStatement([whileStatement]));
|
|
1139
1169
|
mainFnDeclaration[_constants.PREDICTABLE] = true;
|
|
1140
1170
|
var startProgramExpression = t.callExpression((0, _node.deepClone)(mainFnName), [].concat(_toConsumableArray(startStateValues.map(function (stateValue) {
|
|
1141
1171
|
return (0, _node.numericLiteral)(stateValue);
|
|
1142
|
-
})), [t.identifier("undefined")
|
|
1172
|
+
})), [t.identifier("undefined")]));
|
|
1143
1173
|
var _resultVar = withIdentifier("result");
|
|
1144
|
-
var
|
|
1174
|
+
var isTopLevel = blockPath.isProgram();
|
|
1175
|
+
var allowReturns = !isTopLevel && blockPath.find(function (p) {
|
|
1145
1176
|
return p.isFunction();
|
|
1146
1177
|
});
|
|
1147
|
-
var
|
|
1178
|
+
var startPrefix = allowReturns ? "var {resultVar} = " : "";
|
|
1179
|
+
var startProgramStatements = new _template["default"]("\n ".concat(allowReturns ? "var {didReturnVar};" : "", "\n ").concat(startPrefix, "{startProgramExpression};\n ").concat(allowReturns ? "\n if({didReturnVar}){\n return {resultVar};\n }" : "", "\n ")).compile({
|
|
1148
1180
|
startProgramExpression: startProgramExpression,
|
|
1149
1181
|
didReturnVar: function didReturnVar() {
|
|
1150
1182
|
return (0, _node.deepClone)(_didReturnVar);
|
|
@@ -1159,9 +1191,6 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1159
1191
|
// Reset all bindings here
|
|
1160
1192
|
blockPath.scope.bindings = Object.create(null);
|
|
1161
1193
|
|
|
1162
|
-
// Bindings changed - breaking control objects
|
|
1163
|
-
delete blockPath.node[_constants.CONTROL_OBJECTS];
|
|
1164
|
-
|
|
1165
1194
|
// Register new declarations
|
|
1166
1195
|
var _iterator5 = _createForOfIteratorHelper(blockPath.get("body")),
|
|
1167
1196
|
_step5;
|