Index: trunk/abdev/BasicCompiler64/BasicCompiler.vcproj
===================================================================
--- trunk/abdev/BasicCompiler64/BasicCompiler.vcproj	(revision 241)
+++ trunk/abdev/BasicCompiler64/BasicCompiler.vcproj	(revision 242)
@@ -1074,80 +1074,4 @@
 			</Filter>
 			<Filter
-				Name="Language Classes"
-				>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Class.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\CodeGenerator.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Compiler.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Const.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\DataTable.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Exception.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\LexicalScopingImpl.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Method.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Namespace.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\NamespaceSupporter.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\NativeCode.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Procedure.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Program.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\SmoothieImpl.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Symbol.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Type.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\TypeDef.cpp"
-					>
-				</File>
-				<File
-					RelativePath="..\BasicCompiler_Common\src\Variable.cpp"
-					>
-				</File>
-			</Filter>
-			<Filter
 				Name="Common Classes"
 				>
@@ -1172,4 +1096,88 @@
 					</FileConfiguration>
 				</File>
+				<Filter
+					Name="Language Classes"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Class.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\CodeGenerator.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Compiler.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Const.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\DataTable.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Exception.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\LexicalScopingImpl.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Method.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Namespace.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\NamespaceSupporter.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\NativeCode.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Procedure.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Program.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\SmoothieImpl.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Symbol.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Type.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\TypeDef.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Variable.cpp"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="Core Classes"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\CommonCodeGenerator.cpp"
+						>
+					</File>
+				</Filter>
 			</Filter>
 		</Filter>
Index: trunk/abdev/BasicCompiler64/CodeGenerator.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/CodeGenerator.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/CodeGenerator.cpp	(revision 242)
@@ -136,22 +136,4 @@
 }
 
-void CodeGenerator::__jmp_op_format( char opcode, long offset, int op_size )
-{
-	pNativeCode->Put( opcode );
-	if( op_size == sizeof(char) )
-	{
-		pNativeCode->Put( (char)offset );
-	}
-	else if( op_size == sizeof(long) )
-	{
-		SetError();
-		pNativeCode->Put( offset );
-	}
-	else
-	{
-		SetError();
-	}
-}
-
 
 
@@ -1690,55 +1672,4 @@
 
 /////////////////////////////
-// 分岐
-/////////////////////////////
-
-void CodeGenerator::op_jle( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x7E, offset, op_size );
-}
-void CodeGenerator::op_jbe( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x76, offset, op_size );
-}
-void CodeGenerator::op_jge( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x7D, offset, op_size );
-}
-void CodeGenerator::op_jae( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x73, offset, op_size );
-}
-void CodeGenerator::op_jl( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x7C, offset, op_size );
-}
-void CodeGenerator::op_jb( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x72, offset, op_size );
-}
-void CodeGenerator::op_jg( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x7F, offset, op_size );
-}
-void CodeGenerator::op_ja( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x77, offset, op_size );
-}
-void CodeGenerator::op_jne( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x75, offset, op_size );
-}
-void CodeGenerator::op_je( long offset, int op_size )
-{
-	__jmp_op_format( (char)0x74, offset, op_size );
-}
-void CodeGenerator::op_jmp( long offset, int op_size )
-{
-	__jmp_op_format( (char)0xEB, offset, op_size );
-}
-
-
-
-/////////////////////////////
 // 関数呼び出し
 /////////////////////////////
