Index: trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp	(revision 206)
+++ trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp	(revision 225)
@@ -23,5 +23,5 @@
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_System_InitDllGlobalVariables" ){
@@ -33,5 +33,5 @@
 		if(!bDll){
 			//ret
-			op_ret();
+			compiler.codeGenerator.op_ret();
 
 			return;
@@ -57,5 +57,5 @@
 		//_System_StartupProgramの呼び出し
 		extern const UserProc *pSub_System_StartupProgram;
-		op_call(pSub_System_StartupProgram);
+		compiler.codeGenerator.op_call(pSub_System_StartupProgram);
 
 		//クラスに属する静的メンバを定義
@@ -68,5 +68,5 @@
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_System_InitStaticLocalVariables" ){
@@ -91,5 +91,5 @@
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_System_Call_Destructor_of_GlobalObject" ){
@@ -105,15 +105,15 @@
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_System_GetSp" ){
 		//mov eax,esp
-		op_mov_RR(REG_EAX,REG_ESP);
+		compiler.codeGenerator.op_mov_RR(REG_EAX,REG_ESP);
 
 		//add eax,PTR_SIZE
-		op_add_RV8(REG_EAX,PTR_SIZE);
+		compiler.codeGenerator.op_add_RV8(REG_EAX,PTR_SIZE);
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_allrem" ){
@@ -290,4 +290,7 @@
 	compiler.GetNamespaceSupporter().SetImportedNamespaces( pUserProc->GetImportedNamespaces() );
 
+	// コード生成対象を選択
+	compiler.codeGenerator.Select( (const_cast<UserProc *>(pUserProc))->GetNativeCode() );
+
 	if(pUserProc->IsSystem()){
 		////////////////////
@@ -369,9 +372,9 @@
 
 	//sub esp,AllLocalVarSize（スケジュール）
-	op_sub_esp(0xFFFFFFFF);
+	compiler.codeGenerator.op_sub_esp(0xFFFFFFFF);
 	LocalVarSchedule=obp-sizeof(long);
 
 	//push ebp
-	op_push(REG_EBP);
+	compiler.codeGenerator.op_push(REG_EBP);
 
 	//mov ebp,esp
@@ -380,5 +383,5 @@
 
 	//push ebx
-	op_push(REG_EBX);
+	compiler.codeGenerator.op_push(REG_EBX);
 
 	//push esi
@@ -460,5 +463,5 @@
 		//call _DebugSys_StartProc
 		extern const UserProc *pSub_DebugSys_StartProc;
-		op_call(pSub_DebugSys_StartProc);
+		compiler.codeGenerator.op_call(pSub_DebugSys_StartProc);
 	}
 
@@ -543,6 +546,5 @@
 
 					//mov dword ptr[ecx],eax
-					OpBuffer[obp++]=(char)0x89;
-					OpBuffer[obp++]=(char)0x01;
+					compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_ECX, 0, MOD_BASE );
 			}
 		}
@@ -653,5 +655,5 @@
 		//call _DebugSys_EndProc
 		extern const UserProc *pSub_DebugSys_EndProc;
-		op_call(pSub_DebugSys_EndProc);
+		compiler.codeGenerator.op_call(pSub_DebugSys_EndProc);
 	}
 
@@ -672,5 +674,5 @@
 			if( i3==DEF_OBJECT ){
 				//mov eax,dword ptr[eax]
-				op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );
+				compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );
 			}
 		}
@@ -717,5 +719,5 @@
 		else if(i3==DEF_INTEGER||i3==DEF_WORD || (Smoothie::IsUnicode()&&i3==DEF_CHAR)){
 			//xor eax,eax（eaxを0に初期化する）
-			op_zero_reg(REG_EAX);
+			compiler.codeGenerator.op_zero_reg(REG_EAX);
 
 			//mov ax,word ptr[ebp+offset]
@@ -729,5 +731,5 @@
 		else if(i3==DEF_SBYTE||i3==DEF_BYTE||i3==DEF_BOOLEAN || (Smoothie::IsUnicode()==false&&i3==DEF_CHAR)){
 			//xor eax,eax（eaxを0に初期化する）
-			op_zero_reg(REG_EAX);
+			compiler.codeGenerator.op_zero_reg(REG_EAX);
 
 			//mov al,byte ptr[ebp+offset]
@@ -763,9 +765,9 @@
 
 	//pop ebx
-	op_pop(REG_EBX);
+	compiler.codeGenerator.op_pop(REG_EBX);
 
 	if(bDebugCompile){
 		//cmp esp,ebp
-		op_cmp_RR( REG_ESP, REG_EBP );
+		compiler.codeGenerator.op_cmp_RR( REG_ESP, REG_EBP );
 
 		//jz 6（次のcallとbreakpointを飛び越す）
@@ -775,5 +777,5 @@
 		//call _esp_error
 		extern const UserProc *pSub_esp_error;
-		op_call( pSub_esp_error );
+		compiler.codeGenerator.op_call( pSub_esp_error );
 
 		breakpoint;
@@ -785,12 +787,12 @@
 
 	//pop ebp
-	op_pop(REG_EBP);
+	compiler.codeGenerator.op_pop(REG_EBP);
 
 	//add esp AllLocalVarSize
-	op_add_esp(AllLocalVarSize-BaseOffset);
+	compiler.codeGenerator.op_add_esp(AllLocalVarSize-BaseOffset);
 
 	if( BaseOffset==0 || pUserProc->IsCdecl() ){
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else{
