Index: /trunk/abdev/BasicCompiler32/Compile_Calc_PushVar.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Calc_PushVar.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/Compile_Calc_PushVar.cpp	(revision 253)
@@ -26,9 +26,13 @@
 		if(pRelativeVar->bOffsetOffset){
 			//fld ptr[ebp+ecx+offset]
-			compiler.codeGenerator.op_fld_base_offset_ex(type,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_fld_base_offset_ex(type,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET, Schedule::None, true )
+			);
 		}
 		else{
 			//fld ptr[ebp+offset]
-			compiler.codeGenerator.op_fld_base_offset(type,REG_EBP,(int)pRelativeVar->offset, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_fld_base_offset(type,REG_EBP,(int)pRelativeVar->offset, Schedule::None, true )
+			);
 		}
 	}
@@ -36,9 +40,13 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add ecx,qword ptr[ebp+offset]
-			compiler.codeGenerator.op_add_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_add_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 		else{
 			//mov ecx,qword ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 
@@ -102,9 +110,13 @@
 		if(pRelativeVar->bOffsetOffset){
 			//mov reg, ptr[ebp+ecx+offset]
-			compiler.codeGenerator.op_mov_RM_ex(varSize,reg,REG_EBP,REG_ECX,(int)pRelativeVar->offset + offsetOf64Head,USE_OFFSET, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM_ex(varSize,reg,REG_EBP,REG_ECX,(int)pRelativeVar->offset + offsetOf64Head,USE_OFFSET, Schedule::None, true )
+			);
 		}
 		else{
 			//mov reg, ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM(varSize,reg,REG_EBP,(int)pRelativeVar->offset + offsetOf64Head,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM(varSize,reg,REG_EBP,(int)pRelativeVar->offset + offsetOf64Head,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 	}
@@ -112,9 +124,13 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add ecx,qword ptr[ebp+offset]
-			compiler.codeGenerator.op_add_RM(varSize,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_add_RM(varSize,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 		else{
 			//mov ecx,qword ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM(varSize,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM(varSize,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 
@@ -162,5 +178,7 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add ecx,offset
-			compiler.codeGenerator.op_add_RV( REG_ECX, pRelativeVar->offset, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_add_RV( REG_ECX, pRelativeVar->offset, Schedule::None, true )
+			);
 
 			//push dword ptr[ebp+ecx]
@@ -174,10 +192,14 @@
 		else{
 			//push dword ptr[ebp+offset]
-			compiler.codeGenerator.op_push_M( REG_EBP, pRelativeVar->offset, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_push_M( REG_EBP, pRelativeVar->offset, Schedule::None, true )
+			);
 		}
 	}
 	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
 		//mov eax,dword ptr[ebp+offset]
-		compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::None, true )
+		);
 
 		if(pRelativeVar->bOffsetOffset){
Index: /trunk/abdev/BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_CallProc.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/Compile_CallProc.cpp	(revision 253)
@@ -7,8 +7,4 @@
 #include "../BasicCompiler_Common/common.h"
 #include "Opcode.h"
-
-//ローカル変数アドレススケジュール
-DWORD *pLocalVarAddrSchedule;
-int LocalVarAddrScheduleNum;
 
 void Call_DebugSys_SaveContext(){
@@ -27,14 +23,4 @@
 	compiler.codeGenerator.op_call(pSub_DebugSys_SaveContext);
 }
-
-void AddLocalVarAddrSchedule(){
-	extern HANDLE hHeap;
-
-	//ローカル変数アドレススケジュールに追加する
-	pLocalVarAddrSchedule=(DWORD *)HeapReAlloc(hHeap,0,pLocalVarAddrSchedule,(LocalVarAddrScheduleNum+1)*sizeof(DWORD));
-	pLocalVarAddrSchedule[LocalVarAddrScheduleNum]=obp;
-	LocalVarAddrScheduleNum++;
-}
-
 
 bool Opcode_CallProcPtr( const char *variable, const char *lpszParms,ProcPointer *pProcPointer){
Index: /trunk/abdev/BasicCompiler32/Compile_Object.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Object.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/Compile_Object.cpp	(revision 253)
@@ -16,9 +16,7 @@
 	//をセットしておかなければならない
 
-	int jnz_back;
-
-
-	//jnzの番地
-	jnz_back=obp;
+	//jnzのジャンプ先番地
+	extern int obp;
+	int jnz_back = obp;
 
 	if(bSomeObjects){
@@ -263,6 +261,6 @@
 
 	//jnzの番地
-	int jnz_back;
-	jnz_back=obp;
+	extern int obp;
+	int jnz_back = obp;
 
 	//push ecx
Index: /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp	(revision 253)
@@ -236,5 +236,5 @@
 	extern HANDLE hHeap;
 	extern BOOL bDebugCompile;
-	int i3,i4,LocalVarSchedule,BaseOffset;
+	int i3,i4,BaseOffset;
 	char temporary[VN_SIZE];
 
@@ -263,4 +263,5 @@
 	else bDebugSupportProc=0;
 
+	extern int obp;
 	pUserProc->SetBeginOpAddress( obp );
 
@@ -306,10 +307,4 @@
 	extern int AllLocalVarSize;
 	AllLocalVarSize=0;
-
-	//ローカル変数アドレススケジュール
-	extern DWORD *pLocalVarAddrSchedule;
-	extern int LocalVarAddrScheduleNum;
-	pLocalVarAddrSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
-	LocalVarAddrScheduleNum=0;
 
 	//パラメータ用の変数データを考慮
@@ -362,6 +357,5 @@
 
 	//sub esp,AllLocalVarSize（スケジュール）
-	compiler.codeGenerator.op_sub_esp(0xFFFFFFFF);
-	LocalVarSchedule=obp-sizeof(long);
+	const PertialSchedule *pAllLocalVarPertialSchedule = compiler.codeGenerator.op_sub_esp( 0, true );
 
 	//push ebp
@@ -641,17 +635,26 @@
 		{
 			//fld qword ptr[ebp+offset]
-			compiler.codeGenerator.op_fld_base_offset( i3, REG_EBP, RelativeVar.offset, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_fld_base_offset( i3, REG_EBP, RelativeVar.offset, Schedule::None, true )
+			);
 		}
 		else if(i3==DEF_INT64||i3==DEF_QWORD){
 			//mov eax,dword ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, RelativeVar.offset, MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, RelativeVar.offset, MOD_BASE_DISP32, Schedule::None, true )
+			);
 
 			//mov edx,dword ptr[ebp+offset+sizeof(long)]
-			compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EDX, REG_EBP, RelativeVar.offset+sizeof(long), MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EDX, REG_EBP, RelativeVar.offset+sizeof(long), MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 		else if(i3==DEF_LONG||i3==DEF_DWORD||
-			IsPtrType(i3)){
+			IsPtrType(i3))
+		{
 			//mov eax,dword ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, RelativeVar.offset, MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, RelativeVar.offset, MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 		else if(i3==DEF_INTEGER||i3==DEF_WORD || (Smoothie::IsUnicode()&&i3==DEF_CHAR)){
@@ -660,5 +663,7 @@
 
 			//mov ax,word ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM( sizeof(short), REG_EAX, REG_EBP, RelativeVar.offset, MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM( sizeof(short), REG_EAX, REG_EBP, RelativeVar.offset, MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 		else if(i3==DEF_SBYTE||i3==DEF_BYTE||i3==DEF_BOOLEAN || (Smoothie::IsUnicode()==false&&i3==DEF_CHAR)){
@@ -667,13 +672,16 @@
 
 			//mov al,byte ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM( sizeof(char), REG_EAX, REG_EBP, RelativeVar.offset, MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM( sizeof(char), REG_EAX, REG_EBP, RelativeVar.offset, MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 	}
 
 	//ローカル変数アドレススケジュール
-	for(i3=0;i3<LocalVarAddrScheduleNum;i3++){
-		*((long *)(OpBuffer+pLocalVarAddrSchedule[i3]))+=AllLocalVarSize;
-	}
-	HeapDefaultFree(pLocalVarAddrSchedule);
+	BOOST_FOREACH( const PertialSchedule *pPertialSchedule, compiler.codeGenerator.localVarPertialSchedules )
+	{
+		compiler.codeGenerator.opfix_offset( pPertialSchedule, AllLocalVarSize );
+	}
+	compiler.codeGenerator.localVarPertialSchedules.clear();
 	BOOST_FOREACH( Variable *pVar, pUserProc->GetLocalVars() ){
 		//後にデバッグで利用する
@@ -685,5 +693,5 @@
 
 	//ローカル変数用メモリを確保するためのスケジュール（subコマンド）
-	*((long *)(OpBuffer+LocalVarSchedule))=AllLocalVarSize-BaseOffset;
+	compiler.codeGenerator.opfix( pAllLocalVarPertialSchedule, AllLocalVarSize - BaseOffset );
 
 	//pop edi
Index: /trunk/abdev/BasicCompiler32/Compile_Set_Var.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Set_Var.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/Compile_Set_Var.cpp	(revision 253)
@@ -120,9 +120,13 @@
 		if(pRelativeVar->bOffsetOffset){
 			//fstp ptr[ebp+ecx+offset]
-			compiler.codeGenerator.op_fstp_base_offset_ex(VarType,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_fstp_base_offset_ex(VarType,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET, Schedule::None, true )
+			);
 		}
 		else{
 			//fstp ptr[ebp+offset]
-			compiler.codeGenerator.op_fstp_base_offset(VarType,REG_EBP,(int)pRelativeVar->offset, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_fstp_base_offset(VarType,REG_EBP,(int)pRelativeVar->offset, Schedule::None, true )
+			);
 		}
 	}
@@ -130,9 +134,13 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add ecx,qword ptr[ebp+offset]
-			compiler.codeGenerator.op_add_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_add_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 		else{
 			//mov ecx,qword ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 
@@ -239,5 +247,4 @@
 			// 64bitへ
 			// st(0) -> edx:eax
-			breakpoint;
 
 			//push
@@ -338,9 +345,13 @@
 		if(pRelative->bOffsetOffset){
 			//mov ptr[ebp+ecx+offset],eax/ax/al
-			compiler.codeGenerator.op_mov_MR_ex(varSize,REG_EAX,REG_EBP,REG_ECX,(int)pRelative->offset,USE_OFFSET, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_MR_ex(varSize,REG_EAX,REG_EBP,REG_ECX,(int)pRelative->offset,USE_OFFSET, Schedule::None, true )
+			);
 		}
 		else{
 			//mov ptr[ebp+offset],eax/ax/al
-			compiler.codeGenerator.op_mov_MR(varSize,REG_EAX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_MR(varSize,REG_EAX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 	}
@@ -348,9 +359,13 @@
 		if(pRelative->bOffsetOffset){
 			//add ecx,ptr[ebp+offset]
-			compiler.codeGenerator.op_add_RM(PTR_SIZE,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_add_RM(PTR_SIZE,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 		else{
 			//mov ecx,ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM(PTR_SIZE,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM(PTR_SIZE,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 
Index: /trunk/abdev/BasicCompiler32/Compile_Statement.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 253)
@@ -240,4 +240,5 @@
 
 	//レキシカルスコープをレベルアップ
+	extern int obp;
 	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF );
 
@@ -308,9 +309,11 @@
 		{
 			//jmp ...(schedule)
-			compiler.codeGenerator.op_jmp_goto_schedule( GotoLabelSchedule( (const std::string)(Parameter + 1), obp, cp ) );
+			extern int obp;
+			compiler.codeGenerator.op_jmp_goto_schedule( (const std::string)(Parameter + 1), 0, cp );
 		}
 		else
 		{
 			//jmp ...
+			extern int obp;
 			compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true );
 		}
@@ -323,9 +326,11 @@
 		{
 			//jmp ...(schedule)
-			compiler.codeGenerator.op_jmp_goto_schedule( GotoLabelSchedule( LineNum, obp, cp ) );
+			extern int obp;
+			compiler.codeGenerator.op_jmp_goto_schedule( "", LineNum, cp );
 		}
 		else
 		{
 			//jmp ...
+			extern int obp;
 			compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true );
 		}
@@ -436,4 +441,5 @@
 
 	//レキシカルスコープをレベルアップ
+	extern int obp;
 	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_WHILE );
 
@@ -552,4 +558,5 @@
 
 	//レキシカルスコープをレベルアップ
+	extern int obp;
 	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_FOR );
 
@@ -588,4 +595,5 @@
 
 	//レキシカルスコープをレベルアップ
+	extern int obp;
 	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_DO );
 
@@ -1030,4 +1038,5 @@
 
 	//レキシカルスコープをレベルアップ
+	extern int obp;
 	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_SELECT );
 
@@ -1079,4 +1088,5 @@
 void OpcodeGosub(char *Parameter){
 	extern HANDLE hHeap;
+	extern int obp;
 	int i,LineNum;
 
@@ -1087,5 +1097,5 @@
 		{
 			//jmp ...(schedule)
-			compiler.codeGenerator.op_jmp_goto_schedule( GotoLabelSchedule( (const std::string)(Parameter + 1), obp, cp ) );
+			compiler.codeGenerator.op_jmp_goto_schedule( (const std::string)(Parameter + 1), 0, cp );
 		}
 		else
@@ -1102,5 +1112,5 @@
 		{
 			//jmp ...(schedule)
-			compiler.codeGenerator.op_jmp_goto_schedule( GotoLabelSchedule( LineNum, obp, cp ) );
+			compiler.codeGenerator.op_jmp_goto_schedule( "", LineNum, cp );
 		}
 		else
Index: /trunk/abdev/BasicCompiler32/Compile_Var.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Var.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/Compile_Var.cpp	(revision 253)
@@ -963,5 +963,7 @@
 
 		//mov dword ptr[ebp+offset+sizeof(long)],eax
-		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset+sizeof(long), MOD_BASE_DISP32, Schedule::LocalVar );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset+sizeof(long), MOD_BASE_DISP32, Schedule::None, true )
+		);
 
 		//mov eax,LOLONG(dbl)
@@ -969,5 +971,7 @@
 
 		//mov dword ptr[ebp+offset],eax
-		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::LocalVar );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::None, true )
+		);
 	}
 	else if( type.IsSingle() ){
@@ -979,5 +983,7 @@
 
 		//mov dword ptr[ebp+offset],eax
-		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::LocalVar );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::None, true )
+		);
 	}
 	else if( type.Is64() ){
@@ -986,5 +992,7 @@
 
 		//mov dword ptr[ebp+offset+sizeof(long)],eax
-		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset+sizeof(long), MOD_BASE_DISP32, Schedule::LocalVar );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset+sizeof(long), MOD_BASE_DISP32, Schedule::None, true )
+		);
 
 		//mov eax,LOLONG(i64data)