Index: trunk/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 242)
@@ -24,13 +24,16 @@
 		if(pRelativeVar->bOffsetOffset){
 			//movlpd xmm_reg,qword ptr[rsp+r11+offset]
-			OpBuffer[obp++]=(char)0x66;
-			OpBuffer[obp++]=(char)0x42;
-			OpBuffer[obp++]=(char)0x0F;
-			OpBuffer[obp++]=(char)0x12;
-			OpBuffer[obp++]=(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3);
-			OpBuffer[obp++]=(char)0x1C;
-			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.PutOld(
+				(char)0x66,
+				(char)0x42,
+				(char)0x0F,
+				(char)0x12,
+				(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3),
+				(char)0x1C
+			);
+			compiler.codeGenerator.PutOld(
+				(long)pRelativeVar->offset,
+				Schedule::LocalVar
+			);
 		}
 		else{
@@ -74,13 +77,16 @@
 		if(pRelativeVar->bOffsetOffset){
 			//movss xmm_reg,dword ptr[rsp+r11+offset]
-			OpBuffer[obp++]=(char)0xF3;
-			OpBuffer[obp++]=(char)0x42;
-			OpBuffer[obp++]=(char)0x0F;
-			OpBuffer[obp++]=(char)0x10;
-			OpBuffer[obp++]=(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3);
-			OpBuffer[obp++]=(char)0x1C;
-			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.PutOld(
+				(char)0xF3,
+				(char)0x42,
+				(char)0x0F,
+				(char)0x10,
+				(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3),
+				(char)0x1C
+			);
+			compiler.codeGenerator.PutOld(
+				(long)pRelativeVar->offset,
+				Schedule::LocalVar
+			);
 		}
 		else{
Index: trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp	(revision 242)
@@ -338,6 +338,5 @@
 
 	//Continueアドレスを初期化
-	extern DWORD dwContinueAddress;
-	dwContinueAddress=-1;
+	compiler.codeGenerator.ClearContinueArea();
 
 	//ローカル変数に関する情報
@@ -585,8 +584,5 @@
 
 					//mov rax,offset
-					compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,offset);
-					obp-=sizeof(long);
-					pobj_DataTableSchedule->add();
-					obp+=sizeof(long);
+					compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,offset, Schedule::DataTable );
 
 					//Thisポインタをrcxにコピー
