Index: /BasicCompiler32/CParameter.cpp
===================================================================
--- /BasicCompiler32/CParameter.cpp	(revision 65)
+++ /BasicCompiler32/CParameter.cpp	(revision 66)
@@ -66,5 +66,5 @@
 				nCountOfTempObjects++;
 
-				if( type == DEF_OBJECT ){
+				if( type != DEF_STRUCT ){
 					//一時参照を作成
 
@@ -114,12 +114,17 @@
 				op_call(pSub_free);
 			}
-			else if( types[i2].type == DEF_OBJECT ){
-				op_pop( REG_NON );
-				op_pop( REG_NON );
-			}
 			else{
-				SetError(300,NULL,cp);
-			}
-
+				if( Is64Type( types[i2].type ) ){
+					//pop ... 参照を消す
+					//pop ... 上位32ビット
+					//pop ... 下位32ビット
+					op_add_esp( PTR_SIZE * 3 );
+				}
+				else{
+					//pop ... 参照を消す
+					//pop ... 値を消す
+					op_add_esp( PTR_SIZE * 2 );
+				}
+			}
 		}
 	}
@@ -363,5 +368,5 @@
 					//一時オブジェクトをコピー
 
-					if( types[i2].type == DEF_OBJECT ){
+					if( types[i2].type != DEF_STRUCT ){
 						// 一時参照のための領域を考慮する
 						nCountOfNowTempObjects++;
Index: /BasicCompiler32/Compile_Calc.cpp
===================================================================
--- /BasicCompiler32/Compile_Calc.cpp	(revision 65)
+++ /BasicCompiler32/Compile_Calc.cpp	(revision 66)
@@ -223,9 +223,5 @@
 
 		//fistp qword ptr[esp]
-		fpu_cast();
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
-		fpu_cast_end();
+		op_fistp_ptr_esp( sizeof(_int64) );
 	}
 	else if(OldType==DEF_SINGLE){
@@ -237,9 +233,5 @@
 
 		//fistp qword ptr[esp]
-		fpu_cast();
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
-		fpu_cast_end();
+		op_fistp_ptr_esp( sizeof(_int64) );
 	}
 	else if(IsWholeNumberType(OldType)){
@@ -288,9 +280,5 @@
 
 		//fistp dword ptr[esp]
-		fpu_cast();
-		OpBuffer[obp++]=(char)0xDB;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-		fpu_cast_end();
+		op_fistp_ptr_esp( sizeof(long) );
 	}
 	else if(OldType==DEF_SINGLE){
@@ -299,9 +287,5 @@
 
 		//fistp dword ptr[esp]
-		fpu_cast();
-		OpBuffer[obp++]=(char)0xDB;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-		fpu_cast_end();
+		op_fistp_ptr_esp( sizeof(long) );
 	}
 	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
Index: /BasicCompiler32/Compile_Calc_PushVar.cpp
===================================================================
--- /BasicCompiler32/Compile_Calc_PushVar.cpp	(revision 65)
+++ /BasicCompiler32/Compile_Calc_PushVar.cpp	(revision 66)
@@ -66,9 +66,9 @@
 }
 void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg){
-	int var_size;
-
-	var_size=GetTypeSize(type,-1);
-
-	if(var_size==sizeof(_int64)){
+	int varSize;
+
+	varSize=GetTypeSize(type,-1);
+
+	if(varSize==sizeof(_int64)){
 		//64ビットの場合はedx:eaxにロード
 		if(reg!=REG_EAX){
@@ -91,9 +91,9 @@
 		if(pRelativeVar->bOffsetOffset){
 			//mov reg, ptr[ecx+offset]
-			op_mov_RM(var_size,reg,REG_ECX,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			op_mov_RM(varSize,reg,REG_ECX,(int)pRelativeVar->offset,MOD_BASE_DISP32);
 		}
 		else{
 			//mov reg, ptr[offset]
-			op_mov_RM(var_size,reg,0,(int)pRelativeVar->offset,MOD_DISP32);
+			op_mov_RM(varSize,reg,0,(int)pRelativeVar->offset,MOD_DISP32);
 		}
 		obp-=sizeof(long);
@@ -104,9 +104,9 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add ecx,qword ptr[offset]
-			op_add_RM(var_size,REG_ECX,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
+			op_add_RM(varSize,REG_ECX,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
 		}
 		else{
 			//mov ecx,qword ptr[offset]
-			op_mov_RM(var_size,REG_ECX,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
+			op_mov_RM(varSize,REG_ECX,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
 		}
 		obp-=sizeof(long);
@@ -119,9 +119,9 @@
 		if(pRelativeVar->bOffsetOffset){
 			//mov reg, ptr[ebp+ecx+offset]
-			op_mov_RM_ex(var_size,reg,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET);
+			op_mov_RM_ex(varSize,reg,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET);
 		}
 		else{
 			//mov reg, ptr[ebp+offset]
-			op_mov_RM(var_size,reg,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			op_mov_RM(varSize,reg,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
 		}
 		obp-=sizeof(long);
@@ -132,9 +132,9 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add ecx,qword ptr[ebp+offset]
-			op_add_RM(var_size,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			op_add_RM(varSize,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
 		}
 		else{
 			//mov ecx,qword ptr[ebp+offset]
-			op_mov_RM(var_size,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			op_mov_RM(varSize,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
 		}
 		obp-=sizeof(long);
@@ -147,5 +147,5 @@
 directmem:
 		//mov reg, ptr[ecx]
-		op_mov_RM(var_size,reg,REG_ECX,0,MOD_BASE);
+		op_mov_RM(varSize,reg,REG_ECX,0,MOD_BASE);
 	}
 }
Index: /BasicCompiler32/Compile_Set_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Set_Var.cpp	(revision 65)
+++ /BasicCompiler32/Compile_Set_Var.cpp	(revision 66)
@@ -274,52 +274,78 @@
 }
 
-void SetWholeVariable(int var_size,int type,RELATIVE_VAR *pRelative){
-	if(type==DEF_DOUBLE){
-		//Double型
-		// st(0)の内容をedx:eaxに変換
-
-		//TODO: 実装
-		SetError();
-	}
-	else if(type==DEF_SINGLE){
-		//Single型
-		// st(0)の内容をeaxに変換
-
-		//TODO: 実装
-		SetError();
+void SetWholeVariable(int varSize,int calcType,RELATIVE_VAR *pRelative){
+	if( IsRealNumberType( calcType ) ){
+		// 実数型から整数型へ変換する
+
+		if( varSize == sizeof(_int64) ){
+			// 64bitへ
+			// st(0) -> edx:eax
+			breakpoint;
+
+			//push
+			//push
+			op_sub_esp( PTR_SIZE * 2 );
+
+			//fistp qword ptr[esp]
+			op_fistp_ptr_esp( sizeof(_int64) );
+
+			//pop eax
+			op_pop( REG_EAX );
+
+			//pop edx
+			op_pop( REG_EDX );
+		}
+		else{
+			// 32bit
+			// st(0) -> eax
+
+			//push
+			op_push( REG_NON );
+
+			//fistp dword ptr[esp]
+			op_fistp_ptr_esp( sizeof(long) );
+
+			//pop eax
+			op_pop( REG_EAX );
+		}
 	}
 	else{
 		//その他の整数
 
-		if(var_size==sizeof(_int64)){
+		if(varSize==sizeof(_int64)){
 			//eaxの値を64ビット（edx:eax）に拡張する
-			ExtendTypeTo64(type);
-		}
-		else if(var_size==sizeof(long)){
+			ExtendTypeTo64(calcType);
+		}
+		else if(varSize==sizeof(long)){
 			//レジスタの値を32ビット（eax）に拡張する
-			ExtendTypeTo32(type,REG_EAX);
-		}
-		else if(var_size==sizeof(short)){
+			ExtendTypeTo32(calcType,REG_EAX);
+		}
+		else if(varSize==sizeof(short)){
 			//レジスタの値を16ビット（ax）に拡張する
-			ExtendTypeTo16(type,REG_EAX);
+			ExtendTypeTo16(calcType,REG_EAX);
 		}
 		//8ビットは拡張なし
 	}
 
-	if(var_size==sizeof(_int64)){
+	if(varSize==sizeof(_int64)){
 		//下位32ビット
 		SetWholeVariable(sizeof(long),DEF_LONG,pRelative);
 
+		//上位32ビット
+
+		//直接参照に切り替え
+		SetVarPtrToEax(pRelative);
+		pRelative->dwKind=VAR_DIRECTMEM;
+
+		//mov ecx,eax
+		op_mov_RR( REG_ECX, REG_EAX );
+
+		//add ecx,sizeof(long)
+		op_add_RV8( REG_ECX, sizeof(long) );
+
 		//mov eax,edx
 		op_mov_RR( REG_EAX, REG_EDX );
 
-		//上位32ビット
-		if( pRelative->dwKind == VAR_DIRECTMEM ){
-			//add ecx,sizeof(long)
-			op_add_RV8( REG_ECX, sizeof(long) );
-		}
-		pRelative->offset+=sizeof(long);
 		SetWholeVariable(sizeof(long),DEF_LONG,pRelative);
-		pRelative->offset-=sizeof(long);
 
 		return;
@@ -329,9 +355,9 @@
 		if(pRelative->bOffsetOffset){
 			//mov ptr[ecx+offset],eax/ax/al
-			op_mov_MR(var_size,REG_EAX,REG_ECX,(int)pRelative->offset,MOD_BASE_DISP32);
+			op_mov_MR(varSize,REG_EAX,REG_ECX,(int)pRelative->offset,MOD_BASE_DISP32);
 		}
 		else{
 			//mov ptr[offset],eax/ax/al
-			op_mov_MR(var_size,REG_EAX,0,(int)pRelative->offset,MOD_DISP32);
+			op_mov_MR(varSize,REG_EAX,0,(int)pRelative->offset,MOD_DISP32);
 		}
 		obp-=sizeof(long);
@@ -342,9 +368,9 @@
 		if(pRelative->bOffsetOffset){
 			//add ecx,qword ptr[offset]
-			op_add_RM(var_size,REG_ECX,REG_NON,(int)pRelative->offset,MOD_DISP32);
+			op_add_RM(varSize,REG_ECX,REG_NON,(int)pRelative->offset,MOD_DISP32);
 		}
 		else{
 			//mov ecx,qword ptr[offset]
-			op_mov_RM(var_size,REG_ECX,REG_NON,(int)pRelative->offset,MOD_DISP32);
+			op_mov_RM(varSize,REG_ECX,REG_NON,(int)pRelative->offset,MOD_DISP32);
 		}
 		obp-=sizeof(long);
@@ -357,9 +383,9 @@
 		if(pRelative->bOffsetOffset){
 			//mov ptr[ebp+ecx+offset],eax/ax/al
-			op_mov_MR_ex(var_size,REG_EAX,REG_EBP,REG_ECX,(int)pRelative->offset,USE_OFFSET);
+			op_mov_MR_ex(varSize,REG_EAX,REG_EBP,REG_ECX,(int)pRelative->offset,USE_OFFSET);
 		}
 		else{
 			//mov ptr[ebp+offset],eax/ax/al
-			op_mov_MR(var_size,REG_EAX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
+			op_mov_MR(varSize,REG_EAX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
 		}
 		obp-=sizeof(long);
@@ -370,9 +396,9 @@
 		if(pRelative->bOffsetOffset){
 			//add ecx,qword ptr[ebp+offset]
-			op_add_RM(var_size,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
+			op_add_RM(varSize,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
 		}
 		else{
 			//mov ecx,qword ptr[ebp+offset]
-			op_mov_RM(var_size,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
+			op_mov_RM(varSize,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
 		}
 		obp-=sizeof(long);
@@ -386,5 +412,5 @@
 
 		//mov ptr[ecx],eax/ax/al
-		op_mov_MR(var_size,REG_EAX,REG_ECX,0,MOD_BASE);
+		op_mov_MR(varSize,REG_EAX,REG_ECX,0,MOD_BASE);
 	}
 }
Index: /BasicCompiler32/NumOpe_Arithmetic.cpp
===================================================================
--- /BasicCompiler32/NumOpe_Arithmetic.cpp	(revision 65)
+++ /BasicCompiler32/NumOpe_Arithmetic.cpp	(revision 66)
@@ -11,9 +11,5 @@
 
 		//fistp qword ptr[esp]
-		fpu_cast();
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
-		fpu_cast_end();
+		op_fistp_ptr_esp( sizeof(_int64) );
 
 		//pop ebx
@@ -31,9 +27,5 @@
 
 		//fistp qword ptr[esp]
-		fpu_cast();
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
-		fpu_cast_end();
+		op_fistp_ptr_esp( sizeof(_int64) );
 
 		//pop ebx
@@ -84,9 +76,5 @@
 
 		//fistp qword ptr[esp]
-		fpu_cast();
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
-		fpu_cast_end();
+		op_fistp_ptr_esp( sizeof(_int64) );
 
 		//pop eax
@@ -104,9 +92,5 @@
 
 		//fistp qword ptr[esp]
-		fpu_cast();
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
-		fpu_cast_end();
+		op_fistp_ptr_esp( sizeof(_int64) );
 
 		//pop eax
@@ -510,9 +494,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 		else if(type[sp-1]==DEF_SINGLE){
@@ -521,9 +501,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 
@@ -539,9 +515,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 		else if(type[sp-2]==DEF_SINGLE){
@@ -550,9 +522,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 
@@ -786,9 +754,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 		else if(type[sp-1]==DEF_SINGLE){
@@ -797,9 +761,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 
@@ -815,9 +775,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 		else if(type[sp-2]==DEF_SINGLE){
@@ -826,9 +782,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 
@@ -1119,9 +1071,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 
 			//pop ecx
@@ -1133,9 +1081,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 
 			//pop ecx
@@ -1160,9 +1104,5 @@
 
 			//fistp qword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDF;
-			OpBuffer[obp++]=(char)0x3C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(_int64) );
 
 			//pop eax
@@ -1180,9 +1120,5 @@
 
 			//fistp qword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDF;
-			OpBuffer[obp++]=(char)0x3C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(_int64) );
 
 			//pop eax
@@ -1245,9 +1181,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 
 			//pop ecx
@@ -1259,9 +1191,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 
 			//pop ecx
@@ -1288,9 +1216,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 		else if(type[sp-2]==DEF_SINGLE){
@@ -1299,9 +1223,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 
@@ -1353,9 +1273,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 
 			//pop ecx
@@ -1367,9 +1283,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 
 			//pop ecx
@@ -1394,9 +1306,5 @@
 
 			//fistp qword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDF;
-			OpBuffer[obp++]=(char)0x3C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(_int64) );
 
 			//pop eax
@@ -1414,9 +1322,5 @@
 
 			//fistp qword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDF;
-			OpBuffer[obp++]=(char)0x3C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(_int64) );
 
 			//pop eax
@@ -1490,9 +1394,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 
 			//pop ecx
@@ -1504,9 +1404,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 
 			//pop ecx
@@ -1533,9 +1429,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 		else if(type[sp-2]==DEF_SINGLE){
@@ -1544,9 +1436,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 
Index: /BasicCompiler32/NumOpe_TypeOperation.cpp
===================================================================
--- /BasicCompiler32/NumOpe_TypeOperation.cpp	(revision 65)
+++ /BasicCompiler32/NumOpe_TypeOperation.cpp	(revision 66)
@@ -147,9 +147,5 @@
 
 			//fistp qword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDF;
-			OpBuffer[obp++]=(char)0x3C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(_int64) );
 		}
 		else{
@@ -161,9 +157,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 	}
@@ -177,9 +169,5 @@
 
 			//fistp qword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDF;
-			OpBuffer[obp++]=(char)0x3C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(_int64) );
 		}
 		else{
@@ -188,9 +176,5 @@
 
 			//fistp dword ptr[esp]
-			fpu_cast();
-			OpBuffer[obp++]=(char)0xDB;
-			OpBuffer[obp++]=(char)0x1C;
-			OpBuffer[obp++]=(char)0x24;
-			fpu_cast_end();
+			op_fistp_ptr_esp( sizeof(long) );
 		}
 	}
Index: /BasicCompiler32/Opcode.h
===================================================================
--- /BasicCompiler32/Opcode.h	(revision 65)
+++ /BasicCompiler32/Opcode.h	(revision 66)
@@ -138,5 +138,5 @@
 void SetStructVariable(LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,BOOL bUseHeap);
 void SetRealVariable(int VarType, int CalcType, RELATIVE_VAR *pRelativeVar);
-void SetWholeVariable(int var_size,int type,RELATIVE_VAR *pRelative);
+void SetWholeVariable( int varSize,int calcType, RELATIVE_VAR *pRelative );
 
 void SetDoubleVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
@@ -179,4 +179,5 @@
 
 //Compile_Var.cpp
+void SetRelativeOffset( RELATIVE_VAR &relativeVar );
 void GetWithName(char *buffer);
 void SetThisPtrToReg(int reg);
@@ -333,4 +334,5 @@
 void op_fstp_base_offset	(int type,int base_reg,int offset);
 void op_fstp_base_offset_ex	(int type,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
+void op_fistp_ptr_esp		( int typeSize );
 void op_zero_reg(int reg);
 void fpu_cast();
Index: /BasicCompiler32/op32_main.cpp
===================================================================
--- /BasicCompiler32/op32_main.cpp	(revision 65)
+++ /BasicCompiler32/op32_main.cpp	(revision 66)
@@ -838,4 +838,29 @@
 		//ベースレジスタ
 		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+	}
+}
+void op_fistp_ptr_esp( int typeSize ){
+	if( typeSize == sizeof(_int64) ){
+		//64bit
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+	}
+	else if( typeSize == sizeof(long) ){
+		//32bit
+
+		//fistp dword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+	}
+	else{
+		SetError();
 	}
 }
Index: /BasicCompiler64/CParameter.cpp
===================================================================
--- /BasicCompiler64/CParameter.cpp	(revision 65)
+++ /BasicCompiler64/CParameter.cpp	(revision 66)
@@ -62,5 +62,5 @@
 				int type = NumOpe( &reg, Parms[i2], DummyTypeInfo.type, DummyTypeInfo.u.lpIndex, &lpVarIndex );
 
-				if( type == DEF_OBJECT ){
+				if( type != DEF_STRUCT ){
 					//一時参照を作成
 					pobj_sf->push( reg );
@@ -115,10 +115,7 @@
 				op_call(pSub_free);
 			}
-			else if( types[i2].type == DEF_OBJECT ){
+			else{
 				pobj_sf->pop();
 				pobj_sf->pop();
-			}
-			else{
-				SetError(300,NULL,cp);
 			}
 		}
@@ -423,48 +420,48 @@
 			}
 			else{
-				//変数のアドレスを取得
-				int VarType;
-				LONG_PTR lpVarIndex;
-				if(GetVarOffset(
-					false,
-					false,
-					Parms[i2],
-					&VarType,
-					&RelativeVar,
-					&lpVarIndex)){
-
-						if(DummyTypeInfo.type!=DEF_ANY){
-							//型チェックを行う
-							if(DummyTypeInfo.type==VarType){
-								if(DummyTypeInfo.type==DEF_OBJECT){
-									if( !DummyTypeInfo.u.pobj_Class->IsEqualsOrSubClass( (CClass *)lpVarIndex ) ){
-										SetError(11,Parms[i2],cp);
+				if( useTempParameters[i2] ){
+					//一時オブジェクトをコピー
+
+					//mov reg, qword ptr[rsp+offset]
+					pobj_sf->ref_offset_data( reg, StackOffsetOfTempObject[i2] );
+				}
+				else{
+					//変数のアドレスを取得
+					int VarType;
+					LONG_PTR lpVarIndex;
+					if(GetVarOffset(
+						false,
+						false,
+						Parms[i2],
+						&VarType,
+						&RelativeVar,
+						&lpVarIndex)){
+
+							if(DummyTypeInfo.type!=DEF_ANY){
+								//型チェックを行う
+								if(DummyTypeInfo.type==VarType){
+									if(DummyTypeInfo.type==DEF_OBJECT){
+										if( !DummyTypeInfo.u.pobj_Class->IsEqualsOrSubClass( (CClass *)lpVarIndex ) ){
+											SetError(11,Parms[i2],cp);
+										}
+									}
+									else if(DummyTypeInfo.type==DEF_STRUCT){
+										if( !DummyTypeInfo.u.pobj_Class->IsEquals( (CClass *)lpVarIndex ) ){
+											SetError(11,Parms[i2],cp);
+										}
 									}
 								}
-								else if(DummyTypeInfo.type==DEF_STRUCT){
-									if( !DummyTypeInfo.u.pobj_Class->IsEquals( (CClass *)lpVarIndex ) ){
-										SetError(11,Parms[i2],cp);
-									}
+								else if((VarType&FLAG_PTR)&&((VarType^FLAG_PTR)==DummyTypeInfo.type)){
+									//仮引数がポインタ参照で、実引数が配列の先頭ポインタのとき
+								}
+								else{
+									SetError(11,Parms[i2],cp);
 								}
 							}
-							else if((VarType&FLAG_PTR)&&((VarType^FLAG_PTR)==DummyTypeInfo.type)){
-								//仮引数がポインタ参照で、実引数が配列の先頭ポインタのとき
-							}
-							else{
-								SetError(11,Parms[i2],cp);
-							}
-						}
-
-						//変数アドレスをレジスタにセット
-						SetVarPtrToReg(reg,&RelativeVar);
-
-				}
-				else{
-					//一時オブジェクトをコピー
-
-					//mov reg, qword ptr[rsp+offset]
-					pobj_sf->ref_offset_data( reg, StackOffsetOfTempObject[i2] );
-
-					//VarType = NumOpe( &reg, Parms[i2], DummyTypeInfo.type, DummyTypeInfo.u.lpIndex, &lpVarIndex );
+
+							//変数アドレスをレジスタにセット
+							SetVarPtrToReg(reg,&RelativeVar);
+
+					}
 				}
 			}
Index: /BasicCompiler64/Compile_Calc_PushVar.cpp
===================================================================
--- /BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 65)
+++ /BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 66)
@@ -174,12 +174,12 @@
 
 void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg){
-	int var_size;
-
-	var_size=GetTypeSize(type,-1);
+	int varSize;
+
+	varSize=GetTypeSize(type,-1);
 
 	if(pRelativeVar->dwKind==VAR_GLOBAL){
 		if(pRelativeVar->bOffsetOffset){
 			//mov reg, ptr[r11+offset]
-			op_mov_RM(var_size,reg,REG_R11,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			op_mov_RM(varSize,reg,REG_R11,(int)pRelativeVar->offset,MOD_BASE_DISP32);
 			obp-=sizeof(long);
 			pobj_GlobalVarSchedule->add();
@@ -188,5 +188,5 @@
 		else{
 			//mov reg, ptr[offset]
-			op_mov_RM(var_size,reg,0,(int)pRelativeVar->offset,MOD_DISP32);
+			op_mov_RM(varSize,reg,0,(int)pRelativeVar->offset,MOD_DISP32);
 			obp-=sizeof(long);
 			pobj_GlobalVarSchedule->add();
@@ -215,5 +215,5 @@
 		if(pRelativeVar->bOffsetOffset){
 			//mov reg, ptr[rsp+r11+offset]
-			op_mov_RM_ex(var_size,reg,REG_RSP,REG_R11,(int)pRelativeVar->offset,USE_OFFSET);
+			op_mov_RM_ex(varSize,reg,REG_RSP,REG_R11,(int)pRelativeVar->offset,USE_OFFSET);
 			obp-=sizeof(long);
 			AddLocalVarAddrSchedule();
@@ -222,5 +222,5 @@
 		else{
 			//mov reg, ptr[rsp+offset]
-			op_mov_RM(var_size,reg,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			op_mov_RM(varSize,reg,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
 			obp-=sizeof(long);
 			AddLocalVarAddrSchedule();
@@ -249,5 +249,5 @@
 directmem:
 		//mov reg, ptr[r11]
-		op_mov_RM(var_size,reg,REG_R11,0,MOD_BASE);
+		op_mov_RM(varSize,reg,REG_R11,0,MOD_BASE);
 	}
 }
Index: /BasicCompiler64/Compile_Set_Var.cpp
===================================================================
--- /BasicCompiler64/Compile_Set_Var.cpp	(revision 65)
+++ /BasicCompiler64/Compile_Set_Var.cpp	(revision 66)
@@ -333,5 +333,5 @@
 	SetWholeVariable( sizeof(char), DEF_BYTE, pRelative);
 }
-void SetWholeVariable(int var_size,int type,RELATIVE_VAR *pRelative){
+void SetWholeVariable(int varSize,int type,RELATIVE_VAR *pRelative){
 	if(type==DEF_DOUBLE){
 		//Double型
@@ -349,13 +349,13 @@
 		//その他の整数
 
-		if(var_size==sizeof(_int64)){
+		if(varSize==sizeof(_int64)){
 			//レジスタの値を64ビット（rax）に拡張する
 			ExtendTypeTo64(type,REG_RAX);
 		}
-		else if(var_size==sizeof(long)){
+		else if(varSize==sizeof(long)){
 			//レジスタの値を32ビット（eax）に拡張する
 			ExtendTypeTo32(type,REG_RAX);
 		}
-		else if(var_size==sizeof(short)){
+		else if(varSize==sizeof(short)){
 			//レジスタの値を16ビット（ax）に拡張する
 			ExtendTypeTo16(type,REG_RAX);
@@ -367,5 +367,5 @@
 		if(pRelative->bOffsetOffset){
 			//mov ptr[r11+offset],rax/eax/ax/al
-			op_mov_MR(var_size,REG_RAX,REG_R11,(int)pRelative->offset,MOD_BASE_DISP32);
+			op_mov_MR(varSize,REG_RAX,REG_R11,(int)pRelative->offset,MOD_BASE_DISP32);
 			obp-=sizeof(long);
 			pobj_GlobalVarSchedule->add();
@@ -374,5 +374,5 @@
 		else{
 			//mov ptr[offset],rax/eax/ax/al
-			op_mov_MR(var_size,REG_RAX,0,(int)pRelative->offset,MOD_DISP32);
+			op_mov_MR(varSize,REG_RAX,0,(int)pRelative->offset,MOD_DISP32);
 			obp-=sizeof(long);
 			pobj_GlobalVarSchedule->add();
@@ -401,5 +401,5 @@
 		if(pRelative->bOffsetOffset){
 			//mov ptr[rsp+r11+offset],rax/eax/ax/al
-			op_mov_MR_ex(var_size,REG_RAX,REG_RSP,REG_R11,(int)pRelative->offset,USE_OFFSET);
+			op_mov_MR_ex(varSize,REG_RAX,REG_RSP,REG_R11,(int)pRelative->offset,USE_OFFSET);
 			obp-=sizeof(long);
 			AddLocalVarAddrSchedule();
@@ -408,5 +408,5 @@
 		else{
 			//mov ptr[rsp+offset],rax/eax/ax/al
-			op_mov_MR(var_size,REG_RAX,REG_RSP,(int)pRelative->offset,MOD_BASE_DISP32);
+			op_mov_MR(varSize,REG_RAX,REG_RSP,(int)pRelative->offset,MOD_BASE_DISP32);
 			obp-=sizeof(long);
 			AddLocalVarAddrSchedule();
@@ -436,5 +436,5 @@
 
 		//mov ptr[r11],rax/eax/ax/al
-		op_mov_MR(var_size,REG_RAX,REG_R11,0,MOD_BASE);
-	}
-}
+		op_mov_MR(varSize,REG_RAX,REG_R11,0,MOD_BASE);
+	}
+}
Index: /BasicCompiler64/Opcode.h
===================================================================
--- /BasicCompiler64/Opcode.h	(revision 65)
+++ /BasicCompiler64/Opcode.h	(revision 66)
@@ -128,10 +128,10 @@
 	void mov_sp( int reg );
 	int push(int reg);
-	void push(int xmm_reg,int var_size);
+	void push(int xmm_reg,int varSize);
 	void ref_offset_data( int reg, int sp_offset );
 	void ref(int reg);
-	void ref(int xmm_reg,int var_size);
+	void ref(int xmm_reg,int varSize);
 	void pop(int reg = REG_NON);
-	void pop(int xmm_reg,int var_size);
+	void pop(int xmm_reg,int varSize);
 	void parameter_allocate(int size);
 	void RunningSchedule(void);
@@ -289,5 +289,5 @@
 void SetRealVariable(int VarType, int CalcType, RELATIVE_VAR *pRelativeVar);
 void SetBooleanVariable(int type,RELATIVE_VAR *pRelative);
-void SetWholeVariable(int var_size,int type,RELATIVE_VAR *pRelative);
+void SetWholeVariable(int varSize,int type,RELATIVE_VAR *pRelative);
 
 //increment.cpp
Index: /BasicCompiler64/stack_frame.cpp
===================================================================
--- /BasicCompiler64/stack_frame.cpp	(revision 65)
+++ /BasicCompiler64/stack_frame.cpp	(revision 66)
@@ -70,13 +70,13 @@
 	return now_sp;
 }
-void CStackFrame::push(int xmm_reg,int var_size){
+void CStackFrame::push(int xmm_reg,int varSize){
 	now_sp-=sizeof(_int64);
 	if(lowest_sp>now_sp) lowest_sp=now_sp;
 
-	if(var_size==sizeof(double)){
+	if(varSize==sizeof(double)){
 		//movlpd qword ptr[rsp+offset],xmm_reg
 		op_movlpd_MR(xmm_reg,REG_RSP,now_sp,MOD_BASE_DISP32);
 	}
-	if(var_size==sizeof(float)){
+	if(varSize==sizeof(float)){
 		//movss dword ptr[rsp+offset],xmm_reg
 		OpBuffer[obp++]=(char)0xF3;
@@ -106,10 +106,10 @@
 	ref_offset_data( reg, now_sp );
 }
-void CStackFrame::ref(int xmm_reg,int var_size){
-	if(var_size==sizeof(double)){
+void CStackFrame::ref(int xmm_reg,int varSize){
+	if(varSize==sizeof(double)){
 		//movlpd xmm_reg,qword ptr[rsp+offset]
 		op_movlpd_RM(xmm_reg,REG_RSP,now_sp,MOD_BASE_DISP32);
 	}
-	if(var_size==sizeof(float)){
+	if(varSize==sizeof(float)){
 		//movss xmm_reg,dword ptr[rsp+offset]
 		OpBuffer[obp++]=(char)0xF3;
@@ -132,6 +132,6 @@
 	now_sp+=sizeof(_int64);
 }
-void CStackFrame::pop(int xmm_reg,int var_size){
-	ref(xmm_reg,var_size);
+void CStackFrame::pop(int xmm_reg,int varSize){
+	ref(xmm_reg,varSize);
 
 	now_sp+=sizeof(_int64);
Index: /BasicCompiler_Common/common.h
===================================================================
--- /BasicCompiler_Common/common.h	(revision 65)
+++ /BasicCompiler_Common/common.h	(revision 66)
@@ -43,7 +43,7 @@
 
 #ifdef _AMD64_
-#define VER_INFO		"β14 (x64)"
+#define VER_INFO		"β15 (x64)"
 #else
-#define VER_INFO		"β14"
+#define VER_INFO		"β15"
 #endif
 
Index: /ProjectEditor/Common.h
===================================================================
--- /ProjectEditor/Common.h	(revision 65)
+++ /ProjectEditor/Common.h	(revision 66)
@@ -59,5 +59,5 @@
 #define APPLICATION_NAME "ActiveBasic 5.0"
 #define VERSION_APPLI_NAME APPLICATION_NAME
-#define VERSION_STRING "5.00.00 β14"
+#define VERSION_STRING "5.00.00 β15"
 
 #endif
