Index: trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp	(revision 253)
+++ trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp	(revision 254)
@@ -542,7 +542,15 @@
 }
 
-bool NumOpe_GetType( const char *expression, const Type &baseType, Type &resultType ){
+bool NumOpe_GetType( const char *expression, const Type &baseType, Type &resultType, bool *pIsLiteralCalculation ){
 	extern int cp;
 	int i,i3;
+
+	//リテラル値のみの計算かどうかを判別するためのフラグ
+	bool dummyBool;
+	if( pIsLiteralCalculation == NULL )
+	{
+		pIsLiteralCalculation = &dummyBool;
+	}
+	*pIsLiteralCalculation = true;
 
 	if(expression[0]=='\0'){
@@ -553,4 +561,5 @@
 	if(expression[0]==1&& expression[1]==ESC_NEW ){
 		//New演算子（オブジェクト生成）
+		*pIsLiteralCalculation = false;
 		return Operator_New_GetType(expression+2,baseType, resultType );
 	}
@@ -590,7 +599,4 @@
 	BOOL bError;
 	bError=0;
-
-	//リテラル値のみの計算かどうかを判別するためのフラグ
-	BOOL bLiteralCalculation=1;
 
 	int sp;
@@ -684,5 +690,5 @@
 						type_stack[sp]=DEF_OBJECT;
 						index_stack[sp]=(LONG_PTR)compiler.GetMeta().GetClasses().GetStringClassPtr();
-						bLiteralCalculation=0;
+						*pIsLiteralCalculation = false;
 
 						sp++;
@@ -691,5 +697,5 @@
 
 					type_stack[sp]=typeOfPtrChar;
-					bLiteralCalculation=0;
+					*pIsLiteralCalculation = false;
 				}
 				else if((term[0]=='e'||term[0]=='E')&&
@@ -711,5 +717,5 @@
 
 						if( !isLiteral ){
-							bLiteralCalculation=0;
+							*pIsLiteralCalculation = false;
 						}
 
@@ -730,5 +736,5 @@
 							index_stack[sp] = (LONG_PTR)compiler.GetMeta().GetClasses().GetObjectClassPtr();
 						}
-						bLiteralCalculation = 0;
+						*pIsLiteralCalculation = false;
 						sp++;
 						break;
@@ -784,5 +790,5 @@
 
 						index_stack[sp]=tempType.GetIndex();
-						bLiteralCalculation=0;
+						*pIsLiteralCalculation = false;
 
 						sp++;
@@ -900,5 +906,5 @@
 	}
 
-	if(bLiteralCalculation){
+	if( *pIsLiteralCalculation ){
 		//右辺値が数値の定数式の場合
 		int base_type = 0;
Index: trunk/abdev/BasicCompiler_Common/calculation.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/calculation.cpp	(revision 253)
+++ trunk/abdev/BasicCompiler_Common/calculation.cpp	(revision 254)
@@ -726,5 +726,10 @@
 						//リテラル値
 						StrPtr[pnum]=0;
-						type[pnum]=GetLiteralValue(Parms,&i64data,BaseType);
+						type[pnum]=GetLiteralValue(Parms,&i64data,BaseType, enableerror);
+						if( type[pnum] == -1 )
+						{
+							// エラー
+							return false;
+						}
 						if(IsRealNumberType(type[pnum])){
 							//実数型
@@ -969,5 +974,5 @@
 #pragma optimize("", off)
 #pragma warning(disable : 4748)
-DWORD GetLiteralValue(char *value,_int64 *pi64,int BaseType){
+DWORD GetLiteralValue(char *value,_int64 *pi64,int BaseType, bool isNotifyError ){
 	extern HANDLE hHeap;
 	extern int cp;
@@ -987,4 +992,8 @@
 			}
 			if(temporary[i]){
+				if( !isNotifyError )
+				{
+					return -1;
+				}
 				SetError(57,NULL,cp);
 				return DEF_BYTE;
@@ -1009,4 +1018,8 @@
 			}
 			if(temporary[i]){
+				if( !isNotifyError )
+				{
+					return -1;
+				}
 				SetError(58,NULL,cp);
 				return DEF_BYTE;
@@ -1021,4 +1034,8 @@
 		}
 		else{
+			if( !isNotifyError )
+			{
+				return -1;
+			}
 			SetError(12,"&",cp);
 			return DEF_BYTE;
@@ -1070,4 +1087,9 @@
 					if(bDebugRun) return DEF_DOUBLE;
 
+					if( !isNotifyError )
+					{
+						return -1;
+					}
+
 					SetError(3,value,cp);
 					return DEF_DOUBLE;
@@ -1111,4 +1133,9 @@
 	if(bDebugRun) return DEF_DOUBLE;
 
+	if( !isNotifyError )
+	{
+		return -1;
+	}
+
 	SetError(33,NULL,cp);
 	return DEF_DOUBLE;
@@ -1116,5 +1143,5 @@
 #pragma optimize("", on)
 
-int IsStrCalculation(char *Command){
+int IsStrCalculation(const char *Command){
 	int i,i2,i3,i4,PareNum;
 	char temporary[VN_SIZE],temp2[8192];
Index: trunk/abdev/BasicCompiler_Common/common.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/common.h	(revision 253)
+++ trunk/abdev/BasicCompiler_Common/common.h	(revision 254)
@@ -343,6 +343,6 @@
 int GetLiteralIndex(_int64 i64data);
 int NeutralizationType(int type1,LONG_PTR index1,int type2,LONG_PTR index2);
-DWORD GetLiteralValue(char *value,_int64 *pi64,int BaseType);
-int IsStrCalculation(char *Command);
+DWORD GetLiteralValue(char *value,_int64 *pi64,int BaseType, bool isNotifyError = true );
+int IsStrCalculation(const char *Command);
 BYTE GetCalcId(const char *Command,int *pi);
 BOOL GetNumOpeElements(const char *Command,int *pnum,
@@ -353,5 +353,5 @@
 BOOL CheckCalcType(int idCalc,int *type,int sp);
 bool GetTermType( const char *term, Type &resultType, bool &isLiteral, bool *pIsClassName = NULL );
-bool NumOpe_GetType( const char *expression, const Type &baseType, Type &resultType );
+bool NumOpe_GetType( const char *expression, const Type &baseType, Type &resultType, bool *pIsLiteralCalculation = NULL );
 
 //Subroutine.cpp
Index: trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 253)
+++ trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 254)
@@ -288,14 +288,14 @@
 private:
 	void set_rex(int op_size,int reg,int index_reg,int base_reg);
-	void set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,long disp, Schedule::Type scheduleType = Schedule::None );
-	void __op_format(int op_size,char op_prefix,char opcode1,char opcode2,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType = Schedule::None );
+	const PertialSchedule *set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,long disp, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	const PertialSchedule *__op_format(int op_size,char op_prefix,char opcode1,char opcode2,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
 public:
 	void op_mov_RV					(int op_size,int reg,long i32data, Schedule::Type scheduleType = Schedule::None );
 	void op_mov_RV64				(int reg,_int64 i64data);
-	void op_mov_RM					(int op_size,int reg,int base_reg,long 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,long 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_mov_MV					(int op_size,int base_reg,int offset, Schedule::Type offsetScheduleType, BOOL bUseOffset,long i32data);
+	const PertialSchedule *op_mov_RM		(int op_size,int reg,int base_reg,long 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,long 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 );
+	const PertialSchedule *op_mov_MV		(int op_size,int base_reg,int offset, Schedule::Type offsetScheduleType, bool isPertialSchedule, BOOL bUseOffset,long i32data);
 	void op_mov_RR					(int reg1,int reg2);
 	void op_movsxd					(int reg64,int reg32);
@@ -308,6 +308,6 @@
 	void op_inc						(int reg);
 	void op_dec						(int reg);
-	void op_add_RM					(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
-	void op_add_RV					(int reg,long offset, Schedule::Type scheduleType = Schedule::None );
+	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 );
+	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);
 	void op_add32_reg				(int reg1,int reg2);
@@ -334,11 +334,11 @@
 	void op_cmp_value				(int op_size,int reg,char byte_data);
 	void op_setne					(int reg);
-	void op_movlpd_MR				(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
-	void op_movlpd_RM				(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
+	const PertialSchedule *op_movlpd_MR		(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	const PertialSchedule *op_movlpd_RM		(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
 	void op_movsd_RR				(int xmm_reg1,int xmm_reg2);
-	void op_movsd_MR				(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
+	const PertialSchedule *op_movsd_MR		(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
 	void op_movss_RR				(int xmm_reg1,int xmm_reg2);
-	void op_movss_RM				(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
-	void op_movss_MR				(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
+	const PertialSchedule *op_movss_RM		(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
+	const PertialSchedule *op_movss_MR		(int xmm_reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None, bool isPertialSchedule = false );
 	void op_movd_RX					(int reg,int xmm_reg);
 	void op_cvtsd2ss				(int xmm_reg1,int xmm_reg2);
@@ -448,4 +448,15 @@
 		pNativeCode->Put( l, scheduleType );
 	}
+	const PertialSchedule *PutOld( long l, bool isPertialSchedule )
+	{
+		const PertialSchedule *pPertialSchedule;
+		if( isPertialSchedule )
+		{
+			pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+			pPertialSchedule = pertialSchedules.back();
+		}
+		pNativeCode->Put( l, Schedule::None );
+		return pPertialSchedule;
+	}
 	void PutOld( const NativeCode &nativeCode )
 	{
Index: trunk/abdev/BasicCompiler_Common/include/Const.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Const.h	(revision 253)
+++ trunk/abdev/BasicCompiler_Common/include/Const.h	(revision 254)
@@ -84,8 +84,8 @@
 public:
 
-	int GetBasicType(char *Name);
-	_int64 GetWholeData(char *Name);
-	double GetDoubleData(char *Name);
-	bool IsStringPtr(char *Name);
+	int GetBasicType(const char *Name);
+	_int64 GetWholeData(const char *Name);
+	double GetDoubleData(const char *Name);
+	bool IsStringPtr(const char *Name);
 };
 
Index: trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 253)
+++ trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 254)
@@ -301,16 +301,24 @@
 void CodeGenerator::op_jmp_continue()
 {
-	//op_jmp( GetContinueCodePos()-(pNativeCode->GetSize()+sizeof(long)), sizeof(long) );
-
-	// TODO: 未完成（OpBuffer/obp廃止が整ったら上記のコードを有効にすべし）
-
-	if( GetContinueCodePosOld() == -1 )
+	////////////////////////////////////
+	// エラー検出（必要なくなったら消す）
+	extern int obp;
+	if( GetContinueCodePosOld()-obp != GetContinueCodePos()-pNativeCode->GetSize() )
+	{
+		int continueCodePosOld = GetContinueCodePosOld();
+		int continueCodePos = GetContinueCodePos();
+		int size = pNativeCode->GetSize();
+		int test=0;
+		SetError();
+	}
+	////////////////////////////////////
+
+
+	if( GetContinueCodePos() == -1 )
 	{
 		SetError(12,"Continue",cp);
 		return;
 	}
-
-	extern int obp;
-	op_jmp( GetContinueCodePosOld()-obp, sizeof(long), false, true );
+	op_jmp( GetContinueCodePos() - pNativeCode->GetSize(), sizeof(long), false, true );
 }
 void CodeGenerator::op_jmp_exitsub()
Index: trunk/abdev/BasicCompiler_Common/src/Const.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/Const.cpp	(revision 253)
+++ trunk/abdev/BasicCompiler_Common/src/Const.cpp	(revision 254)
@@ -92,5 +92,5 @@
 
 
-int Consts::GetBasicType(char *Name){
+int Consts::GetBasicType(const char *Name){
 	CConst *pConst = GetObjectPtr(Name);
 
@@ -99,5 +99,5 @@
 	return pConst->GetType().GetBasicType();
 }
-_int64 Consts::GetWholeData(char *Name){
+_int64 Consts::GetWholeData(const char *Name){
 	CConst *pConst = GetObjectPtr(Name);
 
@@ -106,5 +106,5 @@
 	return pConst->GetWholeData();
 }
-double Consts::GetDoubleData(char *Name){
+double Consts::GetDoubleData(const char *Name){
 	CConst *pConst = GetObjectPtr(Name);
 
@@ -113,5 +113,5 @@
 	return pConst->GetDoubleData();
 }
-bool Consts::IsStringPtr( char *Name ){
+bool Consts::IsStringPtr( const char *Name ){
 	CConst *pConst = GetObjectPtr(Name);
 
Index: trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp	(revision 253)
+++ trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp	(revision 254)
@@ -128,8 +128,10 @@
 
 			//mov rcx,qword ptr[rsp+offset]
+			compiler.codeGenerator.localVarPertialSchedules.push_back(
 			compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RCX,REG_RSP,
 				-pVar->GetOffsetAddress(),
 				MOD_BASE_DISP32,
-				Schedule::LocalVar);
+				Schedule::None, true)
+			);
 #else
 			//x86コード