Index: trunk/abdev/BasicCompiler64/Compile_Set_Var.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_Set_Var.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/Compile_Set_Var.cpp	(revision 242)
@@ -118,13 +118,16 @@
 		if(pRelative->bOffsetOffset){
 			//movsd qword ptr[rsp+r11+offset],xmm0
-			OpBuffer[obp++]=(char)0xF2;
-			OpBuffer[obp++]=(char)0x42;
-			OpBuffer[obp++]=(char)0x0F;
-			OpBuffer[obp++]=(char)0x11;
-			OpBuffer[obp++]=(char)0x84;
-			OpBuffer[obp++]=(char)0x1C;
-			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.PutOld(
+				(char)0xF2,
+				(char)0x42,
+				(char)0x0F,
+				(char)0x11,
+				(char)0x84,
+				(char)0x1C
+			);
+			compiler.codeGenerator.PutOld(
+				(long)pRelative->offset,
+				Schedule::LocalVar
+			);
 		}
 		else{
@@ -175,13 +178,16 @@
 		if(pRelative->bOffsetOffset){
 			//movss dword ptr[rsp+r11+offset],xmm0
-			OpBuffer[obp++]=(char)0xF3;
-			OpBuffer[obp++]=(char)0x42;
-			OpBuffer[obp++]=(char)0x0F;
-			OpBuffer[obp++]=(char)0x11;
-			OpBuffer[obp++]=(char)0x84;
-			OpBuffer[obp++]=(char)0x1C;
-			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.PutOld(
+				(char)0xF3,
+				(char)0x42,
+				(char)0x0F,
+				(char)0x11,
+				(char)0x84,
+				(char)0x1C
+			);
+			compiler.codeGenerator.PutOld(
+				(long)pRelative->offset,
+				Schedule::LocalVar
+			);
 		}
 		else{
Index: trunk/abdev/BasicCompiler64/Compile_Statement.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_Statement.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/Compile_Statement.cpp	(revision 242)
@@ -140,12 +140,15 @@
 
 		//comisd xmm0,qword ptr[data table offset]
-		OpBuffer[obp++]=(char)0x66;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x2F;
-		OpBuffer[obp++]=(char)0x04;
-		OpBuffer[obp++]=(char)0x25;
-		*((long *)(OpBuffer+obp))=offset;
-		pobj_DataTableSchedule->add();
-		obp+=sizeof(long);
+		compiler.codeGenerator.PutOld(
+			(char)0x66,
+			(char)0x0F,
+			(char)0x2F,
+			(char)0x04,
+			(char)0x25
+		);
+		compiler.codeGenerator.PutOld(
+			(long)offset,
+			Schedule::DataTable
+		);
 	}
 	else if(resultType.IsSingle()){
@@ -154,11 +157,14 @@
 
 		//comiss xmm0,dword ptr[data table offset]
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x2F;
-		OpBuffer[obp++]=(char)0x04;
-		OpBuffer[obp++]=(char)0x25;
-		*((long *)(OpBuffer+obp))=offset;
-		pobj_DataTableSchedule->add();
-		obp+=sizeof(long);
+		compiler.codeGenerator.PutOld(
+			(char)0x0F,
+			(char)0x2F,
+			(char)0x04,
+			(char)0x25
+		);
+		compiler.codeGenerator.PutOld(
+			(long)offset,
+			Schedule::DataTable
+		);
 	}
 	else{
@@ -171,7 +177,5 @@
 
 void OpcodeIf(char *Parameter){
-	int i,i2,i3;
-
-	for(i=0;;i++){
+	for(int i=0;;i++){
 		if(Parameter[i]=='\0'){
 			SetError(21,NULL,cp);
@@ -188,10 +192,5 @@
 
 	//je (endif、または else まで条件ジャンプ)
-	OpBuffer[obp++]=(char)0x0F;
-	OpBuffer[obp++]=(char)0x84;
-	obp+=sizeof(long);
-
-	//jeの番地
-	i3=obp;
+	CodeGenerator::PertialSchedule *pIfPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
 
 
@@ -203,5 +202,5 @@
 	GetLexicalScopes().Start( obp, SCOPE_TYPE_IF );
 
-	i2=CompileBuffer(ESC_ENDIF,0);
+	int i2=CompileBuffer(ESC_ENDIF,0);
 
 	//レキシカルスコープをレベルダウン
@@ -211,10 +210,8 @@
 	if(i2==ESC_ELSE){
 		//jmp (endifまで)
-		OpBuffer[obp++]=(char)0xE9;
-		obp+=sizeof(long);
-
-		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//ifからelseへのジャンプ先のオフセット値
-
-		i3=obp;
+		CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pIfPertialSchedule );
+
 
 
@@ -232,8 +229,8 @@
 
 
-		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//jmpジャンプ先のオフセット値
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule );
 	}
 	else{
-		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//jeジャンプ先のオフセット値
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pIfPertialSchedule );
 	}
 }
@@ -304,10 +301,5 @@
 
 	//Continueアドレスのバックアップとセット
-	extern DWORD dwContinueAddress;
-	DWORD dwTempContinue;
-	dwTempContinue=dwContinueAddress;
-	dwContinueAddress=obp;
-	pobj_TempSchedule->lock((int *)&dwTempContinue);
-	pobj_TempSchedule->lock((int *)&dwContinueAddress);
+	compiler.codeGenerator.ContinueAreaBegin();
 
 	if(!Parameter[0]) SetError(10,"While",cp);
@@ -317,11 +309,5 @@
 
 	//je (Wend まで)
-	OpBuffer[obp++]=(char)0x0F;
-	OpBuffer[obp++]=(char)0x84;
-	obp+=sizeof(long);
-
-	//実行中の番地
-	int je_schedule=obp;
-	pobj_TempSchedule->lock(&je_schedule);
+	CodeGenerator::PertialSchedule *pWhilePertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
 
 	//レキシカルスコープをレベルアップ
@@ -334,18 +320,13 @@
 
 	//jmp ...
-	OpBuffer[obp++]=(char)0xE9;
-	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
-	obp+=sizeof(long);
-	pobj_TempSchedule->unlock();
-	pobj_TempSchedule->unlock();
+	compiler.codeGenerator.op_jmp_continue();
 
 	//レキシカルスコープをレベルダウン
 	GetLexicalScopes().End();
 
-	*((long *)(OpBuffer+je_schedule-sizeof(long)))=obp-je_schedule;	//jeジャンプ先のオフセット値
-	pobj_TempSchedule->unlock();
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pWhilePertialSchedule );
 
 	//Continueアドレスを復元
-	dwContinueAddress=dwTempContinue;
+	compiler.codeGenerator.ContinueAreaEnd();
 }
 
