Index: BasicCompiler64/NumOpe.cpp
===================================================================
--- BasicCompiler64/NumOpe.cpp	(revision 94)
+++ BasicCompiler64/NumOpe.cpp	(revision 97)
@@ -83,4 +83,418 @@
 }
 
+
+bool VarToReg( RELATIVE_VAR &relativeVar, const Type &baseType, Type &resultType ){
+	int UseReg=pobj_reg->GetNextReg();
+	int XmmReg=pobj_reg->GetNextXmmReg();
+
+	//大きな型への暗黙の変換
+	int bigType = AutoBigCast(baseType.GetBasicType(),resultType.GetBasicType());
+
+	if(resultType.GetBasicType()&FLAG_PTR){
+		//配列ポインタ
+		resultType.SetBasicType( GetPtrType(resultType.GetBasicType()^FLAG_PTR) );
+
+		SetVarPtrToReg(UseReg,&relativeVar);
+	}
+	else if(resultType.IsReal()){
+		//実数型
+		if( resultType.IsDouble() )
+			SetXmmReg_DoubleVariable(&relativeVar,XmmReg);
+		if( resultType.IsSingle() )
+			SetXmmReg_SingleVariable(&relativeVar,XmmReg);
+	}
+	else if( resultType.IsWhole() || resultType.IsObject()){
+		//整数型
+		SetReg_WholeVariable(resultType.GetBasicType(),&relativeVar,UseReg);
+	}
+	else if( resultType.IsStruct() ){
+		//構造体ポインタをUseRegへ格納（構造体は値型）
+		SetVarPtrToReg(UseReg,&relativeVar);
+	}
+	else{
+		return false;
+	}
+
+	if( resultType.GetBasicType() != bigType ){
+		// 大きな型へ変換された場合
+		// ※レジスタの値をキャストする
+		ExtendRegToBigType( UseReg, bigType, resultType.GetBasicType() );
+
+		resultType.SetBasicType( bigType );
+	}
+
+	return true;
+}
+bool TermMemberOpe( const CClass &objClass, const Type &baseType, Type &resultType, const char *termFull, const char *termLeft, const char *member ){
+
+	int UseReg=pobj_reg->GetNextReg();
+	int XmmReg=pobj_reg->GetNextXmmReg();
+
+
+	if( GetMemberType( objClass, member, resultType, 0, false ) ){
+		// メンバが見つかったとき
+
+		//オブジェクトポインタをr11にコピー
+		op_mov_RR( REG_R11, UseReg );
+
+		RELATIVE_VAR relativeVar;
+		relativeVar.dwKind=VAR_DIRECTMEM;
+
+		if( !_member_offset(
+			true,	//エラー表示あり
+			false,	//読み込み専用
+			objClass,
+			member,&relativeVar,resultType,0)){
+				return false;
+		}
+
+		if( !VarToReg( relativeVar, baseType, resultType ) ){
+			SetError(11,termFull,cp);
+		}
+
+		return true;
+	}
+
+
+	///////////////////////////////////////////////////////////////////
+	// 動的メソッドを検索
+	///////////////////////////////////////////////////////////////////
+	vector<UserProc *> userProcs;
+
+	char methodName[VN_SIZE], lpPtrOffset[VN_SIZE], parameter[VN_SIZE], dummy[1];
+	CClass::RefType refType;
+	lstrcpy( methodName, member );
+	GetVarFormatString(methodName,parameter,lpPtrOffset,dummy,refType);
+
+	objClass.EnumMethod( methodName, userProcs );
+	UserProc *pUserProc;
+	if(userProcs.size()){
+		//オーバーロードを解決
+		pUserProc=OverloadSolutionWithStrParam(termFull,userProcs,parameter,termLeft);
+
+		if( pUserProc ){
+
+			resultType = pUserProc->ReturnType();
+
+
+			//////////////////////////////////////////////////////
+			/////    レジスタ資源のバックアップ
+			{	BACKUP_REGISTER_RESOURCE
+			//////////////////////////////////////////////////////
+
+				//オブジェクトポインタをスタックに入れておく
+				//mov qword ptr[rsp+offset],reg     ※スタックフレームを利用
+				pobj_sf->push( UseReg );
+
+				if( !Opcode_CallProc(parameter,pUserProc,PROCFLAG_NEW,termLeft,0 ) ){
+					//レジスタ資源を復元
+					RESTORE_REGISTER_RESOURCE
+
+					return false;
+				}
+
+				pobj_sf->pop();
+
+				/////////////////////
+				// 戻り値の処理
+				/////////////////////
+
+				//大きな型への暗黙の変換
+				int bigType = AutoBigCast(baseType.GetBasicType(), resultType.GetBasicType() );
+
+				if( resultType.GetBasicType() != bigType ){
+					// 大きな型へ変換された場合
+					// ※レジスタの値をキャストする
+					ExtendRegToBigType( REG_RAX, bigType, resultType.GetBasicType() );
+
+					resultType.SetBasicType( bigType );
+				}
+
+				SetUseRegFromRax(resultType.GetBasicType(),UseReg,XmmReg);
+
+
+			/////////////////////////////////////////////
+			//////   レジスタ資源を復元
+				RESTORE_REGISTER_RESOURCE
+			}////////////////////////////////////////////
+			
+			return true;
+		}
+	}
+
+	return false;
+}
+bool TermOpe( const char *term, const Type &baseType, Type &resultType, bool &isLiteral, BOOL *pbUseHeap, bool *pIsClassName = NULL ){
+	char parameter[VN_SIZE];
+
+	// Withを解決
+	char termFull[VN_SIZE];
+	if(term[0]=='.'){
+		GetWithName(termFull);
+		lstrcat(termFull,term);
+	}
+	else lstrcpy(termFull,term);
+
+	char termLeft[VN_SIZE];
+	lstrcpy(termLeft,termFull);
+
+	if( (string)term=="DayOfWeek"){
+		int test=0;
+	}
+
+	// パース
+	char member[VN_SIZE];
+	CClass::RefType refType;
+	if( SplitMemberName( termFull, termLeft, member, refType ) ){
+		///////////////////////////////////////////////////////////////////
+		// オブジェクトとメンバに分解できるとき
+		// termLeft.member
+		///////////////////////////////////////////////////////////////////
+
+		isLiteral = false;
+
+		// オブジェクト側の型を取得
+		bool isClassName = false;
+		Type leftType;
+		if( !TermOpe( termLeft, baseType, leftType, isLiteral, pbUseHeap, &isClassName ) ){
+			return false;
+		}
+
+		if( isClassName ){
+			// 静的メンバ/メソッドの場合
+			goto globalArea;
+		}
+
+		if( !leftType.HasMember() ){
+			// メンバを持たない型の場合
+			return false;
+		}
+
+		return TermMemberOpe( leftType.GetClass(), baseType, resultType, termFull, termLeft, member );
+	}
+
+
+	//////////////////////////////////////////////
+	// クラス名かどうかをチェック（静的メンバ用）
+	//////////////////////////////////////////////
+
+	if( pIsClassName ){
+		if( pobj_DBClass->check( termFull ) ){
+			*pIsClassName = true;
+			return true;
+		}
+	}
+
+
+	/////////////////////////////////////////////////////////////////
+	// グローバル属性エリア
+	/////////////////////////////////////////////////////////////////
+globalArea:
+
+	int UseReg=pobj_reg->GetNextReg();
+	int XmmReg=pobj_reg->GetNextXmmReg();
+
+
+	if(lstrcmpi(termFull,"This")==0){
+		//Thisオブジェクト
+		resultType.SetType( DEF_OBJECT, pobj_CompilingClass );
+
+		SetThisPtrToReg( UseReg );
+
+		isLiteral = false;
+
+		return true;
+	}
+
+
+	//////////////////////////////////////
+	// 関数（DLL、ユーザー定義、組み込み）
+	//////////////////////////////////////
+	char procName[VN_SIZE];
+	char temporary[8192];
+
+	int i2=GetCallProcName(termFull,procName);
+	if(termFull[i2]=='('){
+		int i4=GetStringInPare_RemovePare(parameter,termFull+i2+1);
+
+		void *pInfo;
+		int idProc=GetProc(procName,(void **)&pInfo);
+
+		if(idProc){
+			//閉じカッコ")"に続く文字がNULLでないとき
+			if(termFull[i2+1+i4+1]!='\0'){
+				SetError(42,NULL,cp);
+			}
+
+
+			//////////////////////////////////////////////////////
+			/////    レジスタ資源のバックアップ
+			{	BACKUP_REGISTER_RESOURCE
+			//////////////////////////////////////////////////////
+
+
+				////////////////
+				// 呼び出し
+				////////////////
+
+				CallProc(idProc,pInfo,procName,parameter,resultType);
+
+
+				/////////////////////
+				// 戻り値の処理
+				/////////////////////
+
+				//大きな型への暗黙の変換
+				int bigType = AutoBigCast(baseType.GetBasicType(), resultType.GetBasicType() );
+
+				if( resultType.GetBasicType() != bigType ){
+					// 大きな型へ変換された場合
+					// ※レジスタの値をキャストする
+					ExtendRegToBigType( REG_RAX, bigType, resultType.GetBasicType() );
+
+					resultType.SetBasicType( bigType );
+				}
+
+				SetUseRegFromRax(resultType.GetBasicType(),UseReg,XmmReg);
+
+			/////////////////////////////////////////////
+			//////   レジスタ資源を復元
+				RESTORE_REGISTER_RESOURCE
+			}////////////////////////////////////////////
+
+			if(resultType.IsStruct()){
+				//構造体が戻ったときはヒープ領域にインスタンスが格納されている
+				//※後にfreeする必要あり
+				// TODO: 解放はGCに任せる
+				*pbUseHeap = 1;
+			}
+
+			isLiteral = false;
+
+			return true;
+		}
+		else if(GetConstCalcBuffer(procName,parameter,temporary)){
+			/////////////////////////
+			// マクロ関数
+			/////////////////////////
+
+			//閉じカッコ")"に続く文字がNULLでないときはエラーにする
+			if(termFull[i2+1+i4+1]!='\0') SetError(42,NULL,cp);
+
+			//マクロ関数の場合
+			NumOpe(&UseReg,temporary,Type(),resultType);
+
+			if(!IS_LITERAL(resultType.GetIndex())){
+				//リテラル値ではなかったとき
+				isLiteral = false;
+			}
+
+			return true;
+		}
+	}
+
+
+	////////////////////////////////
+	// インデクサ（getアクセサ）
+	////////////////////////////////
+
+	char VarName[VN_SIZE],ArrayElements[VN_SIZE];
+	GetArrayElement(termFull,VarName,ArrayElements);
+	if(ArrayElements[0]){
+		GetVarType(VarName,resultType,false);
+		if( resultType.IsObject() ){
+			CallIndexerGetterProc(UseReg,&resultType.GetClass(),VarName,ArrayElements,resultType);
+
+			isLiteral = false;
+
+			return true;
+		}
+	}
+
+
+	////////////////////////////////
+	// 変数
+	////////////////////////////////
+
+	RELATIVE_VAR relativeVar;
+	if(GetVarOffset(
+		false,	//エラー表示なし
+		false,	//読み込み専用
+		termFull,
+		&relativeVar,resultType)){
+		//////////
+		// 変数
+		//////////
+
+		if( !VarToReg( relativeVar, baseType, resultType ) ){
+			SetError(11,termFull,cp);
+		}
+
+		isLiteral = false;
+
+		return true;
+	}
+
+/*
+	////////////////////////////////
+	// 型名
+	////////////////////////////////
+
+	if( Type::StringToType( termFull, resultType ) ){
+		resultType.SetBasicType( resultType.GetBasicType() | FLAG_CAST );
+		return true;
+	}*/
+
+
+	/////////////////////////////////
+	// プロパティ用のメソッド
+	/////////////////////////////////
+
+	//配列要素を排除
+	GetArrayElement(termFull,VarName,ArrayElements);
+
+	if(GetSubHash(VarName,0)){
+
+		//////////////////////////////////////////////////////
+		/////    レジスタ資源のバックアップ
+		{	BACKUP_REGISTER_RESOURCE
+		//////////////////////////////////////////////////////
+
+			CallPropertyMethod(termFull,NULL,resultType);
+
+			//大きな型への暗黙の変換
+			int bigType = AutoBigCast(baseType.GetBasicType(), resultType.GetBasicType() );
+
+			if( resultType.GetBasicType() != bigType ){
+				// 大きな型へ変換された場合
+				// ※レジスタの値をキャストする
+				ExtendRegToBigType( REG_RAX, bigType, resultType.GetBasicType() );
+
+				resultType.SetBasicType( bigType );
+			}
+
+			SetUseRegFromRax(resultType.GetBasicType(),UseReg,XmmReg);
+
+		/////////////////////////////////////////////
+		//////   レジスタ資源を復元
+			RESTORE_REGISTER_RESOURCE
+		}////////////////////////////////////////////
+
+		if(resultType.IsStruct()){
+			//構造体が戻ったときはヒープ領域にインスタンスが格納されている
+			//※後にfreeする必要あり
+			// TODO: 解放はGCに任せる
+			*pbUseHeap = 1;
+		}
+
+		isLiteral = false;
+
+		return true;
+	}
+
+
+	return false;
+}
+
 bool NumOpe( int *pReg,
 			const char *expression,
@@ -89,6 +503,6 @@
 			BOOL *pbUseHeap ){
 
-	int i,i2,i3,i4;
-	char temporary[1024],temp2[1024],temp3[1024];
+	int i,i2,i3;
+	char temporary[1024],temp2[1024];
 
 	if(expression[0]=='\0'){
@@ -289,4 +703,22 @@
 				term=values[i];
 
+				if( calc[i+1]%100 == CALC_AS ){
+					// As演算子の右辺値
+					//型名
+					if( Type::StringToType( term, resultType ) ){
+						resultType.SetBasicType( resultType.GetBasicType() | FLAG_CAST );
+					}
+					else{
+						SetError(3, term, cp );
+						goto error;
+					}
+
+					type_stack[sp] = resultType.GetBasicType();
+					index_stack[sp] = resultType.GetIndex();
+					sp++;
+
+					break;
+				}
+
 				if(term[0]=='\"'){
 					//リテラル文字列
@@ -298,22 +730,20 @@
 StrLiteral:
 
-					if( baseType.IsObject() ){
-						if( baseType.IsStringObject() ){
-							//要求タイプがStringのとき
-
-							//String型オブジェクトを生成
-							NewStringObject(UseReg,term);
-
-							extern CClass *pobj_StringClass;
-							type_stack[sp]=DEF_OBJECT;
-							index_stack[sp]=(LONG_PTR)pobj_StringClass;
-							bLiteralCalculation=0;
-
-							if(bXmm) pobj_reg->LockXmmReg();
-							else pobj_reg->LockReg();
-
-							sp++;
-							break;
-						}
+					if( baseType.IsObject() || baseType.IsNull() ){
+						//要求タイプがオブジェクト、または未定のとき
+
+						//String型オブジェクトを生成
+						NewStringObject(UseReg,term);
+
+						extern CClass *pobj_StringClass;
+						type_stack[sp]=DEF_OBJECT;
+						index_stack[sp]=(LONG_PTR)pobj_StringClass;
+						bLiteralCalculation=0;
+
+						if(bXmm) pobj_reg->LockXmmReg();
+						else pobj_reg->LockReg();
+
+						sp++;
+						break;
 					}
 
@@ -353,141 +783,56 @@
 					// 何らかの識別子
 
-					//////////////////////////////////////
-					// 関数（DLL、ユーザー定義、組み込み）
-					//////////////////////////////////////
-
-					i2=GetCallProcName(term,temporary);
-					if(term[i2]=='('){
-						i4=GetStringInPare_RemovePare(temp2,term+i2+1);
-
-						void *pInfo;
-						int idProc=GetProc(temporary,(void **)&pInfo);
-
-						Type resultType;
-						if(idProc){
-							//閉じカッコ")"に続く文字がNULLでないとき
-							if(term[i2+1+i4+1]!='\0'){
-								if( term[i2+1+i4+1] == '.'
-									|| term[i2+1+i4+1] == 1 && term[i2+1+i4+2] == ESC_PSMEM ){
-										goto NonProc;
-								}
-								else{
-									SetError(42,NULL,cp);
+					bool isLiteral;
+					if( TermOpe( term, baseType, resultType, isLiteral, &bUseHeap[sp] ) ){
+						if(resultType.IsNull()){
+							//戻り値が存在しないとき
+							for(i2=0;;i2++){
+								if(term[i2]=='('||term[i2]=='\0'){
+									term[i2]=0;
+									break;
 								}
 							}
-
-
-							//////////////////////////////////////////////////////
-							/////    レジスタ資源のバックアップ
-							{	BACKUP_REGISTER_RESOURCE
-							//////////////////////////////////////////////////////
-
-
-								////////////////
-								// 呼び出し
-								////////////////
-
-								CallProc(idProc,pInfo,temporary,temp2,resultType);
-								if(resultType.IsNull()){
-									//戻り値が存在しないとき
-									for(i2=2;;i2++){
-										if(term[i2]=='('||term[i2]=='\0'){
-											term[i2]=0;
-											break;
-										}
-									}
-									SetError(38,term,cp);
-
-									//レジスタ資源を復元
-									RESTORE_REGISTER_RESOURCE
-
-									goto error;
+							SetError(38,term,cp);
+
+							goto error;
+						}
+
+						type_stack[sp] = resultType.GetBasicType();
+						index_stack[sp] = resultType.GetIndex();
+
+						if( !isLiteral ){
+							bLiteralCalculation=0;
+						}
+
+						if( resultType.GetBasicType() & FLAG_CAST ){
+							// 型名のみ
+							SetError();
+						}
+						else{
+							if( resultType.IsReal() == false && UseReg==REG_R14 ){
+								//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+								pobj_sf->push(REG_R14);
+							}
+							if( resultType.IsReal() && XmmReg==REG_XMM4 ){
+								if(resultType.IsDouble()){
+									//movsd qword ptr[rsp+offset],xmm4	※スタックフレームを利用
+									pobj_sf->push(REG_XMM4,sizeof(double));
 								}
-
-
-								/////////////////////
-								// 戻り値の処理
-								/////////////////////
-
-								//大きな型への暗黙の変換
-								type_stack[sp]=AutoBigCast(baseType.GetBasicType(),resultType.GetBasicType());
-								index_stack[sp] = resultType.GetIndex();
-								bLiteralCalculation=0;
-
-								if( type_stack[sp] != resultType.GetBasicType() ){
-									// 大きな型へ変換された場合
-									// ※レジスタの値をキャストする
-									ExtendRegToBigType( REG_RAX, type_stack[sp], resultType.GetBasicType() );
+								if(resultType.IsSingle()){
+									//movss dword ptr[rsp+offset],xmm4	※スタックフレームを利用
+									pobj_sf->push(REG_XMM4,sizeof(float));
 								}
-
-								SetUseRegFromRax(resultType.GetBasicType(),UseReg,XmmReg);
-
-								if(resultType.IsReal()) bXmm=1;
-								else bXmm=0;
-
-							/////////////////////////////////////////////
-							//////   レジスタ資源を復元
-								RESTORE_REGISTER_RESOURCE
-							}////////////////////////////////////////////
-
-
-							if(bXmm) pobj_reg->LockXmmReg();
-							else pobj_reg->LockReg();
-
-							if(resultType.IsStruct()){
-								//構造体が戻ったときはヒープ領域にインスタンスが格納されている
-								//※後にfreeする必要あり
-								bUseHeap[sp]=1;
 							}
 
-							sp++;
-							break;
-						}
-						else if(GetConstCalcBuffer(temporary,temp2,temp3)){
-							/////////////////////////
-							// マクロ関数
-							/////////////////////////
-
-							//閉じカッコ")"に続く文字がNULLでないときはエラーにする
-							if(term[i2+1+i4+1]!='\0') SetError(42,NULL,cp);
-
-							//マクロ関数の場合
-							NumOpe(&UseReg,temp3,Type(),resultType);
-
-							if(!IS_LITERAL(resultType.GetIndex())){
-								//リテラル値ではなかったとき
-								bLiteralCalculation=0;
+							if( resultType.IsReal() ){
+								pobj_reg->LockXmmReg();
 							}
-
-							type_stack[sp] = resultType.GetBasicType();
-							index_stack[sp] = resultType.GetIndex();
-
-							if(resultType.IsReal()) pobj_reg->LockXmmReg();
-							else pobj_reg->LockReg();
-
-							sp++;
-							break;
-						}
-					}
-NonProc:
-
-
-					//インデクサ（getアクセサ）
-					char variable[VN_SIZE],array_element[VN_SIZE];
-					GetArrayElement(term,variable,array_element);
-					if(array_element[0]){
-						Type resultType;
-						GetVarType(variable,resultType,0);
-						if( resultType.IsObject() ){
-							CallIndexerGetterProc(UseReg,&resultType.GetClass(),variable,array_element,resultType);
-							type_stack[sp]=resultType.GetBasicType();
-							index_stack[sp]=resultType.GetIndex();
-							bLiteralCalculation=0;
-
-							if(resultType.IsReal()) pobj_reg->LockXmmReg();
-							else pobj_reg->LockReg();
-							sp++;
-							break;
-						}
+							else{
+								pobj_reg->LockReg();
+							}
+						}
+
+						sp++;
+						break;
 					}
 
@@ -516,73 +861,4 @@
 
 						pobj_reg->LockReg();
-						sp++;
-						break;
-					}
-
-
-					RELATIVE_VAR RelativeVar;
-					Type varType;
-					if(GetVarOffset(
-						false,	//エラー表示あり
-						false,	//読み込み専用
-						term,
-						&RelativeVar,varType)){
-						//////////
-						// 変数
-						//////////
-
-						//大きな型への暗黙の変換
-						type_stack[sp]=AutoBigCast(baseType.GetBasicType(),varType.GetBasicType());
-						index_stack[sp] = varType.GetIndex();
-						bLiteralCalculation=0;
-
-						if(varType.GetBasicType()&FLAG_PTR){
-							//配列ポインタ
-							type_stack[sp]=GetPtrType(varType.GetBasicType()^FLAG_PTR);
-
-							SetVarPtrToReg(UseReg,&RelativeVar);
-						}
-						else if(varType.IsReal()){
-							//実数型
-							bXmm=1;
-
-							if( varType.IsDouble() )
-								SetXmmReg_DoubleVariable(&RelativeVar,XmmReg);
-							if( varType.IsSingle() )
-								SetXmmReg_SingleVariable(&RelativeVar,XmmReg);
-						}
-						else if( varType.IsWhole() || varType.IsObject()){
-							//整数型
-							SetReg_WholeVariable(varType.GetBasicType(),&RelativeVar,UseReg);
-						}
-						else if( varType.IsStruct() ){
-							//構造体ポインタをUseRegへ格納（構造体は値型）
-							SetVarPtrToReg(UseReg,&RelativeVar);
-						}
-						else SetError(11,term,cp);
-
-						if( type_stack[sp] != varType.GetBasicType() ){
-							// 大きな型へ変換された場合
-							// ※レジスタの値をキャストする
-							ExtendRegToBigType( UseReg, type_stack[sp], varType.GetBasicType() );
-						}
-
-						if(bXmm==0&&UseReg==REG_R14){
-							//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
-							pobj_sf->push(REG_R14);
-						}
-						if(bXmm&&XmmReg==REG_XMM4){
-							if(varType.IsDouble()){
-								//movsd qword ptr[rsp+offset],xmm4	※スタックフレームを利用
-								pobj_sf->push(REG_XMM4,sizeof(double));
-							}
-							if(varType.IsSingle()){
-								//movss dword ptr[rsp+offset],xmm4	※スタックフレームを利用
-								pobj_sf->push(REG_XMM4,sizeof(float));
-							}
-						}
-
-						if(bXmm) pobj_reg->LockXmmReg();
-						else pobj_reg->LockReg();
 						sp++;
 						break;
@@ -622,69 +898,4 @@
 						}
 					}
-
-
-					//////////////
-					// 型名の場合
-					//////////////
-					Type tempType;
-					if( Type::StringToType( term, tempType ) ){
-						type_stack[sp] = tempType.GetBasicType() | FLAG_CAST;
-						index_stack[sp] = tempType.GetIndex();
-						sp++;
-						break;
-					}
-
-
-					/////////////////////////////////
-					// プロパティ用のメソッド
-					/////////////////////////////////
-
-					//配列要素を排除
-					char VarName[VN_SIZE],ArrayElements[VN_SIZE];
-					GetArrayElement(term,VarName,ArrayElements);
-
-					if(GetSubHash(VarName,0)){
-
-						//////////////////////////////////////////////////////
-						/////    レジスタ資源のバックアップ
-						{	BACKUP_REGISTER_RESOURCE
-						//////////////////////////////////////////////////////
-
-							Type resultType;
-							CallPropertyMethod(term,NULL,resultType);
-
-							//大きな型への暗黙の変換
-							type_stack[sp]=AutoBigCast(baseType.GetBasicType(),resultType.GetBasicType());
-							index_stack[sp]=resultType.GetIndex();
-							bLiteralCalculation=0;
-
-							if( type_stack[sp] != resultType.GetBasicType() ){
-								// 大きな型へ変換された場合
-								// ※レジスタの値をキャストする
-								ExtendRegToBigType( REG_RAX, type_stack[sp], resultType.GetBasicType() );
-							}
-
-							SetUseRegFromRax(resultType.GetBasicType(),UseReg,XmmReg);
-
-							if(IsRealNumberType(type_stack[sp])) bXmm=1;
-							else bXmm=0;
-
-						/////////////////////////////////////////////
-						//////   レジスタ資源を復元
-							RESTORE_REGISTER_RESOURCE
-						}////////////////////////////////////////////
-
-						if(type_stack[sp]==DEF_STRUCT){
-							//構造体が戻ったときはヒープ領域にインスタンスが格納されている
-							//※後にfreeする必要あり
-							bUseHeap[sp]=1;
-						}
-
-						if(bXmm) pobj_reg->LockXmmReg();
-						else pobj_reg->LockReg();
-						sp++;
-						break;
-					}
-
 
 
@@ -735,4 +946,5 @@
 
 						if(XmmReg==REG_XMM4){
+							SetError();		// TODO: 未実装
 							//push term
 							op_push_value(i32data);