@@ -992,5 +1000,7 @@
 
 		//mov dword ptr[ebp+offset],eax
-		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::LocalVar );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::None, true )
+		);
 	}
 	else if( type.IsDWord() || type.IsLong() || type.IsPointer() ){
@@ -1012,13 +1022,19 @@
 
 		//mov dword ptr[ebp+offset],eax
-		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::LocalVar );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::None, true )
+		);
 	}
 	else if( type.IsWord() || type.IsInteger() ){
 		//mov word ptr[ebp+offset],InitValue
-		compiler.codeGenerator.op_mov_MV( sizeof(short), REG_EBP, offset, Schedule::LocalVar, (long)i64data );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_MV( sizeof(short), REG_EBP, offset, Schedule::None, true, (long)i64data )
+		);
 	}
 	else if( type.IsSByte() || type.IsByte() || type.IsBoolean() ){
 		//mov byte ptr[ebp+offset],InitValue
-		compiler.codeGenerator.op_mov_MV( sizeof(char), REG_EBP, offset, Schedule::LocalVar, (long)i64data );
+		compiler.codeGenerator.localVarPertialSchedules.push_back(
+			compiler.codeGenerator.op_mov_MV( sizeof(char), REG_EBP, offset, Schedule::None, true, (long)i64data )
+		);
 	}
 
