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

    r288 r290  
    160160    return 1;
    161161}
    162 bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const CClass &objClass, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess){
     162bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const Type &classType, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess)
     163{
     164    const CClass &objClass = classType.GetClass();
    163165
    164166    //////////////////////////////////////
     
    221223    resultType = pMember->GetType();
    222224
     225
     226    /////////////////////////////////////////////////////////
     227    // ☆★☆ ジェネリクスサポート ☆★☆
     228
     229    if( resultType.IsTypeParameter() )
     230    {
     231        // 型パラメータだったとき
     232        if( classType.HasActualGenericType() )
     233        {
     234            // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
     235            resultType = classType.GetDummyActualGenericType();
     236        }
     237        else
     238        {
     239            // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
     240            resultType.SetBasicType( DEF_OBJECT );
     241        }
     242    }
     243
     244    //
     245    /////////////////////////////////////////////////////////
     246
     247
    223248    //ポインタ変数の場合
    224249    if( resultType.IsPointer() ){
     
    321346            isErrorEnabled,
    322347            isWriteAccess,
    323             pMember->GetType().GetClass(),
     348            pMember->GetType(),
    324349            NestMember,
    325350            pRelativeVar,
     
    345370    RelativeVar.offset=-LocalVar_ThisPtrOffset;
    346371
    347     SetReg_WholeVariable(DEF_PTR_VOID,&RelativeVar,reg);
     372    SetReg_WholeVariable(Type(DEF_PTR_VOID),&RelativeVar,reg);
    348373}
    349374
     
    472497            isErrorEnabled,
    473498            isWriteAccess,
    474             *compiler.pCompilingClass,
     499            Type( DEF_OBJECT, *compiler.pCompilingClass ),
    475500            variable,
    476501            pRelativeVar,
     
    701726            isErrorEnabled,
    702727            isWriteAccess,
    703             resultType.GetClass(),
     728            resultType,
    704729            member,pRelativeVar,resultType,0)) return false;
    705730
     
    12041229            SetError();
    12051230        }
    1206         SetVariableFromEax( DEF_OBJECT, DEF_OBJECT, &RelativeVar );
     1231        SetVariableFromEax( Type( DEF_OBJECT, *compiler.GetObjectModule().meta.GetClasses().GetObjectClassPtr() ), DEF_OBJECT, &RelativeVar );
    12071232    }
    12081233}
Note: See TracChangeset for help on using the changeset viewer.