Ignore:
Timestamp:
Oct 13, 2007, 11:45:58 AM (17 years ago)
Author:
dai_9181
Message:

インターフェイス実装中…

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_Object.cpp

    r346 r349  
    9090    }
    9191}
    92 void Operator_New( const CClass &classObj, const char *objectSizeStr, const char *parameter, const Type &baseType ){
    93     int typeSize = classObj.GetSize();
    94 
    95     if(classObj.IsAbstract()){
     92void Operator_New( const CClass &objClass, const char *objectSizeStr, const char *parameter, const Type &baseType )
     93{
     94    const CClass *pClass = &objClass;
     95    int typeSize = pClass->GetSize();
     96
     97    if( pClass->IsInterface() )
     98    {
     99        pClass = compiler.GetObjectModule().meta.GetClasses().GetInterfaceInfoClassPtr();
     100    }
     101
     102    if( pClass->IsAbstract() ){
    96103        //抽象クラスだったとき
    97         SetError(125,classObj.GetName().c_str(),cp);
     104        SetError(125,pClass->GetName().c_str(),cp);
    98105    }
    99106
     
    177184
    178185
    179     const CMethod *method = classObj.GetDestructorMethod();
     186    const CMethod *method = pClass->GetDestructorMethod();
    180187    if( method == NULL ) return;
    181188
     
    201208
    202209    //仮想関数テーブルを初期化
    203     if( classObj.IsExistVirtualFunctions()
    204         && !classObj.IsAbstract() )
     210    if( pClass->IsExistVirtualFunctions()
     211        && !pClass->IsAbstract() )
    205212    {
    206213        // mov rcx,vtblAddress
    207         compiler.codeGenerator.op_mov_RV_vtbl( REG_RCX, &classObj );
     214        compiler.codeGenerator.op_mov_RV_vtbl( REG_RCX, pClass );
    208215
    209216        //mov qword ptr[rax],rcx
     
    212219
    213220        // 仮想関数になるメソッドに使用チェックをつける
    214         BOOST_FOREACH( const CMethod *pMethod, classObj.GetDynamicMethods() )
     221        BOOST_FOREACH( const CMethod *pMethod, pClass->GetDynamicMethods() )
    215222        {
    216223            if( pMethod->IsVirtual() )
     
    219226            }
    220227        }
    221         BOOST_FOREACH( const ::Interface *pInterface, classObj.GetInterfaces() )
     228        BOOST_FOREACH( const ::Interface *pInterface, pClass->GetInterfaces() )
    222229        {
    223230            BOOST_FOREACH( const CMethod *pMethod, pInterface->GetDynamicMethods() )
     
    238245    ////////////////////////////
    239246
    240     _call_constructor(&classObj,parameter,typeSize,bSomeObjects);
     247    _call_constructor(pClass,parameter,typeSize,bSomeObjects);
    241248
    242249
Note: See TracChangeset for help on using the changeset viewer.