@@ -1130,5 +1146,7 @@
 
 			//add eax,offset
-			compiler.codeGenerator.op_add_RV( REG_EAX, -pVar->GetOffsetAddress(), Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_add_RV( REG_EAX, -pVar->GetOffsetAddress(), Schedule::None, true )
+			);
 
 			//push eax
@@ -1193,5 +1211,7 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add ecx,offset
-			compiler.codeGenerator.op_add_RV( REG_ECX, pRelativeVar->offset, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_add_RV( REG_ECX, pRelativeVar->offset, Schedule::None, true )
+			);
 
 			//lea eax,dword ptr[ebp+ecx]
@@ -1205,5 +1225,7 @@
 		else{
 			//lea eax,dword ptr[ecx+offset]
-			compiler.codeGenerator.op_lea_RM( REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_lea_RM( REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 	}
@@ -1214,9 +1236,13 @@
 
 			//add eax,dword ptr[ebp+offset]
-			compiler.codeGenerator.op_add_RM( sizeof(long), REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_add_RM( sizeof(long), REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 		else{
 			//mov eax,dword ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::None, true )
+			);
 		}
 	}
Index: /trunk/abdev/BasicCompiler32/MakePeHdr.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 253)
@@ -382,4 +382,6 @@
 	pobj_Reloc=new CReloc();
 
+	extern char *OpBuffer;
+	extern int obp;
 	obp_AllocSize=8192*2;
 	OpBuffer=(char *)malloc(obp_AllocSize);
@@ -440,5 +442,5 @@
 
 		//未完成
-		//OpBuffer[obp++]=(char)0xCC;
+		//breakpoint;
 
 
@@ -471,12 +473,12 @@
 
 		//Goto未知ラベルスケジュールが存在したらエラーにする
-		BOOST_FOREACH( const GotoLabelSchedule &gotoLabelSchedule, compiler.codeGenerator.gotoLabelSchedules )
+		BOOST_FOREACH( const GotoLabelSchedule *pGotoLabelSchedule, compiler.codeGenerator.gotoLabelSchedules )
 		{
-			if(gotoLabelSchedule.GetName().size()>0){
-				SetError(6,gotoLabelSchedule.GetName(),gotoLabelSchedule.GetSourceCodePos());
+			if(pGotoLabelSchedule->GetName().size()>0){
+				SetError(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos());
 			}
 			else{
-				sprintf(temporary,"%d",gotoLabelSchedule.GetLineNum());
-				SetError(6,temporary,gotoLabelSchedule.GetSourceCodePos());
+				sprintf(temporary,"%d",pGotoLabelSchedule->GetLineNum());
+				SetError(6,temporary,pGotoLabelSchedule->GetSourceCodePos());
 			}
 		}
Index: /trunk/abdev/BasicCompiler32/NumOpe.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/NumOpe.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/NumOpe.cpp	(revision 253)
@@ -631,6 +631,6 @@
 
 	//リテラル演算の場合を考慮した演算前のバッファ位置
-	int BeforeObp;
-	BeforeObp=obp;
+	extern int obp;
+	int BeforeObp = obp;
 
 	//リテラル演算の場合を考慮した演算前のプロシージャスケジュール位置
Index: /trunk/abdev/BasicCompiler32/Opcode.h
===================================================================
--- /trunk/abdev/BasicCompiler32/Opcode.h	(revision 252)
+++ /trunk/abdev/BasicCompiler32/Opcode.h	(revision 253)
@@ -16,8 +16,6 @@
 
 extern int cp;
-extern int obp;
-extern char *OpBuffer;
-
-#define breakpoint OpBuffer[obp++]=(char)0xCC;
+
+#define breakpoint compiler.codeGenerator.PutOld( (char)0xCC );
 
 
@@ -215,5 +213,4 @@
 
 //Compile_CallProc.cpp
-void AddLocalVarAddrSchedule();
 #define PROCFLAG_NEW	1
 bool Opcode_CallProcPtr( const char *variable, const char *lpszParms,ProcPointer *pProcPointer);
@@ -252,61 +249,4 @@
 
 
-////////////////////////////////
-// IA-32機械語生成に利用する関数郡
-////////////////////////////////
-
 //op32_main.cpp
 BOOL IsSafeReg(int reg);
-/*
-void op_mov_RV			(int reg,int offset);
-void op_mov_RV			(int op_size,int reg,int offset);
-void op_mov_RR			(int reg1,int reg2);
-void op_mov_RM			(int op_size,int reg,int base_reg,int offset,char mod);
-void op_mov_RM_ex		(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
-void op_mov_MR			(int op_size,int reg,int base_reg,int offset,char mod);
-void op_mov_MR_ex		(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
-void op_movsx_R32R16	(int reg32,int reg16);
-void op_movsx_R32R8		(int reg32,int reg8);
-void op_movsx_R16R8		(int reg16,int reg8);
-void op_inc				(int reg);
-void op_dec				(int reg);
-void op_add_RV8			(int reg,char cValue);
-void op_add_RM			(int op_size,int reg,int base_reg,int offset,char mod);
-void op_adc_RV8			(int reg,char cValue);
-void op_sub_RV8			(int reg,char cValue);
-void op_sbb_RV8			(int reg,char cValue);
-void op_sbb_RR			( int reg1, int reg2 );
-void op_imul_RR			(int reg1,int reg2);
-void op_imul_RV			(int reg,int i32data);
-void op_and_RV			(int reg,int value);
-void op_or_RR			( int op_size, int reg1, int reg2 );
-void op_neg				( int reg );
-void op_cdq				();
-
-void op_rep_movs		(int op_size);
-
-void op_push(int reg);
-void op_push_V(long data);
-void op_pop(int reg = REG_NON);
-void op_add_esp(int num);
-void op_sub_esp(int num);
-void op_cmp_RR( int reg1, int reg2 );
-void op_cmp_value(int op_size,int reg,char byte_data);
-void op_setne( int reg );
-void op_test(int reg1,int reg2);
-void op_fld_ptr_esp(int type);
-void op_fld_basereg			(int type,int base_reg);
-void op_fld_base_offset		(int type,int base_reg,int offset);
-void op_fld_base_offset_ex	(int type,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
-void op_fstp_basereg		(int type,int base_reg);
-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_fstp_push			( Type &type );
-void op_fistp_ptr_esp		( int typeSize );
-void op_zero_reg(int reg);
-void fpu_cast();
-void fpu_cast_end();
-
-void op_call(const UserProc *pUserProc);
-void op_ret();
-*/
Index: /trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp	(revision 253)
@@ -124,7 +124,8 @@
 ///////////////////
 
-void CodeGenerator::op_mov_MV( int op_size, int base_reg, long offset, Schedule::Type offsetScheduleType, long value, Schedule::Type valueScheduleType )
+const PertialSchedule *CodeGenerator::op_mov_MV( int op_size, int base_reg, long offset, Schedule::Type offsetScheduleType, bool isPertialSchedule, long value, Schedule::Type valueScheduleType )
 {
 	//mov ptr[base_reg+offset],value
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	if( op_size == sizeof(char) )
@@ -132,5 +133,12 @@
 		pNativeCode->Put( (char)0xC6 );
 		pNativeCode->Put( (char)(0x80|REGISTER_OPERAND(base_reg)) );
+
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
 		pNativeCode->Put( offset, offsetScheduleType );
+
 		pNativeCode->Put( (char)value );
 	}
@@ -140,5 +148,12 @@
 		pNativeCode->Put( (char)0xC7 );
 		pNativeCode->Put( (char)(0x80|REGISTER_OPERAND(base_reg)) );
+
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
 		pNativeCode->Put( offset, offsetScheduleType );
+
 		pNativeCode->Put( (short)value );
 	}
@@ -147,7 +162,16 @@
 		pNativeCode->Put( (char)0xC7 );
 		pNativeCode->Put( (char)(0x80|REGISTER_OPERAND(base_reg)) );
+
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
 		pNativeCode->Put( offset, offsetScheduleType );
+
 		pNativeCode->Put( value, valueScheduleType );
 	}
