Ignore:
Timestamp:
Sep 25, 2007, 9:23:38 PM (17 years ago)
Author:
dai_9181
Message:

デリゲートのベースがほぼ実装できた

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/Subroutine.cpp

    r319 r327  
    6161    if(*ppInfo) return PROC_BUILTIN;
    6262
    63     //関数ポインタ
     63
     64    /////////////////////////////////////////////////////////////////
     65    //関数ポインタ、またはデリゲート
     66    /////////////////////////////////////////////////////////////////
     67
    6468    Type type;
    6569    if( !GetVarType( name, type, false ) ){
    6670        return 0;
    6771    }
    68     if( type.IsProcPtr() ){
     72
     73    if( type.IsProcPtr() )
     74    {
     75        // 関数ポインタ
    6976        return PROC_PTR;
     77    }
     78
     79    if( type.IsObject() && type.GetClass().IsDelegate() )
     80    {
     81        // デリゲート
     82        return PROC_DELEGATE;
    7083    }
    7184
     
    185198            }
    186199        }
     200    }
     201    else if( kind == PROC_DELEGATE )
     202    {
     203        // デリゲート
     204        char tempName[VN_SIZE];
     205        lstrcpy( tempName, fullCallName );
     206        lstrcat( tempName, ".Call" );
     207
     208        void *pInfo=(void *)GetSubHash( tempName );
     209        if( !pInfo )
     210        {
     211            Jenga::Throw( "デリゲートの内部Callメソッドの取得に失敗" );
     212        }
     213
     214        return CallProc( PROC_DEFAULT, pInfo, tempName, lpszParms, resultType, isCallOn );
    187215    }
    188216    else{
Note: See TracChangeset for help on using the changeset viewer.