Ignore:
Timestamp:
Aug 22, 2007, 3:46:23 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

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

    r290 r292  
    228228
    229229        resultType = pUserProc->ReturnType();
     230
     231        Type leftType;
     232        GetVarType( ObjectName, leftType, false );
     233
     234        /////////////////////////////////////////////////////////
     235        // ☆★☆ ジェネリクスサポート ☆★☆
     236
     237        if( resultType.IsTypeParameter() )
     238        {
     239            // 型パラメータだったとき
     240
     241            int ptrLevel = PTR_LEVEL( resultType.GetBasicType() );
     242
     243            if( leftType.HasActualGenericType() )
     244            {
     245                // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
     246                resultType = leftType.GetDummyActualGenericType();
     247            }
     248            else
     249            {
     250                // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
     251                resultType.SetBasicType( DEF_OBJECT );
     252            }
     253
     254            for( int i=0; i<ptrLevel; i++ )
     255            {
     256                resultType.PtrLevelUp();
     257            }
     258        }
     259
     260        //
     261        /////////////////////////////////////////////////////////
    230262    }
    231263
     
    274306
    275307//インデクサ(getter)の戻り値を取得
    276 bool GetReturnTypeOfIndexerGetterProc( const CClass &objClass, Type &resultType ){
     308bool GetReturnTypeOfIndexerGetterProc( const Type &classType, Type &resultType )
     309{
    277310    vector<const UserProc *> subs;
    278     objClass.GetMethods().Enum( CALC_ARRAY_GET, subs );
     311    classType.GetClass().GetMethods().Enum( CALC_ARRAY_GET, subs );
    279312    if( subs.size() == 0 ){
    280313        return false;
     
    282315
    283316    resultType = subs[0]->ReturnType();
     317
     318
     319    /////////////////////////////////////////////////////////
     320    // ☆★☆ ジェネリクスサポート ☆★☆
     321
     322    if( resultType.IsTypeParameter() )
     323    {
     324        // 型パラメータだったとき
     325
     326        int ptrLevel = PTR_LEVEL( resultType.GetBasicType() );
     327
     328        if( classType.HasActualGenericType() )
     329        {
     330            // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
     331            resultType = classType.GetDummyActualGenericType();
     332        }
     333        else
     334        {
     335            // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
     336            resultType.SetBasicType( DEF_OBJECT );
     337        }
     338
     339        for( int i=0; i<ptrLevel; i++ )
     340        {
     341            resultType.PtrLevelUp();
     342        }
     343    }
     344
     345    //
     346    /////////////////////////////////////////////////////////
    284347
    285348    return true;
Note: See TracChangeset for help on using the changeset viewer.