@@ -354,5 +335,5 @@
 	extern HANDLE hHeap;
 	Type resultType;
-	int i,i2,i3;
+	int i,i2;
 	char temporary[VN_SIZE],variable[VN_SIZE],JudgeNum[VN_SIZE],StepNum[VN_SIZE];
 	bool isError = false;
@@ -383,15 +364,8 @@
 
 	//jmp ...
-	OpBuffer[obp++]=(char)0xE9;
-	i2=obp;
-	obp+=sizeof(long);
+	CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
 
 	//Continueアドレスのバックアップとセット
-	extern DWORD dwContinueAddress;
-	DWORD dwTempContinue;
-	dwTempContinue=dwContinueAddress;
-	dwContinueAddress=obp;
-	pobj_TempSchedule->lock((int *)&dwTempContinue);
-	pobj_TempSchedule->lock((int *)&dwContinueAddress);
+	compiler.codeGenerator.ContinueAreaBegin();
 
 	//第２パラメータを取得（to～）
@@ -409,5 +383,5 @@
 	OpcodeCalc(temporary);
 
-	*((long *)(OpBuffer+i2))=obp-(i2+sizeof(long));
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule );
 
 	//増加か減少かを区別する
@@ -424,8 +398,5 @@
 
 	//je [カウンタ減少の場合の判定]
-	OpBuffer[obp++]=(char)0x0F;
-	OpBuffer[obp++]=(char)0x84;
-	i2=obp;
-	obp+=sizeof(long);
+	pTempPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
 
 	//判定（カウンタ増加の場合）
@@ -436,9 +407,8 @@
 
 	//jmp [カウンタ減少の場合の判定を飛び越す]
-	OpBuffer[obp++]=(char)0xE9;
-	i3=obp;
-	obp+=sizeof(long);
-
-	*((long *)(OpBuffer+i2))=obp-(i2+sizeof(long)); //jeジャンプ先のオフセット値
+	CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+
+	//jeジャンプ先のオフセット値
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule );
 
 	//判定（カウンタ減少の場合）
@@ -448,5 +418,6 @@
 	NumOpe(&reg,temporary,Type(),resultType);
 
-	*((long *)(OpBuffer+i3))=obp-(i3+sizeof(long)); //jmpジャンプ先のオフセット値
+	//jmpジャンプ先のオフセット値
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule2 );
 
 	//cmp rax,0
@@ -456,9 +427,5 @@
 
 	//je ...
-	OpBuffer[obp++]=(char)0x0F;
-	OpBuffer[obp++]=(char)0x84;
-	int je_schedule=obp;
-	obp+=sizeof(long);
-	pobj_TempSchedule->lock(&je_schedule);
+	pTempPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
 
 	//レキシカルスコープをレベルアップ
@@ -477,20 +444,14 @@
 
 	//jmp ...
-	OpBuffer[obp++]=(char)0xE9;
-	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
-	obp+=sizeof(long);
-	if( isError == false ){
-		pobj_TempSchedule->unlock();
-		pobj_TempSchedule->unlock();
-	}
+	compiler.codeGenerator.op_jmp_continue();
 
 	//レキシカルスコープをレベルダウン
 	GetLexicalScopes().End();
 
