Ignore:
Timestamp:
May 7, 2007, 2:41:36 AM (18 years ago)
Author:
dai_9181
Message:

ObjPtr(This)がエラーになるバグを修正。
オーバーロードのチェックレベルを一つ増やした(整数型のサイズ照合によるオーバーロードチェックを可能にした)。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/ParamImpl.cpp

    r100 r111  
    88
    99#define OVERLOAD_MIN_LEVEL 0
    10 #define OVERLOAD_MAX_LEVEL 5
     10#define OVERLOAD_MAX_LEVEL 6
    1111#define OVERLOAD_LEVEL0 0       // 型調整なし。厳密に等しい
    1212#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       // 型調整あり。数値型/クラス型レベルでの同一性チェック
    1718
    1819ParamImpl::ParamImpl(const char *buffer):
     
    128129
    129130            NumOpe_GetType(Parms[i],
    130                 ( level <= OVERLOAD_LEVEL2 )? nullParam : param,
     131                ( level <= OVERLOAD_LEVEL3 )? nullParam : param,
    131132                argType);
    132133        }
     
    136137
    137138        if(argType.GetBasicType()!=param.GetBasicType()){
    138             if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL3 ){
     139            if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL4 ){
    139140                return false;
    140141            }
    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){
    142149                if(!(
    143150                    argType.IsWhole()&&param.IsWhole()||
     
    147154                }
    148155            }
    149             else if(level==OVERLOAD_LEVEL5){
     156            else if(level==OVERLOAD_LEVEL6){
    150157                if(argType.IsObject()||param.IsObject()) return false;
    151158            }
Note: See TracChangeset for help on using the changeset viewer.