Index: BasicCompiler64/Compile_Calc.cpp
===================================================================
--- BasicCompiler64/Compile_Calc.cpp	(revision 64)
+++ BasicCompiler64/Compile_Calc.cpp	(revision 75)
@@ -84,6 +84,5 @@
 			}
 
-			LONG_PTR lp;
-			if(GetVarType(variable,&lp,0)!=-1){
+			if(GetVarType(variable,Type(),0)){
 				//変数リストに該当したとき
 				SetError(1,NULL,cp);
@@ -129,9 +128,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);
@@ -141,8 +139,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;
 			}
@@ -161,16 +159,13 @@
 	////////////////////////////////////////
 
-	int VarType,CalcType;
-	LONG_PTR lpVarIndex,lpCalcIndex;
-	BOOL bCalcUseHeap;
+	Type varType;
 
 	//型を識別
-	VarType=GetVarType(variable,&lpVarIndex,0);
-	if(VarType==-1){
+	if( !GetVarType(variable,varType,false) ){
 
 		// プロパティ用のメソッドを呼び出す
-		if(!CallPropertyMethod(variable,Command+i+1,NULL)){
+		if(!CallPropertyMethod( variable, Command+i+1, Type() )){
 			//エラーを表示
-			GetVarType(variable,&lpVarIndex,1);
+			GetVarType(variable,varType,true);
 		}
 
@@ -179,16 +174,19 @@
 
 	extern LONG_PTR ProcPtr_BaseIndex;
-	if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex;
+	if(varType.IsProcPtr()) ProcPtr_BaseIndex=varType.GetIndex();
 	else ProcPtr_BaseIndex=-1;
 
 	//NumOpe...（rax、またはxmm0に答えが格納される）
 	int reg=REG_RAX;
-	CalcType=NumOpe(&reg,Command+i+1,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
-
-	if(reg!=REG_RAX&&IsWholeNumberType(CalcType)){
+	BOOL bCalcUseHeap;
+	Type calcType;
+	if( !NumOpe(&reg,Command+i+1,varType,calcType,&bCalcUseHeap) ){
+		return;
+	}
+
+	if(reg!=REG_RAX&&calcType.IsWhole()||
+		varType.IsNull()||calcType.IsNull()){
 		SetError(300,NULL,cp);
 	}
-
-	if(VarType==-1||CalcType==-1) return;
 
 	//結果を格納しているレジスタをブロッキング
@@ -199,26 +197,24 @@
 	if(!GetVarOffsetReadWrite(
 		variable,
-		&VarType,
 		&VarRelativeVar,
-		&lpVarIndex,
-		NULL)) return;
+		varType)) return;
 
 	//レジスタのブロッキングを解除
 	pobj_BlockReg->clear();
 
-	if(VarType&FLAG_PTR){
+	if(varType.GetBasicType()&FLAG_PTR){
 		SetError(14,variable,cp);
 		return;
 	}
 
-	if(VarType==DEF_STRUCT ){
+	if( varType.IsStruct() ){
 		//構造体インスタンスへの代入
-		SetStructVariableFromRax(lpVarIndex,CalcType,lpCalcIndex,&VarRelativeVar,bCalcUseHeap);
-		return;
-	}
-
-	if(CalcType==DEF_OBJECT && (CalcType!=VarType || lpCalcIndex!=lpVarIndex) ){
+		SetStructVariableFromRax(varType,calcType,&VarRelativeVar,bCalcUseHeap);
+		return;
+	}
+
+	if( calcType.IsObject() && !calcType.Equals( varType ) ){
 		//キャスト演算子のオーバーロードに対応する
-		CallCastOperatorProc(REG_RAX,CalcType,lpCalcIndex,bCalcUseHeap,VarType,lpVarIndex);
+		CallCastOperatorProc(REG_RAX,calcType,bCalcUseHeap,varType);
 	}
 
@@ -228,5 +224,5 @@
 	/////////////////////////////////
 
-	CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
+	CheckDifferentType(varType,calcType,0,0);
 
 
@@ -234,87 +230,4 @@
 	// rax（実数はxmm0）の内容を変数にコピー
 	/////////////////////////////////////////////////
-	SetVariableFromRax(VarType,CalcType,&VarRelativeVar);
+	SetVariableFromRax(varType.GetBasicType(),calcType.GetBasicType(),&VarRelativeVar);
 }
-
-// TODO: 消す
-/*
-void SetRefVariable( const char *varname, const char *expression ){
-	////////////////////////////////////////
-	// 変数のタイプ型を識別して、演算を行う
-	////////////////////////////////////////
-
-	int VarType,CalcType;
-	LONG_PTR lpVarIndex,lpCalcIndex;
-	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;
-
-	//NumOpe...（rax、またはxmm0に答えが格納される）
-	int reg=REG_RAX;
-	CalcType=NumOpe(&reg,expression,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
-
-	//結果を格納しているレジスタをブロッキング
-	pobj_BlockReg->lock(reg);
-
-	if(VarType==-1||CalcType==-1) return;
-
-	//変数アドレスを取得
-	RELATIVE_VAR VarRelativeVar;
-	if(!GetVarOffsetReadWrite(
-		varname,
-		&VarType,
-		&VarRelativeVar,
-		&lpVarIndex)) return;
-
-	//レジスタのブロッキングを解除
-	pobj_BlockReg->clear();
-
-	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);
-
-
-	/////////////////////////////////////////////////
-	// rax（実数はxmm0）の内容を変数にコピー
-	/////////////////////////////////////////////////
-	SetVariableFromRax(VarType,CalcType,&VarRelativeVar);
-}
-*/