-	*((long *)(OpBuffer+je_schedule))=obp-(je_schedule+sizeof(long)); //jeジャンプ先のオフセット値
-	pobj_TempSchedule->unlock();
+	//jeジャンプ先のオフセット値
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule );
 
 	//Continueアドレスを復元
-	dwContinueAddress=dwTempContinue;
+	compiler.codeGenerator.ContinueAreaEnd();
 }
 
@@ -502,10 +463,5 @@
 
 	//Continueアドレスのバックアップとセット
-	extern DWORD dwContinueAddress;
-	DWORD dwTempContinue;
-	dwTempContinue=dwContinueAddress;
-	dwContinueAddress=obp;
-	pobj_TempSchedule->lock((int *)&dwTempContinue);
-	pobj_TempSchedule->lock((int *)&dwContinueAddress);
+	compiler.codeGenerator.ContinueAreaBegin();
 
 	//レキシカルスコープをレベルアップ
@@ -516,4 +472,6 @@
 
 	GetLexicalScopes().CallDestructorsOfScopeEnd();
+
+	CodeGenerator::PertialSchedule *pDoPertialSchedule = NULL;
 
 	extern char *basbuf;
@@ -543,6 +501,5 @@
 
 				//je 5（ループ終了）
-				OpBuffer[obp++]=(char)0x74;
-				OpBuffer[obp++]=(char)0x05;
+				pDoPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(char), true );
 			}
 			else if(basbuf[i3]=='1'){
@@ -550,6 +507,5 @@
 
 				//jne 5（ループ終了）
-				OpBuffer[obp++]=(char)0x75;
-				OpBuffer[obp++]=(char)0x05;
+				pDoPertialSchedule = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 			}
 			break;
@@ -558,9 +514,10 @@
 
 	//jmp ...
-	OpBuffer[obp++]=(char)0xE9;
-	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
-	obp+=sizeof(long);
-	pobj_TempSchedule->unlock();
-	pobj_TempSchedule->unlock();
+	compiler.codeGenerator.op_jmp_continue();
+
+	if( pDoPertialSchedule )
+	{
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pDoPertialSchedule );
+	}
 
 	//jmp ...
@@ -568,5 +525,4 @@
 	int je_schedule=obp;
 	obp+=sizeof(long);
-	pobj_TempSchedule->lock(&je_schedule);
 
 	//レキシカルスコープをレベルダウン
@@ -574,22 +530,11 @@
 
 	*((long *)(OpBuffer+je_schedule))=obp-(je_schedule+sizeof(long)); //jmpジャンプ先のオフセット値
-	pobj_TempSchedule->unlock();
 
 	//Continueアドレスを復元
-	dwContinueAddress=dwTempContinue;
+	compiler.codeGenerator.ContinueAreaEnd();
 }
 void OpcodeContinue(void){
-	extern DWORD dwContinueAddress;
-
-	if(dwContinueAddress==-1){
-		SetError(12,"Continue",cp);
-		return;
-	}
-
 	//jmp ...(Continue addr)
-	OpBuffer[obp++]=(char)0xE9;
-
-	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
-	obp+=sizeof(long);
+	compiler.codeGenerator.op_jmp_continue();
 }
 
Index: trunk/abdev/BasicCompiler64/Compile_Var.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_Var.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/Compile_Var.cpp	(revision 242)
@@ -862,8 +862,5 @@
 
 			//mov rax,DataPos
-			compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,i2);
-			obp-=sizeof(long);
-			pobj_DataTableSchedule->add();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,i2, Schedule::DataTable );
 
 			//mov qword ptr[offset],rax
@@ -1017,14 +1014,8 @@
 
 			//mov rax,i2
-			compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,i2);
-			obp-=sizeof(long);
-			pobj_DataTableSchedule->add();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,i2, Schedule::DataTable );
 
 			//mov qword ptr[rsp+offset],rax
