Index: BasicCompiler32/Compile_Object.cpp
===================================================================
--- BasicCompiler32/Compile_Object.cpp	(revision 73)
+++ BasicCompiler32/Compile_Object.cpp	(revision 75)
@@ -2,5 +2,5 @@
 #include "opcode.h"
 
-void _call_constructor(CClass *pobj_c, const char *CreateParameter,int ObjectSize,BOOL bSomeObjects){
+void _call_constructor( const CClass *pobj_c, const char *CreateParameter,int ObjectSize,BOOL bSomeObjects){
 	////////////////////////////
 	// コンストラクタの呼び出し
@@ -31,19 +31,19 @@
 	////////////////////////
 
-	std::vector<SubInfo *> subs;
+	std::vector<UserProc *> subs;
 	pobj_c->EnumMethod( pobj_c->name, subs );
 
-	SubInfo *psi;
+	UserProc *pUserProc;
 	if( subs.size() > 0 ){
 		//オーバーロードを解決
-		psi=OverloadSolutionWithStrParam(pobj_c->name,
-			subs,CreateParameter,"",NULL);
-
-		if(!psi) return;
+		pUserProc=OverloadSolutionWithStrParam(pobj_c->name,
+			subs,CreateParameter,"");
+
+		if(!pUserProc) return;
 	}
 
 	//コンストラクタを呼び出す
 	Opcode_CallProc(CreateParameter,
-		psi,
+		pUserProc,
 		PROCFLAG_NEW,"",0);
 
@@ -74,5 +74,5 @@
 	}
 }
-void Operator_New( CClass &classObj, const char *objectSizeStr, const char *parameter, const TYPEINFO &baseTypeInfo ){
+void Operator_New( const CClass &classObj, const char *objectSizeStr, const char *parameter, const Type &baseType ){
 	int typeSize = classObj.GetSize();
 
@@ -82,7 +82,12 @@
 	}
 
+	BOOL bSomeObjects=0;
 	if(objectSizeStr[0]){
-		int type = NumOpe(objectSizeStr,0,0,0);
-		ChangeTypeToLong(type);
+		bSomeObjects=1;
+
+		Type tempType;
+		NumOpe(objectSizeStr,Type(),tempType);
+		if( !tempType.IsWhole() ) SetError(49,NULL,cp);
+		ChangeTypeToLong(tempType.GetBasicType());
 
 		//pop eax
@@ -129,16 +134,18 @@
 	}
 
-	if( baseTypeInfo.type == DEF_OBJECT ){
-		//DeleteはGCで処理
+	if( baseType.IsObject() ){
+		// オブジェクト インスタンス
+		// ※DeleteはGCで処理
 
 		//call _System_GC_malloc_ForObject
-		extern SubInfo *pSub_System_GC_malloc_ForObject;
+		extern UserProc *pSub_System_GC_malloc_ForObject;
 		op_call(pSub_System_GC_malloc_ForObject);
 	}
 	else{
-		//明示的なDeleteが必要
+		// オブジェクトポインタ
+		// ※明示的なDeleteが必要
 
 		//call _System_GC_malloc_ForObjectPtr
-		extern SubInfo *pSub_System_GC_malloc_ForObjectPtr;
+		extern UserProc *pSub_System_GC_malloc_ForObjectPtr;
 		op_call(pSub_System_GC_malloc_ForObjectPtr);
 	}
@@ -184,6 +191,6 @@
 	//mov ecx,DestructorProcAddr
 	OpBuffer[obp++]=(char)0xB9;
-	pobj_SubAddrSchedule->add(method->psi,0);
-	method->psi->bUse=1;
+	pobj_SubAddrSchedule->add(method->pUserProc,0);
+	method->pUserProc->Using();
 	obp+=sizeof(long);
 
@@ -209,78 +216,12 @@
 	////////////////////////////
 
-	BOOL bSomeObjects;
-	if(objectSizeStr[0]) bSomeObjects=1;
-	else bSomeObjects=0;
 	_call_constructor(&classObj,parameter,typeSize,bSomeObjects);
 }
-int Operator_New(const char *Parameter,LONG_PTR *plpIndex,const TYPEINFO &baseTypeInfo ){
-	char TypeName[VN_SIZE],CreateParameter[VN_SIZE],objectSizeStr[VN_SIZE];
-	int i,i2;
-
-	i=0;
-
-	if(Parameter[0]=='['){
-		i=GetStringInBracket(objectSizeStr,Parameter);
-
-		SlideString(objectSizeStr+1,-1);
-		objectSizeStr[i-2]=0;
-	}
-	else objectSizeStr[0]=0;
-
-	for(i2=0;;i++,i2++){
-		if(Parameter[i]=='('){
-			TypeName[i2]=0;
-
-			//コンストラクタに渡すパラメータを取得
-			i2=GetStringInPare(CreateParameter,Parameter+i);
-			RemoveStringPare(CreateParameter);
-			i+=i2;
-			if(Parameter[i]!='\0'){
-				SetError(42,NULL,cp);
-				return -1;
-			}
-			break;
-		}
-		TypeName[i2]=Parameter[i];
-		if(Parameter[i]=='\0'){
-			CreateParameter[0]=0;
-			break;
-		}
-	}
-
-	int type,TypeSize;
-	type=GetTypeFixed(TypeName,plpIndex);
-	if(type==-1){
-		SetError(3,TypeName,cp);
-		return -1;
-	}
-	TypeSize=GetTypeSize(type,*plpIndex);
-
-	if(type!=DEF_OBJECT){
-		////////////////////////
-		// 通常のデータ型の場合
-		////////////////////////
-
-		SetError(121,NULL,cp);
-		return -1;
-	}
-
-	CClass *pobj_c;
-	pobj_c=(CClass *)*plpIndex;
-
-	Operator_New( *pobj_c, objectSizeStr, CreateParameter, baseTypeInfo );
-
-	if( baseTypeInfo.type == DEF_OBJECT ){
-		return DEF_OBJECT;
-	}
-	return DEF_PTR_OBJECT;
-}
-
 void OpcodeDelete(const char *Parameter, bool isSweeping){
-	int type;
-
-	type=NumOpe(Parameter,0,0,0);
-	if(type==-1) return;
-	if(!(type==DEF_PTR_OBJECT||type==DEF_PTR_VOID)) SetError(122,NULL,cp);
+	Type tempType;
+	if( !NumOpe(Parameter,Type(),tempType) ){
+		return;
+	}
+	if(!( tempType.IsObjectPtr() || tempType.IsVoidPtr() )) SetError(122,NULL,cp);
 
 	//pop eax
@@ -376,10 +317,10 @@
 	if( isSweeping ){
 		//call _System_GC_free_for_SweepingDelete
-		extern SubInfo *pSub_System_GC_free_for_SweepingDelete;
+		extern UserProc *pSub_System_GC_free_for_SweepingDelete;
 		op_call(pSub_System_GC_free_for_SweepingDelete);
 	}
 	else{
 		//call free
-		extern SubInfo *pSub_free;
+		extern UserProc *pSub_free;
 		op_call(pSub_free);
 	}
