Index: BasicCompiler32/Compile_Calc.cpp
===================================================================
--- BasicCompiler32/Compile_Calc.cpp	(revision 67)
+++ BasicCompiler32/Compile_Calc.cpp	(revision 75)
@@ -415,4 +415,10 @@
 	int i,i2,i3;
 	char variable[VN_SIZE];
+
+
+
+	//////////////////////////////////////
+	// インクリメント・デクリメント
+	//////////////////////////////////////
 
 	for(i=0;;i++){
@@ -465,6 +471,5 @@
 			}
 
-			LONG_PTR lp;
-			if(GetVarType(variable,&lp,0)!=-1){
+			if(GetVarType(variable,Type(),0)){
 				//変数リストに該当したとき
 				SetError(1,NULL,cp);
@@ -510,9 +515,8 @@
 
 	char ObjName[VN_SIZE],array_element[VN_SIZE];
-	CClass *pobj_c;
 	GetArrayElement(variable,ObjName,array_element);
 	if(array_element[0]){
-		i2=GetVarType(ObjName,(LONG_PTR *)&pobj_c,0);
-		if(i2==DEF_OBJECT){
+		Type varType;
+		if( GetVarType(ObjName,varType,0) && varType.IsObject() ){
 			char temporary[VN_SIZE];
 			sprintf(temporary,"%s.%c%c%c",ObjName,1,ESC_OPERATOR,CALC_ARRAY_SET);
@@ -522,8 +526,8 @@
 
 			int idProc;
-			void *pInfo;
-			idProc=GetProc(temporary,&pInfo);
+			void *pProc;
+			idProc=GetProc(temporary,(void **)&pProc);
 			if(idProc){
-				CallProc(idProc,pInfo,temporary,temp2,NULL);
+				CallProc(idProc,pProc,temporary,temp2,Type());
 				return;
 			}
@@ -542,27 +546,24 @@
 	////////////////////////////////////////
 
-	int VarType,CalcType;
-	LONG_PTR lpVarIndex,lpCalcIndex;
+	Type varType;
+
+	//型を識別
+	if( !GetVarType(variable,varType,false) ){
+
+		// プロパティ用のメソッドを呼び出す
+		if(!CallPropertyMethod( variable, Command+i+1, Type() )){
+			//エラーを表示
+			GetVarType(variable,varType,true);
+		}
+
+		return;
+	}
+
+	extern LONG_PTR ProcPtr_BaseIndex;
+	if(varType.IsProcPtr()) ProcPtr_BaseIndex=varType.GetIndex();
+	else ProcPtr_BaseIndex=-1;
+
 	RELATIVE_VAR VarRelativeVar;
-	BOOL bCalcUseHeap;
-
-	//型を識別
-	VarType=GetVarType(variable,&lpVarIndex,0);
-	if(VarType==-1){
-
-		// プロパティ用のメソッドを呼び出す
-		if(!CallPropertyMethod(variable,Command+i+1,NULL)){
-			//エラーを表示
-			GetVarType(variable,&lpVarIndex,1);
-		}
-
-		return;
-	}
-
-	extern LONG_PTR ProcPtr_BaseIndex;
-	if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex;
-	else ProcPtr_BaseIndex=-1;
-
-	if(VarType==DEF_STRUCT){
+	if( varType.IsStruct() ){
 		//代入コピーに備える
 
@@ -570,7 +571,6 @@
 		if(!GetVarOffsetReadWrite(
 			variable,
-			&VarType,
 			&VarRelativeVar,
-			&lpVarIndex)) return;
+			varType)) return;
 
 		SetVarPtrToEax(&VarRelativeVar);
@@ -582,28 +582,30 @@
 
 	//NumOpe...（スタックに答えが格納される）
-	CalcType=NumOpe(Command+i+1,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
-	if(VarType==-1||CalcType==-1) return;
+	BOOL bCalcUseHeap;
+	Type calcType;
+	if( !NumOpe(Command+i+1,varType,calcType,&bCalcUseHeap) ){
+		return;
+	}
 
 	//変数アドレスを取得
 	if(!GetVarOffsetReadWrite(
 		variable,
-		&VarType,
 		&VarRelativeVar,
-		&lpVarIndex)) return;
-
-	if(VarType&FLAG_PTR){
+		varType)) return;
+
+	if(varType.GetBasicType()&FLAG_PTR){
 		SetError(14,variable,cp);
 		return;
 	}
 
-	if(VarType==DEF_STRUCT){
-		//オブジェクトインスタンスへの代入
-		SetStructVariable(lpVarIndex,CalcType,lpCalcIndex,bCalcUseHeap);
+	if( varType.IsStruct() ){
+		//構造体インスタンスへの代入
+		SetStructVariable(varType,calcType,bCalcUseHeap);
 		return;
 	}
 
-	if(CalcType==DEF_OBJECT && (CalcType!=VarType || lpCalcIndex!=lpVarIndex) ){
+	if( calcType.IsObject() && !calcType.Equals( varType ) ){
 		//キャスト演算子のオーバーロードに対応する
-		CallCastOperatorProc(CalcType,lpCalcIndex,bCalcUseHeap,VarType,lpVarIndex);
+		CallCastOperatorProc(calcType,bCalcUseHeap,varType);
 	}
 
@@ -614,5 +616,5 @@
 	/////////////////////////////////
 
-	CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
+	CheckDifferentType(varType,calcType,0,0);
 
 
@@ -622,164 +624,6 @@
 
 	//eax、edx:eax、またはst(0)にスタック上のデータを取り出す
-	RestoreDefaultRegisterFromStackMemory( CalcType );
-
-	SetVariableFromEax( VarType, CalcType, &VarRelativeVar );
-/*
-	TODO: 消す
-	if(VarType==DEF_BOOLEAN){
-		//bool
-		SetBooleanVariable(CalcType,&VarRelativeVar);
-	}
-	else if(VarType==DEF_SBYTE||VarType==DEF_BYTE || (isUnicode==false&&VarType==DEF_CHAR)){
-		//8ビット整数型変数へスタックの内容を格納する
-		Set8Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-	else if(VarType==DEF_INTEGER||VarType==DEF_WORD || (isUnicode&&VarType==DEF_CHAR)){
-		//16ビット整数型変数へスタックの内容を格納する
-		Set16Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-	else if(VarType==DEF_LONG||VarType==DEF_DWORD||IsPtrType(VarType)){
-		//32ビット整数型変数へスタックの内容を格納する
-		if(VarType==DEF_LONG)
-			SetLongVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-		else
-			SetDWordVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-	else if(VarType==DEF_INT64||VarType==DEF_QWORD){
-		//64ビット整数型変数へスタックの内容を格納する
-		SetInt64Variable(CalcType,&VarRelativeVar);
-	}
-	else if(VarType==DEF_DOUBLE){
-		//Double型変数へスタックの内容を格納する
-		SetDoubleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-	else if(VarType==DEF_SINGLE){
-		//Single型変数へスタックの内容を格納する
-		SetSingleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}*/
-}
-
-
-// TODO: 消す
-/*
-void SetRefVariable( const char *varname, const char *expression ){
-	////////////////////////////////////////
-	// 変数のタイプ型を識別して、演算を行う
-	////////////////////////////////////////
-
-	int VarType,CalcType;
-	LONG_PTR lpVarIndex,lpCalcIndex;
-	RELATIVE_VAR VarRelativeVar;
-	BOOL bCalcUseHeap;
-
-	//型を識別
-	VarType=GetVarType(varname,&lpVarIndex,0);
-	if(VarType==-1){
-		SetError(300,NULL,cp);
-		return;
-	}
-
-	extern LONG_PTR ProcPtr_BaseIndex;
-	if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex;
-	else ProcPtr_BaseIndex=-1;
-
-	if(VarType==DEF_OBJECT){
-		//代入演算のオーバーロード オペレータに備える
-
-		//変数アドレスを取得
-		if(!GetVarOffsetReadWrite(
-			varname,
-			&VarType,
-			&VarRelativeVar,
-			&lpVarIndex)) return;
-
-		SetVarPtrToEax(&VarRelativeVar);
-
-		//push eax
-		op_push(REG_EAX);
-	}
-
-
-	//NumOpe...（スタックに答えが格納される）
-	CalcType=NumOpe(expression,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
-	if(VarType==-1||CalcType==-1) return;
-
-	//変数アドレスを取得
-	if(!GetVarOffsetReadWrite(
-		varname,
-		&VarType,
-		&VarRelativeVar,
-		&lpVarIndex)) return;
-
-	if(VarType&FLAG_PTR){
-		SetError(14,varname,cp);
-		return;
-	}
-
-
-	if( VarType == DEF_OBJECT
-		&& (VarRelativeVar.dwKind == VAR_REFLOCAL || VarRelativeVar.dwKind == VAR_REFGLOBAL ) ){
-		// 参照型オブジェクトへの代入（初期化）はポインタ変数と同様の処理に値する
-		PTR_LEVEL_UP( VarType );
-
-		if( VarRelativeVar.dwKind == VAR_REFGLOBAL ){
-			VarRelativeVar.dwKind = VAR_GLOBAL;
-		}
-		else if( VarRelativeVar.dwKind == VAR_REFLOCAL ){
-			VarRelativeVar.dwKind = VAR_LOCAL;
-		}
-
-		if( CalcType == DEF_OBJECT ){
-			//右辺値が実体オブジェクトのときは、参照をコピー
-			PTR_LEVEL_UP( CalcType );
-		}
-	}
-	else{
-		SetError(300,NULL,cp);
-	}
-
-
-	/////////////////////////////////
-	// 右辺、左辺の型チェックを行う
-	/////////////////////////////////
-
-	CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
-
-
-	/////////////////////////////////////////////////
-	// スタックの内容を変数にコピーするコードを抽出
-	/////////////////////////////////////////////////
-
-	if(VarType==DEF_BOOLEAN){
-		//bool
-		SetBooleanVariable(CalcType,&VarRelativeVar);
-	}
-	else if(VarType==DEF_SBYTE||VarType==DEF_BYTE || (isUnicode==false&&VarType==DEF_CHAR)){
-		//8ビット整数型変数へスタックの内容を格納する
-		Set8Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-	else if(VarType==DEF_INTEGER||VarType==DEF_WORD || (isUnicode&&VarType==DEF_CHAR)){
-		//16ビット整数型変数へスタックの内容を格納する
-		Set16Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-	else if(VarType==DEF_LONG||VarType==DEF_DWORD||IsPtrType(VarType)){
-		//32ビット整数型変数へスタックの内容を格納する
-		if(VarType==DEF_LONG)
-			SetLongVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-		else
-			SetDWordVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-	else if(VarType==DEF_INT64||VarType==DEF_QWORD){
-		//64ビット整数型変数へスタックの内容を格納する
-		SetInt64Variable(CalcType,&VarRelativeVar);
-	}
-	else if(VarType==DEF_DOUBLE){
-		//Double型変数へスタックの内容を格納する
-		SetDoubleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-	else if(VarType==DEF_SINGLE){
-		//Single型変数へスタックの内容を格納する
-		SetSingleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
-	}
-}
-*/
+	RestoreDefaultRegisterFromStackMemory( calcType.GetBasicType() );
+
+	SetVariableFromEax(varType.GetBasicType(),calcType.GetBasicType(),&VarRelativeVar);
+}