-			compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32);
-			obp-=sizeof(long);
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32, Schedule::LocalVar );
 		}
 		else{
@@ -1034,8 +1025,5 @@
 
 				//mov qword ptr[rsp+offset],rax
-				compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32);
-				obp-=sizeof(long);
-				AddLocalVarAddrSchedule();
-				obp+=sizeof(long);
+				compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32, Schedule::LocalVar );
 			}
 			else{
@@ -1263,5 +1251,5 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add r11,qword ptr[rsp+offset]
-			compiler.codeGenerator.op_add_RM( REG_R11, REG_RSP, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
+			compiler.codeGenerator.op_add_RM( sizeof(_int64), REG_R11, REG_RSP, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
 		}
 		else{
Index: trunk/abdev/BasicCompiler64/MakePeHdr.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/MakePeHdr.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/MakePeHdr.cpp	(revision 242)
@@ -190,5 +190,5 @@
 	compiler.GetMeta().GetDllProcs().Iterator_Init();
 
-
+/*
 	if( !compiler.GetMeta().WriteXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
 	{
@@ -200,5 +200,5 @@
 		MessageBox(0,"XML読み込みに失敗","test",0);
 	}
-/*
+
 	if( !compiler.GetMeta().WriteBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
 	{
@@ -218,6 +218,6 @@
 	{
 		MessageBox(0,"バイナリ読み込みに失敗","test",0);
-	}*/
-	compiler.GetMeta() = (*pTempMeta);
+	}
+	compiler.GetMeta() = (*pTempMeta);*/
 
 
@@ -325,7 +325,4 @@
 	//リロケーション情報
 	pobj_Reloc=new CReloc();
-
-	//一時スケジューリングポインタ
-	pobj_TempSchedule=new CTempSchedule();
 
 	obp_AllocSize=8192*2;
@@ -384,6 +381,5 @@
 
 		//Continueアドレスを初期化
-		extern DWORD dwContinueAddress;
-		dwContinueAddress=-1;
+		compiler.codeGenerator.ClearContinueArea();
 
 		//スタックフレーム管理用クラスを初期化
@@ -1158,6 +1154,4 @@
 	}
 
-	delete pobj_TempSchedule;
-
 
 
Index: trunk/abdev/BasicCompiler64/NumOpe.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/NumOpe.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/NumOpe.cpp	(revision 242)
@@ -603,8 +603,5 @@
 
 		//mov reg,i2
-		compiler.codeGenerator.op_mov_RV(sizeof(_int64),*pReg,i2);
-		obp-=sizeof(long);
-		pobj_DataTableSchedule->add();
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV(sizeof(_int64),*pReg,i2, Schedule::DataTable );
 
 		free( buffer );
@@ -796,8 +793,5 @@
 
 					//mov reg,i2
-					compiler.codeGenerator.op_mov_RV(sizeof(_int64),UseReg,i2);
-					obp-=sizeof(long);
-					pobj_DataTableSchedule->add();
-					obp+=sizeof(long);
+					compiler.codeGenerator.op_mov_RV(sizeof(_int64),UseReg,i2, Schedule::DataTable);
 
 					if(UseReg==REG_R14){
@@ -981,12 +975,5 @@
 
 							//movlpd xmm_reg,qword ptr[data table offset]
-							OpBuffer[obp++]=(char)0x66;
-							OpBuffer[obp++]=(char)0x0F;
-							OpBuffer[obp++]=(char)0x12;
-							OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(XmmReg)<<3);
-							OpBuffer[obp++]=(char)0x25;
-							*((long *)(OpBuffer+obp))=i3;
-							pobj_DataTableSchedule->add();
-							obp+=sizeof(long);
+							compiler.codeGenerator.op_movlpd_RM( XmmReg, 0, i3, MOD_DISP32, Schedule::DataTable );
 						}
 					}
@@ -1010,12 +997,5 @@
 
 							//movss xmm_reg,dword ptr[data table offset]
