Ignore:
Timestamp:
Jan 13, 2007, 4:26:50 AM (18 years ago)
Author:
dai_9181
Message:

_System_LocalThis(見えないThisポインタパラメータ)を通常のパラメータ保有領域ではなく、リアルパラメータ保有領域に移動した。
メソッドとグローバル関数のオーバーロードに対応(DLL関数オーバーロードには未対応)。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_CallProc.cpp

    r29 r31  
    6868
    6969
    70         ret_type=Opcode_CallProc(Parameter,psi,plpRetIndex,0,ObjectName,RefType);
     70        Opcode_CallProc(Parameter,psi,0,ObjectName,RefType);
     71        if( plpRetIndex ){
     72            *plpRetIndex = psi->u.ReturnIndex;
     73        }
     74        return psi->ReturnType;
    7175    }
    7276    else if(idProc==PROC_DLL){
     
    139143    if(psi){
    140144        //呼び出し
    141         int type;
    142         LONG_PTR lpIndex;
    143         type=Opcode_CallProc(Parameter,psi,&lpIndex,0,ObjectName,RefType);
    144 
    145         if(pRetTypeInfo){
    146             pRetTypeInfo->type=type;
    147             pRetTypeInfo->u.lpIndex=lpIndex;
     145        Opcode_CallProc(Parameter,psi,0,ObjectName,RefType);
     146
     147        if( pRetTypeInfo ){
     148            pRetTypeInfo->type = psi->ReturnType;
     149            pRetTypeInfo->u.lpIndex = psi->u.ReturnIndex;
    148150        }
    149151    }
     
    175177
    176178    //エラーチェック
    177     pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum);
     179    if( !pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum) ){
     180        //パラメータにエラーがあるときは処理を終える
     181        return pi->ReturnType;
     182    }
    178183
    179184    //スタックフレームに存在する既存のパラメータをバックアップ
     
    213218    delete pobj_parameter;
    214219
    215     if(plpIndex) *plpIndex=pi->u.ReturnIndex;
    216 
    217220    return pi->ReturnType;
    218221}
    219222
    220 int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType){
     223void Opcode_CallProc(char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){
    221224    int i,i2;
    222225
     
    224227        if(lstrcmpi(psi->name,"Print")==0){
    225228            Opcode_Print(Parameter,0);
    226             return -1;
     229            return;
    227230        }
    228231        if(lstrcmpi(psi->name,"Input")==0){
    229232            Opcode_Input(Parameter);
    230             return -1;
     233            return;
    231234        }
    232235        if(lstrcmpi(psi->name,"Write")==0){
    233236            Opcode_Print(Parameter,1);
    234             return -1;
     237            return;
    235238        }
    236239    }
     
    282285            if( !pMethod ){
    283286                SetError(300,NULL,cp);
    284                 return -1;
     287                return;
    285288            }
    286289
     
    301304                if(dwAccess==ACCESS_NON){
    302305                    SetError(109,psi->name,cp);
    303                     return -1;
     306                    return;
    304307                }
    305308            }
     
    308311                    dwAccess==ACCESS_NON){
    309312                    SetError(109,psi->name,cp);
    310                     return -1;
     313                    return;
    311314                }
    312315                if(dwAccess==ACCESS_PROTECTED){
    313316                    SetError(110,psi->name,cp);
    314                     return -1;
     317                    return;
    315318                }
    316319            }
     
    320323            if(dwAccess==ACCESS_NON){
    321324                SetError(109,psi->name,cp);
    322                 return -1;
     325                return;
    323326            }
    324327        }
     
    355358
    356359    //エラーチェック
    357     pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum);
     360    if( !pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum) ){
     361        //パラメータにエラーがあるときは処理を終える
     362        return;
     363    }
    358364
    359365    if(psi->dwType==SUBTYPE_MACRO){
     
    425431                if( pMethod->isConst ){
    426432                    //Constアクセスが可能なメソッドの場合
    427                     if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return -1;
     433                    if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return;
    428434                }
    429435                else{
    430436                    //Constアクセスが不可能なメソッドの場合
    431                     if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return -1;
     437                    if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return;
    432438                }
    433439
     
    509515    //パラメータオブジェクトを破棄
    510516    delete pobj_parameter;
    511 
    512     if(plpIndex) *plpIndex=psi->u.ReturnIndex;
    513 
    514     return psi->ReturnType;
    515517}
    516518
     
    536538
    537539    //エラーチェック
    538     pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum);
     540    if( !pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum) ){
     541        //パラメータにエラーがあるときは処理を終える
     542        return pdi->ReturnType;
     543    }
    539544
    540545    //スタックフレームに存在する既存のパラメータをバックアップ
Note: See TracChangeset for help on using the changeset viewer.