Changeset 90 in dev for BasicCompiler_Common/ParamImpl.cpp


Ignore:
Timestamp:
Apr 7, 2007, 3:02:29 PM (18 years ago)
Author:
dai_9181
Message:

実行時型情報の生成にほぼ対応した。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/ParamImpl.cpp

    r84 r90  
    1010#define OVERLOAD_MAX_LEVEL 4
    1111#define OVERLOAD_LEVEL0 0       // 型調整なし。厳密に等しい
    12 #define OVERLOAD_LEVEL1 1       // 型調整なし。整数型/実数型レベルでの同一性チェック
    13 #define OVERLOAD_LEVEL2 2       // 型調整あり。厳密に等しい
    14 #define OVERLOAD_LEVEL3 3       // 型調整あり。整数型/実数型レベルでの同一性チェック
    15 #define OVERLOAD_LEVEL4 4       // 型調整あり。数値型/クラス型レベルでの同一性チェック
     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       // 型調整あり。数値型/クラス型レベルでの同一性チェック
    1617
    1718ParamImpl::ParamImpl(const char *buffer):
     
    127128
    128129            NumOpe_GetType(Parms[i],
    129                 (level==OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1)? nullParam : param,
     130                ( level <= OVERLOAD_LEVEL2 )? nullParam : param,
    130131                argType);
    131132        }
     
    135136
    136137        if(argType.GetBasicType()!=param.GetBasicType()){
    137             if( level == OVERLOAD_LEVEL0 || level==OVERLOAD_LEVEL2 ){
     138            if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL3 ){
    138139                return false;
    139140            }
    140             else if( level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL3){
     141            else if( level == OVERLOAD_LEVEL2 || level==OVERLOAD_LEVEL4){
    141142                if(!(
    142143                    argType.IsWhole()&&param.IsWhole()||
     
    146147                }
    147148            }
    148             else if(level==OVERLOAD_LEVEL4){
     149            else if(level==OVERLOAD_LEVEL5){
    149150                if(argType.IsObject()||param.IsObject()) return false;
    150151            }
     
    158159            }
    159160            else if( NATURAL_TYPE(argType.GetBasicType())==DEF_OBJECT ){
    160                 if( !param.GetClass().IsEqualsOrSubClass( &argType.GetClass() ) ){
    161                     return false;
     161                if( level == OVERLOAD_LEVEL0 ){
     162                    if( !param.GetClass().IsEquals( &argType.GetClass() ) ){
     163                        return false;
     164                    }
     165                }
     166                else{
     167                    if( !param.GetClass().IsEqualsOrSubClass( &argType.GetClass() ) ){
     168                        return false;
     169                    }
    162170                }
    163171            }
     
    191199
    192200                pUserProc = pTempUserProc;
    193                 break;
    194201            }
    195202        }
Note: See TracChangeset for help on using the changeset viewer.