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/BasicCompiler32/OperatorProc.cpp

    r290 r292  
    252252    SetError(-1,"キャスト演算子がオーバーロードされていません。",cp);
    253253}
    254 void CallIndexerGetterProc(const CClass *pobj_Class,char *ObjectName,char *Parameter,Type &resultType){
     254void CallIndexerGetterProc(const CClass *pobj_Class,char *ObjectName, const Type &leftType, char *Parameter,Type &resultType){
    255255    std::vector<const UserProc *> subs;
    256256    pobj_Class->GetMethods().Enum( CALC_ARRAY_GET, subs );
     
    261261    Opcode_CallProc(Parameter,subs[0],0,ObjectName);
    262262    resultType = subs[0]->ReturnType();
    263 }
     263
     264
     265    /////////////////////////////////////////////////////////
     266    // ☆★☆ ジェネリクスサポート ☆★☆
     267
     268    if( resultType.IsTypeParameter() )
     269    {
     270        // 型パラメータだったとき
     271
     272        int ptrLevel = PTR_LEVEL( resultType.GetBasicType() );
     273
     274        if( leftType.HasActualGenericType() )
     275        {
     276            // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
     277            resultType = leftType.GetDummyActualGenericType();
     278        }
     279        else
     280        {
     281            // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
     282            resultType.SetBasicType( DEF_OBJECT );
     283        }
     284
     285        for( int i=0; i<ptrLevel; i++ )
     286        {
     287            resultType.PtrLevelUp();
     288        }
     289    }
     290
     291    //
     292    /////////////////////////////////////////////////////////
     293}
Note: See TracChangeset for help on using the changeset viewer.