Changeset 728 in dev for trunk/ab5.0/abdev/compiler_x86


Ignore:
Timestamp:
Aug 21, 2008, 11:02:07 PM (16 years ago)
Author:
dai
Message:

#200への対応。ジェネリックインターフェイスを実装したジェネリッククラスのテンプレート展開に対応。

Location:
trunk/ab5.0/abdev/compiler_x86
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/compiler_x86/Compile_Object.cpp

    r702 r728  
    108108    int typeSize = pClass->GetSize();
    109109
    110     if(pClass->IsAbstract()){
     110    if(pClass->IsAbstract())
     111    {
     112        std::string tempMessage;
     113        BOOST_FOREACH( const CMethod *pMethod, pClass->GetDynamicMethods() ){
     114            if(pMethod->IsVirtual()){
     115                if(pMethod->IsAbstract()){
     116                    if( !tempMessage.empty() )
     117                    {
     118                        tempMessage += ", ";
     119                    }
     120                    tempMessage += pMethod->GetUserProc().GetName();
     121                }
     122            }
     123        }
     124
     125        // インターフェイスのvtbl
     126        BOOST_FOREACH( const ::Interface *pInterface, pClass->GetInterfaces() )
     127        {
     128            BOOST_FOREACH( const CMethod *pMethod, pInterface->GetDynamicMethods() ){
     129                if(pMethod->IsVirtual()){
     130                    if(pMethod->IsAbstract()){
     131                        if( !tempMessage.empty() )
     132                        {
     133                            tempMessage += ", ";
     134                        }
     135                        tempMessage += pMethod->GetUserProc().GetName();
     136                    }
     137                }
     138            }
     139        }
     140
    111141        //抽象クラスだったとき
    112         compiler.errorMessenger.Output(125,pClass->GetName(),cp);
     142        compiler.errorMessenger.Output(-1,"\"%s\" は抽象クラスです。インスタンス化することはできません(抽象メソッド … " + tempMessage + ")。",cp);
    113143    }
    114144
  • trunk/ab5.0/abdev/compiler_x86/Compile_ProcOp.cpp

    r710 r728  
    250250        sprintf( temporary,
    251251            "Return New %s(ObjPtr( This ),Get_LONG_PTR( (Get_LONG_PTR( ObjPtr(This)+SizeOf(VoidPtr) ) + SizeOf(LONG_PTR)*%d) As VoidPtr ) As VoidPtr )",
    252             userProc.ReturnType().GetClass().GetFullName().c_str(),
     252            compiler.TypeToString( userProc.ReturnType() ).c_str(),
    253253            vtblMasterListIndex
    254254        );
Note: See TracChangeset for help on using the changeset viewer.