+
+	return pPertialSchedule;
 }
 void CodeGenerator::op_mov_RV(int reg,long offset, Schedule::Type scheduleType ){
@@ -169,5 +193,5 @@
 	pNativeCode->Put( (char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2)) );
 }
-void CodeGenerator::op_mov_RM(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType ){
+const PertialSchedule *CodeGenerator::op_mov_RM(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//mov reg32,dword ptr[base_reg+offset]
 	//mov reg16,word ptr[base_reg+offset]
@@ -183,10 +207,11 @@
 	else opcode=(char)0x8B;
 
-	__op_format(op_prefix,opcode,0,reg,base_reg,offset,mod, scheduleType );
-}
-void CodeGenerator::op_mov_RM_ex(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType ){
+	return __op_format(op_prefix,opcode,0,reg,base_reg,offset,mod, scheduleType, isPertialSchedule );
+}
+const PertialSchedule *CodeGenerator::op_mov_RM_ex(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//mov reg32,dword ptr[base_reg1+base_reg2+offset]
 	//mov reg16,word ptr[base_reg1+base_reg2+offset]
 	//mov reg8,byte ptr[base_reg1+base_reg2+offset]
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	if(base_reg1==REG_ESP){
@@ -215,4 +240,9 @@
 
 		//オフセット値
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
 		pNativeCode->Put( offset, scheduleType );
 	}
@@ -228,6 +258,7 @@
 		pNativeCode->Put( (char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2)) );
 	}
