Changeset 111 in dev
- Timestamp:
- May 7, 2007, 2:41:36 AM (18 years ago)
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/Compile_Func.cpp
r110 r111 2 2 #include "Opcode.h" 3 3 4 int GetFunctionType(int FuncNum){5 switch(FuncNum){6 case FUNC_CUDBL:7 return DEF_DOUBLE;8 case FUNC_FIX:9 case FUNC_LEN:10 return DEF_LONG;11 case FUNC_ADDRESSOF:12 case FUNC_SIZEOF:13 case FUNC_VARPTR:14 case FUNC_OBJPTR:15 return DEF_DWORD;16 case FUNC_GETDOUBLE:17 return DEF_DOUBLE;18 case FUNC_GETSINGLE:19 return DEF_SINGLE;20 case FUNC_GETQWORD:21 return DEF_QWORD;22 case FUNC_GETDWORD:23 return DEF_DWORD;24 case FUNC_GETWORD:25 return DEF_WORD;26 case FUNC_GETBYTE:27 return DEF_BYTE;28 }29 return 0;30 }31 4 int GetFunctionFromName(char *FuncName){ 32 5 if(lstrcmpi(FuncName,"CUDbl")==0) return FUNC_CUDBL; … … 411 384 SetVarPtrToEax(&RelativeVar); 412 385 413 if( beforeType == DEF_OBJECT && lstrcmpi( Parameter, "This" ) != 0 ){ 386 if( lstrcmpi( Parameter, "This" )==0 ){ 387 // Thisの場合は特別にオブジェクトポインタが返ってくるので、何もせずに抜ける 388 } 389 else if( beforeType == DEF_OBJECT ){ 414 390 //参照をオブジェクトポインタに変更 415 391 -
BasicCompiler32/Opcode.h
r97 r111 250 250 251 251 //Compile_Func.cpp 252 int GetFunctionType(int FuncNum);253 252 int GetFunctionFromName(char *FuncName); 254 253 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn = true ); -
BasicCompiler64/Compile_Func.cpp
r109 r111 2 2 #include "Opcode.h" 3 3 4 int GetFunctionType(int FuncNum){5 switch(FuncNum){6 case FUNC_LEN:7 return DEF_LONG;8 case FUNC_SIZEOF:9 return DEF_LONG;10 case FUNC_ADDRESSOF:11 case FUNC_VARPTR:12 case FUNC_OBJPTR:13 return DEF_PTR_VOID;14 case FUNC_GETDOUBLE:15 return DEF_DOUBLE;16 case FUNC_GETSINGLE:17 return DEF_SINGLE;18 case FUNC_GETQWORD:19 return DEF_QWORD;20 case FUNC_GETDWORD:21 return DEF_DWORD;22 case FUNC_GETWORD:23 return DEF_WORD;24 case FUNC_GETBYTE:25 return DEF_BYTE;26 }27 return 0;28 }29 4 int GetFunctionFromName(char *FuncName){ 30 5 if(lstrcmpi(FuncName,"Len")==0) return FUNC_LEN; … … 229 204 //mov rax,qword ptr[rax] 230 205 op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE ); 206 207 SetError(-120,NULL,cp); 231 208 } 232 209 } … … 254 231 SetVarPtrToReg(REG_RAX,&RelativeVar); 255 232 256 if( beforeType == DEF_OBJECT && lstrcmpi( Parameter, "This" ) != 0 ){ 233 if( lstrcmpi( Parameter, "This" )==0 ){ 234 // Thisの場合は特別にオブジェクトポインタが返ってくるので、何もせずに抜ける 235 } 236 else if( beforeType == DEF_OBJECT ){ 257 237 //参照をオブジェクトポインタに変更 258 238 -
BasicCompiler64/Opcode.h
r97 r111 389 389 390 390 //Compile_Func.cpp 391 int GetFunctionType(int FuncNum);392 391 int GetFunctionFromName(char *FuncName); 393 392 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &ReturnTypeInfo, bool isCallOn = true ); -
BasicCompiler_Common/ParamImpl.cpp
r100 r111 8 8 9 9 #define OVERLOAD_MIN_LEVEL 0 10 #define OVERLOAD_MAX_LEVEL 510 #define OVERLOAD_MAX_LEVEL 6 11 11 #define OVERLOAD_LEVEL0 0 // 型調整なし。厳密に等しい 12 12 #define OVERLOAD_LEVEL1 1 // 型調整なし。レベル1以上はオブジェクトの場合は派生関係を考慮 13 #define OVERLOAD_LEVEL2 2 // 型調整なし。整数型/実数型レベルでの同一性チェック 14 #define OVERLOAD_LEVEL3 3 // 型調整あり。厳密に等しい 15 #define OVERLOAD_LEVEL4 4 // 型調整あり。整数型/実数型レベルでの同一性チェック 16 #define OVERLOAD_LEVEL5 5 // 型調整あり。数値型/クラス型レベルでの同一性チェック 13 #define OVERLOAD_LEVEL2 2 // 型調整なし。整数型/実数型レベルでの同一性チェック(サイズ照合あり) 14 #define OVERLOAD_LEVEL3 3 // 型調整なし。整数型/実数型レベルでの同一性チェック 15 #define OVERLOAD_LEVEL4 4 // 型調整あり。厳密に等しい 16 #define OVERLOAD_LEVEL5 5 // 型調整あり。整数型/実数型レベルでの同一性チェック 17 #define OVERLOAD_LEVEL6 6 // 型調整あり。数値型/クラス型レベルでの同一性チェック 17 18 18 19 ParamImpl::ParamImpl(const char *buffer): … … 128 129 129 130 NumOpe_GetType(Parms[i], 130 ( level <= OVERLOAD_LEVEL 2)? nullParam : param,131 ( level <= OVERLOAD_LEVEL3 )? nullParam : param, 131 132 argType); 132 133 } … … 136 137 137 138 if(argType.GetBasicType()!=param.GetBasicType()){ 138 if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL 3){139 if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL4 ){ 139 140 return false; 140 141 } 141 else if( level == OVERLOAD_LEVEL2 || level==OVERLOAD_LEVEL4){ 142 else if( level == OVERLOAD_LEVEL2 ){ 143 if( !(argType.IsWhole() && param.IsWhole() && argType.GetBasicSize() == param.GetBasicSize() ) ){ 144 // サイズ違い 145 return false; 146 } 147 } 148 else if( level == OVERLOAD_LEVEL3 || level==OVERLOAD_LEVEL5){ 142 149 if(!( 143 150 argType.IsWhole()&¶m.IsWhole()|| … … 147 154 } 148 155 } 149 else if(level==OVERLOAD_LEVEL 5){156 else if(level==OVERLOAD_LEVEL6){ 150 157 if(argType.IsObject()||param.IsObject()) return false; 151 158 }
Note:
See TracChangeset
for help on using the changeset viewer.