Index: /BasicCompiler32/Compile_Func.cpp
===================================================================
--- /BasicCompiler32/Compile_Func.cpp	(revision 110)
+++ /BasicCompiler32/Compile_Func.cpp	(revision 111)
@@ -2,31 +2,4 @@
 #include "Opcode.h"
 
-int GetFunctionType(int FuncNum){
-	switch(FuncNum){
-		case FUNC_CUDBL:
-			return DEF_DOUBLE;
-		case FUNC_FIX:
-		case FUNC_LEN:
-			return DEF_LONG;
-		case FUNC_ADDRESSOF:
-		case FUNC_SIZEOF:
-		case FUNC_VARPTR:
-		case FUNC_OBJPTR:
-			return DEF_DWORD;
-		case FUNC_GETDOUBLE:
-			return DEF_DOUBLE;
-		case FUNC_GETSINGLE:
-			return DEF_SINGLE;
-		case FUNC_GETQWORD:
-			return DEF_QWORD;
-		case FUNC_GETDWORD:
-			return DEF_DWORD;
-		case FUNC_GETWORD:
-			return DEF_WORD;
-		case FUNC_GETBYTE:
-			return DEF_BYTE;
-	}
-	return 0;
-}
 int GetFunctionFromName(char *FuncName){
 	if(lstrcmpi(FuncName,"CUDbl")==0)		return FUNC_CUDBL;
@@ -411,5 +384,8 @@
 	SetVarPtrToEax(&RelativeVar);
 
-	if( beforeType == DEF_OBJECT && lstrcmpi( Parameter, "This" ) != 0 ){
+	if( lstrcmpi( Parameter, "This" )==0 ){
+		// Thisの場合は特別にオブジェクトポインタが返ってくるので、何もせずに抜ける
+	}
+	else if( beforeType == DEF_OBJECT ){
 		//参照をオブジェクトポインタに変更
 
Index: /BasicCompiler32/Opcode.h
===================================================================
--- /BasicCompiler32/Opcode.h	(revision 110)
+++ /BasicCompiler32/Opcode.h	(revision 111)
@@ -250,5 +250,4 @@
 
 //Compile_Func.cpp
-int GetFunctionType(int FuncNum);
 int GetFunctionFromName(char *FuncName);
 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn = true );
Index: /BasicCompiler64/Compile_Func.cpp
===================================================================
--- /BasicCompiler64/Compile_Func.cpp	(revision 110)
+++ /BasicCompiler64/Compile_Func.cpp	(revision 111)
@@ -2,29 +2,4 @@
 #include "Opcode.h"
 
-int GetFunctionType(int FuncNum){
-	switch(FuncNum){
-		case FUNC_LEN:
-			return DEF_LONG;
-		case FUNC_SIZEOF:
-			return DEF_LONG;
-		case FUNC_ADDRESSOF:
-		case FUNC_VARPTR:
-		case FUNC_OBJPTR:
-			return DEF_PTR_VOID;
-		case FUNC_GETDOUBLE:
-			return DEF_DOUBLE;
-		case FUNC_GETSINGLE:
-			return DEF_SINGLE;
-		case FUNC_GETQWORD:
-			return DEF_QWORD;
-		case FUNC_GETDWORD:
-			return DEF_DWORD;
-		case FUNC_GETWORD:
-			return DEF_WORD;
-		case FUNC_GETBYTE:
-			return DEF_BYTE;
-	}
-	return 0;
-}
 int GetFunctionFromName(char *FuncName){
 	if(lstrcmpi(FuncName,"Len")==0)			return FUNC_LEN;
@@ -229,4 +204,6 @@
 		//mov rax,qword ptr[rax]
 		op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE );
+
+		SetError(-120,NULL,cp);
 	}
 }
@@ -254,5 +231,8 @@
 	SetVarPtrToReg(REG_RAX,&RelativeVar);
 
