Ignore:
Timestamp:
Oct 3, 2007, 3:42:05 AM (17 years ago)
Author:
dai_9181
Message:

64ビットコンパイラもデリゲートに対応させた

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_CallProc.cpp

    r330 r339  
    198198                    return false;
    199199                }
    200                 if( pMethod->IsProtected() ){
     200                if( !pMethod->GetUserProc().GetParentClass().IsEqualsOrSubClass( pobj_c ) && pMethod->IsProtected() ){
    201201                    SetError(110,pUserProc->GetName(),cp);
    202202                    return false;
     
    477477void Opcode_CallDelegate( const Delegate &dg, const char *methodPtrValueStr, const char *objPtrValueStr, const char *params )
    478478{
     479    extern BOOL bDebugCompile;
     480    extern BOOL bDebugSupportProc;
     481    if(bDebugCompile&&bDebugSupportProc==0)
     482        Call_DebugSys_SaveContext();
     483
     484
    479485    ///////////////////////////////////////////////////////////////
    480486    // _System_LocalThisのダミーをセット
     
    482488
    483489    char temporary[VN_SIZE]={0};
     490    bool isDynamicCall = false;
    484491    if( objPtrValueStr && objPtrValueStr[0] ){
    485492        //_System_LocalThis(第一パラメータ)のダミーを作成
    486493        lstrcpy(temporary,"0,");
     494
     495        isDynamicCall = true;
    487496    }
    488497    if( dg.ReturnType().IsStruct() ){
     
    495504    else lstrcat(temporary,params);
    496505
    497 
    498     ParamImpl *pobj_parameter = new ParamImpl( params );
     506    const Parameters *pParams = &dg.Params();
     507    if( isDynamicCall )
     508    {
     509        pParams = &dg.GetDynamicParams();
     510    }
     511
     512
     513    ParamImpl *pobj_parameter = new ParamImpl( temporary );
    499514
    500515    //スタックフレームに存在する既存のパラメータをバックアップ
    501     pobj_parameter->BackupParameter( (int)dg.Params().size() );
     516    pobj_parameter->BackupParameter( (int)pParams->size() );
    502517
    503518    //一時オブジェクトを生成
    504     pobj_parameter->NewTempParameters( dg.GetName(), dg.Params() );
     519    pobj_parameter->NewTempParameters( dg.GetName(), *pParams );
    505520
    506521    //レジスタ、スタックフレームにセット
    507     pobj_parameter->SetParameter( dg.GetName(), dg.Params() );
     522    pobj_parameter->SetParameter( dg.GetName(), *pParams );
    508523
    509524
     
    551566
    552567    //スタックフレームに存在する既存のパラメータを復元
    553     pobj_parameter->RestoreParameter( (int)dg.Params().size() );
     568    pobj_parameter->RestoreParameter( (int)pParams->size() );
    554569
    555570    //パラメータオブジェクトを破棄
Note: See TracChangeset for help on using the changeset viewer.