Ignore:
Timestamp:
Aug 21, 2007, 11:00:25 PM (17 years ago)
Author:
dai_9181
Message:

ジェネリクスのベースを実装

File:
1 edited

Legend:

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

    r265 r290  
    5151
    5252    int BaseTypeSize;
    53     BaseTypeSize=GetTypeSize(BaseType,-1);
     53    BaseTypeSize=Type(BaseType,-1).GetSize();
    5454
    5555    if(IsRealNumberType(BaseType)){
    56         if(GetTypeSize(CalcType,-1)<4)
     56        if(Type(CalcType,-1).GetSize()<4)
    5757            type=MakeWholeType(4,IsSignedType(CalcType));
    5858    }
    59     else if(BaseTypeSize>GetTypeSize(CalcType,-1)){
     59    else if(BaseTypeSize>Type(CalcType,-1).GetSize()){
    6060        //要求される型のほうがサイズが大きいとき
    6161        type=MakeWholeType(BaseTypeSize,IsSignedType(CalcType));
     
    358358        }
    359359
    360         const CClass &objClass = leftType.GetClass();
    361 
    362360
    363361        ///////////////////////////////////////////////////////////////////
    364362        // メンバを検索
    365363        ///////////////////////////////////////////////////////////////////
    366         if( GetMemberType( objClass, member, resultType, 0, false ) ){
     364        if( GetMemberType( leftType, member, resultType, 0, false ) ){
    367365            // メンバが見つかったとき
    368366            return true;
     
    378376
    379377        vector<const UserProc *> userProcs;
    380         objClass.GetMethods().Enum( methodName, userProcs );
     378        leftType.GetClass().GetMethods().Enum( methodName, userProcs );
    381379        if(userProcs.size()){
    382380            //オーバーロードを解決
     
    385383            if( pUserProc ){
    386384                resultType = pUserProc->ReturnType();
     385
     386                /////////////////////////////////////////////////////////
     387                // ☆★☆ ジェネリクスサポート ☆★☆
     388
     389                if( resultType.IsTypeParameter() )
     390                {
     391                    // 型パラメータだったとき
     392                    if( leftType.HasActualGenericType() )
     393                    {
     394                        // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
     395                        resultType = leftType.GetDummyActualGenericType();
     396                    }
     397                    else
     398                    {
     399                        // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
     400                        resultType.SetBasicType( DEF_OBJECT );
     401                    }
     402                }
     403
     404                //
     405                /////////////////////////////////////////////////////////
     406
    387407                return true;
    388408            }
Note: See TracChangeset for help on using the changeset viewer.