-	if( beforeType == DEF_OBJECT && lstrcmpi( Parameter, "This" ) != 0 ){
+	if( lstrcmpi( Parameter, "This" )==0 ){
+		// Thisの場合は特別にオブジェクトポインタが返ってくるので、何もせずに抜ける
+	}
+	else if( beforeType == DEF_OBJECT ){
 		//参照をオブジェクトポインタに変更
 
Index: /BasicCompiler64/Opcode.h
===================================================================
--- /BasicCompiler64/Opcode.h	(revision 110)
+++ /BasicCompiler64/Opcode.h	(revision 111)
@@ -389,5 +389,4 @@
 
 //Compile_Func.cpp
-int GetFunctionType(int FuncNum);
 int GetFunctionFromName(char *FuncName);
 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &ReturnTypeInfo, bool isCallOn = true );
Index: /BasicCompiler_Common/ParamImpl.cpp
===================================================================
--- /BasicCompiler_Common/ParamImpl.cpp	(revision 110)
+++ /BasicCompiler_Common/ParamImpl.cpp	(revision 111)
@@ -8,11 +8,12 @@
 
 #define OVERLOAD_MIN_LEVEL 0
-#define OVERLOAD_MAX_LEVEL 5
+#define OVERLOAD_MAX_LEVEL 6
 #define OVERLOAD_LEVEL0 0		// 型調整なし。厳密に等しい
 #define OVERLOAD_LEVEL1 1		// 型調整なし。レベル1以上はオブジェクトの場合は派生関係を考慮
-#define OVERLOAD_LEVEL2 2		// 型調整なし。整数型/実数型レベルでの同一性チェック
-#define OVERLOAD_LEVEL3 3		// 型調整あり。厳密に等しい
-#define OVERLOAD_LEVEL4 4		// 型調整あり。整数型/実数型レベルでの同一性チェック
-#define OVERLOAD_LEVEL5 5		// 型調整あり。数値型/クラス型レベルでの同一性チェック
+#define OVERLOAD_LEVEL2 2		// 型調整なし。整数型/実数型レベルでの同一性チェック（サイズ照合あり）
+#define OVERLOAD_LEVEL3 3		// 型調整なし。整数型/実数型レベルでの同一性チェック
+#define OVERLOAD_LEVEL4 4		// 型調整あり。厳密に等しい
+#define OVERLOAD_LEVEL5 5		// 型調整あり。整数型/実数型レベルでの同一性チェック
+#define OVERLOAD_LEVEL6 6		// 型調整あり。数値型/クラス型レベルでの同一性チェック
 
 ParamImpl::ParamImpl(const char *buffer):
@@ -128,5 +129,5 @@
 
 			NumOpe_GetType(Parms[i],
-				( level <= OVERLOAD_LEVEL2 )? nullParam : param,
+				( level <= OVERLOAD_LEVEL3 )? nullParam : param,
 				argType);
 		}
@@ -136,8 +137,14 @@
 
 		if(argType.GetBasicType()!=param.GetBasicType()){
-			if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL3 ){
+			if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL4 ){
 				return false;
 			}
-			else if( level == OVERLOAD_LEVEL2 || level==OVERLOAD_LEVEL4){
+			else if( level == OVERLOAD_LEVEL2 ){
+				if( !(argType.IsWhole() && param.IsWhole() && argType.GetBasicSize() == param.GetBasicSize() ) ){
+					// サイズ違い
+					return false;
+				}
+			}
+			else if( level == OVERLOAD_LEVEL3 || level==OVERLOAD_LEVEL5){
 				if(!(
 					argType.IsWhole()&&param.IsWhole()||
@@ -147,5 +154,5 @@
 				}
 			}
-			else if(level==OVERLOAD_LEVEL5){
+			else if(level==OVERLOAD_LEVEL6){
 				if(argType.IsObject()||param.IsObject()) return false;
 			}
