int main(int argc, char** args){ _DECL_1DARRAY_BYTE(b); int64_t inspos; BYTE item; _DECL_1DARRAY_BYTE(a); BYTE _5; int64_t _6; _DECL_1DARRAY_BYTE(_7); int64_t _8; BYTE _9; int64_t _10; _DECL_1DARRAY_BYTE(_11); int64_t _12; BYTE _13; BYTE _14; int64_t _15; BYTE _16; int64_t _17; BYTE _18; int64_t _19; BYTE _20; BYTE _21; int64_t _22; int64_t _23; int64_t _24; int64_t _25; void* _26; _DECL_1DARRAY(_28); void* _29; int64_t _31; BYTE _32; void* _33; _DECL_1DARRAY(_35); void* _36; int64_t _38; void* _39; _DECL_1DARRAY(_41); //const %5 = 00000000b : byte _5 = 0b00000000; //const %6 = 3 : int _6 = 3; //arraygen %7 = [5; 6] : byte[] _NEW_1DARRAY_BYTE(_7, _6, _5); //assign %1 = %7 : byte[] // isCopyEliminated = true _UPDATE_1DARRAY(b, _7); //const %8 = 3 : int _8 = 3; //assign %2 = %8 : int // isCopyEliminated = true inspos = _8; //const %10 = 1 : int _10 = 1; //invoke (%9) = (%10) whiley/lang/Int:toUnsignedByte : function(whiley/lang/Int:u8)->(byte) { _9 = (BYTE)_10; } //assign %3 = %9 : byte // isCopyEliminated = true item = _9; //invoke (%11) = (%1, %2, %3) opt_append:opt_append : function(byte[],opt_append:nat,byte)->(byte[]) { void* tmp_items; _COPY_1DARRAY_PARAM(b, tmp_items, BYTE); // isCopyEliminated of 'b at 0' = false _11 = _opt_append_(tmp_items, b_size, inspos, item, _1DARRAYSIZE_PARAM_CALLBYREFERENCE(_11)); } //assign %4 = %11 : byte[] // isCopyEliminated = true _UPDATE_1DARRAY(a, _11); //assert { //const %12 = 2 : int _12 = 2; //indexof %13 = %1, %12 : byte[] _13=b[_12]; //const %14 = 00000000b : byte _14 = 0b00000000; //ifeq %13, %14 goto blklab14 : byte if(_13==_14){goto blklab14;} //fail fprintf(stderr,"fail"); exit(-1); //.blklab14 blklab14:; //assert } //assert { //const %15 = 2 : int _15 = 2; //indexof %16 = %4, %15 : byte[] _16=a[_15]; //const %17 = 2 : int _17 = 2; //indexof %18 = %1, %17 : byte[] _18=b[_17]; //ifeq %16, %18 goto blklab15 : byte if(_16==_18){goto blklab15;} //fail fprintf(stderr,"fail"); exit(-1); //.blklab15 blklab15:; //assert } //assert { //const %19 = 3 : int _19 = 3; //indexof %20 = %4, %19 : byte[] _20=a[_19]; //const %21 = 00000001b : byte _21 = 0b00000001; //ifeq %20, %21 goto blklab16 : byte if(_20==_21){goto blklab16;} //fail fprintf(stderr,"fail"); exit(-1); //.blklab16 blklab16:; //assert } //assert { //lengthof %22 = %1 : byte[] _22 = b_size; //const %23 = 3 : int _23 = 3; //ifeq %22, %23 goto blklab17 : int if(_22==_23){goto blklab17;} //fail fprintf(stderr,"fail"); exit(-1); //.blklab17 blklab17:; //assert } //assert { //lengthof %24 = %4 : byte[] _24 = a_size; //const %25 = 7 : int _25 = 7; //ifeq %24, %25 goto blklab18 : int if(_24==_25){goto blklab18;} //fail fprintf(stderr,"fail"); exit(-1); //.blklab18 blklab18:; //assert } //fieldload %26 = %0 out : {int[][] args,{method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} out} //fieldload %27 = %26 print_s : {method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} //const %28 = [97,91,51,93,61] : int[] _NEW_1DARRAY_int64_t(_28, 5, 0); _28[0] = 97; _28[1] = 91; _28[2] = 51; _28[3] = 93; _28[4] = 61; //indirectinvoke () = %27 (%28) : method(int[])->() { printf_s(_28, _28_size); } //fieldload %29 = %0 out : {int[][] args,{method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} out} //fieldload %30 = %29 println : {method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} //const %31 = 3 : int _31 = 3; //indexof %32 = %4, %31 : byte[] _32=a[_31]; //indirectinvoke () = %30 (%32) : method(any)->() { printf("%"PRIu8"\n", _32); } //fieldload %33 = %0 out : {int[][] args,{method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} out} //fieldload %34 = %33 print_s : {method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} //const %35 = [65,114,114,97,121,32,97,58,32] : int[] _NEW_1DARRAY_int64_t(_35, 9, 0); _35[0] = 65; _35[1] = 114; _35[2] = 114; _35[3] = 97; _35[4] = 121; _35[5] = 32; _35[6] = 97; _35[7] = 58; _35[8] = 32; //indirectinvoke () = %34 (%35) : method(int[])->() { printf_s(_35, _35_size); } //fieldload %36 = %0 out : {int[][] args,{method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} out} //fieldload %37 = %36 print : {method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} //lengthof %38 = %4 : byte[] _38 = a_size; //indirectinvoke () = %37 (%38) : method(any)->() { printf("%"PRId64, _38); } //fieldload %39 = %0 out : {int[][] args,{method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} out} //fieldload %40 = %39 println_s : {method(any)->() print,method(int[])->() print_s,method(any)->() println,method(int[])->() println_s} //const %41 = [98,121,116,101,115] : int[] _NEW_1DARRAY_int64_t(_41, 5, 0); _41[0] = 98; _41[1] = 121; _41[2] = 116; _41[3] = 101; _41[4] = 115; //indirectinvoke () = %40 (%41) : method(int[])->() { println_s(_41, _41_size); } //return exit(0); }
BYTE* _decompress_(BYTE* data, size_t data_size, _DECL_1DARRAYSIZE_PARAM_CALLBYREFERENCE){ _DECL_1DARRAY_BYTE(output); _DECL_1DARRAY_BYTE(items); int64_t inspos; int64_t pos; BYTE header; BYTE item; int64_t offset; int64_t len; int64_t start; int64_t i; BYTE _11; int64_t _12; _DECL_1DARRAY_BYTE(_13); int64_t _14; int64_t _15; int64_t _16; int64_t _17; int64_t _18; BYTE _19; int64_t _20; int64_t _21; BYTE _22; int64_t _23; int64_t _24; BYTE _25; _DECL_1DARRAY_BYTE(_26); int64_t _27; int64_t _28; int64_t _29; int64_t _30; int64_t _31; int64_t _32; BYTE _33; _DECL_1DARRAY_BYTE(_34); int64_t _35; int64_t _36; int64_t _37; int64_t _38; _DECL_1DARRAY_BYTE(_39); //const %11 = 00000000b : byte _11 = 0b00000000; //const %12 = 0 : int _12 = 0; //arraygen %13 = [11; 12] : byte[] _NEW_1DARRAY_BYTE(_13, _12, _11); //assign %2 = %13 : byte[] // isCopyEliminated = true _UPDATE_1DARRAY(items, _13); //const %14 = 0 : int _14 = 0; //assign %3 = %14 : int // isCopyEliminated = true inspos = _14; //const %15 = 0 : int _15 = 0; //assign %4 = %15 : int // isCopyEliminated = true pos = _15; //loop (%2, %3, %4, %5, %6, %7, %8, %9, %10, %16, %17, %18, %19, %20, %21, %22, %23, %24, %25, %26, %27, %28, %29, %30, %31, %32, %33, %34, %35, %36, %37, %38) while(true){ //const %16 = 1 : int _16 = 1; //add %17 = %4, %16 : int _17=pos+_16; //lengthof %18 = %0 : byte[] _18 = data_size; //ifge %17, %18 goto blklab18 : int if(_17>=_18){goto blklab18;} //indexof %19 = %0, %4 : byte[] _19=data[pos]; //assign %5 = %19 : byte // isCopyEliminated = true header = _19; //const %20 = 1 : int _20 = 1; //add %21 = %4, %20 : int _21=pos+_20; //indexof %22 = %0, %21 : byte[] _22=data[_21]; //assign %6 = %22 : byte // isCopyEliminated = true item = _22; //const %23 = 2 : int _23 = 2; //add %24 = %4, %23 : int _24=pos+_23; //assign %4 = %24 : int // isCopyEliminated = true pos = _24; //const %25 = 00000000b : byte _25 = 0b00000000; //ifne %5, %25 goto blklab20 : byte if(header!=_25){goto blklab20;} //invoke (%26) = (%2, %3, %6) lz77_opt_decompress:opt_append : function(byte[],lz77_opt_decompress:nat,byte)->(byte[]) { // isCopyEliminated of 'items at 0' = true _26 = _opt_append_(items, items_size, inspos, item, _1DARRAYSIZE_PARAM_CALLBYREFERENCE(_26)); } //assign %2 = %26 : byte[] // isCopyEliminated = true _UPDATE_1DARRAY(items, _26); //const %27 = 1 : int _27 = 1; //add %28 = %3, %27 : int _28=inspos+_27; //assign %3 = %28 : int // isCopyEliminated = true inspos = _28; //goto blklab21 goto blklab21; //.blklab20 blklab20:; //invoke (%29) = (%5) whiley/lang/Byte:toUnsignedInt : function(byte)->(whiley/lang/Int:uint) { _29 = (unsigned int)header; } //assign %7 = %29 : int // isCopyEliminated = true offset = _29; //invoke (%30) = (%6) whiley/lang/Byte:toUnsignedInt : function(byte)->(whiley/lang/Int:uint) { _30 = (unsigned int)item; } //assign %8 = %30 : int // isCopyEliminated = true len = _30; //sub %31 = %3, %7 : int _31=inspos-offset; //assign %9 = %31 : int // isCopyEliminated = true start = _31; //assign %10 = %9 : int // isCopyEliminated = false i = start; //loop (%2, %3, %6, %10, %32, %33, %34, %35, %36, %37, %38) while(true){ //add %32 = %9, %8 : int _32=start+len; //ifge %10, %32 goto blklab22 : int if(i>=_32){goto blklab22;} //indexof %33 = %2, %10 : byte[] _33=items[i]; //assign %6 = %33 : byte // isCopyEliminated = true item = _33; //invoke (%34) = (%2, %3, %6) lz77_opt_decompress:opt_append : function(byte[],lz77_opt_decompress:nat,byte)->(byte[]) { // isCopyEliminated of 'items at 0' = true _34 = _opt_append_(items, items_size, inspos, item, _1DARRAYSIZE_PARAM_CALLBYREFERENCE(_34)); } //assign %2 = %34 : byte[] // isCopyEliminated = true _UPDATE_1DARRAY(items, _34); //const %35 = 1 : int _35 = 1; //add %36 = %3, %35 : int _36=inspos+_35; //assign %3 = %36 : int // isCopyEliminated = true inspos = _36; //const %37 = 1 : int _37 = 1; //add %38 = %10, %37 : int _38=i+_37; //assign %10 = %38 : int // isCopyEliminated = true i = _38; //.blklab23 blklab23:; } //.blklab22 blklab22:; //.blklab21 blklab21:; //.blklab19 blklab19:; } //.blklab18 blklab18:; //invoke (%39) = (%2, %3) lz77_opt_decompress:resize : function(byte[],int)->(byte[]) { // isCopyEliminated of 'items at 0' = true _39 = _resize_(items, items_size, inspos, _1DARRAYSIZE_PARAM_CALLBYREFERENCE(_39)); } //assign %1 = %39 : byte[] // isCopyEliminated = true _UPDATE_1DARRAY(output, _39); //return %1 _UPDATE_1DARRAYSZIE_PARAM_CALLBYREFERENCE(output); return output; //return }