-							OpBuffer[obp++]=(char)0xF3;
-							OpBuffer[obp++]=(char)0x0F;
-							OpBuffer[obp++]=(char)0x10;
-							OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(XmmReg)<<3);
-							OpBuffer[obp++]=(char)0x25;
-							*((long *)(OpBuffer+obp))=i3;
-							pobj_DataTableSchedule->add();
-							obp+=sizeof(long);
+							compiler.codeGenerator.op_movss_RM( XmmReg, 0, i3, MOD_DISP32, Schedule::DataTable );
 						}
 					}
@@ -1149,12 +1129,5 @@
 
 				//movlpd xmm_reg,qword ptr[data table offset]
-				OpBuffer[obp++]=(char)0x66;
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0x12;
-				OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(XmmReg)<<3);
-				OpBuffer[obp++]=(char)0x25;
-				*((long *)(OpBuffer+obp))=i3;
-				pobj_DataTableSchedule->add();
-				obp+=sizeof(long);
+				compiler.codeGenerator.op_movlpd_RM( XmmReg, 0, i3, MOD_DISP32, Schedule::DataTable );
 			}
 			if(resultType.IsSingle()){
@@ -1169,12 +1142,5 @@
 
 				//movss xmm_reg,dword ptr[data table offset]
-				OpBuffer[obp++]=(char)0xF3;
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0x10;
-				OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(XmmReg)<<3);
-				OpBuffer[obp++]=(char)0x25;
-				*((long *)(OpBuffer+obp))=i3;
-				pobj_DataTableSchedule->add();
-				obp+=sizeof(long);
+				compiler.codeGenerator.op_movss_RM( XmmReg, 0, i3, MOD_DISP32, Schedule::DataTable );
 			}
 		}
Index: trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp	(revision 242)
@@ -473,12 +473,15 @@
 
 		//mulsd xmm_reg,qword ptr[data table offset]   ※data = -1
-		OpBuffer[obp++]=(char)0xF2;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x59;
-		OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
-		OpBuffer[obp++]=(char)0x25;
-		*((long *)(OpBuffer+obp))=i32data;
-		pobj_DataTableSchedule->add();
-		obp+=sizeof(long);
+		compiler.codeGenerator.PutOld(
+			(char)0xF2,
+			(char)0x0F,
+			(char)0x59,
+			(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3),
+			(char)0x25
+		);
+		compiler.codeGenerator.PutOld(
+			(long)i32data,
+			Schedule::DataTable
+		);
 
 		if(xmm_reg==REG_XMM4){
@@ -495,12 +498,15 @@
 
 		//mulss xmm_reg,dword ptr[data table offset]   ※data = -1
-		OpBuffer[obp++]=(char)0xF3;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x59;
-		OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
-		OpBuffer[obp++]=(char)0x25;
-		*((long *)(OpBuffer+obp))=i32data;
-		pobj_DataTableSchedule->add();
-		obp+=sizeof(long);
+		compiler.codeGenerator.PutOld(
+			(char)0xF3,
+			(char)0x0F,
+			(char)0x59,
+			(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3),
+			(char)0x25
+		);
+		compiler.codeGenerator.PutOld(
+			(long)i32data,
+			Schedule::DataTable
+		);
 
 		if(xmm_reg==REG_XMM4){
Index: trunk/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp	(revision 242)
@@ -88,15 +88,17 @@
 
 			//addsd xmm_reg,qword ptr[offset]	※offset value:43f0000000000000
-			int temp;
 			_int64 i64data=0x43f0000000000000;
-			temp=compiler.GetDataTable().Add( i64data );
-			OpBuffer[obp++]=(char)0xF2;
-			OpBuffer[obp++]=(char)0x0F;
-			OpBuffer[obp++]=(char)0x58;
-			OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
-			OpBuffer[obp++]=(char)0x25;
-			*((long *)(OpBuffer+obp))=temp;
-			pobj_DataTableSchedule->add();
-			obp+=sizeof(long);
+			long temp=compiler.GetDataTable().Add( i64data );
+			compiler.codeGenerator.PutOld(
+				(char)0xF2,
+				(char)0x0F,
+				(char)0x58,
+				(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3),
+				(char)0x25
+			);
+			compiler.codeGenerator.PutOld(
+				temp,
+				Schedule::DataTable
+			);
 		}
 	}
