Changeset 64 in dev for BasicCompiler_Common/Parameter.cpp


Ignore:
Timestamp:
Mar 8, 2007, 2:49:34 AM (17 years ago)
Author:
dai_9181
Message:

すべてのオブジェクトを参照型に切り替えた。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Parameter.cpp

    r52 r64  
    5858    }
    5959
    60     ReturnTypeInfo.type=0;
    61     ReturnTypeInfo.u.lpIndex=0;
     60    ReturnTypeInfo.type=DEF_NON;
     61    ReturnTypeInfo.u.lpIndex=-1;
    6262}
    6363CParameter::CParameter(const PARAMETER_INFO *pParamInfo,const int ParmNum){
     
    7070    this->ParmsNum=ParmNum;
    7171
    72     ReturnTypeInfo.type=0;
    73     ReturnTypeInfo.u.lpIndex=0;
     72    ReturnTypeInfo.type=DEF_NON;
     73    ReturnTypeInfo.u.lpIndex=-1;
    7474}
    7575CParameter::~CParameter(){
     
    9999        if(Parms[i]){
    100100            TYPEINFO BaseType={ppi[i].type,ppi[i].u.index};
    101             type=NumOpe_GetType(Parms[i],&BaseType,&lpIndex);
     101            type=NumOpe_GetType(Parms[i],
     102                (overload_level==OVERLOAD_LEVEL0) ? NULL : &BaseType,
     103                &lpIndex);
    102104        }
    103105        else{
     
    107109
    108110        if(type!=ppi[i].type){
    109             if(overload_level==OVERLOAD_LEVEL1){
     111            if(overload_level==OVERLOAD_LEVEL1 || overload_level == OVERLOAD_LEVEL0){
    110112                return 0;
    111113            }
     
    121123        }
    122124        else{
    123             if(NATURAL_TYPE(type)==DEF_OBJECT){
     125            if(NATURAL_TYPE(type)==DEF_OBJECT || NATURAL_TYPE(type)==DEF_STRUCT){
    124126                if(lpIndex!=ppi[i].u.index) return 0;
    125127            }
     
    130132        //戻り値も比較対象にする
    131133        if(ReturnTypeInfo.type==pReturnTypeInfo->type){
    132             if(NATURAL_TYPE(ReturnTypeInfo.type)==DEF_OBJECT){
    133                 if(ReturnTypeInfo.u.lpIndex != pReturnTypeInfo->u.lpIndex) return 0;
     134            if(NATURAL_TYPE(ReturnTypeInfo.type)==DEF_OBJECT
     135                || NATURAL_TYPE(ReturnTypeInfo.type)==DEF_STRUCT ){
     136                    if(ReturnTypeInfo.u.lpIndex != pReturnTypeInfo->u.lpIndex) return 0;
    134137            }
    135138        }
     
    145148    psi=0;
    146149
    147     foreach( psi, subs ){
    148 
    149         TYPEINFO ReturnTypeInfo;
    150         ReturnTypeInfo.type=psi->ReturnType;
    151         ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
    152 
    153         //エラーチェック
    154         if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL1)){
    155             if(sw){
    156                 SetError(52,name,cp);
    157                 return 0;
    158             }
    159             sw=1;
    160             break;
    161         }
    162     }
    163 
    164     if(!sw){
    165         foreach( psi, subs ){
     150    for( int level=OVERLOAD_MIN_LEVEL; level<=OVERLOAD_MAX_LEVEL; level++ ){
     151        foreach( SUBINFO *temp_psi, subs ){
    166152
    167153            TYPEINFO ReturnTypeInfo;
    168             ReturnTypeInfo.type=psi->ReturnType;
    169             ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
     154            ReturnTypeInfo.type=temp_psi->ReturnType;
     155            ReturnTypeInfo.u.lpIndex=temp_psi->u.ReturnIndex;
    170156
    171157            //エラーチェック
    172             if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL2)){
     158            if(_overload_check(temp_psi->pParmInfo,temp_psi->ParmNum,&ReturnTypeInfo,level)){
    173159                if(sw){
    174160                    SetError(52,name,cp);
     
    176162                }
    177163                sw=1;
     164
     165                psi = temp_psi;
    178166                break;
    179167            }
    180168        }
    181     }
    182 
    183     if(!sw){
    184         foreach( psi, subs ){
    185 
    186             TYPEINFO ReturnTypeInfo;
    187             ReturnTypeInfo.type=psi->ReturnType;
    188             ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
    189 
    190             //エラーチェック
    191             if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL3)){
    192                 if(sw){
    193                     SetError(52,name,cp);
    194                     return 0;
    195                 }
    196                 sw=1;
    197                 break;
    198             }
    199         }
     169
     170        if( sw ) break;
    200171    }
    201172
     
    212183    psi=0;
    213184
    214     foreach( psi, subs ){
    215 
    216         //エラーチェック
    217         if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL1)){
    218             if(sw){
    219                 return OverloadSolutionWithReturnType(name,subs);
    220             }
    221             sw=1;
    222             break;
    223         }
    224     }
    225 
    226     if(!sw){
    227         foreach( psi, subs ){
     185    for( int level=OVERLOAD_MIN_LEVEL; level<=OVERLOAD_MAX_LEVEL; level++ ){
     186
     187        foreach( SUBINFO *temp_psi, subs ){
    228188
    229189            //エラーチェック
    230             if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL2)){
     190            if(_overload_check(temp_psi->pParmInfo,temp_psi->ParmNum,NULL,level)){
    231191                if(sw){
    232192                    return OverloadSolutionWithReturnType(name,subs);
    233193                }
    234194                sw=1;
    235                 break;
    236             }
    237         }
    238     }
    239 
    240     if(!sw){
    241         foreach( psi, subs ){
    242 
    243             //エラーチェック
    244             if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL3)){
    245                 if(sw){
    246                     return OverloadSolutionWithReturnType(name,subs);
    247                 }
    248                 sw=1;
    249                 break;
    250             }
    251         }
     195
     196                psi = temp_psi;
     197            }
     198        }
     199
     200        if( sw ) break;
    252201    }
    253202
Note: See TracChangeset for help on using the changeset viewer.