Ignore:
Timestamp:
Jan 2, 2008, 12:50:34 AM (17 years ago)
Author:
dai_9181
Message:

ジェネリクスインターフェイス実装時のオーバーロード解決ロジックを改良。(型パラメータを戻り値に持つメソッドのオーバーロードをミスしてしまうバグを修正)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/src/Class.cpp

    r380 r382  
    340340    BOOST_FOREACH( CMethod *pMethod, GetDynamicMethods() )
    341341    {
    342         CMethod *pMethodForOverride = pDestInterface->GetDynamicMethods().FindForOverride( &pMethod->GetUserProc() );
     342        CMethod *pMethodForOverride = pDestInterface->GetDynamicMethods().FindForOverride( pDestInterface->GetActualTypeParameters(), &pMethod->GetUserProc() );
    343343        if( pMethodForOverride )
    344344        {
     
    524524        if( pMethod->GetInheritsClassPtr() ) continue;
    525525
    526         if( pMethod->GetUserProc().IsEqualForOverride( pUserProc ) )
     526        if( pMethod->GetUserProc().IsEqualForOverride( pobj_c->GetSuperClassActualTypeParameters(), pUserProc ) )
    527527        {
    528528            //関数名、パラメータ、戻り値が合致したとき
     
    536536
    537537    // メソッドのオーバーライド
    538     CMethod *pMethodForOverride = pobj_c->GetDynamicMethods().FindForOverride( pUserProc );
     538    CMethod *pMethodForOverride = pobj_c->GetDynamicMethods().FindForOverride( pobj_c->GetSuperClassActualTypeParameters(), pUserProc );
    539539    if( pMethodForOverride )
    540540    {
     
    545545    else
    546546    {
     547   
     548        if( pUserProc->GetName() == "GenericProc" )
     549        {
     550            int test=0;
     551        }
     552
    547553        // インターフェイス メソッドのオーバーライド
    548554        BOOST_FOREACH( ::Interface *pInterface, pobj_c->GetInterfaces() )
     
    562568            }
    563569
    564             CMethod *pMethodForOverride = pInterface->GetDynamicMethods().FindForOverride( pUserProc );
     570            CMethod *pMethodForOverride = pInterface->GetDynamicMethods().FindForOverride( pInterface->GetActualTypeParameters(), pUserProc );
    565571            if( pMethodForOverride )
    566572            {
Note: See TracChangeset for help on using the changeset viewer.