-}
-void CodeGenerator::op_mov_MR(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType ){
+	return pPertialSchedule;
+}
+const PertialSchedule *CodeGenerator::op_mov_MR(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//mov dword ptr[base_reg+offset],reg32
 	//mov word ptr[base_reg+offset],reg16
@@ -243,10 +274,11 @@
 	else opcode=(char)0x89;
 
-	__op_format(op_prefix,opcode,0,reg,base_reg,offset,mod, scheduleType );
-}
-void CodeGenerator::op_mov_MR_ex(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType ){
+	return __op_format(op_prefix,opcode,0,reg,base_reg,offset,mod, scheduleType, isPertialSchedule );
+}
+const PertialSchedule *CodeGenerator::op_mov_MR_ex(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//mov dword ptr[base_reg1+base_reg2+offset],reg32
 	//mov word ptr[base_reg1+base_reg2+offset],reg16
 	//mov byte ptr[base_reg1+base_reg2+offset],reg8
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	if(base_reg1==REG_ESP){
@@ -275,4 +307,9 @@
 
 		//オフセット値
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
 		pNativeCode->Put( offset, scheduleType );
 	}
@@ -288,4 +325,5 @@
 		pNativeCode->Put( (char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2)) );
 	}
+	return pPertialSchedule;
 }
 
@@ -355,5 +393,5 @@
 //////////////////////////////////
 
-void CodeGenerator::op_lea_RM( int reg, int base_reg, long offset, char mod, Schedule::Type scheduleType )
+const PertialSchedule *CodeGenerator::op_lea_RM( int reg, int base_reg, long offset, char mod, Schedule::Type scheduleType, bool isPertialSchedule )
 {
 	//16ビット演算の命令プリフィックス
@@ -363,5 +401,5 @@
 	char opcode=(char)0x8D;
 
-	__op_format( op_prefix, opcode, 0, reg, base_reg, offset, mod, scheduleType );
+	return __op_format( op_prefix, opcode, 0, reg, base_reg, offset, mod, scheduleType, isPertialSchedule );
 }
 
@@ -408,7 +446,8 @@
 	pNativeCode->Put( cValue );
 }
-void CodeGenerator::op_add_RV( int reg, long offset, Schedule::Type scheduleType )
+const PertialSchedule *CodeGenerator::op_add_RV( int reg, long offset, Schedule::Type scheduleType, bool isPertialSchedule )
 {
 	// add reg,offset
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	if( reg == REG_EAX )
@@ -416,5 +455,4 @@
 		// eaxのみ特殊
 		pNativeCode->Put( (char)0x05 );
-		pNativeCode->Put( offset, scheduleType );
 	}
 	else
@@ -422,6 +460,15 @@
 		pNativeCode->Put( (char)0x81 );
 		pNativeCode->Put( (char)(0xC0|REGISTER_OPERAND(reg)) );
-		pNativeCode->Put( offset, scheduleType );
-	}
+	}
+
+	// オフセット値
+	if( isPertialSchedule )
+	{
+		pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+		pPertialSchedule = pertialSchedules.back();
+	}
+	pNativeCode->Put( offset, scheduleType );
+
+	return pPertialSchedule;
 }
 void CodeGenerator::op_add_RR( int reg1, int reg2 )
@@ -435,5 +482,5 @@
 	__op_format(op_prefix,opcode,0,reg1,reg2,0,MOD_REG);
 }
-void CodeGenerator::op_add_RM(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType ){
+const PertialSchedule *CodeGenerator::op_add_RM(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//add reg32,dword ptr[base_reg+offset]
 	//add reg16,word ptr[base_reg+offset]
@@ -449,5 +496,5 @@
 	else opcode=(char)0x03;
 
-	__op_format(op_prefix,opcode,0,reg,base_reg,offset,mod, scheduleType );
+	return __op_format(op_prefix,opcode,0,reg,base_reg,offset,mod, scheduleType, isPertialSchedule );
 }
 void CodeGenerator::op_adc_RV8(int reg,char cValue){
@@ -787,11 +834,18 @@
 	}
 }
-void CodeGenerator::op_sub_esp(long num){
+const PertialSchedule *CodeGenerator::op_sub_esp( long num, bool isPertialSchedule ){
 	//スタックポインタの減算（push方向）
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	//sub esp,num
-	if(0xFFFFFF80&num){
+	if( (0xFFFFFF80&num) != 0 || isPertialSchedule ){
 		pNativeCode->Put( (char)0x81 );
 		pNativeCode->Put( (char)0xEC );
+
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
 		pNativeCode->Put( num );
 	}
@@ -802,4 +856,6 @@
 		pNativeCode->Put( (char)num );
 	}
+
+	return pPertialSchedule;
 }
 
@@ -922,6 +978,7 @@
 	}
 }
