Changeset 77 in dev for BasicCompiler_Common/ParamImpl.cpp


Ignore:
Timestamp:
Mar 22, 2007, 2:41:19 AM (18 years ago)
Author:
dai_9181
Message:

デフォルトパラメータに対応。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/ParamImpl.cpp

    r75 r77  
    9393    //パラメータの個数が不一致の場合
    9494    int max = (int)targetParms.size();
    95     if(max!=ParmsNum){
     95
     96    if( ParmsNum > max ){
     97        // 実引数が駆り引数より多いとき
     98        // ※無条件で不一致
    9699        return false;
    97100    }
     
    100103    for(int i=0;i<max;i++){
    101104        Parameter &param = *targetParms[i];
     105
     106        if( i >= ParmsNum ){
     107            // 引数が多いとき
     108            if( param.GetInitValue().size() > 0 ){
     109                // 初期値が指定されているパラメータを考慮
     110                return true;
     111            }
     112            else{
     113                return false;
     114            }
     115        }
    102116
    103117        if(Parms[i]){
     
    125139            }
    126140            else if(level==OVERLOAD_LEVEL3){
    127                 if(argType.GetBasicType()==DEF_OBJECT||param.GetBasicType()==DEF_OBJECT) return 0;
     141                if(argType.GetBasicType()==DEF_OBJECT||param.GetBasicType()==DEF_OBJECT) return false;
    128142            }
    129143        }
     
    222236
    223237    return pUserProc;
     238}
     239
     240void ParamImpl::ApplyDefaultParameters( const Parameters &params ){
     241    if( ParmsNum == (int)params.size() ){
     242        // デフォルト引数の適用が不必要なとき
     243        return;
     244    }
     245
     246    while( ParmsNum < (int)params.size() ){
     247        Parameter &param = *params[ParmsNum];
     248
     249        Parms[ParmsNum]=(char *)HeapAlloc(hHeap,0,param.GetInitValue().size() + 1 );
     250        lstrcpy(Parms[ParmsNum],param.GetInitValue().c_str() );
     251        ParmsNum++;
     252    }
    224253}
    225254
Note: See TracChangeset for help on using the changeset viewer.