Index: trunk/abdev/BasicCompiler32/Compile_Statement.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 206)
+++ trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 225)
@@ -110,5 +110,5 @@
 		else if( resultType.IsStruct() ){
 			//mov ebx,eax
-			op_mov_RR(REG_EBX,REG_EAX);
+			compiler.codeGenerator.op_mov_RR(REG_EBX,REG_EAX);
 
 			FreeTempObject(REG_EBX,&resultType.GetClass());
@@ -144,27 +144,23 @@
 	else if( tempType.IsDouble() ){
 		//fld qword ptr[esp]
-		op_fld_ptr_esp(DEF_DOUBLE);
+		compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 		//push 0
-		op_push_V(0);
+		compiler.codeGenerator.op_push_V(0);
 
 		//fild dword ptr[esp]
-		op_fld_ptr_esp(DEF_LONG);
+		compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 
 		//add esp,sizeof(double)+sizeof(long)
-		op_add_esp(sizeof(double)+sizeof(long));
+		compiler.codeGenerator.op_add_esp(sizeof(double)+sizeof(long));
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//test ah,40
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x40;
+		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 		//jne (endif、または else まで)
@@ -178,27 +174,23 @@
 	else if( tempType.IsSingle() ){
 		//fld dword ptr[esp]
-		op_fld_ptr_esp(DEF_SINGLE);
+		compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 
 		//push 0
-		op_push_V(0);
+		compiler.codeGenerator.op_push_V(0);
 
 		//fild dword ptr[esp]
-		op_fld_ptr_esp(DEF_LONG);
+		compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 
 		//add esp,sizeof(float)+sizeof(long)
-		op_add_esp(sizeof(float)+sizeof(long));
+		compiler.codeGenerator.op_add_esp(sizeof(float)+sizeof(long));
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//test ah,40
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x40;
+		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 		//jne (endif、または else まで)
@@ -214,8 +206,8 @@
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//cmp eax,0
@@ -258,5 +250,5 @@
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//cmp eax,0
@@ -401,27 +393,23 @@
 	else if( tempType.IsDouble() ){
 		//fld qword ptr[esp]
-		op_fld_ptr_esp(DEF_DOUBLE);
+		compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 		//push 0
-		op_push_V(0);
+		compiler.codeGenerator.op_push_V(0);
 
 		//fild dword ptr[esp]
-		op_fld_ptr_esp(DEF_LONG);
+		compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 
 		//add esp,sizeof(double)+sizeof(long)
-		op_add_esp(sizeof(double)+sizeof(long));
+		compiler.codeGenerator.op_add_esp(sizeof(double)+sizeof(long));
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//test ah,40
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x40;
+		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 		//jne (Wend まで)
@@ -435,27 +423,23 @@
 	else if( tempType.IsSingle() ){
 		//fld dword ptr[esp]
-		op_fld_ptr_esp(DEF_SINGLE);
+		compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 
 		//push 0
-		op_push_V(0);
+		compiler.codeGenerator.op_push_V(0);
 
 		//fild dword ptr[esp]
-		op_fld_ptr_esp(DEF_LONG);
+		compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 
 		//add esp,sizeof(float)+sizeof(long)
-		op_add_esp(sizeof(float)+sizeof(long));
+		compiler.codeGenerator.op_add_esp(sizeof(float)+sizeof(long));
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//test ah,40
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x40;
+		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 		//jne (Wend まで)
@@ -471,8 +455,8 @@
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//cmp eax,0
@@ -514,5 +498,5 @@
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//cmp eax,0
@@ -616,5 +600,5 @@
 
 	//pop eax
-	op_pop(REG_EAX);
+	compiler.codeGenerator.op_pop(REG_EAX);
 
 	//cmp eax,0
@@ -634,5 +618,5 @@
 
 	//pop eax
-	op_pop(REG_EAX);
+	compiler.codeGenerator.op_pop(REG_EAX);
 
 	//jmp [カウンタ減少の場合の判定を飛び越す]
@@ -648,5 +632,5 @@
 
 	//pop eax
-	op_pop(REG_EAX);
+	compiler.codeGenerator.op_pop(REG_EAX);
 
 	*((long *)(OpBuffer+i3))=obp-(i3+sizeof(long)); //jmpジャンプ先のオフセット値
@@ -737,27 +721,23 @@
 			if( tempType.IsDouble() ){
 				//fld qword ptr[esp]
-				op_fld_ptr_esp(DEF_DOUBLE);
+				compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 				//push 0
-				op_push_V(0);
+				compiler.codeGenerator.op_push_V(0);
 
 				//fild dword ptr[esp]
-				op_fld_ptr_esp(DEF_LONG);
+				compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 
 				//add esp,sizeof(double)+sizeof(long)
-				op_add_esp(sizeof(double)+sizeof(long));
+				compiler.codeGenerator.op_add_esp(sizeof(double)+sizeof(long));
 
 				//fcompp
-				OpBuffer[obp++]=(char)0xDE;
-				OpBuffer[obp++]=(char)0xD9;
+				compiler.codeGenerator.op_fcompp();
 
 				//fnstsw ax
-				OpBuffer[obp++]=(char)0xDF;
-				OpBuffer[obp++]=(char)0xE0;
+				compiler.codeGenerator.op_fnstsw_ax();
 
 				//test ah,40
-				OpBuffer[obp++]=(char)0xF6;
-				OpBuffer[obp++]=(char)0xC4;
-				OpBuffer[obp++]=(char)0x40;
+				compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 				if(basbuf[i3]=='0'){
@@ -778,27 +758,23 @@
 			else if( tempType.IsSingle() ){
 				//fld dword ptr[esp]
-				op_fld_ptr_esp(DEF_SINGLE);
+				compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 
 				//push 0
-				op_push_V(0);
+				compiler.codeGenerator.op_push_V(0);
 
 				//fild dword ptr[esp]
-				op_fld_ptr_esp(DEF_LONG);
+				compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 
 				//add esp,sizeof(float)+sizeof(long)
-				op_add_esp(sizeof(float)+sizeof(long));
+				compiler.codeGenerator.op_add_esp(sizeof(float)+sizeof(long));
 
 				//fcompp
-				OpBuffer[obp++]=(char)0xDE;
-				OpBuffer[obp++]=(char)0xD9;
+				compiler.codeGenerator.op_fcompp();
 
 				//fnstsw ax
-				OpBuffer[obp++]=(char)0xDF;
-				OpBuffer[obp++]=(char)0xE0;
+				compiler.codeGenerator.op_fnstsw_ax();
 
 				//test ah,40
-				OpBuffer[obp++]=(char)0xF6;
-				OpBuffer[obp++]=(char)0xC4;
-				OpBuffer[obp++]=(char)0x40;
+				compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 				if(basbuf[i3]=='0'){
@@ -821,8 +797,8 @@
 
 				//pop eax
-				op_pop(REG_EAX);
+				compiler.codeGenerator.op_pop(REG_EAX);
 
 				//pop ebx
-				op_pop(REG_EBX);
+				compiler.codeGenerator.op_pop(REG_EBX);
 
 				//cmp eax,0
@@ -877,5 +853,5 @@
 			else{
 				//pop eax
-				op_pop(REG_EAX);
+				compiler.codeGenerator.op_pop(REG_EAX);
 
 				//cmp eax,0
@@ -1027,5 +1003,5 @@
 			if(sw==0){
 				//add esp,CaseTypeSize
-				op_add_esp(CaseTypeSize);
+				compiler.codeGenerator.op_add_esp(CaseTypeSize);
 			}
 			break;
@@ -1101,20 +1077,20 @@
 
 					//pop edx
-					op_pop(REG_EDX);
+					compiler.codeGenerator.op_pop(REG_EDX);
 
 					//mov ecx,dword ptr[esp]
-					op_mov_RM(sizeof(long),REG_ECX,REG_ESP,0,MOD_BASE);
+					compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_ESP,0,MOD_BASE);
 
 					//push edx
-					op_push(REG_EDX);
+					compiler.codeGenerator.op_push(REG_EDX);
 
 					//push ecx
-					op_push(REG_ECX);
+					compiler.codeGenerator.op_push(REG_ECX);
 
 					//call operator_proc	※ ==演算子
-					op_call(pUserProc);
+					compiler.codeGenerator.op_call(pUserProc);
 
 					//test eax,eax
-					op_test(REG_EAX,REG_EAX);
+					compiler.codeGenerator.op_test(REG_EAX,REG_EAX);
 
 					//jne ...
@@ -1128,24 +1104,20 @@
 
 					//fld qword ptr[esp]
-					op_fld_ptr_esp(DEF_DOUBLE);
+					compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 					//add esp,CaseTypeSize
-					op_add_esp(CaseTypeSize);
+					compiler.codeGenerator.op_add_esp(CaseTypeSize);
 
 					//fld qword ptr[esp]
-					op_fld_ptr_esp(DEF_DOUBLE);
+					compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 					//fcompp
-					OpBuffer[obp++]=(char)0xDE;
-					OpBuffer[obp++]=(char)0xD9;
+					compiler.codeGenerator.op_fcompp();
 
 					//fnstsw ax
-					OpBuffer[obp++]=(char)0xDF;
-					OpBuffer[obp++]=(char)0xE0;
+					compiler.codeGenerator.op_fnstsw_ax();
 
 					//test ah,40
-					OpBuffer[obp++]=(char)0xF6;
-					OpBuffer[obp++]=(char)0xC4;
-					OpBuffer[obp++]=(char)0x40;
+					compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 					//jne ...
@@ -1159,24 +1131,20 @@
 
 					//fld dword ptr[esp]
-					op_fld_ptr_esp(DEF_SINGLE);
+					compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 
 					//add esp,CaseTypeSize
-					op_add_esp(CaseTypeSize);
+					compiler.codeGenerator.op_add_esp(CaseTypeSize);
 
 					//fld dword ptr[esp]
-					op_fld_ptr_esp(DEF_SINGLE);
+					compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 
 					//fcompp
-					OpBuffer[obp++]=(char)0xDE;
-					OpBuffer[obp++]=(char)0xD9;
+					compiler.codeGenerator.op_fcompp();
 
 					//fnstsw ax
-					OpBuffer[obp++]=(char)0xDF;
-					OpBuffer[obp++]=(char)0xE0;
+					compiler.codeGenerator.op_fnstsw_ax();
 
 					//test ah,40
-					OpBuffer[obp++]=(char)0xF6;
-					OpBuffer[obp++]=(char)0xC4;
-					OpBuffer[obp++]=(char)0x40;
+					compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 					//jne ...
@@ -1190,5 +1158,5 @@
 
 					//pop ebx
-					op_pop(REG_EBX);
+					compiler.codeGenerator.op_pop(REG_EBX);
 
 					//mov eax,dword ptr[esp]
@@ -1273,5 +1241,5 @@
 
 	//add esp,CaseTypeSize
-	op_add_esp(CaseTypeSize);
+	compiler.codeGenerator.op_add_esp(CaseTypeSize);
 }
 
@@ -1321,5 +1289,5 @@
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else{
@@ -1398,5 +1366,5 @@
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//fstp qword ptr[eax]
@@ -1408,12 +1376,11 @@
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//mov dword ptr[eax],ebx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x18;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EBX, REG_EAX, 0, MOD_BASE );
 	}
 	else if(type==DEF_QWORD){
@@ -1421,20 +1388,17 @@
 
 		//pop ecx
-		op_pop(REG_ECX);
+		compiler.codeGenerator.op_pop(REG_ECX);
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//mov dword ptr[eax],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x08;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_EAX, 0, MOD_BASE );
 
 		//mov dword ptr[eax+sizeof(long)],ebx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x58;
-		OpBuffer[obp++]=(char)0x04;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EBX, REG_EAX, 0x04, MOD_BASE_DISP8 );
 	}
 	else if(type==DEF_DWORD){
@@ -1442,12 +1406,11 @@
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//mov dword ptr[eax],ebx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x18;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EBX, REG_EAX, 0, MOD_BASE );
 	}
 	else if(type==DEF_WORD){
@@ -1455,8 +1418,8 @@
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//mov word ptr[eax],bx
@@ -1469,8 +1432,8 @@
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//mov byte ptr[eax],bl
