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

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

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.