コード例 #1
0
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);
}
コード例 #2
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
}