-void CodeGenerator::op_fld_base_offset(int type,int base_reg,long offset, Schedule::Type scheduleType ){
+const PertialSchedule *CodeGenerator::op_fld_base_offset(int type,int base_reg,long offset, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//fld ptr[reg+offset]
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	//オペコード
@@ -940,8 +997,16 @@
 
 	//オフセット値
+	if( isPertialSchedule )
+	{
+		pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+		pPertialSchedule = pertialSchedules.back();
+	}
 	pNativeCode->Put( offset, scheduleType );
-}
-void CodeGenerator::op_fld_base_offset_ex(int type,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType ){
+
+	return pPertialSchedule;
+}
+const PertialSchedule *CodeGenerator::op_fld_base_offset_ex(int type,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//fld ptr[base_reg1+base_reg2+offset]
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	if(base_reg1==REG_ESP){
@@ -969,4 +1034,9 @@
 
 		//オフセット値
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
 		pNativeCode->Put( offset, scheduleType );
 	}
@@ -982,4 +1052,6 @@
 		pNativeCode->Put( (char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2)) );
 	}
+
+	return pPertialSchedule;
 }
 void CodeGenerator::op_fstp_basereg(int type,int base_reg){
@@ -1003,6 +1075,7 @@
 	}
 }
-void CodeGenerator::op_fstp_base_offset(int type,int base_reg,long offset, Schedule::Type scheduleType ){
+const PertialSchedule *CodeGenerator::op_fstp_base_offset(int type,int base_reg,long offset, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//fstp ptr[reg+offset]
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	//オペコード
@@ -1021,8 +1094,16 @@
 
 	//オフセット値
+	if( isPertialSchedule )
+	{
+		pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+		pPertialSchedule = pertialSchedules.back();
+	}
 	pNativeCode->Put( offset, scheduleType );
-}
-void CodeGenerator::op_fstp_base_offset_ex(int type,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType ){
+
+	return pPertialSchedule;
+}
+const PertialSchedule *CodeGenerator::op_fstp_base_offset_ex(int type,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//fstp ptr[base_reg1+base_reg2+offset]
+	const PertialSchedule *pPertialSchedule = NULL;
 
 	if(base_reg1==REG_ESP){
@@ -1050,4 +1131,9 @@
 
 		//オフセット値
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
 		pNativeCode->Put( offset, scheduleType );
 	}
@@ -1063,4 +1149,6 @@
 		pNativeCode->Put( (char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2)) );
 	}
