Index: BasicCompiler64/Compile_Calc.cpp
===================================================================
--- BasicCompiler64/Compile_Calc.cpp	(revision 11)
+++ BasicCompiler64/Compile_Calc.cpp	(revision 36)
@@ -2,344 +2,4 @@
 #include "Opcode.h"
 
-void ChangeTypeToDouble_ToFpuReg(int OldType){
-	//現在のスタックの内容を実数レジスタに保存する
-	//NumOpeの直後専用
-	if(OldType==DEF_DOUBLE){
-		//fld qword ptr[esp]
-		op_fld_ptr_esp(DEF_DOUBLE);
-
-		//add esp,8
-		op_add_esp(8);
-	}
-	else if(OldType==DEF_SINGLE){
-		//fld dword ptr[esp]
-		op_fld_ptr_esp(DEF_SINGLE);
-
-		//add esp,4
-		op_add_esp(4);
-	}
-	else if(OldType==DEF_LONG){
-		//fild dword ptr[esp]
-		op_fld_ptr_esp(DEF_LONG);
-
-		//add esp,4
-		op_add_esp(4);
-	}
-	else if(OldType==DEF_DWORD){
-		//pop eax
-		op_pop(REG_EAX);
-
-		//push 0
-		op_push_value(0);
-
-		//push eax
-		op_push(REG_EAX);
-
-		//fild qword ptr[esp]
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x2C;
-		OpBuffer[obp++]=(char)0x24;
-
-		//add esp,8
-		op_add_esp(8);
-	}
-}
-void ChangeTypeToDouble(int OldType){
-	//現在のスタックの内容をdouble型に変換する
-	//NumOpeの直後専用
-	if(OldType==DEF_DOUBLE) return;
-	else if(OldType==DEF_SINGLE){
-		//fld dword ptr[esp]
-		op_fld_ptr_esp(DEF_SINGLE);
-
-		//sub esp,4
-		op_sub_esp(4);
-
-		//fstp qword ptr[esp]
-		OpBuffer[obp++]=(char)0xDD;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
-		//64ビット整数型
-
-		//fild qword ptr[esp]
-		op_fld_ptr_esp(DEF_INT64);
-
-		//fstp qword ptr[esp]
-		OpBuffer[obp++]=(char)0xDD;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else if(IsWholeNumberType(OldType)){
-		//その他整数型
-
-		if(IsSignedType(OldType)){
-			//符号あり
-
-			if(OldType==DEF_INTEGER){
-				//pop eax
-				op_pop(REG_EAX);
-
-				//movsx eax,ax
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0xBF;
-				OpBuffer[obp++]=(char)0xC0;
-
-				//push eax
-				op_push(REG_EAX);
-			}
-			else if(OldType==DEF_CHAR){
-				//pop eax
-				op_pop(REG_EAX);
-
-				//movsx eax,al
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0xBE;
-				OpBuffer[obp++]=(char)0xC0;
-
-				//push eax
-				op_push(REG_EAX);
-			}
-
-			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-
-			//sub esp,4
-			op_sub_esp(4);
-		}
-		else{
-			//符号なし
-
-			//pop eax
-			op_pop(REG_EAX);
-
-			//push 0
-			op_push_value(0);
-
-			//push eax
-			op_push(REG_EAX);
-
-			//fild qword ptr[esp]
-			OpBuffer[obp++]=(char)0xDF;
-			OpBuffer[obp++]=(char)0x2C;
-			OpBuffer[obp++]=(char)0x24;
-		}
-
-		//fstp qword ptr[esp]
-		OpBuffer[obp++]=(char)0xDD;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else SetError(9,NULL,cp);
-}
-void ChangeTypeToSingle(int OldType){
-	//現在のスタックの内容をfloat型に変換する
-	//NumOpeの直後専用
-	if(OldType==DEF_SINGLE) return;
-	else if(OldType==DEF_DOUBLE){
-		//fld qword ptr[esp]
-		op_fld_ptr_esp(DEF_DOUBLE);
-
-		//add esp,4
-		op_add_esp(4);
-
-		//fstp dword ptr[esp]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
-		//64ビット整数型
-
-		//fild qword ptr[esp]
-		op_fld_ptr_esp(DEF_INT64);
-
-		//add esp,4
-		op_add_esp(4);
-
-		//fstp dword ptr[esp]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else if(IsWholeNumberType(OldType)){
-		//その他整数型
-
-		if(IsSignedType(OldType)){
-			//符号あり
-
-			if(OldType==DEF_INTEGER){
-				//pop eax
-				op_pop(REG_EAX);
-
-				//movsx eax,ax
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0xBF;
-				OpBuffer[obp++]=(char)0xC0;
-
-				//push eax
-				op_push(REG_EAX);
-			}
-			else if(OldType==DEF_CHAR){
-				//pop eax
-				op_pop(REG_EAX);
-
-				//movsx eax,al
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0xBE;
-				OpBuffer[obp++]=(char)0xC0;
-
-				//push eax
-				op_push(REG_EAX);
-			}
-
-			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-		}
-		else{
-			//符号なし
-
-			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-		}
-
-		//fstp dword ptr[esp]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else SetError(9,NULL,cp);
-}
-void ChangeTypeToInt64(int OldType){
-	//現在のスタックの内容をInt64型に変換する
-	//NumOpeの直後専用
-	if(Is64Type(OldType)) return;
-
-	else if(OldType==DEF_DOUBLE){
-		//fld qword ptr[esp]
-		op_fld_ptr_esp(DEF_DOUBLE);
-
-		//fistp qword ptr[esp]
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else if(OldType==DEF_SINGLE){
-		//fld dword ptr[esp]
-		op_fld_ptr_esp(DEF_SINGLE);
-
-		//sub esp,4
-		op_sub_esp(4);
-
-		//fistp qword ptr[esp]
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else if(IsWholeNumberType(OldType)){
-		//その他整数
-
-		if(IsSignedType(OldType)){
-			//符号あり
-
-			//pop eax
-			op_pop(REG_EAX);
-
-			//cdq
-			OpBuffer[obp++]=(char)0x99;
-
-			//push edx
-			op_push(REG_EDX);
-
-			//push eax
-			op_push(REG_EAX);
-		}
-		else{
-			//符号なし
-
-			//pop eax
-			op_pop(REG_EAX);
-
-			//push 0
-			op_push_value(0);
-
-			//push eax
-			op_push(REG_EAX);
-		}
-	}
-	else SetError(9,NULL,cp);
-}
-void ChangeTypeToLong(int OldType){
-	//現在のスタックの内容をLong型に変換する
-	//NumOpeの直後専用
-	if(OldType==DEF_DOUBLE){
-		//fld qword ptr[esp]
-		op_fld_ptr_esp(DEF_DOUBLE);
-
-		//add esp,4
-		op_add_esp(4);
-
-		//fistp dword ptr[esp]
-		OpBuffer[obp++]=(char)0xDB;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else if(OldType==DEF_SINGLE){
-		//fld dword ptr[esp]
-		op_fld_ptr_esp(DEF_SINGLE);
-
-		//fistp dword ptr[esp]
-		OpBuffer[obp++]=(char)0xDB;
-		OpBuffer[obp++]=(char)0x1C;
-		OpBuffer[obp++]=(char)0x24;
-	}
-	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
-		//pop eax
-		op_pop(REG_EAX);
-
-		//add esp,4
-		op_add_esp(4);
-
-		//push eax
-		op_push(REG_EAX);
-	}
-}
-void ChangeTypeToInteger(int OldType){
-	//現在のスタックの内容をInteger型に変換する
-	if(OldType==DEF_BYTE||OldType==DEF_CHAR||
-		OldType==DEF_WORD||OldType==DEF_INTEGER) return;
-
-	ChangeTypeToLong(OldType);
-
-	//pop eax
-	op_pop(REG_EAX);
-
-	//and eax,0000FFFFh
-	OpBuffer[obp++]=(char)0x25;
-	*((long *)(OpBuffer+obp))=0x0000FFFF;
-	obp+=sizeof(long);
-
-	//push eax
-	op_push(REG_EAX);
-}
-void ChangeTypeToByte(int OldType){
-	//現在のスタックの内容をbyte型に変換する
-	if(OldType==DEF_BYTE||OldType==DEF_CHAR) return;
-
-	ChangeTypeToLong(OldType);
-
-	//pop eax
-	op_pop(REG_EAX);
-
-	//and eax,000000FFh
-	OpBuffer[obp++]=(char)0x25;
-	*((long *)(OpBuffer+obp))=0x000000FF;
-	obp+=sizeof(long);
-
-	//push eax
-	op_push(REG_EAX);
-}
-
 void SetVariableFromRax(int VarType,int CalcType,RELATIVE_VAR *pRelativeVar){
 	/////////////////////////////////////////////////
@@ -347,4 +7,8 @@
 	/////////////////////////////////////////////////
 
+	if(VarType==DEF_BOOLEAN){
+		//bool
+		SetBooleanVariable(CalcType,pRelativeVar);
+	}
 	if(VarType==DEF_CHAR||VarType==DEF_BYTE){
 		//8ビット変数へalレジスタの内容を格納する
