Index: BasicCompiler_Common/Exception.cpp
===================================================================
--- BasicCompiler_Common/Exception.cpp	(revision 52)
+++ BasicCompiler_Common/Exception.cpp	(revision 52)
@@ -0,0 +1,19 @@
+#include "Exception.h"
+
+namespace Exception{
+
+
+void TryCommand(){
+}
+void CatchCommand(){
+}
+void FinallyCommand(){
+}
+void EndTryCommand(){
+}
+
+void ThrowCommand( const char *Parameter ){
+}
+
+
+}	// Exception
Index: BasicCompiler_Common/Exception.h
===================================================================
--- BasicCompiler_Common/Exception.h	(revision 52)
+++ BasicCompiler_Common/Exception.h	(revision 52)
@@ -0,0 +1,11 @@
+
+namespace Exception{
+
+	void TryCommand();
+	void CatchCommand();
+	void FinallyCommand();
+	void EndTryCommand();
+
+	void ThrowCommand( const char *Parameter );
+
+}
Index: BasicCompiler_Common/Parameter.cpp
===================================================================
--- BasicCompiler_Common/Parameter.cpp	(revision 52)
+++ BasicCompiler_Common/Parameter.cpp	(revision 52)
@@ -0,0 +1,325 @@
+#include "common.h"
+
+#ifdef _AMD64_
+#include "../BasicCompiler64/opcode.h"
+#else
+#include "../BasicCompiler32/opcode.h"
+#endif
+
+CParameter::CParameter(const char *buffer){
+	///////////////////////////
+	// パラメータ文字列を整理
+	///////////////////////////
+
+	extern HANDLE hHeap;
+	int i,i2,i3;
+	char temporary[VN_SIZE];
+
+	i=0;
+	ParmsNum=0;
+	while(1){
+		if(buffer[i]=='\0') break;
+
+		for(i2=0;;i2++,i++){
+			if(buffer[i]=='\"'){
+				temporary[i2]=buffer[i];
+				for(i++,i2++;;i++,i2++){
+					temporary[i2]=buffer[i];
+					if(buffer[i]=='\"') break;
+				}
+				continue;
+			}
+
+			if(buffer[i]=='('){
+				i3=GetStringInPare(temporary+i2,buffer+i);
+				i2+=i3-1;
+				i+=i3-1;
+				continue;
+			}
+			if(buffer[i]=='['){
+				i3=GetStringInBracket(temporary+i2,buffer+i);
+				i2+=i3-1;
+				i+=i3-1;
+				continue;
+			}
+
+			if(buffer[i]==','||buffer[i]=='\0'){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=buffer[i];
+		}
+
+		Parms[ParmsNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+		lstrcpy(Parms[ParmsNum],temporary);
+		ParmsNum++;
+
+		if(buffer[i]==',') i++;
+	}
+
+	ReturnTypeInfo.type=0;
+	ReturnTypeInfo.u.lpIndex=0;
+}
+CParameter::CParameter(const PARAMETER_INFO *pParamInfo,const int ParmNum){
+	int i;
+	for(i=0;i<ParmNum;i++){
+		Parms[i]=0;
+		types[i].type=pParamInfo[i].type;
+		types[i].u.lpIndex=pParamInfo[i].u.index;
+	}
+	this->ParmsNum=ParmNum;
+
+	ReturnTypeInfo.type=0;
+	ReturnTypeInfo.u.lpIndex=0;
+}
+CParameter::~CParameter(){
+	int i2;
+
+	//パラメータ文字列を解放
+	for(i2=0;i2<ParmsNum;i2++){
+		if(Parms[i2]==(char *)-1) continue;
+
+		if(Parms[i2]) HeapDefaultFree(Parms[i2]);
+	}
+}
+
+void CParameter::SetReturnType(TYPEINFO *pTypeInfo){
+	ReturnTypeInfo=*pTypeInfo;
+}
+
+BOOL CParameter::_overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level){
+	//パラメータを識別してオーバーロードを解決
+
+	//パラメータの個数が不一致の場合
+	if(pi_num!=ParmsNum) return 0;
+
+	int i,type;
+	LONG_PTR lpIndex;
+	for(i=0;i<pi_num;i++){
+		if(Parms[i]){
+			TYPEINFO BaseType={ppi[i].type,ppi[i].u.index};
+			type=NumOpe_GetType(Parms[i],&BaseType,&lpIndex);
+		}
+		else{
+			type=types[i].type;
+			lpIndex=types[i].u.lpIndex;
+		}
+
+		if(type!=ppi[i].type){
+			if(overload_level==OVERLOAD_LEVEL1){
+				return 0;
+			}
+			else if(overload_level==OVERLOAD_LEVEL2){
+				if(!(
+					IsWholeNumberType(type)&&IsWholeNumberType(ppi[i].type)||
+					IsRealNumberType(type)&&IsRealNumberType(ppi[i].type)
+					)) return 0;
+			}
+			else if(overload_level==OVERLOAD_LEVEL3){
+				if(type==DEF_OBJECT||ppi[i].type==DEF_OBJECT) return 0;
+			}
+		}
+		else{
+			if(NATURAL_TYPE(type)==DEF_OBJECT){
+				if(lpIndex!=ppi[i].u.index) return 0;
+			}
+		}
+	}
+
+	if(pReturnTypeInfo){
+		//戻り値も比較対象にする
+		if(ReturnTypeInfo.type==pReturnTypeInfo->type){
+			if(NATURAL_TYPE(ReturnTypeInfo.type)==DEF_OBJECT){
+				if(ReturnTypeInfo.u.lpIndex != pReturnTypeInfo->u.lpIndex) return 0;
+			}
+		}
+		else return 0;
+	}
+
+	return 1;
+}
+
+SUBINFO *CParameter::OverloadSolutionWithReturnType( const char *name, std::vector<SUBINFO *> &subs ){
+	int sw=0;
+	SUBINFO *psi;
+	psi=0;
+
+	foreach( psi, subs ){
+
+		TYPEINFO ReturnTypeInfo;
+		ReturnTypeInfo.type=psi->ReturnType;
+		ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+		//エラーチェック
+		if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL1)){
+			if(sw){
+				SetError(52,name,cp);
+				return 0;
+			}
+			sw=1;
+			break;
+		}
+	}
+
+	if(!sw){
+		foreach( psi, subs ){
+
+			TYPEINFO ReturnTypeInfo;
+			ReturnTypeInfo.type=psi->ReturnType;
+			ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL2)){
+				if(sw){
+					SetError(52,name,cp);
+					return 0;
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		foreach( psi, subs ){
+
+			TYPEINFO ReturnTypeInfo;
+			ReturnTypeInfo.type=psi->ReturnType;
+			ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL3)){
+				if(sw){
+					SetError(52,name,cp);
+					return 0;
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		SetError(52,name,cp);
+		return 0;
+	}
+
+	return psi;
+}
+SUBINFO *CParameter::OverloadSolution( const char *name, std::vector<SUBINFO *> &subs ){
+	int sw=0;
+	SUBINFO *psi;
+	psi=0;
+
+	foreach( psi, subs ){
+
+		//エラーチェック
+		if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL1)){
+			if(sw){
+				return OverloadSolutionWithReturnType(name,subs);
+			}
+			sw=1;
+			break;
+		}
+	}
+
+	if(!sw){
+		foreach( psi, subs ){
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL2)){
+				if(sw){
+					return OverloadSolutionWithReturnType(name,subs);
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		foreach( psi, subs ){
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL3)){
+				if(sw){
+					return OverloadSolutionWithReturnType(name,subs);
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		SUBINFO *temp_psi;
+		foreach( temp_psi, subs ){
+
+			//エラーチェック
+			if(temp_psi->ParmNum==this->ParmsNum){
+				if(sw){
+					sw=0;
+					break;
+				}
+				sw=1;
+
+				psi=temp_psi;
+			}
+		}
+	}
+
+	if(!sw){
+		SetError(52,name,cp);
+		return 0;
+	}
+
+	return psi;
+}
+
+BOOL CParameter::ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
+	if(ParmsNum>pi_num){
+		if(ppi[pi_num-1].type!=DEF_ELLIPSE){
+			//パラメータが多すぎるとき
+			SetError(10,FuncName,cp);
+			return 0;
+		}
+	}
+	else if(ParmsNum<pi_num){
+		if(ParmsNum<SecondParmNum){
+			if(ppi[ParmsNum].type==DEF_ELLIPSE){
+				return 1;
+			}
+
+			//パラメータが少なすぎるとき
+			SetError(10,FuncName,cp);
+			return 0;
+		}
+
+		//省略パラメータに "0" を指定する
+		for(;ParmsNum < pi_num;ParmsNum++){
+			extern HANDLE hHeap;
+			char temporary[64];
+			if(ppi[ParmsNum].bByVal) lstrcpy(temporary,"0");
+			else sprintf(temporary,"%c%c0",1,ESC_BYVAL);
+			Parms[ParmsNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(Parms[ParmsNum],temporary);
+		}
+	}
+
+	return 1;
+}
+
+void CParameter::MacroParameterSupport(PARAMETER_INFO *ppi){
+	int i;
+	for(i=0;i<ParmsNum;i++){
+		if(Parms[i][0]=='\0'){
+			extern HANDLE hHeap;
+			char temporary[64];
+			if(ppi[i].bByVal) lstrcpy(temporary,"0");
+			else sprintf(temporary,"%c%c0",1,ESC_BYVAL);
+			HeapDefaultFree(Parms[i]);
+			Parms[i]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(Parms[i],temporary);
+		}
+	}
+}