@@ -146,15 +148,17 @@
 
 			//addss xmm_reg,dword ptr[offset]	※offset value:5f800000
-			int temp;
 			long i32data=0x5f800000;
-			temp=compiler.GetDataTable().Add( i32data );
-			OpBuffer[obp++]=(char)0xF3;
-			OpBuffer[obp++]=(char)0x0F;
-			OpBuffer[obp++]=(char)0x58;
-			OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
-			OpBuffer[obp++]=(char)0x25;
-			*((long *)(OpBuffer+obp))=temp;
-			pobj_DataTableSchedule->add();
-			obp+=sizeof(long);
+			long temp=compiler.GetDataTable().Add( i32data );
+			compiler.codeGenerator.PutOld(
+				(char)0xF3,
+				(char)0x0F,
+				(char)0x58,
+				(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3),
+				(char)0x25
+			);
+			compiler.codeGenerator.PutOld(
+				temp,
+				Schedule::DataTable
+			);
 		}
 	}
Index: trunk/abdev/BasicCompiler_Common/PESchedule.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/PESchedule.cpp	(revision 241)
+++ trunk/abdev/BasicCompiler_Common/PESchedule.cpp	(revision 242)
@@ -232,42 +232,2 @@
 
 CSubAddrSchedule *pobj_SubAddrSchedule;
-
-
-
-
-/////////////////////////////////////////
-// 一時スケジューリングポインタ
-/////////////////////////////////////////
-CTempSchedule::CTempSchedule(){
-	ppObpValues=(int **)HeapAlloc(hHeap,0,1);
-	num=0;
-}
-CTempSchedule::~CTempSchedule(){
-	HeapDefaultFree(ppObpValues);
-}
-void CTempSchedule::lock(int *pobp){
-	ppObpValues=(int **)HeapReAlloc(hHeap,0,ppObpValues,(num+1)*sizeof(int *));
-	ppObpValues[num]=pobp;
-	num++;
-}
-void CTempSchedule::unlock(){
-	if( num <= 0 ){
-		//エラー
-		SetError(300,NULL,cp);
-	}
-	num--;
-}
-void CTempSchedule::move(int iStartPos,int iSize,int offset){
-	int i;
-	for(i=0;i<num;i++){
-		if(iStartPos<=*ppObpValues[i] && *ppObpValues[i]<iStartPos+iSize){
-			(*ppObpValues[i])+=offset;
-		}
-	}
-}
-
-CTempSchedule *pobj_TempSchedule;
-
-
-
-
Index: trunk/abdev/BasicCompiler_Common/PESchedule.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/PESchedule.h	(revision 241)
+++ trunk/abdev/BasicCompiler_Common/PESchedule.h	(revision 242)
@@ -94,20 +94,3 @@
 
 
-/////////////////////////////////////
-// 一時スケジューリングポインタ
-/////////////////////////////////////
-class CTempSchedule{
-	int **ppObpValues;
-	int num;
-public:
-	CTempSchedule();
-	~CTempSchedule();
-
-	void lock(int *pobp);
-	void unlock();
-	void move(int iStartPos,int iSize,int offset);
-};
-extern CTempSchedule *pobj_TempSchedule;
-
-
 void NativeBuffer_StaticRelocation(int iStartPos,int iSize,int offset);
Index: trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 241)
+++ trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 242)
@@ -304,4 +304,8 @@
 
 
+	void PutOld( long l, Schedule::Type scheduleType )
+	{
+		pNativeCode->Put( l, scheduleType );
+	}
 
 	void PutOld( char c1, char c2 )