+
+	return pPertialSchedule;
 }
 void CodeGenerator::op_fistp_ptr_esp( int typeSize ){
Index: /trunk/abdev/BasicCompiler_Common/Compile.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/Compile.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler_Common/Compile.cpp	(revision 253)
@@ -88,4 +88,5 @@
 	extern LINEINFO *pLineInfo;
 	if(MaxLineInfoNum){
+		extern int obp;
 		if(pLineInfo[MaxLineInfoNum-1].TopObp==obp){
 			pLineInfo[MaxLineInfoNum-1].TopCp=cp;
@@ -95,4 +96,5 @@
 	pLineInfo=(LINEINFO *)HeapReAlloc(hHeap,0,pLineInfo,(MaxLineInfoNum+1)*sizeof(LINEINFO));
 	pLineInfo[MaxLineInfoNum].TopCp=cp;
+	extern int obp;
 	pLineInfo[MaxLineInfoNum].TopObp=obp;
 
@@ -123,14 +125,15 @@
 		pLabelNames[MaxLabelNum].pName=(char *)HeapAlloc(hHeap,0,lstrlen(Command+1)+1);
 		lstrcpy(pLabelNames[MaxLabelNum].pName,Command+1);
+		extern int obp;
 		pLabelNames[MaxLabelNum].address=obp;
 		MaxLabelNum++;
 
 		//書き込みスケジュール
-		std::vector<GotoLabelSchedule>::iterator it = compiler.codeGenerator.gotoLabelSchedules.begin();
+		GotoLabelSchedules::iterator it = compiler.codeGenerator.gotoLabelSchedules.begin();
 		while( it != compiler.codeGenerator.gotoLabelSchedules.end() )
 		{
-			if( it->GetName() == Command+1 )
+			if( (*it)->GetName() == Command+1 )
 			{
-				*((long *)( OpBuffer + it->GetNativeCodePos() ))=obp-(it->GetNativeCodePos()+sizeof(long));
+				compiler.codeGenerator.opfix_JmpPertialSchedule( (*it) );
 				
 				//詰める
@@ -335,7 +338,13 @@
 			extern BOOL bDebugCompile;
 			//int 3
-			if(bDebugCompile) OpBuffer[obp++]=(char)0xCC;
+			if(bDebugCompile)
+			{
+				breakpoint;
+			}
 #if defined(_DEBUG)
-			else OpBuffer[obp++]=(char)0xCC;
+			else
+			{
+				breakpoint;
+			}
 #endif
 			break;
@@ -532,15 +541,16 @@
 				pLabelNames[MaxLabelNum].pName=0;
 				pLabelNames[MaxLabelNum].line=i3;
+				extern int obp;
 				pLabelNames[MaxLabelNum].address=obp;
 				MaxLabelNum++;
 
 				//書き込みスケジュール
-				std::vector<GotoLabelSchedule>::iterator it = compiler.codeGenerator.gotoLabelSchedules.begin();
+				GotoLabelSchedules::iterator it = compiler.codeGenerator.gotoLabelSchedules.begin();
 				while( it != compiler.codeGenerator.gotoLabelSchedules.end() )
 				{
-					if( it->GetName().size() == 0 && it->GetLineNum() == i3 )
+					if( (*it)->GetName().size() == 0 && (*it)->GetLineNum() == i3 )
 					{
-						*((long *)( OpBuffer + it->GetNativeCodePos() ))=obp-(it->GetNativeCodePos()+sizeof(long));
-						
+						compiler.codeGenerator.opfix_JmpPertialSchedule( (*it) );
+
 						//詰める
 						it = compiler.codeGenerator.gotoLabelSchedules.erase( it );
Index: /trunk/abdev/BasicCompiler_Common/PESchedule.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/PESchedule.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler_Common/PESchedule.cpp	(revision 253)
@@ -154,4 +154,5 @@
 void CSchedule::add(){
 	pObpValues=(int *)HeapReAlloc(hHeap,0,pObpValues,(num+1)*sizeof(int));
+	extern int obp;
 	pObpValues[num]=obp;
 	num++;
@@ -227,4 +228,5 @@
 	if(!bCall){
 		//リロケーション情報を追加する
+		extern int obp;
 		pobj_Reloc->AddSchedule_CodeSection(obp);
 	}
Index: /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
===================================================================
--- /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 252)
+++ /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 253)
@@ -12,43 +12,4 @@
 void ReallocNativeCodeBuffer();
 
-//Goto未知ラベル
-class GotoLabelSchedule
-{
-	std::string name;
-	int line;
-	int nativeCodePos;
-	int sourceCodePos;
-public:
-	GotoLabelSchedule( const std::string &name, int nativeCodePos, int sourceCodePos )
-		: name( name )
-		, line( -1 )
-		, nativeCodePos( nativeCodePos )
-		, sourceCodePos( sourceCodePos )
-	{
-	}
-	GotoLabelSchedule( int line, int nativeCodePos, int sourceCodePos )
-		: line( line )
-		, nativeCodePos( nativeCodePos )
-		, sourceCodePos( sourceCodePos )
-	{
-	}
-	const std::string &GetName() const
-	{
-		return name;
-	}
-	int GetLineNum() const
-	{
-		return line;
-	}
-	int GetNativeCodePos() const
-	{
-		return nativeCodePos;
-	}
-	int GetSourceCodePos() const
-	{
-		return sourceCodePos;
-	}
-};
-
 // コード生成時の部分的なスケジューリング
 class PertialSchedule
@@ -85,4 +46,39 @@
 typedef std::vector<const PertialSchedule *> PertialSchedules;
 
+//Goto未知ラベル
+class GotoLabelSchedule : public PertialSchedule
+{
+	std::string name;
+	int line;
+	int sourceCodePos;
+public:
+	GotoLabelSchedule( const std::string &name, int nativeCodePos, int sourceCodePos )
+		: PertialSchedule( nativeCodePos, sizeof(long) )
+		, name( name )
+		, line( -1 )
+		, sourceCodePos( sourceCodePos )
+	{
+	}
+	GotoLabelSchedule( int line, int nativeCodePos, int sourceCodePos )
+		: PertialSchedule( nativeCodePos, sizeof(long) )
+		, line( line )
+		, sourceCodePos( sourceCodePos )
+	{
+	}
+	const std::string &GetName() const
+	{
+		return name;
+	}
+	int GetLineNum() const
+	{
+		return line;
+	}
+	int GetSourceCodePos() const
+	{
+		return sourceCodePos;
+	}
+};
+typedef std::vector<const GotoLabelSchedule *> GotoLabelSchedules;
+
 class LexicalScope
 {
@@ -186,4 +182,7 @@
 public:
 
+	// ローカル変数用スケジュールの管理
+	PertialSchedules localVarPertialSchedules;
+
 	// Exit Subスケジュールの管理
 	std::vector<long> exitSubCodePositions;
@@ -191,5 +190,5 @@
 
 	// Gotoスケジュールの管理
-	std::vector<GotoLabelSchedule> gotoLabelSchedules;
+	GotoLabelSchedules gotoLabelSchedules;
 
 	// レキシカルスコープの管理
@@ -256,4 +255,5 @@
 
 	void opfix( const PertialSchedule *pPertialSchedule, long newValue );
+	void opfix_offset( const PertialSchedule *pPertialSchedule, long offset );
 	void opfix_JmpPertialSchedule( const PertialSchedule *pPertialSchedule );
 
@@ -279,5 +279,5 @@
 	void op_jmp_continue();
 	void op_jmp_exitsub();
-	void op_jmp_goto_schedule( const GotoLabelSchedule &gotoLabelSchedule );
+	void op_jmp_goto_schedule( const std::string &name, int lineNum, int sourceCodePos );
 
 
@@ -370,21 +370,21 @@
 	const PertialSchedule *__op_format(char op_prefix,char opcode1,char opcode2,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
 public:
-	void op_mov_MV			( int op_size, int base_reg, long offset, Schedule::Type offsetScheduleType, long value, Schedule::Type valueScheduleType = Schedule::None );
-	void op_mov_RV			(int reg,long offset, Schedule::Type scheduleType = Schedule::None );
-	void op_mov_RR			(int reg1,int reg2);
-	void op_mov_RM			(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
-	void op_mov_RM_ex		(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None );
-	void op_mov_MR			(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
-	void op_mov_MR_ex		(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None );
-	void op_movsx_R32R16	(int reg32,int reg16 = REG_NON);
-	void op_movsx_R32R8		(int reg32,int reg8 = REG_NON);
-	void op_movsx_R16R8		(int reg16,int reg8 = REG_NON);
-	void op_lea_RM			( int reg, int base_reg, long offset, char mod, Schedule::Type scheduleType = Schedule::None );
-	void op_inc				(int reg);
-	void op_dec				(int reg);
-	void op_add_RV8			(int reg,char cValue);
-	void op_add_RV			( int reg, long offset, Schedule::Type scheduleType = Schedule::None );
-	void op_add_RR			( int reg1, int reg2 );
-	void op_add_RM			(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
+	const PertialSchedule *op_mov_MV		( int op_size, int base_reg, long offset, Schedule::Type offsetScheduleType, bool isPertialSchedule, long value, Schedule::Type valueScheduleType = Schedule::None );
+	void op_mov_RV							( int reg,long offset, Schedule::Type scheduleType = Schedule::None );
+	void op_mov_RR							( int reg1,int reg2);
+	const PertialSchedule *op_mov_RM		( int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	const PertialSchedule *op_mov_RM_ex		( int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	const PertialSchedule *op_mov_MR		( int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	const PertialSchedule *op_mov_MR_ex		( int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	void op_movsx_R32R16					( int reg32,int reg16 = REG_NON);
+	void op_movsx_R32R8						( int reg32,int reg8 = REG_NON);
+	void op_movsx_R16R8						( int reg16,int reg8 = REG_NON);
+	const PertialSchedule *op_lea_RM		( int reg, int base_reg, long offset, char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	void op_inc								(int reg);
+	void op_dec								(int reg);
+	void op_add_RV8							(int reg,char cValue);
+	const PertialSchedule *op_add_RV		( int reg, long offset, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	void op_add_RR							( int reg1, int reg2 );
+	const PertialSchedule *op_add_RM		(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
 	void op_adc_RV8			(int reg,char cValue);
 	void op_adc_RR			( int reg1, int reg2 );
@@ -413,5 +413,5 @@
 	void op_pop(int reg = REG_NON);
 	void op_add_esp(long num);
-	void op_sub_esp(long num);
+	const PertialSchedule *op_sub_esp( long num, bool isPertialSchedule = false );
 	void op_cmp_RR( int reg1, int reg2 );
 	void op_cmp_value(int op_size,int reg,char byte_data);
@@ -421,9 +421,9 @@
 	void op_fld_ptr_esp(int type);
 	void op_fld_basereg			(int type,int base_reg);
-	void op_fld_base_offset		(int type,int base_reg,long offset, Schedule::Type scheduleType = Schedule::None );
-	void op_fld_base_offset_ex	(int type,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None);
+	const PertialSchedule *op_fld_base_offset		(int type,int base_reg,long offset, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	const PertialSchedule *op_fld_base_offset_ex	(int type,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
 	void op_fstp_basereg		(int type,int base_reg);
-	void op_fstp_base_offset	(int type,int base_reg,long offset, Schedule::Type scheduleType = Schedule::None);
-	void op_fstp_base_offset_ex	(int type,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None);
+	const PertialSchedule *op_fstp_base_offset		(int type,int base_reg,long offset, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	const PertialSchedule *op_fstp_base_offset_ex	(int type,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
 	void op_fistp_ptr_esp		( int typeSize );
 	void op_fstp_push			( Type &type );
@@ -452,4 +452,8 @@
 		pNativeCode->Put( nativeCode );
 	}
+	void PutOld( char c )
+	{
+		pNativeCode->Put( c );
+	}
 	void PutOld( char c1, char c2 )
 	{
Index: /trunk/abdev/BasicCompiler_Common/include/NativeCode.h
===================================================================
--- /trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 252)
+++ /trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 253)
@@ -7,5 +7,4 @@
 #include <BoostSerializationSupport.h>
 
-void AddLocalVarAddrSchedule();
 void ObpPlus( int step = 1 );
 
@@ -19,5 +18,4 @@
 		None = 10000,
 		GlobalVar,		// グローバル変数スケジュール
-		LocalVar,		// ローカル変数スケジュール
 		DataTable,		// データテーブル スケジュール
 		Relocation,		// リロケーション情報スケジュール
@@ -172,4 +170,14 @@
 	}
 
+	long GetLong( int codePos ) const
+	{
+		return *(long *)(this->codeBuffer+codePos);
+	}
+	long _GetLong_ObpOld( int _obpOld ) const
+	{
+		extern char *OpBuffer;
+		return *(long *)(OpBuffer+_obpOld);
+	}
+
 	void Overwrite( int codePos, char c )
 	{
@@ -236,7 +244,4 @@
 			pobj_GlobalVarSchedule->add();
 			break;
-		case Schedule::LocalVar:
-			AddLocalVarAddrSchedule();
-			break;
 		case Schedule::DataTable:
 			extern CSchedule *pobj_DataTableSchedule;
Index: /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 253)
@@ -65,4 +65,50 @@
 
 			isSuccessful = true;
+			break;
+		}
+		else
+		{
+			it++;
+		}
+	}
+
+	if( isSuccessful == false )
+	{
+		SetError();
+	}
+}
+
+void CodeGenerator::opfix_offset( const PertialSchedule *pPertialSchedule, long offset )
+{
+	bool isSuccessful = false;
+
+	PertialSchedules::iterator it = pertialSchedules.begin();
+	while( it != pertialSchedules.end() )
+	{
+		if( (*it) == pPertialSchedule )
+		{
+			if( pPertialSchedule->GetTypeSize() == sizeof(long) )
+			{
+				pNativeCode->Overwrite(
+					pPertialSchedule->GetCodePos(),
+					pNativeCode->GetLong(pPertialSchedule->GetCodePos()) + offset
+				);
+
+				// TODO: 未完成（用が無くなったら消す）
+				pNativeCode->OverwriteOld(
+					pPertialSchedule->GetObpOld(),
+					pNativeCode->_GetLong_ObpOld(pPertialSchedule->GetObpOld()) + offset
+				);
+			}
+			else
+			{
+				SetError();
+			}
+
+			it = pertialSchedules.erase( it );
+			delete pPertialSchedule;
+
+			isSuccessful = true;
+			break;
 		}
 		else
@@ -280,10 +326,21 @@
 	pNativeCode->Put( (long)0 );
 }
-void CodeGenerator::op_jmp_goto_schedule( const GotoLabelSchedule &gotoLabelSchedule )
+void CodeGenerator::op_jmp_goto_schedule( const std::string &name, int lineNum, int sourceCodePos )
 {
 	// オペコード
 	pNativeCode->Put( (char)0xE9 );
 
-	gotoLabelSchedules.push_back( gotoLabelSchedule );
+	const GotoLabelSchedule *pGotoLabelSchedule = NULL;
+	if( name.size() == 0 )
+	{
+		pGotoLabelSchedule = new GotoLabelSchedule( name, pNativeCode->GetSize(), sourceCodePos );
+	}
+	else
+	{
+		pGotoLabelSchedule = new GotoLabelSchedule( name, pNativeCode->GetSize(), sourceCodePos );
+	}
+	gotoLabelSchedules.push_back( pGotoLabelSchedule );
+
+	pertialSchedules.push_back( pGotoLabelSchedule );
 
 	pNativeCode->Put( (long)0 );
Index: /trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp	(revision 252)
+++ /trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp	(revision 253)
@@ -136,5 +136,7 @@
 
 			//mov ecx,dword ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_EBP,-pVar->GetOffsetAddress(),MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
+				compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_EBP,-pVar->GetOffsetAddress(),MOD_BASE_DISP32, Schedule::None, true )
+			);
 
 			//push ecx
